summaryrefslogtreecommitdiff
path: root/src/mods/vm.zig
diff options
context:
space:
mode:
authorluccie-cmd <luccie@sideros.org>2025-03-30 14:57:04 +0200
committerluccie-cmd <luccie@sideros.org>2025-03-30 15:00:17 +0200
commit28420f53b06c7be0090ebbd4f242b11f976d6f64 (patch)
treeeed4d719bd18baf9d42750f9276b6bd8092a26e4 /src/mods/vm.zig
parent916115c7cd39f9fc506eaaae2efb209d997ea7d7 (diff)
Added executing of and
Diffstat (limited to 'src/mods/vm.zig')
-rw-r--r--src/mods/vm.zig17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mods/vm.zig b/src/mods/vm.zig
index 0d6cddf..a636cb3 100644
--- a/src/mods/vm.zig
+++ b/src/mods/vm.zig
@@ -107,7 +107,7 @@ pub const Runtime = struct {
std.log.err("Reached unreachable statement at IR counter {any}\n", .{frame.program_counter});
frame.code.print(std.io.getStdOut().writer()) catch {};
},
- .nop => @panic("UNIMPLEMENTED"),
+ .nop => {},
.br => {
frame.program_counter = index.u32;
continue;
@@ -130,8 +130,19 @@ pub const Runtime = struct {
.refisnull => @panic("UNIMPLEMENTED"),
.reffunc => @panic("UNIMPLEMENTED"),
- .drop => @panic("UNIMPLEMENTED"),
- .select => @panic("UNIMPLEMENTED"),
+ .drop => {
+ _ = self.stack.pop();
+ },
+ .select => {
+ const c = self.stack.pop().?.i32;
+ const val2 = self.stack.pop().?;
+ const val1 = self.stack.pop().?;
+ if (c != 0) {
+ try self.stack.append(val1);
+ } else {
+ try self.stack.append(val2);
+ }
+ },
.select_with_values => @panic("UNIMPLEMENTED"),
.localget => try self.stack.append(frame.locals[index.u32]),