diff options
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 | ||
