| ... | ... | @@ -6919,6 +6919,8 @@ fn switchExprErrUnion( |
| 6919 | 6919 | }; |
| 6920 | 6920 | assert(node_tags[switch_node] == .@"switch" or node_tags[switch_node] == .switch_comma); |
| 6921 | 6921 | |
| 6922 | const do_err_trace = astgen.fn_block != null; |
| 6923 | |
| 6922 | 6924 | const extra = tree.extraData(node_datas[switch_node].rhs, Ast.Node.SubRange); |
| 6923 | 6925 | const case_nodes = tree.extra_data[extra.start..extra.end]; |
| 6924 | 6926 | |
| ... | ... | @@ -7304,10 +7306,14 @@ fn switchExprErrUnion( |
| 7304 | 7306 | case_scope.instructions_top = parent_gz.instructions.items.len; |
| 7305 | 7307 | defer case_scope.unstack(); |
| 7306 | 7308 | |
| 7309 | if (do_err_trace and nodeMayAppendToErrorTrace(tree, operand_node)) |
| 7310 | _ = try case_scope.addSaveErrRetIndex(.always); |
| 7311 | |
| 7307 | 7312 | try case_scope.addDbgBlockBegin(); |
| 7308 | 7313 | if (dbg_var_name != .empty) { |
| 7309 | 7314 | try case_scope.addDbgVar(.dbg_var_val, dbg_var_name, dbg_var_inst); |
| 7310 | 7315 | } |
| 7316 | |
| 7311 | 7317 | const target_expr_node = case.ast.target_expr; |
| 7312 | 7318 | const case_result = try expr(&case_scope, sub_scope, block_scope.break_result_info, target_expr_node); |
| 7313 | 7319 | // check capture_scope, not err_scope to avoid false positive unused error capture |
| ... | ... | @@ -7318,7 +7324,17 @@ fn switchExprErrUnion( |
| 7318 | 7324 | any_uses_err_capture = true; |
| 7319 | 7325 | } |
| 7320 | 7326 | try case_scope.addDbgBlockEnd(); |
| 7327 | |
| 7321 | 7328 | if (!parent_gz.refIsNoReturn(case_result)) { |
| 7329 | if (do_err_trace) |
| 7330 | try restoreErrRetIndex( |
| 7331 | &case_scope, |
| 7332 | .{ .block = switch_block }, |
| 7333 | block_scope.break_result_info, |
| 7334 | target_expr_node, |
| 7335 | case_result, |
| 7336 | ); |
| 7337 | |
| 7322 | 7338 | _ = try case_scope.addBreakWithSrcNode(.@"break", switch_block, case_result, target_expr_node); |
| 7323 | 7339 | } |
| 7324 | 7340 | |