Added block instruction in WASM VM
Signed-off-by: luccie-cmd <luccie@sideros.org>
This commit is contained in:
parent
e1f1441a38
commit
bbe9213573
3 changed files with 20 additions and 1 deletions
BIN
assets/core.wasm
Normal file → Executable file
BIN
assets/core.wasm
Normal file → Executable file
Binary file not shown.
|
|
@ -25,7 +25,7 @@ pub fn main() !void {
|
||||||
//defer runtime.deinit(allocator);
|
//defer runtime.deinit(allocator);
|
||||||
|
|
||||||
//var parameters = [_]usize{};
|
//var parameters = [_]usize{};
|
||||||
//try runtime.callExternal(allocator, "calculate_fibonacci", ¶meters);
|
//try runtime.callExternal(allocator, "preinit", ¶meters);
|
||||||
const w = try window.Window.create(800, 600, "sideros");
|
const w = try window.Window.create(800, 600, "sideros");
|
||||||
defer w.destroy();
|
defer w.destroy();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,23 @@ pub const Runtime = struct {
|
||||||
frame.program_counter += 1;
|
frame.program_counter += 1;
|
||||||
std.debug.print("b: {x}\n", .{byte});
|
std.debug.print("b: {x}\n", .{byte});
|
||||||
switch (byte) {
|
switch (byte) {
|
||||||
|
0x02 => {
|
||||||
|
var depth: usize = 1;
|
||||||
|
var pc = frame.program_counter;
|
||||||
|
while (depth > 0) {
|
||||||
|
const opcode = frame.code[pc];
|
||||||
|
const operand = frame.code[pc+1];
|
||||||
|
if (opcode == 0x02 and operand == 0x40) {
|
||||||
|
depth += 1;
|
||||||
|
} else if (opcode == 0x0B) {
|
||||||
|
depth -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
pc += 1; // Move forward
|
||||||
|
}
|
||||||
|
try self.labels.append(pc);
|
||||||
|
frame.program_counter += 1;
|
||||||
|
},
|
||||||
0x03 => {
|
0x03 => {
|
||||||
try self.labels.append(frame.program_counter);
|
try self.labels.append(frame.program_counter);
|
||||||
frame.program_counter += 1;
|
frame.program_counter += 1;
|
||||||
|
|
@ -479,6 +496,8 @@ pub const Runtime = struct {
|
||||||
pub fn callExternal(self: *Runtime, allocator: Allocator, name: []const u8, parameters: []usize) !void {
|
pub fn callExternal(self: *Runtime, allocator: Allocator, name: []const u8, parameters: []usize) !void {
|
||||||
if (self.module.exports.get(name)) |function| {
|
if (self.module.exports.get(name)) |function| {
|
||||||
try self.call(allocator, function, parameters);
|
try self.call(allocator, function, parameters);
|
||||||
|
} else {
|
||||||
|
std.debug.panic("Function `{s}` not avaliable", .{name});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue