From 1f49460dcb532a146022ef5e9f037477b4c13314 Mon Sep 17 00:00:00 2001 From: Vexu Date: Wed, 5 Feb 2020 08:35:30 +0200 Subject: [PATCH] fix regressions in comments and string prefixes --- lib/std/c/tokenizer.zig | 1 - src-self-hosted/translate_c.zig | 9 ++++++++- test/translate_c.zig | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/std/c/tokenizer.zig b/lib/std/c/tokenizer.zig index 2f0f721ebc..c3216f9ad9 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 d428c50fc6..663793dbe9 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 3e1844e227..4a9478be8e 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) { \\ ;;;;;