diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2020-05-23 17:58:35 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2020-05-23 17:58:35 -0400 |
| commit | 88f5e3a60d6ea528f27935c63aaf3312d736cdbe (patch) | |
| tree | aba89a600b258e0869afda1877929cf15d87ccb3 | |
| parent | f67b8c68a0e8ddc60bcfc928d0781005d129526a (diff) | |
| download | zig-88f5e3a60d6ea528f27935c63aaf3312d736cdbe.tar.gz zig-88f5e3a60d6ea528f27935c63aaf3312d736cdbe.zip | |
translate-c: fix regression in switch statement
| -rw-r--r-- | src-self-hosted/translate_c.zig | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig index d80449d87a..a4e16c83ff 100644 --- a/src-self-hosted/translate_c.zig +++ b/src-self-hosted/translate_c.zig @@ -2554,9 +2554,8 @@ fn transForLoop( fn getSwitchCaseCount(stmt: *const ZigClangSwitchStmt) usize { const body = ZigClangSwitchStmt_getBody(stmt); - assert(ZigClangStmt_getStmtClass(body) == .StmtExprClass); - const stmt_expr = @ptrCast(*const ZigClangStmtExpr, body); - const comp = ZigClangStmtExpr_getSubStmt(stmt_expr); + assert(ZigClangStmt_getStmtClass(body) == .CompoundStmtClass); + const comp = @ptrCast(*const ZigClangCompoundStmt, body); // TODO https://github.com/ziglang/zig/issues/1738 // return ZigClangCompoundStmt_body_end(comp) - ZigClangCompoundStmt_body_begin(comp); const start_addr = @ptrToInt(ZigClangCompoundStmt_body_begin(comp)); @@ -2614,19 +2613,17 @@ fn transSwitch( switch_scope.pending_block = try Scope.Block.init(rp.c, scope, null); try switch_scope.pending_block.statements.append(&switch_node.base); - _ = try transStmt(rp, &block_scope.base, ZigClangSwitchStmt_getBody(stmt), .unused, .r_value); + const last = try transStmt(rp, &block_scope.base, ZigClangSwitchStmt_getBody(stmt), .unused, .r_value); _ = try appendToken(rp.c, .Semicolon, ";"); // take all pending statements - try switch_scope.pending_block.statements.appendSlice(block_scope.statements.items); - // TODO delete the following commented out code - //const last_block_stmts = last.cast(ast.Node.Block).?.statements(); - //switch_scope.pending_block.statements.ensureCapacity( - // switch_scope.pending_block.statements.items.len + last_block_stmts.len, - //); - //for (last_block_stmts) |n| { - // switch_scope.pending_block.statements.appendAssumeCapacity(n); - //} + const last_block_stmts = last.cast(ast.Node.Block).?.statements(); + try switch_scope.pending_block.statements.ensureCapacity( + switch_scope.pending_block.statements.items.len + last_block_stmts.len, + ); + for (last_block_stmts) |n| { + switch_scope.pending_block.statements.appendAssumeCapacity(n); + } switch_scope.pending_block.label = try appendIdentifier(rp.c, "__switch"); _ = try appendToken(rp.c, .Colon, ":"); |
