Refactor: 更新OpCode枚举,添加详细注释
This commit is contained in:
@@ -18,51 +18,62 @@ namespace Fig
|
|||||||
|
|
||||||
enum class OpCode : std::uint8_t
|
enum class OpCode : std::uint8_t
|
||||||
{
|
{
|
||||||
Exit,
|
// 控制流
|
||||||
Exit_MaxRecursionDepthExceeded,
|
Exit, // iAsBx, return sBx
|
||||||
|
Exit_MaxRecursionDepthExceeded, // iAsBx, fatal: 超出最大递归深度
|
||||||
|
|
||||||
LoadK,
|
// 常量加载
|
||||||
LoadTrue,
|
LoadK, // iABx, R(A) = K(Bx)
|
||||||
LoadFalse,
|
LoadTrue, // iABC, R(A) = true
|
||||||
LoadNull,
|
LoadFalse, // iABC, R(A) = false
|
||||||
|
LoadNull, // iABC, R(A) = null
|
||||||
|
|
||||||
FastCall,
|
// 函数调用
|
||||||
Call,
|
FastCall, // iABC, call Proto[A], args from R(B)
|
||||||
Return,
|
Call, // iABC, call R(A), args from R(B)
|
||||||
|
Return, // iABC, return R(A)
|
||||||
|
|
||||||
LoadFn,
|
// 闭包
|
||||||
|
LoadFn, // iABx, R(A) = new Closure(Proto[Bx])
|
||||||
|
|
||||||
Jmp,
|
// 跳转
|
||||||
JmpIfFalse,
|
Jmp, // iAsBx, PC += sBx
|
||||||
|
JmpIfFalse, // iAsBx, if !R(A) then PC += sBx
|
||||||
|
|
||||||
Mov,
|
// 寄存器移动
|
||||||
|
Mov, // iABx, R(A) = R(Bx)
|
||||||
|
|
||||||
Add,
|
// 算术运算
|
||||||
Sub,
|
Add, // iABC, R(A) = R(B) + R(C)
|
||||||
Mul,
|
Sub, // iABC, R(A) = R(B) - R(C)
|
||||||
Div,
|
Mul, // iABC, R(A) = R(B) * R(C)
|
||||||
Mod,
|
Div, // iABC, R(A) = R(B) / R(C)
|
||||||
BitXor,
|
Mod, // iABC, R(A) = R(B) % R(C) (WIP)
|
||||||
|
BitXor, // iABC, R(A) = R(B) ^ R(C) (WIP)
|
||||||
|
|
||||||
IntFastAdd,
|
// 快速整数算术(仅 int,无类型检查)
|
||||||
IntFastSub,
|
IntFastAdd, // iABC, R(A) = R(B) + R(C) (int)
|
||||||
IntFastMul,
|
IntFastSub, // iABC, R(A) = R(B) - R(C) (int)
|
||||||
IntFastDiv,
|
IntFastMul, // iABC, R(A) = R(B) * R(C) (int)
|
||||||
|
// 结果可能为非整数
|
||||||
|
IntFastDiv, // iABC, R(A) = (double)R(B) / R(C) (int)
|
||||||
|
|
||||||
Equal,
|
// 比较
|
||||||
NotEqual,
|
Equal, // iABC, R(A) = R(B) == R(C)
|
||||||
Greater,
|
NotEqual, // iABC, R(A) = R(B) != R(C)
|
||||||
Less,
|
Greater, // iABC, R(A) = R(B) > R(C)
|
||||||
GreaterEqual,
|
Less, // iABC, R(A) = R(B) < R(C)
|
||||||
LessEqual,
|
GreaterEqual, // iABC, R(A) = R(B) >= R(C)
|
||||||
|
LessEqual, // iABC, R(A) = R(B) <= R(C)
|
||||||
|
|
||||||
GetGlobal,
|
// 变量存取
|
||||||
SetGlobal,
|
GetGlobal, // iABx, R(A) = G(Bx)
|
||||||
GetUpval,
|
SetGlobal, // iABx, G(Bx) = R(A)
|
||||||
SetUpval,
|
GetUpval, // iABC, R(A) = *Upval(B)
|
||||||
Copy,
|
SetUpval, // iABC, *Upval(B) = R(A)
|
||||||
|
Copy, // iABC, R(A) = R(B)
|
||||||
|
|
||||||
Count
|
Count // 哨兵
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Op
|
namespace Op
|
||||||
|
|||||||
Reference in New Issue
Block a user