authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-20 22:48:40+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-20 22:48:40+02:00
log40f607d195440fe62e819592deb6746cd2695753
treecb467cc330f5d3630a860608c9ff08761cdc3e02
parent949f2369c1a8958e0cd054978f8045de9693eb72
signature Commit is signed but in an unrecognized format.

translate-c-2 fix macro regression


2 files changed, 22 insertions(+), 12 deletions(-)

src-self-hosted/c_tokenizer.zig+2-2
......@@ -594,7 +594,7 @@ fn next(chars: [*:0]const u8, i: *usize) !CToken {
594594 switch (c) {
595595 'l', 'L' => {
596596 result.num_lit_suffix = .LLU;
597 return result;
597 state = .Done;
598598 },
599599 else => {
600600 return result;
......@@ -718,7 +718,7 @@ test "tokenize macro" {
718718 expect(it.next() == null);
719719 tl.shrink(0);
720720
721 const src5 = "FOO 0l";
721 const src5 = "FOO 0ull";
722722 try tokenizeCMacro(&tl, src5);
723723 it = tl.iterator(0);
724724 expect(it.next().?.id == .Identifier);
src-self-hosted/translate_c.zig+20-10
......@@ -407,8 +407,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
407407 while (it.next()) |p| {
408408 const param = @fieldParentPtr(ast.Node.ParamDecl, "base", p.*);
409409 const param_name = tokenSlice(c, param.name_token orelse
410 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name})
411 );
410 return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name}));
412411
413412 const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {
414413 try block_scope.variables.push(.{ .name = param_name, .alias = a });
......@@ -4109,6 +4108,15 @@ fn transMacroDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u8,
41094108 node.eq_token = try appendToken(c, .Equal, "=");
41104109
41114110 node.init_node = try parseCExpr(rp, it, source_loc, scope);
4111 const last = it.next().?;
4112 if (last.id != .Eof)
4113 return revertAndWarn(
4114 rp,
4115 error.UnsupportedTranslation,
4116 source_loc,
4117 "unable to translate C expr, unexpected token: {}",
4118 .{last.id},
4119 );
41124120
41134121 node.semicolon_token = try appendToken(c, .Semicolon, ";");
41144122 _ = try c.global_scope.macro_table.put(name, &node.base);
......@@ -4196,6 +4204,15 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u
41964204
41974205 const return_expr = try transCreateNodeReturnExpr(c);
41984206 const expr = try parseCExpr(rp, it, source_loc, scope);
4207 const last = it.next().?;
4208 if (last.id != .Eof)
4209 return revertAndWarn(
4210 rp,
4211 error.UnsupportedTranslation,
4212 source_loc,
4213 "unable to translate C expr, unexpected token: {}",
4214 .{last.id},
4215 );
41994216 _ = try appendToken(c, .Semicolon, ";");
42004217 try type_of.params.push(expr);
42014218 return_expr.rhs = expr;
......@@ -4475,17 +4492,10 @@ fn parseCSuffixOpExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc
44754492 call_node.rtoken = try appendToken(rp.c, .RParen, ")");
44764493 node = &call_node.base;
44774494 },
4478 .Eof => {
4495 else => {
44794496 _ = it.prev();
44804497 return node;
44814498 },
4482 else => return revertAndWarn(
4483 rp,
4484 error.UnsupportedTranslation,
4485 source_loc,
4486 "unable to translate C expr, unexpected token: {}",
4487 .{tok.id},
4488 ),
44894499 }
44904500 }
44914501}