| ... | ... | @@ -1302,17 +1302,28 @@ fn analyzeBodyInner( |
| 1302 | 1302 | // current list of parameters and restore it later. |
| 1303 | 1303 | // Note: this probably needs to be resolved in a more general manner. |
| 1304 | 1304 | const prev_params = block.params; |
| 1305 | | const prev_inline_block = block.inline_block; |
| 1306 | | if (tags[inline_body[inline_body.len - 1]] == .repeat_inline) { |
| 1307 | | block.inline_block = inline_body[0]; |
| 1305 | const need_sub_block = tags[inline_body[inline_body.len - 1]] == .repeat_inline; |
| 1306 | var sub_block = block; |
| 1307 | var block_space: Block = undefined; |
| 1308 | // NOTE: this has to be done like this because branching in |
| 1309 | // defers here breaks stage1. |
| 1310 | block_space.instructions = .{}; |
| 1311 | if (need_sub_block) { |
| 1312 | block_space = block.makeSubBlock(); |
| 1313 | block_space.inline_block = inline_body[0]; |
| 1314 | sub_block = &block_space; |
| 1308 | 1315 | } |
| 1309 | 1316 | block.params = .{}; |
| 1310 | 1317 | defer { |
| 1311 | 1318 | block.params.deinit(gpa); |
| 1312 | 1319 | block.params = prev_params; |
| 1313 | | block.inline_block = prev_inline_block; |
| 1320 | block_space.instructions.deinit(gpa); |
| 1314 | 1321 | } |
| 1315 | | const opt_break_data = try sema.analyzeBodyBreak(block, inline_body); |
| 1322 | const opt_break_data = try sema.analyzeBodyBreak(sub_block, inline_body); |
| 1323 | if (need_sub_block) { |
| 1324 | try block.instructions.appendSlice(gpa, block_space.instructions.items); |
| 1325 | } |
| 1326 | |
| 1316 | 1327 | // A runtime conditional branch that needs a post-hoc block to be |
| 1317 | 1328 | // emitted communicates this by mapping the block index into the inst map. |
| 1318 | 1329 | if (map.get(inst)) |new_block_ref| ph: { |