-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdat.h
100 lines (97 loc) · 1.55 KB
/
dat.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
typedef struct GC GC;
typedef struct Object Object;
typedef Object* (*Bltinfn)(Object *env, Object *args);
enum OType
{
ONONE,
OBLTIN,
OSYMBOL,
OCELL,
OIDENT,
OSTRING,
OINT,
OFUNC,
OMACRO,
OBLOCK,
OFRAME,
OENV,
};
struct Object
{
enum OType type; /* type */
int flag; /* flag */
Object *forward;
union{
/* int */
long num;
/* cell */
struct{
Object *car;
Object *cdr;
};
/* string & ident & symbol */
struct{
char *beg;
char *ptr;
char *end;
};
/* Block */
struct{
Object *_tag;
Object *_up;
Object *_body;
void *jmp;
};
/* function */
struct{
Object *params;
Object *frame; /* running frame */
Object *body;
Object *block;
};
/* Frame */
struct{
Object *tag; /* Frame enter name */
Object *up;
Object *local; /* local vars */
};
/* Env */
struct{
Object *frames;
Object *bp;
Object *sp; /* current */
Object *retval; /* for return-from */
};
};
};
extern GC *gc;
extern Object Nil;
extern Object Top;
extern Object Block;
extern Object RetFrom;
extern Object Comma;
extern Object Splice;
extern Object Bquote;
extern Object Minus;
extern Object Plus;
extern Object Mul;
extern Object Div;
extern Object Mod;
extern Object Lambda;
extern Object Car;
extern Object Cdr;
extern Object Quote;
extern Object Cons;
extern Object Define;
extern Object Progn;
extern Object Macro;
extern Object Setq;
extern Object Let;
extern Object Eq;
extern Object Not;
extern Object Ne;
extern Object If;
extern Object Ge;
extern Object Le;
extern Object Lt;
extern Object Gt;