From 166e9a5b8ed257c684b980f943cf112a69d0d3c0 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Wed, 17 Apr 2024 08:29:42 -0600 Subject: [PATCH] lexer: count lines --- bootstrap/Compilation.zig | 13 +++++++++++-- bootstrap/frontend/lexer.zig | 2 +- src/main.nat | 11 ++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/bootstrap/Compilation.zig b/bootstrap/Compilation.zig index ffe4d64..061b8ac 100644 --- a/bootstrap/Compilation.zig +++ b/bootstrap/Compilation.zig @@ -4932,6 +4932,7 @@ pub const Builder = struct { unreachable; } }, + .bool => return .zero_extend, else => |t| @panic(@tagName(t)), }, .pointer => { @@ -11303,8 +11304,16 @@ pub const Builder = struct { }, .character_literal => blk: { const ch_literal = unit.getExpectedTokenBytes(node.token, .character_literal); - assert(ch_literal.len == 3); - const character = ch_literal[1]; + const character = switch (ch_literal.len) { + 3 => ch_literal[1], + // This has a escape character + 4 => switch (ch_literal[2]) { + 'n' => '\n', + else => unreachable, + }, + else => unreachable, + }; + break :blk .{ .value = .{ .@"comptime" = .{ diff --git a/bootstrap/frontend/lexer.zig b/bootstrap/frontend/lexer.zig index 66870bd..2ee575e 100644 --- a/bootstrap/frontend/lexer.zig +++ b/bootstrap/frontend/lexer.zig @@ -132,7 +132,7 @@ pub fn analyze(allocator: *MyAllocator, text: []const u8, token_buffer: *Token.B }, '\'' => blk: { index += 1; - index += @intFromBool(text[index] == '\''); + index += @intFromBool(text[index] == '\\'); index += 1; const is_end_char_literal = text[index] == '\''; index += @intFromBool(is_end_char_literal); diff --git a/src/main.nat b/src/main.nat index 77618a7..2a6c909 100644 --- a/src/main.nat +++ b/src/main.nat @@ -9,8 +9,15 @@ const ArgumentProcessingError = error{ no_arguments, }; -const lex = fn () void { +const lex = fn (arena: &Arena, bytes: []const u8) void { + var line_count: u32 = 0; + for (bytes) |b| { + line_count += #cast(b == '\n'); + } + print("Line count: "); + std.print_usize(line_count); + print("\n"); } const get_argument = fn (real_argument: []const u8, wanted_argument: []const u8, command_arguments: []const [&:0]const u8, i_ptr: &usize) ?[]const u8 { @@ -80,6 +87,8 @@ const command_exe = fn (arena: &Arena, command_arguments: []const [&:0]const u8) file_descriptor.read_all(file_buffer); print("File:\n"); print(file_buffer); + + lex(arena, file_buffer); } const main = fn() *!void {