feat: minimal virtual machine / runtime port from ink-c
This commit is contained in:
parent
619eb3b338
commit
849908f251
5 changed files with 833 additions and 35 deletions
37
src/root.zig
37
src/root.zig
|
|
@ -1,40 +1,9 @@
|
|||
const std = @import("std");
|
||||
const tokenizer = @import("tokenizer.zig");
|
||||
pub const Story = @import("Story.zig");
|
||||
pub const Ast = @import("Ast.zig");
|
||||
|
||||
pub const Story = struct {
|
||||
pub const LoadOptions = struct {
|
||||
dump_writer: *std.Io.Writer,
|
||||
dump_use_color: bool = true,
|
||||
};
|
||||
|
||||
pub fn loadFromString(
|
||||
gpa: std.mem.Allocator,
|
||||
source_bytes: [:0]const u8,
|
||||
options: LoadOptions,
|
||||
) !Story {
|
||||
var arena_allocator = std.heap.ArenaAllocator.init(gpa);
|
||||
defer arena_allocator.deinit();
|
||||
|
||||
const arena = arena_allocator.allocator();
|
||||
var ast = try Ast.parse(gpa, arena, source_bytes, "<STDIN>", 0);
|
||||
defer ast.deinit(gpa);
|
||||
|
||||
try ast.render(gpa, options.dump_writer, .{
|
||||
.use_color = options.dump_use_color,
|
||||
});
|
||||
if (ast.errors.len > 0) {
|
||||
try ast.renderErrors(gpa, options.dump_writer, .{
|
||||
.use_color = options.dump_use_color,
|
||||
});
|
||||
return error.Invalid;
|
||||
}
|
||||
return .{};
|
||||
}
|
||||
|
||||
pub fn deinit(_: *Story) void {}
|
||||
};
|
||||
|
||||
test {
|
||||
_ = tokenizer;
|
||||
_ = Ast;
|
||||
_ = Story;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue