1#ifndef js_parse_h
2#define js_parse_h
3
4enum 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
117typedef struct js_JumpList js_JumpList;
118
119struct js_JumpList
120{
121 enum js_AstType type;
122 int inst;
123 js_JumpList *next;
124};
125
126struct js_Ast
127{
128 enum js_AstType 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
138js_Ast *jsP_parsefunction(js_State *J, const char *filename, const char *params, const char *body);
139js_Ast *jsP_parse(js_State *J, const char *filename, const char *source);
140void jsP_freeparse(js_State *J);
141
142const char *jsP_aststring(enum js_AstType type);
143void jsP_dumpsyntax(js_State *J, js_Ast *prog, int minify);
144void jsP_dumplist(js_State *J, js_Ast *prog);
145
146#endif
147