1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/*jshint esversion: 6 */
"use strict";
const OpCodes = [
"OP_MOVE",
"OP_LOADK",
"OP_LOADKX",
"OP_LOADBOOL",
"OP_LOADNIL",
"OP_GETUPVAL",
"OP_GETTABUP",
"OP_GETTABLE",
"OP_SETTABUP",
"OP_SETUPVAL",
"OP_SETTABLE",
"OP_NEWTABLE",
"OP_SELF",
"OP_ADD",
"OP_SUB",
"OP_MUL",
"OP_MOD",
"OP_POW",
"OP_DIV",
"OP_IDIV",
"OP_BAND",
"OP_BOR",
"OP_BXOR",
"OP_SHL",
"OP_SHR",
"OP_UNM",
"OP_BNOT",
"OP_NOT",
"OP_LEN",
"OP_CONCAT",
"OP_JMP",
"OP_EQ",
"OP_LT",
"OP_LE",
"OP_TEST",
"OP_TESTSET",
"OP_CALL",
"OP_TAILCALL",
"OP_RETURN",
"OP_FORLOOP",
"OP_FORPREP",
"OP_TFORCALL",
"OP_TFORLOOP",
"OP_SETLIST",
"OP_CLOSURE",
"OP_VARARG",
"OP_EXTRAARG"
];
const SIZE_C = 9;
const SIZE_B = 9;
const SIZE_Bx = (SIZE_C + SIZE_B);
const SIZE_A = 8;
const SIZE_Ax = (SIZE_C + SIZE_B + SIZE_A);
const SIZE_OP = 6;
const POS_OP = 0;
const POS_A = (POS_OP + SIZE_OP);
const POS_C = (POS_A + SIZE_A);
const POS_B = (POS_C + SIZE_C);
const POS_Bx = POS_C;
const POS_Ax = POS_A;
const MAXARG_Bx = ((1 << SIZE_Bx) - 1);
const MAXARG_sBx = (MAXARG_Bx >> 1); /* 'sBx' is signed */
const MAXARG_Ax = ((1<<SIZE_Ax)-1);
const MAXARG_A = ((1 << SIZE_A) - 1);
const MAXARG_B = ((1 << SIZE_B) - 1);
const MAXARG_C = ((1 << SIZE_C) - 1);
const BITRK = (1 << (SIZE_B - 1));
const ISK = function (x) {
return x & BITRK;
};
const INDEXK = function (r) {
return r & ~BITRK;
};
/* number of list items to accumulate before a SETLIST instruction */
const LFIELDS_PER_FLUSH = 50;
module.exports.OpCodes = OpCodes;
module.exports.SIZE_C = SIZE_C;
module.exports.SIZE_B = SIZE_B;
module.exports.SIZE_Bx = SIZE_Bx;
module.exports.SIZE_A = SIZE_A;
module.exports.SIZE_Ax = SIZE_Ax;
module.exports.SIZE_OP = SIZE_OP;
module.exports.POS_OP = POS_OP;
module.exports.POS_A = POS_A;
module.exports.POS_C = POS_C;
module.exports.POS_B = POS_B;
module.exports.POS_Bx = POS_Bx;
module.exports.POS_Ax = POS_Ax;
module.exports.MAXARG_Bx = MAXARG_Bx;
module.exports.MAXARG_sBx = MAXARG_sBx;
module.exports.MAXARG_Ax = MAXARG_Ax;
module.exports.MAXARG_A = MAXARG_A;
module.exports.MAXARG_B = MAXARG_B;
module.exports.MAXARG_C = MAXARG_C;
module.exports.BITRK = BITRK;
module.exports.ISK = ISK;
module.exports.INDEXK = INDEXK;
module.exports.LFIELDS_PER_FLUSH = LFIELDS_PER_FLUSH;
|