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(
31843184 astgen.fn_block = &fn_gz;
31853185 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
31873193 _ = try expr(&fn_gz, params_scope, .none, body_node);
31883194 try checkUsed(gz, &fn_gz.base, params_scope);
31893195
......@@ -3202,6 +3208,8 @@ fn fnDecl(
32023208
32033209 break :func try decl_gz.addFunc(.{
32043210 .src_node = decl_node,
3211 .lbrace_line = lbrace_line,
3212 .lbrace_column = lbrace_column,
32053213 .param_block = block_inst,
32063214 .ret_ty = ret_gz.instructions.items,
32073215 .ret_br = ret_br,
......@@ -3544,6 +3552,12 @@ fn testDecl(
35443552 astgen.fn_block = &fn_block;
35453553 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
35473561 const block_result = try expr(&fn_block, &fn_block.base, .none, body_node);
35483562 if (fn_block.instructions.items.len == 0 or !fn_block.refIsNoReturn(block_result)) {
35493563 // Since we are adding the return instruction here, we must handle the coercion.
......@@ -3553,6 +3567,8 @@ fn testDecl(
35533567
35543568 const func_inst = try decl_block.addFunc(.{
35553569 .src_node = node,
3570 .lbrace_line = lbrace_line,
3571 .lbrace_column = lbrace_column,
35563572 .param_block = block_inst,
35573573 .ret_ty = &.{},
35583574 .ret_br = 0,
......@@ -9548,6 +9564,8 @@ const GenZir = struct {
95489564
95499565 fn addFunc(gz: *GenZir, args: struct {
95509566 src_node: Ast.Node.Index,
9567 lbrace_line: u32 = 0,
9568 lbrace_column: u32 = 0,
95519569 body: []const Zir.Inst.Index,
95529570 param_block: Zir.Inst.Index,
95539571 ret_ty: []const Zir.Inst.Index,
......@@ -9577,19 +9595,13 @@ const GenZir = struct {
95779595 const fn_decl = args.src_node;
95789596 assert(node_tags[fn_decl] == .fn_decl or node_tags[fn_decl] == .test_decl);
95799597 const block = node_datas[fn_decl].rhs;
9580 const lbrace_start = token_starts[tree.firstToken(block)];
95819598 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
95879599 astgen.advanceSourceCursor(tree.source, rbrace_start);
95889600 const rbrace_line = @intCast(u32, astgen.source_line);
95899601 const rbrace_column = @intCast(u32, astgen.source_column);
95909602
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;
95939605 src_locs_buffer[1] = rbrace_line;
95949606 src_locs_buffer[2] = columns;
95959607 src_locs = &src_locs_buffer;