5 enum opcode
6 {
7 OP_ADD = 0, // ADD dest, src
8 OP_SUB, // SUB dest, src
9 OP_MUL, // MUL dest, src
10 OP_DIV, // DIV dest, src
11 OP_NEW, // NEW dest, type
12 OP_ASSIGN, // perform an assign() operation from src to dest, without increasing
13 // the number of references to src, but decreasing the number of referenes of dest
14 OP_ASSIGN_INC, // same as above, but increase the number of references to src
15 OP_MOV, // just an 'aliasing' move, not touching any references. useful for moving
16 // 'atomic' data, like integers and floats, and moving objects to temporary variables
17 OP_INCREFS, // increase the number of references to dest
18 OP_DECREFS, // decrease the number of references to dest
19 OP_COPY, // copy dest
20 OP_ASSIGNSUBSC,
21 OP_ASSIGNSUBSC_INC,
22 OP_ASSIGNSLICE,
23 OP_ASSIGNSLICE_INC,
24 OP_LOADINT, // dest, src
25 OP_LOADFLT, // dest, src
26 OP_LOADSEQ, // dest
27 OP_BEGINSEQ,
28 OP_ENDSEQ,
29 OP_CNV, // dest, src
30 OP_EQ, // dest, src
31 OP_NE,
32 OP_LT,
33 OP_GT,
34 OP_LE,
35 OP_GE,
36 OP_AND,
37 OP_OR,
38 OP_XOR,
39 OP_NOT,
40 OP_IF,
41 OP_SEQ_CMP, // dest, src
42 OP_SEQ_EQ, // dest, src
43 OP_SUBSC, // dest, src
44 OP_SLICE, // dest, src
45 OP_APPEND, // dest, src
46 OP_PREPEND, // dest, src
47 OP_RETURN,
48 OP_NOP
49 };