#ifndef js_compile_h1#define js_compile_h23enum js_OpCode4{5OP_POP, /* A -- */6OP_DUP, /* A -- A A */7OP_DUP2, /* A B -- A B A B */8OP_ROT2, /* A B -- B A */9OP_ROT3, /* A B C -- C A B */10OP_ROT4, /* A B C D -- D A B C */1112OP_NUMBER_0, /* -- 0 */13OP_NUMBER_1, /* -- 1 */14OP_NUMBER_POS, /* -K- K */15OP_NUMBER_NEG, /* -K- -K */1617OP_NUMBER, /* -N- <number> */18OP_STRING, /* -S- <string> */19OP_CLOSURE, /* -F- <closure> */2021OP_NEWARRAY,22OP_NEWOBJECT,23OP_NEWREGEXP,2425OP_UNDEF,26OP_NULL,27OP_TRUE,28OP_FALSE,2930OP_THIS,31OP_GLOBAL,32OP_CURRENT, /* currently executing function object */3334OP_INITLOCAL, /* <value> -K- */35OP_GETLOCAL, /* -K- <value> */36OP_SETLOCAL, /* <value> -K- <value> */37OP_DELLOCAL, /* -K- false */3839OP_INITVAR, /* <value> -S- */40OP_DEFVAR, /* -S- */41OP_HASVAR, /* -S- ( <value> | undefined ) */42OP_GETVAR, /* -S- <value> */43OP_SETVAR, /* <value> -S- <value> */44OP_DELVAR, /* -S- <success> */4546OP_IN, /* <name> <obj> -- <exists?> */4748OP_INITPROP, /* <obj> <key> <val> -- <obj> */49OP_INITGETTER, /* <obj> <key> <closure> -- <obj> */50OP_INITSETTER, /* <obj> <key> <closure> -- <obj> */5152OP_GETPROP, /* <obj> <name> -- <value> */53OP_GETPROP_S, /* <obj> -S- <value> */54OP_SETPROP, /* <obj> <name> <value> -- <value> */55OP_SETPROP_S, /* <obj> <value> -S- <value> */56OP_DELPROP, /* <obj> <name> -- <success> */57OP_DELPROP_S, /* <obj> -S- <success> */5859OP_ITERATOR, /* <obj> -- <iobj> */60OP_NEXTITER, /* <iobj> -- ( <iobj> <name> true | false ) */6162OP_EVAL, /* <args...> -(numargs)- <returnvalue> */63OP_CALL, /* <closure> <this> <args...> -(numargs)- <returnvalue> */64OP_NEW, /* <closure> <args...> -(numargs)- <returnvalue> */6566OP_TYPEOF,67OP_POS,68OP_NEG,69OP_BITNOT,70OP_LOGNOT,71OP_INC, /* <x> -- ToNumber(x)+1 */72OP_DEC, /* <x> -- ToNumber(x)-1 */73OP_POSTINC, /* <x> -- ToNumber(x)+1 ToNumber(x) */74OP_POSTDEC, /* <x> -- ToNumber(x)-1 ToNumber(x) */7576OP_MUL,77OP_DIV,78OP_MOD,79OP_ADD,80OP_SUB,81OP_SHL,82OP_SHR,83OP_USHR,84OP_LT,85OP_GT,86OP_LE,87OP_GE,88OP_EQ,89OP_NE,90OP_STRICTEQ,91OP_STRICTNE,92OP_JCASE,93OP_BITAND,94OP_BITXOR,95OP_BITOR,9697OP_INSTANCEOF,9899OP_THROW,100101OP_TRY, /* -ADDR- /jump/ or -ADDR- <exception> */102OP_ENDTRY,103104OP_CATCH, /* push scope chain with exception variable */105OP_ENDCATCH,106107OP_WITH,108OP_ENDWITH,109110OP_DEBUGGER,111OP_JUMP,112OP_JTRUE,113OP_JFALSE,114OP_RETURN,115116OP_LINE, /* -K- */117};118119struct js_Function120{121const char *name;122int script;123int lightweight;124unsigned int arguments;125unsigned int numparams;126127js_Instruction *code;128unsigned int codecap, codelen;129130js_Function **funtab;131unsigned int funcap, funlen;132133double *numtab;134unsigned int numcap, numlen;135136const char **strtab;137unsigned int strcap, strlen;138139const char **vartab;140unsigned int varcap, varlen;141142const char *filename;143int line, lastline;144145js_Function *gcnext;146int gcmark;147};148149js_Function *jsC_compilefunction(js_State *J, js_Ast *prog);150js_Function *jsC_compile(js_State *J, js_Ast *prog);151const char *jsC_opcodestring(enum js_OpCode opcode);152void jsC_dumpfunction(js_State *J, js_Function *fun);153154#endif155156157