feat: 添加跳转指令支持及条件语句编译实现

This commit is contained in:
2026-02-20 17:02:13 +08:00
parent eb20993e27
commit abdb1d2fb0
8 changed files with 225 additions and 17 deletions

View File

@@ -89,12 +89,34 @@ namespace Fig
case OpCode::Exit: {
return Value::GetNullInstance();
}
case OpCode::LoadK: {
std::uint16_t bx = decodeBx(inst);
registers[a] = k[bx]; // constants
break;
}
case OpCode::Return: {
return registers[a];
}
case OpCode::Jmp: {
std::int16_t sbx = decodeSBx(inst);
ip += sbx;
break;
}
case OpCode::JmpIfFalse: {
Value &v = registers[a];
bool cond = v.AsBool(); // 条件类型 Compiler检查
if (!cond)
{
std::int16_t sbx = decodeSBx(inst);
ip += sbx;
}
break;
}
case OpCode::Mov: {
std::uint16_t bx = decodeBx(inst);
registers[a] = registers[bx];
@@ -113,9 +135,6 @@ namespace Fig
BINARY_COMPARE_OP(GreaterEqual, >=);
BINARY_COMPARE_OP(LessEqual, <=);
case OpCode::Return: {
return registers[a];
}
default: {
assert(false && "VM: Unknown OpCode encountered!");