@@ -2575,67 +2575,64 @@ fn blockExprStmts(gz: *GenZir, parent_scope: *Scope, statements: []const Ast.Nod
25752575 .normal => false,
25762576 .allow_branch_hint => stmt_idx == 0,
25772577 };
2578+
25782579 var inner_node = statement;
2579- while (true) {
2580- switch (tree.nodeTag(inner_node)) {
2581- // zig fmt: off
2582- .global_var_decl,
2583- .local_var_decl,
2584- .simple_var_decl,
2585- .aligned_var_decl, => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.fullVarDecl(statement).?),
2586-
2587- .assign_destructure => scope = try assignDestructureMaybeDecls(gz, scope, statement, block_arena_allocator),
2588-
2589- .@"defer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_normal),
2590- .@"errdefer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_error),
2591-
2592- .assign => try assign(gz, scope, statement),
2593-
2594- .assign_shl => try assignShift(gz, scope, statement, .shl),
2595- .assign_shr => try assignShift(gz, scope, statement, .shr),
2596-
2597- .assign_bit_and => try assignOp(gz, scope, statement, .bit_and),
2598- .assign_bit_or => try assignOp(gz, scope, statement, .bit_or),
2599- .assign_bit_xor => try assignOp(gz, scope, statement, .xor),
2600- .assign_div => try assignOp(gz, scope, statement, .div),
2601- .assign_sub => try assignOp(gz, scope, statement, .sub),
2602- .assign_sub_wrap => try assignOp(gz, scope, statement, .subwrap),
2603- .assign_mod => try assignOp(gz, scope, statement, .mod_rem),
2604- .assign_add => try assignOp(gz, scope, statement, .add),
2605- .assign_add_wrap => try assignOp(gz, scope, statement, .addwrap),
2606- .assign_mul => try assignOp(gz, scope, statement, .mul),
2607- .assign_mul_wrap => try assignOp(gz, scope, statement, .mulwrap),
2608-
2609- .grouped_expression => {
2610- inner_node = tree.nodeData(inner_node).node_and_token[0];
2611- continue;
2612- },
2580+ while (tree.nodeTag(inner_node) == .grouped_expression) {
2581+ inner_node = tree.nodeData(inner_node).node_and_token[0];
2582+ }
26132583
2614- .while_simple,
2615- .while_cont,
2616- .@"while", => _ = try whileExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullWhile(inner_node).?, true),
2584+ switch (tree.nodeTag(inner_node)) {
2585+ // zig fmt: off
2586+ .global_var_decl,
2587+ .local_var_decl,
2588+ .simple_var_decl,
2589+ .aligned_var_decl, => scope = try varDecl(gz, scope, statement, block_arena_allocator, tree.fullVarDecl(statement).?),
26172590
2618- .for_simple,
2619- .@"for", => _ = try forExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullFor(inner_node).?, true),
2620- // zig fmt: on
2591+ .assign_destructure => scope = try assignDestructureMaybeDecls(gz, scope, statement, block_arena_allocator),
26212592
2622- // These cases are here to allow branch hints.
2623- .builtin_call_two,
2624- .builtin_call_two_comma,
2625- .builtin_call,
2626- .builtin_call_comma,
2627- => {
2628- var buf: [2]Ast.Node.Index = undefined;
2629- const params = tree.builtinCallParams(&buf, inner_node).?;
2630-
2631- try emitDbgNode(gz, inner_node);
2632- const result = try builtinCall(gz, scope, .{ .rl = .none }, inner_node, params, allow_branch_hint);
2633- noreturn_src_node = try addEnsureResult(gz, result, inner_node);
2634- },
2593+ .@"defer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_normal),
2594+ .@"errdefer" => scope = try deferStmt(gz, scope, statement, block_arena_allocator, .defer_error),
26352595
2636- else => noreturn_src_node = try unusedResultExpr(gz, scope, inner_node),
2637- }
2638- break;
2596+ .assign => try assign(gz, scope, statement),
2597+
2598+ .assign_shl => try assignShift(gz, scope, statement, .shl),
2599+ .assign_shr => try assignShift(gz, scope, statement, .shr),
2600+
2601+ .assign_bit_and => try assignOp(gz, scope, statement, .bit_and),
2602+ .assign_bit_or => try assignOp(gz, scope, statement, .bit_or),
2603+ .assign_bit_xor => try assignOp(gz, scope, statement, .xor),
2604+ .assign_div => try assignOp(gz, scope, statement, .div),
2605+ .assign_sub => try assignOp(gz, scope, statement, .sub),
2606+ .assign_sub_wrap => try assignOp(gz, scope, statement, .subwrap),
2607+ .assign_mod => try assignOp(gz, scope, statement, .mod_rem),
2608+ .assign_add => try assignOp(gz, scope, statement, .add),
2609+ .assign_add_wrap => try assignOp(gz, scope, statement, .addwrap),
2610+ .assign_mul => try assignOp(gz, scope, statement, .mul),
2611+ .assign_mul_wrap => try assignOp(gz, scope, statement, .mulwrap),
2612+
2613+ .while_simple,
2614+ .while_cont,
2615+ .@"while", => _ = try whileExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullWhile(inner_node).?, true),
2616+
2617+ .for_simple,
2618+ .@"for", => _ = try forExpr(gz, scope, .{ .rl = .none }, inner_node, tree.fullFor(inner_node).?, true),
2619+ // zig fmt: on
2620+
2621+ // These cases are here to allow branch hints.
2622+ .builtin_call_two,
2623+ .builtin_call_two_comma,
2624+ .builtin_call,
2625+ .builtin_call_comma,
2626+ => {
2627+ var buf: [2]Ast.Node.Index = undefined;
2628+ const params = tree.builtinCallParams(&buf, inner_node).?;
2629+
2630+ try emitDbgNode(gz, inner_node);
2631+ const result = try builtinCall(gz, scope, .{ .rl = .none }, inner_node, params, allow_branch_hint);
2632+ noreturn_src_node = try addEnsureResult(gz, result, inner_node);
2633+ },
2634+
2635+ else => noreturn_src_node = try unusedResultExpr(gz, scope, inner_node),
26392636 }
26402637 }
26412638
0 commit comments