| ... | ... | @@ -4263,6 +4263,7 @@ fn forExpr( |
| 4263 | 4263 | }; |
| 4264 | 4264 | defer then_scope.instructions.deinit(astgen.gpa); |
| 4265 | 4265 | |
| 4266 | var payload_val_scope: Scope.LocalVal = undefined; |
| 4266 | 4267 | var index_scope: Scope.LocalPtr = undefined; |
| 4267 | 4268 | const then_sub_scope = blk: { |
| 4268 | 4269 | const payload_token = for_full.payload_token.?; |
| ... | ... | @@ -4272,22 +4273,34 @@ fn forExpr( |
| 4272 | 4273 | payload_token; |
| 4273 | 4274 | const is_ptr = ident != payload_token; |
| 4274 | 4275 | const value_name = tree.tokenSlice(ident); |
| 4276 | var payload_sub_scope: *Scope = undefined; |
| 4275 | 4277 | if (!mem.eql(u8, value_name, "_")) { |
| 4276 | | return astgen.failTok(ident, "TODO implement for loop value payload", .{}); |
| 4278 | const tag: Zir.Inst.Tag = if (is_ptr) .elem_ptr else .elem_val; |
| 4279 | const payload_inst = try then_scope.addBin(tag, array_ptr, index); |
| 4280 | payload_val_scope = .{ |
| 4281 | .parent = &then_scope.base, |
| 4282 | .gen_zir = &then_scope, |
| 4283 | .name = value_name, |
| 4284 | .inst = payload_inst, |
| 4285 | .token_src = ident, |
| 4286 | }; |
| 4287 | payload_sub_scope = &payload_val_scope.base; |
| 4277 | 4288 | } else if (is_ptr) { |
| 4278 | 4289 | return astgen.failTok(payload_token, "pointer modifier invalid on discard", .{}); |
| 4290 | } else { |
| 4291 | payload_sub_scope = &then_scope.base; |
| 4279 | 4292 | } |
| 4280 | 4293 | |
| 4281 | 4294 | const index_token = if (token_tags[ident + 1] == .comma) |
| 4282 | 4295 | ident + 2 |
| 4283 | 4296 | else |
| 4284 | | break :blk &then_scope.base; |
| 4297 | break :blk payload_sub_scope; |
| 4285 | 4298 | if (mem.eql(u8, tree.tokenSlice(index_token), "_")) { |
| 4286 | 4299 | return astgen.failTok(index_token, "discard of index capture; omit it instead", .{}); |
| 4287 | 4300 | } |
| 4288 | 4301 | const index_name = try astgen.identifierTokenString(index_token); |
| 4289 | 4302 | index_scope = .{ |
| 4290 | | .parent = &then_scope.base, |
| 4303 | .parent = payload_sub_scope, |
| 4291 | 4304 | .gen_zir = &then_scope, |
| 4292 | 4305 | .name = index_name, |
| 4293 | 4306 | .ptr = index_ptr, |