authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-23 17:58:35-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-23 17:58:35-04:00
log88f5e3a60d6ea528f27935c63aaf3312d736cdbe
treeaba89a600b258e0869afda1877929cf15d87ccb3
parentf67b8c68a0e8ddc60bcfc928d0781005d129526a

translate-c: fix regression in switch statement


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

src-self-hosted/translate_c.zig+10-13
...@@ -2554,9 +2554,8 @@ fn transForLoop(...@@ -2554,9 +2554,8 @@ fn transForLoop(
25542554
2555fn getSwitchCaseCount(stmt: *const ZigClangSwitchStmt) usize {2555fn getSwitchCaseCount(stmt: *const ZigClangSwitchStmt) usize {
2556 const body = ZigClangSwitchStmt_getBody(stmt);2556 const body = ZigClangSwitchStmt_getBody(stmt);
2557 assert(ZigClangStmt_getStmtClass(body) == .StmtExprClass);2557 assert(ZigClangStmt_getStmtClass(body) == .CompoundStmtClass);
2558 const stmt_expr = @ptrCast(*const ZigClangStmtExpr, body);2558 const comp = @ptrCast(*const ZigClangCompoundStmt, body);
2559 const comp = ZigClangStmtExpr_getSubStmt(stmt_expr);
2560 // TODO https://github.com/ziglang/zig/issues/17382559 // TODO https://github.com/ziglang/zig/issues/1738
2561 // return ZigClangCompoundStmt_body_end(comp) - ZigClangCompoundStmt_body_begin(comp);2560 // return ZigClangCompoundStmt_body_end(comp) - ZigClangCompoundStmt_body_begin(comp);
2562 const start_addr = @ptrToInt(ZigClangCompoundStmt_body_begin(comp));2561 const start_addr = @ptrToInt(ZigClangCompoundStmt_body_begin(comp));
...@@ -2614,19 +2613,17 @@ fn transSwitch(...@@ -2614,19 +2613,17 @@ fn transSwitch(
2614 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, null);2613 switch_scope.pending_block = try Scope.Block.init(rp.c, scope, null);
2615 try switch_scope.pending_block.statements.append(&switch_node.base);2614 try switch_scope.pending_block.statements.append(&switch_node.base);
26162615
2617 _ = try transStmt(rp, &block_scope.base, ZigClangSwitchStmt_getBody(stmt), .unused, .r_value);2616 const last = try transStmt(rp, &block_scope.base, ZigClangSwitchStmt_getBody(stmt), .unused, .r_value);
2618 _ = try appendToken(rp.c, .Semicolon, ";");2617 _ = try appendToken(rp.c, .Semicolon, ";");
26192618
2620 // take all pending statements2619 // take all pending statements
2621 try switch_scope.pending_block.statements.appendSlice(block_scope.statements.items);2620 const last_block_stmts = last.cast(ast.Node.Block).?.statements();
2622 // TODO delete the following commented out code2621 try switch_scope.pending_block.statements.ensureCapacity(
2623 //const last_block_stmts = last.cast(ast.Node.Block).?.statements();2622 switch_scope.pending_block.statements.items.len + last_block_stmts.len,
2624 //switch_scope.pending_block.statements.ensureCapacity(2623 );
2625 // switch_scope.pending_block.statements.items.len + last_block_stmts.len,2624 for (last_block_stmts) |n| {
2626 //);2625 switch_scope.pending_block.statements.appendAssumeCapacity(n);
2627 //for (last_block_stmts) |n| {2626 }
2628 // switch_scope.pending_block.statements.appendAssumeCapacity(n);
2629 //}
26302627
2631 switch_scope.pending_block.label = try appendIdentifier(rp.c, "__switch");2628 switch_scope.pending_block.label = try appendIdentifier(rp.c, "__switch");
2632 _ = try appendToken(rp.c, .Colon, ":");2629 _ = try appendToken(rp.c, .Colon, ":");