authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-04-28 23:16:13-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2021-04-28 23:16:13-07:00
logd36a31ba758348ed79de395bf1eb1ae9c9db30bf
tree491adb9253c373a9893c3b2fd030ff80b55d5de1
parentc60d8f017ea698c5fe4c7c6046f8ca09f0b8bf1d

stage2: fix scanDecls not advancing the field bits

Also fix `semaFile` not handling compile errors properly.

1 files changed, 15 insertions(+), 3 deletions(-)

src/Module.zig+15-3
...@@ -3207,13 +3207,22 @@ pub fn semaPkg(mod: *Module, pkg: *Package) !void {...@@ -3207,13 +3207,22 @@ pub fn semaPkg(mod: *Module, pkg: *Package) !void {
3207}3207}
32083208
3209pub fn semaFile(mod: *Module, file: *Scope.File) InnerError!void {3209pub fn semaFile(mod: *Module, file: *Scope.File) InnerError!void {
3210 if (file.status == .success_air) return;
3211
3212 const tracy = trace(@src());3210 const tracy = trace(@src());
3213 defer tracy.end();3211 defer tracy.end();
32143212
3213 switch (file.status) {
3214 .never_loaded => unreachable,
3215
3216 .retryable_failure,
3217 .parse_failure,
3218 .astgen_failure,
3219 => return error.AnalysisFail,
3220
3221 .success_zir => {},
3222 .success_air => return,
3223 }
3224
3215 assert(file.zir_loaded);3225 assert(file.zir_loaded);
3216 assert(file.status == .success_zir);
32173226
3218 const gpa = mod.gpa;3227 const gpa = mod.gpa;
3219 var decl_arena = std.heap.ArenaAllocator.init(gpa);3228 var decl_arena = std.heap.ArenaAllocator.init(gpa);
...@@ -3642,6 +3651,8 @@ pub fn scanNamespace(...@@ -3642,6 +3651,8 @@ pub fn scanNamespace(
3642 bit_bag_index += 1;3651 bit_bag_index += 1;
3643 }3652 }
3644 const flags = @truncate(u4, cur_bit_bag);3653 const flags = @truncate(u4, cur_bit_bag);
3654 cur_bit_bag >>= 4;
3655
3645 const decl_sub_index = extra_index;3656 const decl_sub_index = extra_index;
3646 extra_index += 6;3657 extra_index += 6;
3647 extra_index += @truncate(u1, flags >> 2);3658 extra_index += @truncate(u1, flags >> 2);
...@@ -3726,6 +3737,7 @@ fn scanDecl(iter: *ScanDeclIter, decl_sub_index: usize, flags: u4) InnerError!vo...@@ -3726,6 +3737,7 @@ fn scanDecl(iter: *ScanDeclIter, decl_sub_index: usize, flags: u4) InnerError!vo
3726 },3737 },
3727 else => zir.nullTerminatedString(decl_name_index),3738 else => zir.nullTerminatedString(decl_name_index),
3728 };3739 };
3740 log.debug("scan decl {s} is_pub={}", .{ decl_name, is_pub });
37293741
3730 // We create a Decl for it regardless of analysis status.3742 // We create a Decl for it regardless of analysis status.
3731 const gop = try namespace.decls.getOrPut(gpa, decl_name);3743 const gop = try namespace.decls.getOrPut(gpa, decl_name);