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 {...@@ -406,7 +406,9 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
406 var it = proto_node.params.iterator(0);406 var it = proto_node.params.iterator(0);
407 while (it.next()) |p| {407 while (it.next()) |p| {
408 const param = @fieldParentPtr(ast.Node.ParamDecl, "base", p.*);408 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
411 const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {413 const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {
412 try block_scope.variables.push(.{ .name = param_name, .alias = a });414 try block_scope.variables.push(.{ .name = param_name, .alias = a });
...@@ -4387,8 +4389,8 @@ fn parseCPrimaryExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc:...@@ -4387,8 +4389,8 @@ fn parseCPrimaryExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc:
4387 rp,4389 rp,
4388 error.UnsupportedTranslation,4390 error.UnsupportedTranslation,
4389 source_loc,4391 source_loc,
4390 "unable to translate C expr",4392 "unable to translate C expr, unexpected token: {}",
4391 .{},4393 .{tok.id},
4392 ),4394 ),
4393 }4395 }
4394}4396}
...@@ -4473,10 +4475,17 @@ fn parseCSuffixOpExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc...@@ -4473,10 +4475,17 @@ fn parseCSuffixOpExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc
4473 call_node.rtoken = try appendToken(rp.c, .RParen, ")");4475 call_node.rtoken = try appendToken(rp.c, .RParen, ")");
4474 node = &call_node.base;4476 node = &call_node.base;
4475 },4477 },
4476 else => {4478 .Eof => {
4477 _ = it.prev();4479 _ = it.prev();
4478 return node;4480 return node;
4479 },4481 },
4482 else => return revertAndWarn(
4483 rp,
4484 error.UnsupportedTranslation,
4485 source_loc,
4486 "unable to translate C expr, unexpected token: {}",
4487 .{tok.id},
4488 ),
4480 }4489 }
4481 }4490 }
4482}4491}