| ... | ... | @@ -3184,6 +3184,12 @@ fn fnDecl( |
| 3184 | 3184 | astgen.fn_block = &fn_gz; |
| 3185 | 3185 | defer astgen.fn_block = prev_fn_block; |
| 3186 | 3186 | |
| 3187 | const token_starts = tree.tokens.items(.start); |
| 3188 | const lbrace_start = token_starts[tree.firstToken(body_node)]; |
| 3189 | astgen.advanceSourceCursor(tree.source, lbrace_start); |
| 3190 | const lbrace_line = @intCast(u32, astgen.source_line); |
| 3191 | const lbrace_column = @intCast(u32, astgen.source_column); |
| 3192 | |
| 3187 | 3193 | _ = try expr(&fn_gz, params_scope, .none, body_node); |
| 3188 | 3194 | try checkUsed(gz, &fn_gz.base, params_scope); |
| 3189 | 3195 | |
| ... | ... | @@ -3202,6 +3208,8 @@ fn fnDecl( |
| 3202 | 3208 | |
| 3203 | 3209 | break :func try decl_gz.addFunc(.{ |
| 3204 | 3210 | .src_node = decl_node, |
| 3211 | .lbrace_line = lbrace_line, |
| 3212 | .lbrace_column = lbrace_column, |
| 3205 | 3213 | .param_block = block_inst, |
| 3206 | 3214 | .ret_ty = ret_gz.instructions.items, |
| 3207 | 3215 | .ret_br = ret_br, |
| ... | ... | @@ -3544,6 +3552,12 @@ fn testDecl( |
| 3544 | 3552 | astgen.fn_block = &fn_block; |
| 3545 | 3553 | defer astgen.fn_block = prev_fn_block; |
| 3546 | 3554 | |
| 3555 | const token_starts = tree.tokens.items(.start); |
| 3556 | const lbrace_start = token_starts[tree.firstToken(body_node)]; |
| 3557 | astgen.advanceSourceCursor(tree.source, lbrace_start); |
| 3558 | const lbrace_line = @intCast(u32, astgen.source_line); |
| 3559 | const lbrace_column = @intCast(u32, astgen.source_column); |
| 3560 | |
| 3547 | 3561 | const block_result = try expr(&fn_block, &fn_block.base, .none, body_node); |
| 3548 | 3562 | if (fn_block.instructions.items.len == 0 or !fn_block.refIsNoReturn(block_result)) { |
| 3549 | 3563 | // Since we are adding the return instruction here, we must handle the coercion. |
| ... | ... | @@ -3553,6 +3567,8 @@ fn testDecl( |
| 3553 | 3567 | |
| 3554 | 3568 | const func_inst = try decl_block.addFunc(.{ |
| 3555 | 3569 | .src_node = node, |
| 3570 | .lbrace_line = lbrace_line, |
| 3571 | .lbrace_column = lbrace_column, |
| 3556 | 3572 | .param_block = block_inst, |
| 3557 | 3573 | .ret_ty = &.{}, |
| 3558 | 3574 | .ret_br = 0, |
| ... | ... | @@ -9548,6 +9564,8 @@ const GenZir = struct { |
| 9548 | 9564 | |
| 9549 | 9565 | fn addFunc(gz: *GenZir, args: struct { |
| 9550 | 9566 | src_node: Ast.Node.Index, |
| 9567 | lbrace_line: u32 = 0, |
| 9568 | lbrace_column: u32 = 0, |
| 9551 | 9569 | body: []const Zir.Inst.Index, |
| 9552 | 9570 | param_block: Zir.Inst.Index, |
| 9553 | 9571 | ret_ty: []const Zir.Inst.Index, |
| ... | ... | @@ -9577,19 +9595,13 @@ const GenZir = struct { |
| 9577 | 9595 | const fn_decl = args.src_node; |
| 9578 | 9596 | assert(node_tags[fn_decl] == .fn_decl or node_tags[fn_decl] == .test_decl); |
| 9579 | 9597 | const block = node_datas[fn_decl].rhs; |
| 9580 | | const lbrace_start = token_starts[tree.firstToken(block)]; |
| 9581 | 9598 | const rbrace_start = token_starts[tree.lastToken(block)]; |
| 9582 | | |
| 9583 | | astgen.advanceSourceCursor(tree.source, lbrace_start); |
| 9584 | | const lbrace_line = @intCast(u32, astgen.source_line); |
| 9585 | | const lbrace_column = @intCast(u32, astgen.source_column); |
| 9586 | | |
| 9587 | 9599 | astgen.advanceSourceCursor(tree.source, rbrace_start); |
| 9588 | 9600 | const rbrace_line = @intCast(u32, astgen.source_line); |
| 9589 | 9601 | const rbrace_column = @intCast(u32, astgen.source_column); |
| 9590 | 9602 | |
| 9591 | | const columns = lbrace_column | (rbrace_column << 16); |
| 9592 | | src_locs_buffer[0] = lbrace_line; |
| 9603 | const columns = args.lbrace_column | (rbrace_column << 16); |
| 9604 | src_locs_buffer[0] = args.lbrace_line; |
| 9593 | 9605 | src_locs_buffer[1] = rbrace_line; |
| 9594 | 9606 | src_locs_buffer[2] = columns; |
| 9595 | 9607 | src_locs = &src_locs_buffer; |