From 629a9bea9665f0ab7041e589a08d7a9ad133b9c7 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Fri, 28 Feb 2025 14:19:30 -0600 Subject: [PATCH] Implement comments --- src/converter.zig | 31 +++++++++++++++++++++++++++---- src/converter_test.zig | 4 ++++ tests/comments.bbb | 7 +++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 tests/comments.bbb diff --git a/src/converter.zig b/src/converter.zig index dad404f..79f4cfe 100644 --- a/src/converter.zig +++ b/src/converter.zig @@ -651,10 +651,33 @@ const Converter = struct { } fn skip_space(noalias converter: *Converter) void { - while (converter.offset < converter.content.len and is_space(converter.content[converter.offset])) { - converter.line_offset += @intFromBool(converter.content[converter.offset] == '\n'); - converter.line_character_offset = if (converter.content[converter.offset] == '\n') converter.offset else converter.line_character_offset; - converter.offset += 1; + while (true) { + const offset = converter.offset; + while (converter.offset < converter.content.len and is_space(converter.content[converter.offset])) { + converter.line_offset += @intFromBool(converter.content[converter.offset] == '\n'); + converter.line_character_offset = if (converter.content[converter.offset] == '\n') converter.offset else converter.line_character_offset; + converter.offset += 1; + } + + if (converter.offset + 1 < converter.content.len) { + const i = converter.offset; + const is_comment = converter.content[i] == '/' and converter.content[i + 1] == '/'; + if (is_comment) { + while (converter.offset < converter.content.len and converter.content[converter.offset] != '\n') { + converter.offset += 1; + } + + if (converter.offset < converter.content.len) { + converter.line_offset += 1; + converter.line_character_offset = converter.offset; + converter.offset += 1; + } + } + } + + if (converter.offset - offset == 0) { + break; + } } } diff --git a/src/converter_test.zig b/src/converter_test.zig index 67773ca..181e477 100644 --- a/src/converter_test.zig +++ b/src/converter_test.zig @@ -185,3 +185,7 @@ test "pointer" { test "if_no_else" { try invsrc(@src()); } + +test "comments" { + try invsrc(@src()); +} diff --git a/tests/comments.bbb b/tests/comments.bbb new file mode 100644 index 0000000..e69fc6e --- /dev/null +++ b/tests/comments.bbb @@ -0,0 +1,7 @@ +[export] main = fn [cc(c)] () s32 // This is a comment +// This is a comment +{ // This is a comment + // This is a comment + return 0; // This is a comment +}// This is a comment +// This is a comment