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