47 lines
1.5 KiB
Zig
47 lines
1.5 KiB
Zig
const std = @import("std");
|
|
const debug = std.debug;
|
|
const Allocator = std.mem.Allocator;
|
|
|
|
const Chunk = @import("./chunk.zig").Chunk;
|
|
const OpCode = @import("./opcode.zig").OpCode;
|
|
const VM = @import("./vm.zig").VM;
|
|
|
|
pub const DEBUG_TRACE_EXECUTION = true;
|
|
|
|
pub fn main() !void {
|
|
var gpa = std.heap.GeneralPurposeAllocator(.{ .safety = true }){};
|
|
defer _ = debug.assert(gpa.deinit() == .ok);
|
|
const allocator = gpa.allocator();
|
|
|
|
var vm = VM.new(allocator);
|
|
|
|
var chunk = Chunk.new();
|
|
try chunk.init(allocator);
|
|
|
|
var constant = try chunk.add_constant(allocator, 1.2);
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_CONSTANT), 123);
|
|
try chunk.write(allocator, @intCast(constant), 123);
|
|
|
|
constant = try chunk.add_constant(allocator, 3.4);
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_CONSTANT), 123);
|
|
try chunk.write(allocator, @intCast(constant), 123);
|
|
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_ADD), 123);
|
|
|
|
constant = try chunk.add_constant(allocator, 5.6);
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_CONSTANT), 123);
|
|
try chunk.write(allocator, @intCast(constant), 123);
|
|
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_DIVIDE), 123);
|
|
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_NEGATE), 123);
|
|
try chunk.write(allocator, @intFromEnum(OpCode.OP_RETURN), 123);
|
|
|
|
chunk.dissassemble("test chunk");
|
|
|
|
_ = try vm.interpret(&chunk);
|
|
vm.free();
|
|
|
|
chunk.deinit(allocator);
|
|
}
|