authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-29 18:37:00+02:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2019-12-29 19:23:36+02:00
log55348c9b934ee87950e828e253b86e8b4b8622c2
tree5d5e8cf5eeb2e37c7c4f0f6061ae9f1c75b4c8e6
parent621629e20d7114d09761b49d8fb2bba203aadd1a
signature Commit is signed but in an unrecognized format.

translate-c-2 bug fixes

- fix use of undefined value - fix parenexprclass result not being suppressed - add an error and a TODO for access of an anonymous field

2 files changed, 7 insertions(+), 4 deletions(-)

src-self-hosted/stage1.zig+1-1
...@@ -95,7 +95,7 @@ export fn stage2_translate_c(...@@ -95,7 +95,7 @@ export fn stage2_translate_c(
95 args_end: [*]?[*]const u8,95 args_end: [*]?[*]const u8,
96 resources_path: [*:0]const u8,96 resources_path: [*:0]const u8,
97) Error {97) Error {
98 var errors: []translate_c.ClangErrMsg = undefined;98 var errors = @as([*]translate_c.ClangErrMsg, undefined)[0..0];
99 out_ast.* = translate_c.translate(std.heap.c_allocator, args_begin, args_end, &errors, resources_path) catch |err| switch (err) {99 out_ast.* = translate_c.translate(std.heap.c_allocator, args_begin, args_end, &errors, resources_path) catch |err| switch (err) {
100 error.SemanticAnalyzeFail => {100 error.SemanticAnalyzeFail => {
101 out_errors_ptr.* = errors.ptr;101 out_errors_ptr.* = errors.ptr;
src-self-hosted/translate_c.zig+6-3
...@@ -853,15 +853,15 @@ fn transStmt(...@@ -853,15 +853,15 @@ fn transStmt(
853 .ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const ZigClangReturnStmt, stmt)),853 .ReturnStmtClass => return transReturnStmt(rp, scope, @ptrCast(*const ZigClangReturnStmt, stmt)),
854 .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const ZigClangStringLiteral, stmt), result_used),854 .StringLiteralClass => return transStringLiteral(rp, scope, @ptrCast(*const ZigClangStringLiteral, stmt), result_used),
855 .ParenExprClass => {855 .ParenExprClass => {
856 const expr = try transExpr(rp, scope, ZigClangParenExpr_getSubExpr(@ptrCast(*const ZigClangParenExpr, stmt)), result_used, lrvalue);856 const expr = try transExpr(rp, scope, ZigClangParenExpr_getSubExpr(@ptrCast(*const ZigClangParenExpr, stmt)), .used, lrvalue);
857 if (expr.id == .GroupedExpression) return expr;857 if (expr.id == .GroupedExpression) return maybeSuppressResult(rp, scope, result_used, expr);
858 const node = try rp.c.a().create(ast.Node.GroupedExpression);858 const node = try rp.c.a().create(ast.Node.GroupedExpression);
859 node.* = .{859 node.* = .{
860 .lparen = try appendToken(rp.c, .LParen, "("),860 .lparen = try appendToken(rp.c, .LParen, "("),
861 .expr = expr,861 .expr = expr,
862 .rparen = try appendToken(rp.c, .RParen, ")"),862 .rparen = try appendToken(rp.c, .RParen, ")"),
863 };863 };
864 return &node.base;864 return maybeSuppressResult(rp, scope, result_used, &node.base);
865 },865 },
866 .InitListExprClass => return transInitListExpr(rp, scope, @ptrCast(*const ZigClangInitListExpr, stmt), result_used),866 .InitListExprClass => return transInitListExpr(rp, scope, @ptrCast(*const ZigClangInitListExpr, stmt), result_used),
867 .ImplicitValueInitExprClass => return transImplicitValueInitExpr(rp, scope, @ptrCast(*const ZigClangExpr, stmt), result_used),867 .ImplicitValueInitExprClass => return transImplicitValueInitExpr(rp, scope, @ptrCast(*const ZigClangExpr, stmt), result_used),
...@@ -2098,6 +2098,9 @@ fn transMemberExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangMemberE...@@ -2098,6 +2098,9 @@ fn transMemberExpr(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangMemberE
2098 }2098 }
20992099
2100 const name = try rp.c.str(ZigClangDecl_getName_bytes_begin(@ptrCast(*const ZigClangDecl, ZigClangMemberExpr_getMemberDecl(stmt))));2100 const name = try rp.c.str(ZigClangDecl_getName_bytes_begin(@ptrCast(*const ZigClangDecl, ZigClangMemberExpr_getMemberDecl(stmt))));
2101 if (name.len == 0) {
2102 return revertAndWarn(rp, error.UnsupportedTranslation, ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt)), "TODO access of anonymous field", .{});
2103 }
2101 const node = try transCreateNodeFieldAccess(rp.c, container_node, name);2104 const node = try transCreateNodeFieldAccess(rp.c, container_node, name);
2102 return maybeSuppressResult(rp, scope, result_used, node);2105 return maybeSuppressResult(rp, scope, result_used, node);
2103}2106}