Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.