summaryrefslogtreecommitdiffstats
path: root/types.h
diff options
context:
space:
mode:
authorjdlugosz963 <jdlugosz963@gmail.com>2023-03-05 23:10:15 +0100
committerjdlugosz963 <jdlugosz963@gmail.com>2023-03-05 23:10:15 +0100
commit49aa5542a8e13d2d808f7dee6bd7418add6d74ea (patch)
treed182dbf69f5f7b421283bf2a504ed3b40811a668 /types.h
parentf44f1f8c7ef7b6266667dce76db686af3258adfc (diff)
downloadjadl-49aa5542a8e13d2d808f7dee6bd7418add6d74ea.tar.gz
jadl-49aa5542a8e13d2d808f7dee6bd7418add6d74ea.zip
Add primitive evaluation system
Diffstat (limited to 'types.h')
-rw-r--r--types.h27
1 files changed, 26 insertions, 1 deletions
diff --git a/types.h b/types.h
index 632e283..f6e3fcf 100644
--- a/types.h
+++ b/types.h
@@ -16,6 +16,7 @@ typedef enum _LispType {
16 LISP_TYPE_NIL, 16 LISP_TYPE_NIL,
17 LISP_TYPE_TRUE, 17 LISP_TYPE_TRUE,
18 LISP_TYPE_FALSE, 18 LISP_TYPE_FALSE,
19 LISP_TYPE_FUNC,
19 LISP_TYPE_ERROR 20 LISP_TYPE_ERROR
20} LispType; 21} LispType;
21 22
@@ -39,7 +40,7 @@ typedef struct _LispObject {
39 char *error; 40 char *error;
40 long long *number_natural; 41 long long *number_natural;
41 double *number_float; 42 double *number_float;
42 struct _LispObject (*function)(struct _LispObject*); 43 struct _LispObject *(*func)(struct _LispObject*);
43 List *list; 44 List *list;
44 void *ptr; 45 void *ptr;
45 } value; 46 } value;
@@ -59,7 +60,31 @@ LISP_OBJECT *lisp_object_make_error(char *str);
59LISP_OBJECT *lisp_object_make_nil(); 60LISP_OBJECT *lisp_object_make_nil();
60LISP_OBJECT *lisp_object_make_true(); 61LISP_OBJECT *lisp_object_make_true();
61LISP_OBJECT *lisp_object_make_false(); 62LISP_OBJECT *lisp_object_make_false();
63LISP_OBJECT *lisp_object_make_func(LISP_OBJECT *(*func)(LISP_OBJECT*));
62 64
63int lisp_object_print(LISP_OBJECT *obj, int indent); 65int lisp_object_print(LISP_OBJECT *obj, int indent);
64 66
67int lisp_object_cmp_types(LISP_OBJECT *a, LISP_OBJECT *b);
68int lisp_object_cmp(LISP_OBJECT *a, LISP_OBJECT *b);
69int lisp_object_cmp_symbol(LISP_OBJECT *a, LISP_OBJECT *b);
70int lisp_object_cmp_numbers(LISP_OBJECT *a, LISP_OBJECT *b);
71int lisp_object_cmp_string(LISP_OBJECT *a, LISP_OBJECT *b);
72
73typedef struct _HashMap
74{
75 char *key;
76 LISP_OBJECT *value;
77 struct _HashMap *prev;
78 struct _HashMap *next;
79
80} HashMap;
81
82HashMap *hash_map_make(char *key, LISP_OBJECT *value);
83HashMap *hash_map_push(HashMap *hash_map, char *key, LISP_OBJECT *value);
84HashMap *hash_map_reverse(HashMap *hash_map);
85HashMap *hash_map_find(HashMap *hash_map, char* key);
86HashMap *hash_map_delete(HashMap *hash_map, char* key);
87void hash_map_free(HashMap *hash_map);
88void hash_map_print(HashMap *hash_map);
89
65#endif 90#endif