summaryrefslogtreecommitdiff
path: root/src/zisp/io/Parser.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/zisp/io/Parser.zig')
-rw-r--r--src/zisp/io/Parser.zig80
1 files changed, 13 insertions, 67 deletions
diff --git a/src/zisp/io/Parser.zig b/src/zisp/io/Parser.zig
index 9833baa..aeca539 100644
--- a/src/zisp/io/Parser.zig
+++ b/src/zisp/io/Parser.zig
@@ -115,30 +115,7 @@ pub const Context = struct {
char: u8 = undefined,
};
-pub const Alloc = struct {
- stack: std.mem.Allocator,
- chars: std.mem.Allocator,
-};
-
-pub fn StackFallbackAlloc(ctx_stack_cap: usize, str_chars_cap: usize) type {
- return struct {
- pub const ctx_stack_bytes = ctx_stack_cap * @sizeOf(Context);
- pub const str_chars_bytes = str_chars_cap;
-
- stack: std.heap.StackFallbackAllocator(ctx_stack_bytes),
- chars: std.heap.StackFallbackAllocator(str_chars_bytes),
-
- pub fn alloc(self: *@This()) Alloc {
- return .{ .stack = self.stack.get(), .chars = self.chars.get() };
- }
- };
-}
-
-const def_ctx_stack_cap = 32;
-const def_str_chars_cap = 2048;
-const DefaultSfa = StackFallbackAlloc(def_ctx_stack_cap, def_str_chars_cap);
-
-alloc: Alloc,
+alloc: std.mem.Allocator,
io: std.Io,
input: *std.Io.Reader = undefined,
context: Context = .{},
@@ -149,56 +126,25 @@ result: Value = undefined,
unread_char: ?u8 = null,
err_msg: []const u8 = undefined,
-pub fn init(alloc: std.mem.Allocator, io: std.Io) !struct {
- Parser,
- DefaultSfa,
-} {
- return initWithSfa(def_ctx_stack_cap, def_str_chars_cap, alloc, io);
-}
-
-pub fn initWithSfa(
- comptime init_ctx_stack_cap: usize,
- comptime init_str_chars_cap: usize,
- alloc: std.mem.Allocator,
- io: std.Io,
-) !struct {
- Parser,
- StackFallbackAlloc(init_ctx_stack_cap, init_str_chars_cap),
-} {
- const Sfa = StackFallbackAlloc(init_ctx_stack_cap, init_str_chars_cap);
- var sfa: Sfa = .{
- .stack = std.heap.stackFallback(Sfa.ctx_stack_bytes, alloc),
- .chars = std.heap.stackFallback(Sfa.str_chars_bytes, alloc),
- };
- const parser: Parser = try initCustom(
- sfa.alloc(),
- io,
- init_ctx_stack_cap,
- init_str_chars_cap,
- );
- return .{ parser, sfa };
+pub fn init(alloc: std.mem.Allocator, io: std.Io) !Parser {
+ return initCustom(alloc, io, 32, 2048);
}
pub fn initCustom(
- alloc: Alloc,
+ alloc: std.mem.Allocator,
io: std.Io,
init_ctx_stack_cap: usize,
init_str_chars_cap: usize,
) !Parser {
var p: Parser = .{ .alloc = alloc, .io = io };
- p.stack = try .initCapacity(alloc.stack, init_ctx_stack_cap);
- p.chars = try .initCapacity(alloc.chars, init_str_chars_cap);
+ p.stack = try .initCapacity(alloc, init_ctx_stack_cap);
+ p.chars = try .initCapacity(alloc, init_str_chars_cap);
return p;
}
-pub fn deinit(p: *Parser, sfa: anytype) void {
- p.deinitCustom();
- _ = sfa;
-}
-
-pub fn deinitCustom(p: *Parser) void {
- p.stack.deinit(p.alloc.stack);
- p.chars.deinit(p.alloc.chars);
+pub fn deinit(p: *Parser) void {
+ p.stack.deinit(p.alloc);
+ p.chars.deinit(p.alloc);
}
//
@@ -241,7 +187,7 @@ fn getUnread(p: *Parser) ?u8 {
//
fn addChar(p: *Parser, c: u8) !void {
- try p.chars.append(p.alloc.chars, c);
+ try p.chars.append(p.alloc, c);
}
fn getCharsAsString(p: *Parser) Value {
@@ -342,11 +288,11 @@ fn err(
}
fn push(p: *Parser, next: Fn) !void {
- try p.stack.append(p.alloc.stack, .{ .next = next });
+ try p.stack.append(p.alloc, .{ .next = next });
}
fn pushContext(p: *Parser, next: Fn) !void {
- try p.stack.append(p.alloc.stack, .{
+ try p.stack.append(p.alloc, .{
.next = next,
.val = p.context.val,
.char = p.context.char,
@@ -568,7 +514,7 @@ fn parseStringUniHexEsc(p: *Parser) !void {
const n = std.unicode.utf8CodepointSequenceLength(uc) catch {
return p.err(.UnicodeLengthError, msg);
};
- const buf = try p.chars.addManyAsSlice(p.alloc.chars, n);
+ const buf = try p.chars.addManyAsSlice(p.alloc, n);
const n2 = std.unicode.utf8Encode(uc, buf) catch {
return p.err(.UnicodeEncodeError, msg);
};