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 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 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, int minify); 144 void jsP_dumplist(js_State *J, js_Ast *prog); 145 146 #endif 147