authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-20 20:22:22+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-20 20:22:22+02:00
log949f2369c1a8958e0cd054978f8045de9693eb72
treea31a802c8c5cd8d97cd68f941c15a71f6b95777b
parent9437d99ae25c635239cdb113457053862b3339f8
signature Commit is signed but in an unrecognized format.

translate-c-2 fix bugs found translating SDL


1 files changed, 13 insertions(+), 4 deletions(-)

src-self-hosted/translate_c.zig+13-4
......@@ -406,7 +406,9 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
406406 var it = proto_node.params.iterator(0);
407407 while (it.next()) |p| {
408408 const param = @fieldParentPtr(ast.Node.ParamDecl, "base", p.*);
409 const param_name = tokenSlice(c, param.name_token.?);
409 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 );
410412
411413 const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {
412414 try block_scope.variables.push(.{ .name = param_name, .alias = a });
......@@ -4387,8 +4389,8 @@ fn parseCPrimaryExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc:
43874389 rp,
43884390 error.UnsupportedTranslation,
43894391 source_loc,
4390 "unable to translate C expr",
4391 .{},
4392 "unable to translate C expr, unexpected token: {}",
4393 .{tok.id},
43924394 ),
43934395 }
43944396}
......@@ -4473,10 +4475,17 @@ fn parseCSuffixOpExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc
44734475 call_node.rtoken = try appendToken(rp.c, .RParen, ")");
44744476 node = &call_node.base;
44754477 },
4476 else => {
4478 .Eof => {
44774479 _ = it.prev();
44784480 return node;
44794481 },
4482 else => return revertAndWarn(
4483 rp,
4484 error.UnsupportedTranslation,
4485 source_loc,
4486 "unable to translate C expr, unexpected token: {}",
4487 .{tok.id},
4488 ),
44804489 }
44814490 }
44824491}