diff --git a/lib/std/c/tokenizer.zig b/lib/std/c/tokenizer.zig index 2f0f721ebc54edba011d7af4d219169fa1714d3e..c3216f9ad9c5496ef7916ad0c4332ddc30f4a8a1 100644 --- a/lib/std/c/tokenizer.zig +++ b/lib/std/c/tokenizer.zig @@ -1049,7 +1049,6 @@ pub const Tokenizer = struct { .LineComment => switch (c) { '\n' => { result.id = .LineComment; - self.index += 1; break; }, else => {}, diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index d428c50fc660c036ce2dc6a8b1d71677c69e9ab0..663793dbe9f102357b8d24ee4d4f46fc310aa084 100644 --- a/src-self-hosted/translate_c.zig +++ b/src-self-hosted/translate_c.zig @@ -5129,7 +5129,14 @@ fn parseCNumLit(c: *Context, tok: *CToken, source: []const u8, source_loc: ZigCl } else unreachable; } -fn zigifyEscapeSequences(ctx: *Context, source: []const u8, name: []const u8, source_loc: ZigClangSourceLocation) ![]const u8 { +fn zigifyEscapeSequences(ctx: *Context, source_bytes: []const u8, name: []const u8, source_loc: ZigClangSourceLocation) ![]const u8 { + var source = source_bytes; + for (source) |c, i| { + if (c == '\"' or c == '\'') { + source = source[i..]; + break; + } + } for (source) |c| { if (c == '\\') { break; diff --git a/test/translate_c.zig b/test/translate_c.zig index 3e1844e227774d7de592e694c9e5ea9b43835cca..4a9478be8e44d184adb85902e32130cfee579434 100644 --- a/test/translate_c.zig +++ b/test/translate_c.zig @@ -626,6 +626,20 @@ pub fn addCases(cases: *tests.TranslateCContext) void { "pub const bar = @as(c_longdouble, 16.e-2);", }); + cases.add("comments", + \\#define foo 1 //foo + \\#define bar /* bar */ 2 + , &[_][]const u8{ + "pub const foo = 1;", + "pub const bar = 2;", + }); + + cases.add("string prefix", + \\#define foo L"hello" + , &[_][]const u8{ + "pub const foo = \"hello\";", + }); + cases.add("null statements", \\void foo(void) { \\ ;;;;;