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 {...@@ -776,12 +776,14 @@ pub const Tokenizer = struct {
776 }776 }
777 },777 },
778 else => {778 else => {
779 self.index -= 1;
779 state = if (string) .StringLiteral else .CharLiteral;780 state = if (string) .StringLiteral else .CharLiteral;
780 },781 },
781 },782 },
782 .HexEscape => switch (c) {783 .HexEscape => switch (c) {
783 '0'...'9', 'a'...'f', 'A'...'F' => {},784 '0'...'9', 'a'...'f', 'A'...'F' => {},
784 else => {785 else => {
786 self.index -= 1;
785 state = if (string) .StringLiteral else .CharLiteral;787 state = if (string) .StringLiteral else .CharLiteral;
786 },788 },
787 },789 },
...@@ -797,6 +799,7 @@ pub const Tokenizer = struct {...@@ -797,6 +799,7 @@ pub const Tokenizer = struct {
797 result.id = .Invalid;799 result.id = .Invalid;
798 break;800 break;
799 }801 }
802 self.index -= 1;
800 state = if (string) .StringLiteral else .CharLiteral;803 state = if (string) .StringLiteral else .CharLiteral;
801 },804 },
802 },805 },
...@@ -1217,6 +1220,7 @@ pub const Tokenizer = struct {...@@ -1217,6 +1220,7 @@ pub const Tokenizer = struct {
1217 result.id = .Invalid;1220 result.id = .Invalid;
1218 break;1221 break;
1219 }1222 }
1223 self.index -= 1;
1220 state = .FloatSuffix;1224 state = .FloatSuffix;
1221 },1225 },
1222 },1226 },
src-self-hosted/translate_c.zig+14-8
...@@ -4830,7 +4830,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {...@@ -4830,7 +4830,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {
4830 const macro = @ptrCast(*ZigClangMacroDefinitionRecord, entity);4830 const macro = @ptrCast(*ZigClangMacroDefinitionRecord, entity);
4831 const raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);4831 const raw_name = ZigClangMacroDefinitionRecord_getName_getNameStart(macro);
4832 const begin_loc = ZigClangMacroDefinitionRecord_getSourceRange_getBegin(macro);4832 const begin_loc = ZigClangMacroDefinitionRecord_getSourceRange_getBegin(macro);
4833 // const end_loc = ZigClangMacroDefinitionRecord_getSourceRange_getEnd(macro);
48344833
4835 const name = try c.str(raw_name);4834 const name = try c.str(raw_name);
4836 // TODO https://github.com/ziglang/zig/issues/37564835 // TODO https://github.com/ziglang/zig/issues/3756
...@@ -4841,8 +4840,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {...@@ -4841,8 +4840,6 @@ fn transPreprocessorEntities(c: *Context, unit: *ZigClangASTUnit) Error!void {
4841 }4840 }
48424841
4843 const begin_c = ZigClangSourceManager_getCharacterData(c.source_manager, begin_loc);4842 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)];
4846 const slice = begin_c[0..mem.len(u8, begin_c)];4843 const slice = begin_c[0..mem.len(u8, begin_c)];
48474844
4848 tok_list.shrink(0);4845 tok_list.shrink(0);
...@@ -5023,7 +5020,7 @@ fn transMacroFnDefine(c: *Context, it: *CTokenList.Iterator, source: []const u8,...@@ -5023,7 +5020,7 @@ fn transMacroFnDefine(c: *Context, it: *CTokenList.Iterator, source: []const u8,
5023 const return_expr = try transCreateNodeReturnExpr(c);5020 const return_expr = try transCreateNodeReturnExpr(c);
5024 const expr = try parseCExpr(c, it, source, source_loc, scope);5021 const expr = try parseCExpr(c, it, source, source_loc, scope);
5025 const last = it.next().?;5022 const last = it.next().?;
5026 if (last.id != .Eof)5023 if (last.id != .Eof and last.id != .Nl)
5027 return failDecl(5024 return failDecl(
5028 c,5025 c,
5029 source_loc,5026 source_loc,
...@@ -5122,7 +5119,7 @@ fn parseCNumLit(c: *Context, tok: *CToken, source: []const u8, source_loc: ZigCl...@@ -5122,7 +5119,7 @@ fn parseCNumLit(c: *Context, tok: *CToken, source: []const u8, source_loc: ZigCl
5122 const cast_node = try transCreateNodeBuiltinFnCall(c, "@as");5119 const cast_node = try transCreateNodeBuiltinFnCall(c, "@as");
5123 try cast_node.params.push(try transCreateNodeIdentifier(c, switch (tok.id.FloatLiteral) {5120 try cast_node.params.push(try transCreateNodeIdentifier(c, switch (tok.id.FloatLiteral) {
5124 .F => "f32",5121 .F => "f32",
5125 .L => "f64",5122 .L => "c_longdouble",
5126 else => unreachable,5123 else => unreachable,
5127 }));5124 }));
5128 _ = try appendToken(c, .Comma, ",");5125 _ = try appendToken(c, .Comma, ",");
...@@ -5309,6 +5306,15 @@ fn parseCPrimaryExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,...@@ -5309,6 +5306,15 @@ fn parseCPrimaryExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,
5309 .IntegerLiteral, .FloatLiteral => {5306 .IntegerLiteral, .FloatLiteral => {
5310 return parseCNumLit(c, tok, source, source_loc);5307 return parseCNumLit(c, tok, source, source_loc);
5311 },5308 },
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,
5312 .Identifier => {5318 .Identifier => {
5313 const mangled_name = scope.getAlias(source[tok.start..tok.end]);5319 const mangled_name = scope.getAlias(source[tok.start..tok.end]);
5314 return transCreateNodeIdentifier(c, mangled_name);5320 return transCreateNodeIdentifier(c, mangled_name);
...@@ -5631,12 +5637,12 @@ fn parseCSuffixOpExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,...@@ -5631,12 +5637,12 @@ fn parseCSuffixOpExpr(c: *Context, it: *CTokenList.Iterator, source: []const u8,
5631 };5637 };
5632 node = &and_node.base;5638 node = &and_node.base;
5633 },5639 },
5634 .LBrace => {5640 .LBracket => {
5635 const arr_node = try transCreateNodeArrayAccess(c, node);5641 const arr_node = try transCreateNodeArrayAccess(c, node);
5636 arr_node.op.ArrayAccess = try parseCPrefixOpExpr(c, it, source, source_loc, scope);5642 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, "]");
5638 node = &arr_node.base;5644 node = &arr_node.base;
5639 if (it.next().?.id != .RBrace) {5645 if (it.next().?.id != .RBracket) {
5640 const first_tok = it.list.at(0);5646 const first_tok = it.list.at(0);
5641 try failDecl(5647 try failDecl(
5642 c,5648 c,
test/translate_c.zig+8
...@@ -618,6 +618,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {...@@ -618,6 +618,14 @@ pub fn addCases(cases: *tests.TranslateCContext) void {
618 },618 },
619 );619 );
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
621 cases.add("null statements",629 cases.add("null statements",
622 \\void foo(void) {630 \\void foo(void) {
623 \\ ;;;;;631 \\ ;;;;;