authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-02-02 10:49:51+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2020-02-02 10:49:51+02:00
log35c40f0a700636b0ac09bb9282d2c7c5b905c21b
tree390a6d11f69b1f6a2c80dfd8906e2daea0c69fdd
parent3b23929be565a66a94441d107448860079c2847d
signaturelock-open Commit is signed but in an unrecognized format.

fix regressions


3 files changed, 26 insertions(+), 8 deletions(-)

lib/std/c/tokenizer.zig+4
......@@ -776,12 +776,14 @@ pub const Tokenizer = struct {
776776 }
777777 },
778778 else => {
779 self.index -= 1;
779780 state = if (string) .StringLiteral else .CharLiteral;
780781 },
781782 },
782783 .HexEscape => switch (c) {
783784 '0'...'9', 'a'...'f', 'A'...'F' => {},
784785 else => {
786 self.index -= 1;
785787 state = if (string) .StringLiteral else .CharLiteral;
786788 },
787789 },
......@@ -797,6 +799,7 @@ pub const Tokenizer = struct {
797799 result.id = .Invalid;
798800 break;
799801 }
802 self.index -= 1;
800803 state = if (string) .StringLiteral else .CharLiteral;
801804 },
802805 },
......@@ -1217,6 +1220,7 @@ pub const Tokenizer = struct {
12171220 result.id = .Invalid;
12181221 break;
12191222 }
1223 self.index -= 1;
12201224 state = .FloatSuffix;
12211225 },
12221226 },
src-self-hosted/translate_c.zig+14-8
......@@ -4830,7 +4830,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {
48304830 const macro = @ptrCast(*ZigClangMacroDefinitionRecord, entity);
48314831 const raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);
48324832 const begin_loc = ZigClangMacroDefinitionRecord_getSourceRange_getBegin(macro);
4833 // const end_loc = ZigClangMacroDefinitionRecord_getSourceRange_getEnd(macro);
48344833
48354834 const name = try c.str(raw_name);
48364835 // TODO https://github.com/ziglang/zig/issues/3756
......@@ -4841,8 +4840,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {
48414840 }
48424841
48434842 const begin_c = ZigClangSourceManager_getCharacterData(c.source_manager, begin_loc);
4844 // const end_c = ZigClangSourceManager_getCharacterData(c.source_manager, end_loc);
4845 // const slice = begin_c[0 .. @ptrToInt(end_c) - @ptrToInt(begin_c)];
48464843 const slice = begin_c[0..mem.len(u8, begin_c)];
48474844
48484845 tok_list.shrink(0);
......@@ -5023,7 +5020,7 @@ fn transMacroFnDefine(c: *Context, it: *CTokenList.Iterator, source: []const u8,
50235020 const return_expr = try transCreateNodeReturnExpr(c);
50245021 const expr = try parseCExpr(c, it, source, source_loc, scope);
50255022 const last = it.next().?;
5026 if (last.id != .Eof)
5023 if (last.id != .Eof and last.id != .Nl)
50275024 return failDecl(
50285025 c,
50295026 source_loc,
......@@ -5122,7 +5119,7 @@ fn parseCNumLit(c: *Context, tok: *CToken, source: []const u8, source_loc: ZigCl
51225119 const cast_node = try transCreateNodeBuiltinFnCall(c, "@as");
51235120 try cast_node.params.push(try transCreateNodeIdentifier(c, switch (tok.id.FloatLiteral) {
51245121 .F => "f32",
5125 .L => "f64",
5122 .L => "c_longdouble",
51265123 else => unreachable,
51275124 }));
51285125 _ = try appendToken(c, .Comma, ",");
......@@ -5309,6 +5306,15 @@ fn parseCPrimaryExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,
53095306 .IntegerLiteral, .FloatLiteral => {
53105307 return parseCNumLit(c, tok, source, source_loc);
53115308 },
5309 // eventually this will be replaced by std.c.parse which will handle these correctly
5310 .Keyword_void,
5311 .Keyword_bool,
5312 .Keyword_double,
5313 .Keyword_long,
5314 .Keyword_int,
5315 .Keyword_float,
5316 .Keyword_short,
5317 .Keyword_char,
53125318 .Identifier => {
53135319 const mangled_name = scope.getAlias(source[tok.start..tok.end]);
53145320 return transCreateNodeIdentifier(c, mangled_name);
......@@ -5631,12 +5637,12 @@ fn parseCSuffixOpExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,
56315637 };
56325638 node = &and_node.base;
56335639 },
5634 .LBrace => {
5640 .LBracket => {
56355641 const arr_node = try transCreateNodeArrayAccess(c, node);
56365642 arr_node.op.ArrayAccess = try parseCPrefixOpExpr(c, it, source, source_loc, scope);
5637 arr_node.rtoken = try appendToken(c, .RBrace, "]");
5643 arr_node.rtoken = try appendToken(c, .RBracket, "]");
56385644 node = &arr_node.base;
5639 if (it.next().?.id != .RBrace) {
5645 if (it.next().?.id != .RBracket) {
56405646 const first_tok = it.list.at(0);
56415647 try failDecl(
56425648 c,
test/translate_c.zig+8
......@@ -618,6 +618,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
618618 },
619619 );
620620
621 cases.add("float suffixes",
622 \\#define foo 3.14f
623 \\#define bar 16.e-2l
624 , &[_][]const u8{
625 "pub const foo = @as(f32, 3.14);",
626 "pub const bar = @as(c_longdouble, 16.e-2);",
627 });
628
621629 cases.add("null statements",
622630 \\void foo(void) {
623631 \\ ;;;;;