vm: add negate opcode
This commit is contained in:
parent
61e463713c
commit
2822676707
3 changed files with 6 additions and 0 deletions
|
@ -8,6 +8,7 @@ const AllOpcodes = struct {
|
||||||
pub Constant: u8 = 0,
|
pub Constant: u8 = 0,
|
||||||
pub ConstantLong: u8 = 1,
|
pub ConstantLong: u8 = 1,
|
||||||
pub Return: u8 = 2,
|
pub Return: u8 = 2,
|
||||||
|
pub Negate: u8 = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const OpCode = AllOpcodes{};
|
pub const OpCode = AllOpcodes{};
|
||||||
|
@ -148,6 +149,8 @@ pub const Chunk = struct {
|
||||||
self,
|
self,
|
||||||
index,
|
index,
|
||||||
);
|
);
|
||||||
|
} else if (instruction == OpCode.Negate) {
|
||||||
|
return try simpleInstruction(stdout, "OP_NEGATE", index);
|
||||||
} else {
|
} else {
|
||||||
try stdout.print("Unknown opcode: {}\n", instruction);
|
try stdout.print("Unknown opcode: {}\n", instruction);
|
||||||
return index + 1;
|
return index + 1;
|
||||||
|
|
|
@ -117,6 +117,7 @@ pub fn main() !void {
|
||||||
//try chk.write(chunk.OpCode.Return);
|
//try chk.write(chunk.OpCode.Return);
|
||||||
|
|
||||||
var constant = try chk.writeConstant(1.2, 123);
|
var constant = try chk.writeConstant(1.2, 123);
|
||||||
|
try chk.write(chunk.OpCode.Negate, 123);
|
||||||
try chk.write(chunk.OpCode.Return, 123);
|
try chk.write(chunk.OpCode.Return, 123);
|
||||||
|
|
||||||
var vmach = vm.VM.init(stdout, &chk, true);
|
var vmach = vm.VM.init(stdout, &chk, true);
|
||||||
|
|
|
@ -107,6 +107,8 @@ pub const VM = struct {
|
||||||
try self.stdout.print("\n");
|
try self.stdout.print("\n");
|
||||||
return InterpretResult.Ok;
|
return InterpretResult.Ok;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
chunk.OpCode.Negate => self.push(-self.pop()),
|
||||||
else => blk: {
|
else => blk: {
|
||||||
std.debug.warn("Unknown instruction: {x}\n", instruction);
|
std.debug.warn("Unknown instruction: {x}\n", instruction);
|
||||||
return InterpretResult.RuntimeError;
|
return InterpretResult.RuntimeError;
|
||||||
|
|
Loading…
Reference in a new issue