Skip to main content

luaur_common/enums/
luau_opcode.rs

1#[allow(non_camel_case_types)]
2#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
3#[repr(u8)]
4pub enum LuauOpcode {
5    LOP_NOP,
6    LOP_BREAK,
7    LOP_LOADNIL,
8    LOP_LOADB,
9    LOP_LOADN,
10    LOP_LOADK,
11    LOP_MOVE,
12    LOP_GETGLOBAL,
13    LOP_SETGLOBAL,
14    LOP_GETUPVAL,
15    LOP_SETUPVAL,
16    LOP_CLOSEUPVALS,
17    LOP_GETIMPORT,
18    LOP_GETTABLE,
19    LOP_SETTABLE,
20    LOP_GETTABLEKS,
21    LOP_SETTABLEKS,
22    LOP_GETTABLEN,
23    LOP_SETTABLEN,
24    LOP_NEWCLOSURE,
25    LOP_NAMECALL,
26    LOP_CALL,
27    LOP_RETURN,
28    LOP_JUMP,
29    LOP_JUMPBACK,
30    LOP_JUMPIF,
31    LOP_JUMPIFNOT,
32    LOP_JUMPIFEQ,
33    LOP_JUMPIFLE,
34    LOP_JUMPIFLT,
35    LOP_JUMPIFNOTEQ,
36    LOP_JUMPIFNOTLE,
37    LOP_JUMPIFNOTLT,
38    LOP_ADD,
39    LOP_SUB,
40    LOP_MUL,
41    LOP_DIV,
42    LOP_MOD,
43    LOP_POW,
44    LOP_ADDK,
45    LOP_SUBK,
46    LOP_MULK,
47    LOP_DIVK,
48    LOP_MODK,
49    LOP_POWK,
50    LOP_AND,
51    LOP_OR,
52    LOP_ANDK,
53    LOP_ORK,
54    LOP_CONCAT,
55    LOP_NOT,
56    LOP_MINUS,
57    LOP_LENGTH,
58    LOP_NEWTABLE,
59    LOP_DUPTABLE,
60    LOP_SETLIST,
61    LOP_FORNPREP,
62    LOP_FORNLOOP,
63    LOP_FORGLOOP,
64    LOP_FORGPREP_INEXT,
65    LOP_FASTCALL3,
66    LOP_FORGPREP_NEXT,
67    LOP_NATIVECALL,
68    LOP_GETVARARGS,
69    LOP_DUPCLOSURE,
70    LOP_PREPVARARGS,
71    LOP_LOADKX,
72    LOP_JUMPX,
73    LOP_FASTCALL,
74    LOP_COVERAGE,
75    LOP_CAPTURE,
76    LOP_SUBRK,
77    LOP_DIVRK,
78    LOP_FASTCALL1,
79    LOP_FASTCALL2,
80    LOP_FASTCALL2K,
81    LOP_FORGPREP,
82    LOP_JUMPXEQKNIL,
83    LOP_JUMPXEQKB,
84    LOP_JUMPXEQKN,
85    LOP_JUMPXEQKS,
86    LOP_IDIV,
87    LOP_IDIVK,
88    LOP_GETUDATAKS,
89    LOP_SETUDATAKS,
90    LOP_NAMECALLUDATA,
91    LOP_NEWCLASSMEMBER,
92    LOP_CALLFB,
93    LOP_CMPPROTO,
94    LOP__COUNT,
95}
96
97impl LuauOpcode {
98    pub const LOP_NOP: LuauOpcode = LuauOpcode::LOP_NOP;
99    pub const LOP_BREAK: LuauOpcode = LuauOpcode::LOP_BREAK;
100    pub const LOP_LOADNIL: LuauOpcode = LuauOpcode::LOP_LOADNIL;
101    pub const LOP_LOADB: LuauOpcode = LuauOpcode::LOP_LOADB;
102    pub const LOP_LOADN: LuauOpcode = LuauOpcode::LOP_LOADN;
103    pub const LOP_LOADK: LuauOpcode = LuauOpcode::LOP_LOADK;
104    pub const LOP_MOVE: LuauOpcode = LuauOpcode::LOP_MOVE;
105    pub const LOP_GETGLOBAL: LuauOpcode = LuauOpcode::LOP_GETGLOBAL;
106    pub const LOP_SETGLOBAL: LuauOpcode = LuauOpcode::LOP_SETGLOBAL;
107    pub const LOP_GETUPVAL: LuauOpcode = LuauOpcode::LOP_GETUPVAL;
108    pub const LOP_SETUPVAL: LuauOpcode = LuauOpcode::LOP_SETUPVAL;
109    pub const LOP_CLOSEUPVALS: LuauOpcode = LuauOpcode::LOP_CLOSEUPVALS;
110    pub const LOP_GETIMPORT: LuauOpcode = LuauOpcode::LOP_GETIMPORT;
111    pub const LOP_GETTABLE: LuauOpcode = LuauOpcode::LOP_GETTABLE;
112    pub const LOP_SETTABLE: LuauOpcode = LuauOpcode::LOP_SETTABLE;
113    pub const LOP_GETTABLEKS: LuauOpcode = LuauOpcode::LOP_GETTABLEKS;
114    pub const LOP_SETTABLEKS: LuauOpcode = LuauOpcode::LOP_SETTABLEKS;
115    pub const LOP_GETTABLEN: LuauOpcode = LuauOpcode::LOP_GETTABLEN;
116    pub const LOP_SETTABLEN: LuauOpcode = LuauOpcode::LOP_SETTABLEN;
117    pub const LOP_NEWCLOSURE: LuauOpcode = LuauOpcode::LOP_NEWCLOSURE;
118    pub const LOP_NAMECALL: LuauOpcode = LuauOpcode::LOP_NAMECALL;
119    pub const LOP_CALL: LuauOpcode = LuauOpcode::LOP_CALL;
120    pub const LOP_RETURN: LuauOpcode = LuauOpcode::LOP_RETURN;
121    pub const LOP_JUMP: LuauOpcode = LuauOpcode::LOP_JUMP;
122    pub const LOP_JUMPBACK: LuauOpcode = LuauOpcode::LOP_JUMPBACK;
123    pub const LOP_JUMPIF: LuauOpcode = LuauOpcode::LOP_JUMPIF;
124    pub const LOP_JUMPIFNOT: LuauOpcode = LuauOpcode::LOP_JUMPIFNOT;
125    pub const LOP_JUMPIFEQ: LuauOpcode = LuauOpcode::LOP_JUMPIFEQ;
126    pub const LOP_JUMPIFLE: LuauOpcode = LuauOpcode::LOP_JUMPIFLE;
127    pub const LOP_JUMPIFLT: LuauOpcode = LuauOpcode::LOP_JUMPIFLT;
128    pub const LOP_JUMPIFNOTEQ: LuauOpcode = LuauOpcode::LOP_JUMPIFNOTEQ;
129    pub const LOP_JUMPIFNOTLE: LuauOpcode = LuauOpcode::LOP_JUMPIFNOTLE;
130    pub const LOP_JUMPIFNOTLT: LuauOpcode = LuauOpcode::LOP_JUMPIFNOTLT;
131    pub const LOP_ADD: LuauOpcode = LuauOpcode::LOP_ADD;
132    pub const LOP_SUB: LuauOpcode = LuauOpcode::LOP_SUB;
133    pub const LOP_MUL: LuauOpcode = LuauOpcode::LOP_MUL;
134    pub const LOP_DIV: LuauOpcode = LuauOpcode::LOP_DIV;
135    pub const LOP_MOD: LuauOpcode = LuauOpcode::LOP_MOD;
136    pub const LOP_POW: LuauOpcode = LuauOpcode::LOP_POW;
137    pub const LOP_ADDK: LuauOpcode = LuauOpcode::LOP_ADDK;
138    pub const LOP_SUBK: LuauOpcode = LuauOpcode::LOP_SUBK;
139    pub const LOP_MULK: LuauOpcode = LuauOpcode::LOP_MULK;
140    pub const LOP_DIVK: LuauOpcode = LuauOpcode::LOP_DIVK;
141    pub const LOP_MODK: LuauOpcode = LuauOpcode::LOP_MODK;
142    pub const LOP_POWK: LuauOpcode = LuauOpcode::LOP_POWK;
143    pub const LOP_AND: LuauOpcode = LuauOpcode::LOP_AND;
144    pub const LOP_OR: LuauOpcode = LuauOpcode::LOP_OR;
145    pub const LOP_ANDK: LuauOpcode = LuauOpcode::LOP_ANDK;
146    pub const LOP_ORK: LuauOpcode = LuauOpcode::LOP_ORK;
147    pub const LOP_CONCAT: LuauOpcode = LuauOpcode::LOP_CONCAT;
148    pub const LOP_NOT: LuauOpcode = LuauOpcode::LOP_NOT;
149    pub const LOP_MINUS: LuauOpcode = LuauOpcode::LOP_MINUS;
150    pub const LOP_LENGTH: LuauOpcode = LuauOpcode::LOP_LENGTH;
151    pub const LOP_NEWTABLE: LuauOpcode = LuauOpcode::LOP_NEWTABLE;
152    pub const LOP_DUPTABLE: LuauOpcode = LuauOpcode::LOP_DUPTABLE;
153    pub const LOP_SETLIST: LuauOpcode = LuauOpcode::LOP_SETLIST;
154    pub const LOP_FORNPREP: LuauOpcode = LuauOpcode::LOP_FORNPREP;
155    pub const LOP_FORNLOOP: LuauOpcode = LuauOpcode::LOP_FORNLOOP;
156    pub const LOP_FORGLOOP: LuauOpcode = LuauOpcode::LOP_FORGLOOP;
157    pub const LOP_FORGPREP_INEXT: LuauOpcode = LuauOpcode::LOP_FORGPREP_INEXT;
158    pub const LOP_FASTCALL3: LuauOpcode = LuauOpcode::LOP_FASTCALL3;
159    pub const LOP_FORGPREP_NEXT: LuauOpcode = LuauOpcode::LOP_FORGPREP_NEXT;
160    pub const LOP_NATIVECALL: LuauOpcode = LuauOpcode::LOP_NATIVECALL;
161    pub const LOP_GETVARARGS: LuauOpcode = LuauOpcode::LOP_GETVARARGS;
162    pub const LOP_DUPCLOSURE: LuauOpcode = LuauOpcode::LOP_DUPCLOSURE;
163    pub const LOP_PREPVARARGS: LuauOpcode = LuauOpcode::LOP_PREPVARARGS;
164    pub const LOP_LOADKX: LuauOpcode = LuauOpcode::LOP_LOADKX;
165    pub const LOP_JUMPX: LuauOpcode = LuauOpcode::LOP_JUMPX;
166    pub const LOP_FASTCALL: LuauOpcode = LuauOpcode::LOP_FASTCALL;
167    pub const LOP_COVERAGE: LuauOpcode = LuauOpcode::LOP_COVERAGE;
168    pub const LOP_CAPTURE: LuauOpcode = LuauOpcode::LOP_CAPTURE;
169    pub const LOP_SUBRK: LuauOpcode = LuauOpcode::LOP_SUBRK;
170    pub const LOP_DIVRK: LuauOpcode = LuauOpcode::LOP_DIVRK;
171    pub const LOP_FASTCALL1: LuauOpcode = LuauOpcode::LOP_FASTCALL1;
172    pub const LOP_FASTCALL2: LuauOpcode = LuauOpcode::LOP_FASTCALL2;
173    pub const LOP_FASTCALL2K: LuauOpcode = LuauOpcode::LOP_FASTCALL2K;
174    pub const LOP_FORGPREP: LuauOpcode = LuauOpcode::LOP_FORGPREP;
175    pub const LOP_JUMPXEQKNIL: LuauOpcode = LuauOpcode::LOP_JUMPXEQKNIL;
176    pub const LOP_JUMPXEQKB: LuauOpcode = LuauOpcode::LOP_JUMPXEQKB;
177    pub const LOP_JUMPXEQKN: LuauOpcode = LuauOpcode::LOP_JUMPXEQKN;
178    pub const LOP_JUMPXEQKS: LuauOpcode = LuauOpcode::LOP_JUMPXEQKS;
179    pub const LOP_IDIV: LuauOpcode = LuauOpcode::LOP_IDIV;
180    pub const LOP_IDIVK: LuauOpcode = LuauOpcode::LOP_IDIVK;
181    pub const LOP_GETUDATAKS: LuauOpcode = LuauOpcode::LOP_GETUDATAKS;
182    pub const LOP_SETUDATAKS: LuauOpcode = LuauOpcode::LOP_SETUDATAKS;
183    pub const LOP_NAMECALLUDATA: LuauOpcode = LuauOpcode::LOP_NAMECALLUDATA;
184    pub const LOP_NEWCLASSMEMBER: LuauOpcode = LuauOpcode::LOP_NEWCLASSMEMBER;
185    pub const LOP_CALLFB: LuauOpcode = LuauOpcode::LOP_CALLFB;
186    pub const LOP_CMPPROTO: LuauOpcode = LuauOpcode::LOP_CMPPROTO;
187    pub const LOP__COUNT: LuauOpcode = LuauOpcode::LOP__COUNT;
188}
189
190impl From<u8> for LuauOpcode {
191    /// C++ casts the instruction's op byte straight to `LuauOpcode`
192    /// (`LuauOpcode(LUAU_INSN_OP(insn))`). Valid bytecode only carries
193    /// in-range opcodes; `repr(u8)` makes the layout identical.
194    fn from(v: u8) -> Self {
195        unsafe { core::mem::transmute(v) }
196    }
197}