diff options
author | jdlugosz963 <jdlugosz963@gmail.com> | 2023-03-01 23:30:31 +0100 |
---|---|---|
committer | jdlugosz963 <jdlugosz963@gmail.com> | 2023-03-01 23:30:31 +0100 |
commit | f44f1f8c7ef7b6266667dce76db686af3258adfc (patch) | |
tree | e0775e2a07713f1ac23d37b5271340fe8cbebd16 /types.h | |
download | jadl-f44f1f8c7ef7b6266667dce76db686af3258adfc.tar.gz jadl-f44f1f8c7ef7b6266667dce76db686af3258adfc.zip |
Build simple abstract syntax tree
Diffstat (limited to 'types.h')
-rw-r--r-- | types.h | 65 |
1 files changed, 65 insertions, 0 deletions
@@ -0,0 +1,65 @@ | |||
1 | #ifndef _TYPES | ||
2 | #define _TYPES | ||
3 | |||
4 | #include <stddef.h> | ||
5 | #include <stdlib.h> | ||
6 | #include <string.h> | ||
7 | |||
8 | #include "memory.h" | ||
9 | |||
10 | |||
11 | typedef enum _LispType { | ||
12 | LISP_TYPE_SYMBOL, | ||
13 | LISP_TYPE_LIST, | ||
14 | LISP_TYPE_STRING, | ||
15 | LISP_TYPE_NUMBER, | ||
16 | LISP_TYPE_NIL, | ||
17 | LISP_TYPE_TRUE, | ||
18 | LISP_TYPE_FALSE, | ||
19 | LISP_TYPE_ERROR | ||
20 | } LispType; | ||
21 | |||
22 | |||
23 | typedef struct _List { | ||
24 | void *ptr; | ||
25 | struct _List *next; | ||
26 | } List; | ||
27 | |||
28 | List *list_make(void *ptr); | ||
29 | List *list_push(List *list, void *ptr); | ||
30 | List *list_reverse(List *list); | ||
31 | |||
32 | typedef struct _LispObject { | ||
33 | LispType type; | ||
34 | int is_decimal_point; | ||
35 | |||
36 | union { | ||
37 | char *string; | ||
38 | char *symbol; | ||
39 | char *error; | ||
40 | long long *number_natural; | ||
41 | double *number_float; | ||
42 | struct _LispObject (*function)(struct _LispObject*); | ||
43 | List *list; | ||
44 | void *ptr; | ||
45 | } value; | ||
46 | } LISP_OBJECT; | ||
47 | |||
48 | void lisp_object_free(LISP_OBJECT *lisp_obj); | ||
49 | |||
50 | void lisp_object_list_push(LISP_OBJECT *lisp_list_obj, void *ptr); | ||
51 | |||
52 | LISP_OBJECT *lisp_object_make(); | ||
53 | LISP_OBJECT *lisp_object_make_list(); | ||
54 | LISP_OBJECT *lisp_object_make_number_natural(long long number); | ||
55 | LISP_OBJECT *lisp_object_make_number_float(double number); | ||
56 | LISP_OBJECT *lisp_object_make_string(char *str); | ||
57 | LISP_OBJECT *lisp_object_make_symbol(char *str); | ||
58 | LISP_OBJECT *lisp_object_make_error(char *str); | ||
59 | LISP_OBJECT *lisp_object_make_nil(); | ||
60 | LISP_OBJECT *lisp_object_make_true(); | ||
61 | LISP_OBJECT *lisp_object_make_false(); | ||
62 | |||
63 | int lisp_object_print(LISP_OBJECT *obj, int indent); | ||
64 | |||
65 | #endif | ||