| 1 | #ifndef js_compile_h | 
|---|
| 2 | #define js_compile_h | 
|---|
| 3 |  | 
|---|
| 4 | enum js_OpCode | 
|---|
| 5 | { | 
|---|
| 6 | OP_POP,		/* A -- */ | 
|---|
| 7 | OP_DUP,		/* A -- A A */ | 
|---|
| 8 | OP_DUP2,	/* A B -- A B A B */ | 
|---|
| 9 | OP_ROT2,	/* A B -- B A */ | 
|---|
| 10 | OP_ROT3,	/* A B C -- C A B */ | 
|---|
| 11 | OP_ROT4,	/* A B C D -- D A B C */ | 
|---|
| 12 |  | 
|---|
| 13 | OP_INTEGER,	/* -K- (number-32768) */ | 
|---|
| 14 | OP_NUMBER,	/* -N- <number> */ | 
|---|
| 15 | OP_STRING,	/* -S- <string> */ | 
|---|
| 16 | OP_CLOSURE,	/* -F- <closure> */ | 
|---|
| 17 |  | 
|---|
| 18 | OP_NEWARRAY, | 
|---|
| 19 | OP_NEWOBJECT, | 
|---|
| 20 | OP_NEWREGEXP,	/* -S,opts- <regexp> */ | 
|---|
| 21 |  | 
|---|
| 22 | OP_UNDEF, | 
|---|
| 23 | OP_NULL, | 
|---|
| 24 | OP_TRUE, | 
|---|
| 25 | OP_FALSE, | 
|---|
| 26 |  | 
|---|
| 27 | OP_THIS, | 
|---|
| 28 | OP_CURRENT,	/* currently executing function object */ | 
|---|
| 29 |  | 
|---|
| 30 | OP_GETLOCAL,	/* -K- <value> */ | 
|---|
| 31 | OP_SETLOCAL,	/* <value> -K- <value> */ | 
|---|
| 32 | OP_DELLOCAL,	/* -K- false */ | 
|---|
| 33 |  | 
|---|
| 34 | OP_HASVAR,	/* -S- ( <value> | undefined ) */ | 
|---|
| 35 | OP_GETVAR,	/* -S- <value> */ | 
|---|
| 36 | OP_SETVAR,	/* <value> -S- <value> */ | 
|---|
| 37 | OP_DELVAR,	/* -S- <success> */ | 
|---|
| 38 |  | 
|---|
| 39 | OP_IN,		/* <name> <obj> -- <exists?> */ | 
|---|
| 40 |  | 
|---|
| 41 | OP_INITPROP,	/* <obj> <key> <val> -- <obj> */ | 
|---|
| 42 | OP_INITGETTER,	/* <obj> <key> <closure> -- <obj> */ | 
|---|
| 43 | OP_INITSETTER,	/* <obj> <key> <closure> -- <obj> */ | 
|---|
| 44 |  | 
|---|
| 45 | OP_GETPROP,	/* <obj> <name> -- <value> */ | 
|---|
| 46 | OP_GETPROP_S,	/* <obj> -S- <value> */ | 
|---|
| 47 | OP_SETPROP,	/* <obj> <name> <value> -- <value> */ | 
|---|
| 48 | OP_SETPROP_S,	/* <obj> <value> -S- <value> */ | 
|---|
| 49 | OP_DELPROP,	/* <obj> <name> -- <success> */ | 
|---|
| 50 | OP_DELPROP_S,	/* <obj> -S- <success> */ | 
|---|
| 51 |  | 
|---|
| 52 | OP_ITERATOR,	/* <obj> -- <iobj> */ | 
|---|
| 53 | OP_NEXTITER,	/* <iobj> -- ( <iobj> <name> true | false ) */ | 
|---|
| 54 |  | 
|---|
| 55 | OP_EVAL,	/* <args...> -(numargs)- <returnvalue> */ | 
|---|
| 56 | OP_CALL,	/* <closure> <this> <args...> -(numargs)- <returnvalue> */ | 
|---|
| 57 | OP_NEW,		/* <closure> <args...> -(numargs)- <returnvalue> */ | 
|---|
| 58 |  | 
|---|
| 59 | OP_TYPEOF, | 
|---|
| 60 | OP_POS, | 
|---|
| 61 | OP_NEG, | 
|---|
| 62 | OP_BITNOT, | 
|---|
| 63 | OP_LOGNOT, | 
|---|
| 64 | OP_INC,		/* <x> -- ToNumber(x)+1 */ | 
|---|
| 65 | OP_DEC,		/* <x> -- ToNumber(x)-1 */ | 
|---|
| 66 | OP_POSTINC,	/* <x> -- ToNumber(x)+1 ToNumber(x) */ | 
|---|
| 67 | OP_POSTDEC,	/* <x> -- ToNumber(x)-1 ToNumber(x) */ | 
|---|
| 68 |  | 
|---|
| 69 | OP_MUL, | 
|---|
| 70 | OP_DIV, | 
|---|
| 71 | OP_MOD, | 
|---|
| 72 | OP_ADD, | 
|---|
| 73 | OP_SUB, | 
|---|
| 74 | OP_SHL, | 
|---|
| 75 | OP_SHR, | 
|---|
| 76 | OP_USHR, | 
|---|
| 77 | OP_LT, | 
|---|
| 78 | OP_GT, | 
|---|
| 79 | OP_LE, | 
|---|
| 80 | OP_GE, | 
|---|
| 81 | OP_EQ, | 
|---|
| 82 | OP_NE, | 
|---|
| 83 | OP_STRICTEQ, | 
|---|
| 84 | OP_STRICTNE, | 
|---|
| 85 | OP_JCASE, | 
|---|
| 86 | OP_BITAND, | 
|---|
| 87 | OP_BITXOR, | 
|---|
| 88 | OP_BITOR, | 
|---|
| 89 |  | 
|---|
| 90 | OP_INSTANCEOF, | 
|---|
| 91 |  | 
|---|
| 92 | OP_THROW, | 
|---|
| 93 |  | 
|---|
| 94 | OP_TRY,		/* -ADDR- /jump/ or -ADDR- <exception> */ | 
|---|
| 95 | OP_ENDTRY, | 
|---|
| 96 |  | 
|---|
| 97 | OP_CATCH,	/* push scope chain with exception variable */ | 
|---|
| 98 | OP_ENDCATCH, | 
|---|
| 99 |  | 
|---|
| 100 | OP_WITH, | 
|---|
| 101 | OP_ENDWITH, | 
|---|
| 102 |  | 
|---|
| 103 | OP_DEBUGGER, | 
|---|
| 104 | OP_JUMP, | 
|---|
| 105 | OP_JTRUE, | 
|---|
| 106 | OP_JFALSE, | 
|---|
| 107 | OP_RETURN, | 
|---|
| 108 | }; | 
|---|
| 109 |  | 
|---|
| 110 | struct js_Function | 
|---|
| 111 | { | 
|---|
| 112 | const char *name; | 
|---|
| 113 | int script; | 
|---|
| 114 | int lightweight; | 
|---|
| 115 | int strict; | 
|---|
| 116 | int arguments; | 
|---|
| 117 | int numparams; | 
|---|
| 118 |  | 
|---|
| 119 | js_Instruction *code; | 
|---|
| 120 | int codecap, codelen; | 
|---|
| 121 |  | 
|---|
| 122 | js_Function **funtab; | 
|---|
| 123 | int funcap, funlen; | 
|---|
| 124 |  | 
|---|
| 125 | double *numtab; | 
|---|
| 126 | int numcap, numlen; | 
|---|
| 127 |  | 
|---|
| 128 | const char **strtab; | 
|---|
| 129 | int strcap, strlen; | 
|---|
| 130 |  | 
|---|
| 131 | const char **vartab; | 
|---|
| 132 | int varcap, varlen; | 
|---|
| 133 |  | 
|---|
| 134 | const char *filename; | 
|---|
| 135 | int line, lastline; | 
|---|
| 136 |  | 
|---|
| 137 | js_Function *gcnext; | 
|---|
| 138 | int gcmark; | 
|---|
| 139 | }; | 
|---|
| 140 |  | 
|---|
| 141 | js_Function *jsC_compilefunction(js_State *J, js_Ast *prog); | 
|---|
| 142 | js_Function *jsC_compilescript(js_State *J, js_Ast *prog, int default_strict); | 
|---|
| 143 | const char *jsC_opcodestring(enum js_OpCode opcode); | 
|---|
| 144 | void jsC_dumpfunction(js_State *J, js_Function *fun); | 
|---|
| 145 |  | 
|---|
| 146 | #endif | 
|---|
| 147 |  | 
|---|