authorgravatar for matthew.h.borkowski@gmail.comMatthew Borkowski <matthew.h.borkowski@gmail.com> 2021-10-01 08:44:31-04:00
committergravatar for matthew.h.borkowski@gmail.comMatthew Borkowski <matthew.h.borkowski@gmail.com> 2021-10-02 07:56:56-04:00
loga1c802cbba07f2fdb009867393d3f39a091d939f
tree22dc8341e959220063f7d39460af2280b4e7ff8e
parent9f441c7f8f53ede41cb0c9f302204950107ab887

astgen.zig: pass lbrace line and column to addFunc to keep source cursor increasing monotonically


1 files changed, 20 insertions(+), 8 deletions(-)

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