Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
7639 views
1
#ifndef js_parse_h
2
#define js_parse_h
3
4
enum js_AstType
5
{
6
AST_LIST,
7
AST_FUNDEC,
8
AST_IDENTIFIER,
9
10
EXP_IDENTIFIER,
11
EXP_NUMBER,
12
EXP_STRING,
13
EXP_REGEXP,
14
15
/* literals */
16
EXP_UNDEF, /* for array elisions */
17
EXP_NULL,
18
EXP_TRUE,
19
EXP_FALSE,
20
EXP_THIS,
21
22
EXP_ARRAY,
23
EXP_OBJECT,
24
EXP_PROP_VAL,
25
EXP_PROP_GET,
26
EXP_PROP_SET,
27
28
EXP_FUN,
29
30
/* expressions */
31
EXP_INDEX,
32
EXP_MEMBER,
33
EXP_CALL,
34
EXP_NEW,
35
36
EXP_POSTINC,
37
EXP_POSTDEC,
38
39
EXP_DELETE,
40
EXP_VOID,
41
EXP_TYPEOF,
42
EXP_PREINC,
43
EXP_PREDEC,
44
EXP_POS,
45
EXP_NEG,
46
EXP_BITNOT,
47
EXP_LOGNOT,
48
49
EXP_MOD,
50
EXP_DIV,
51
EXP_MUL,
52
EXP_SUB,
53
EXP_ADD,
54
EXP_USHR,
55
EXP_SHR,
56
EXP_SHL,
57
EXP_IN,
58
EXP_INSTANCEOF,
59
EXP_GE,
60
EXP_LE,
61
EXP_GT,
62
EXP_LT,
63
EXP_STRICTNE,
64
EXP_STRICTEQ,
65
EXP_NE,
66
EXP_EQ,
67
EXP_BITAND,
68
EXP_BITXOR,
69
EXP_BITOR,
70
EXP_LOGAND,
71
EXP_LOGOR,
72
73
EXP_COND,
74
75
EXP_ASS,
76
EXP_ASS_MUL,
77
EXP_ASS_DIV,
78
EXP_ASS_MOD,
79
EXP_ASS_ADD,
80
EXP_ASS_SUB,
81
EXP_ASS_SHL,
82
EXP_ASS_SHR,
83
EXP_ASS_USHR,
84
EXP_ASS_BITAND,
85
EXP_ASS_BITXOR,
86
EXP_ASS_BITOR,
87
88
EXP_COMMA,
89
90
EXP_VAR, /* var initializer */
91
92
/* statements */
93
STM_BLOCK,
94
STM_EMPTY,
95
STM_VAR,
96
STM_IF,
97
STM_DO,
98
STM_WHILE,
99
STM_FOR,
100
STM_FOR_VAR,
101
STM_FOR_IN,
102
STM_FOR_IN_VAR,
103
STM_CONTINUE,
104
STM_BREAK,
105
STM_RETURN,
106
STM_WITH,
107
STM_SWITCH,
108
STM_THROW,
109
STM_TRY,
110
STM_DEBUGGER,
111
112
STM_LABEL,
113
STM_CASE,
114
STM_DEFAULT,
115
};
116
117
typedef struct js_JumpList js_JumpList;
118
119
struct js_JumpList
120
{
121
enum js_AstType type;
122
int inst;
123
js_JumpList *next;
124
};
125
126
struct js_Ast
127
{
128
int type;
129
int line;
130
js_Ast *parent, *a, *b, *c, *d;
131
double number;
132
const char *string;
133
js_JumpList *jumps; /* list of break/continue jumps to patch */
134
int casejump; /* for switch case clauses */
135
js_Ast *gcnext; /* next in alloc list */
136
};
137
138
js_Ast *jsP_parsefunction(js_State *J, const char *filename, const char *params, const char *body);
139
js_Ast *jsP_parse(js_State *J, const char *filename, const char *source);
140
void jsP_freeparse(js_State *J);
141
142
const char *jsP_aststring(enum js_AstType type);
143
void jsP_dumpsyntax(js_State *J, js_Ast *prog);
144
void jsP_dumplist(js_State *J, js_Ast *prog);
145
146
#endif
147
148