From 82c7c7178f46ec4944a57a7896f7fd6ddba31653 Mon Sep 17 00:00:00 2001 From: PuqiAR Date: Thu, 23 Jul 2026 13:01:56 +0800 Subject: [PATCH] =?UTF-8?q?Refactor:=20=E6=9B=B4=E6=96=B0OpCode=E6=9E=9A?= =?UTF-8?q?=E4=B8=BE=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=AF=A6=E7=BB=86=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Bytecode/Bytecode.hpp | 81 ++++++++++++++++++++++----------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/src/Bytecode/Bytecode.hpp b/src/Bytecode/Bytecode.hpp index 5df9a5d..f71f016 100644 --- a/src/Bytecode/Bytecode.hpp +++ b/src/Bytecode/Bytecode.hpp @@ -18,51 +18,62 @@ namespace Fig enum class OpCode : std::uint8_t { - Exit, - Exit_MaxRecursionDepthExceeded, + // 控制流 + Exit, // iAsBx, return sBx + Exit_MaxRecursionDepthExceeded, // iAsBx, fatal: 超出最大递归深度 - LoadK, - LoadTrue, - LoadFalse, - LoadNull, + // 常量加载 + LoadK, // iABx, R(A) = K(Bx) + LoadTrue, // iABC, R(A) = true + LoadFalse, // iABC, R(A) = false + LoadNull, // iABC, R(A) = null - FastCall, - Call, - Return, + // 函数调用 + FastCall, // iABC, call Proto[A], args from R(B) + 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, - Mul, - Div, - Mod, - BitXor, + // 算术运算 + Add, // iABC, R(A) = R(B) + R(C) + Sub, // iABC, R(A) = R(B) - R(C) + Mul, // iABC, R(A) = R(B) * R(C) + Div, // iABC, R(A) = R(B) / R(C) + Mod, // iABC, R(A) = R(B) % R(C) (WIP) + BitXor, // iABC, R(A) = R(B) ^ R(C) (WIP) - IntFastAdd, - IntFastSub, - IntFastMul, - IntFastDiv, + // 快速整数算术(仅 int,无类型检查) + IntFastAdd, // iABC, R(A) = R(B) + R(C) (int) + IntFastSub, // iABC, R(A) = R(B) - R(C) (int) + IntFastMul, // iABC, R(A) = R(B) * R(C) (int) + // 结果可能为非整数 + IntFastDiv, // iABC, R(A) = (double)R(B) / R(C) (int) - Equal, - NotEqual, - Greater, - Less, - GreaterEqual, - LessEqual, + // 比较 + Equal, // iABC, R(A) = R(B) == R(C) + NotEqual, // iABC, R(A) = R(B) != R(C) + Greater, // iABC, R(A) = R(B) > R(C) + Less, // iABC, R(A) = R(B) < R(C) + GreaterEqual, // iABC, R(A) = R(B) >= R(C) + LessEqual, // iABC, R(A) = R(B) <= R(C) - GetGlobal, - SetGlobal, - GetUpval, - SetUpval, - Copy, + // 变量存取 + GetGlobal, // iABx, R(A) = G(Bx) + SetGlobal, // iABx, G(Bx) = R(A) + GetUpval, // iABC, R(A) = *Upval(B) + SetUpval, // iABC, *Upval(B) = R(A) + Copy, // iABC, R(A) = R(B) - Count + Count // 哨兵 }; namespace Op