#[repr(u8)]pub enum OpCode {
Show 83 variants
Move = 0,
LoadI = 1,
LoadF = 2,
LoadK = 3,
LoadKX = 4,
LoadFalse = 5,
LFalseSkip = 6,
LoadTrue = 7,
LoadNil = 8,
GetUpVal = 9,
SetUpVal = 10,
GetTabUp = 11,
GetTable = 12,
GetI = 13,
GetField = 14,
SetTabUp = 15,
SetTable = 16,
SetI = 17,
SetField = 18,
NewTable = 19,
Self_ = 20,
AddI = 21,
AddK = 22,
SubK = 23,
MulK = 24,
ModK = 25,
PowK = 26,
DivK = 27,
IDivK = 28,
BAndK = 29,
BOrK = 30,
BXOrK = 31,
ShrI = 32,
ShlI = 33,
Add = 34,
Sub = 35,
Mul = 36,
Mod = 37,
Pow = 38,
Div = 39,
IDiv = 40,
BAnd = 41,
BOr = 42,
BXOr = 43,
Shl = 44,
Shr = 45,
MmBin = 46,
MmBinI = 47,
MmBinK = 48,
Unm = 49,
BNot = 50,
Not = 51,
Len = 52,
Concat = 53,
Close = 54,
Tbc = 55,
Jmp = 56,
Eq = 57,
Lt = 58,
Le = 59,
EqK = 60,
EqI = 61,
LtI = 62,
LeI = 63,
GtI = 64,
GeI = 65,
Test = 66,
TestSet = 67,
Call = 68,
TailCall = 69,
Return = 70,
Return0 = 71,
Return1 = 72,
ForLoop = 73,
ForPrep = 74,
TForPrep = 75,
TForCall = 76,
TForLoop = 77,
SetList = 78,
Closure = 79,
VarArg = 80,
VarArgPrep = 81,
ExtraArg = 82,
}Expand description
TODO(phase-b): lua-types does not yet expose OpCode. Stubbed locally with
all 5.4 opcodes so call sites in vm.rs/debug.rs resolve; the real numeric
values and per-opcode mode flags live in lua-types/src/opcode.rs once
translated.
#[repr(u8)] with explicit discriminants matching C-Lua’s lopcodes.h
numbering (0=OP_MOVE, 1=OP_LOADI, …, 82=OP_EXTRAARG). The ordered, dense
0..=82 layout lets LLVM compile opcode() to a bounds-checked cast on the
low 7 bits of the instruction word and fuse it with the dispatch match
downstream. Discriminant order intentionally matches the integer keys in
InstructionExt::opcode, not the prior compile-order grouping.
Variants§
Move = 0
LoadI = 1
LoadF = 2
LoadK = 3
LoadKX = 4
LoadFalse = 5
LFalseSkip = 6
LoadTrue = 7
LoadNil = 8
GetUpVal = 9
SetUpVal = 10
GetTabUp = 11
GetTable = 12
GetI = 13
GetField = 14
SetTabUp = 15
SetTable = 16
SetI = 17
SetField = 18
NewTable = 19
Self_ = 20
AddI = 21
AddK = 22
SubK = 23
MulK = 24
ModK = 25
PowK = 26
DivK = 27
IDivK = 28
BAndK = 29
BOrK = 30
BXOrK = 31
ShrI = 32
ShlI = 33
Add = 34
Sub = 35
Mul = 36
Mod = 37
Pow = 38
Div = 39
IDiv = 40
BAnd = 41
BOr = 42
BXOr = 43
Shl = 44
Shr = 45
MmBin = 46
MmBinI = 47
MmBinK = 48
Unm = 49
BNot = 50
Not = 51
Len = 52
Concat = 53
Close = 54
Tbc = 55
Jmp = 56
Eq = 57
Lt = 58
Le = 59
EqK = 60
EqI = 61
LtI = 62
LeI = 63
GtI = 64
GeI = 65
Test = 66
TestSet = 67
Call = 68
TailCall = 69
Return = 70
Return0 = 71
Return1 = 72
ForLoop = 73
ForPrep = 74
TForPrep = 75
TForCall = 76
TForLoop = 77
SetList = 78
Closure = 79
VarArg = 80
VarArgPrep = 81
ExtraArg = 82
Implementations§
Source§impl OpCode
impl OpCode
Sourcepub const LoadKx: OpCode = OpCode::LoadKX
pub const LoadKx: OpCode = OpCode::LoadKX
Legacy alias retained because the prior duplicate enum variant
LoadKx (case-typo of LoadKX) is still referenced from
crates/lua-vm/src/debug.rs. Both names denote the same C
OP_LOADKX opcode. Kept as an associated const so existing call
sites compile unchanged while the enum remains a clean 0..=82 dense
discriminant set required by #[repr(u8)].