stage2: add compile log statement (#7191)
This commit is contained in:
@@ -53,7 +53,7 @@ decl_table: std.ArrayHashMapUnmanaged(Scope.NameHash, *Decl, Scope.name_hash_has
|
||||
/// The ErrorMsg memory is owned by the decl, using Module's general purpose allocator.
|
||||
/// Note that a Decl can succeed but the Fn it represents can fail. In this case,
|
||||
/// a Decl can have a failed_decls entry but have analysis status of success.
|
||||
failed_decls: std.AutoArrayHashMapUnmanaged(*Decl, *Compilation.ErrorMsg) = .{},
|
||||
failed_decls: std.AutoArrayHashMapUnmanaged(*Decl, ArrayListUnmanaged(*Compilation.ErrorMsg)) = .{},
|
||||
/// Using a map here for consistency with the other fields here.
|
||||
/// The ErrorMsg memory is owned by the `Scope`, using Module's general purpose allocator.
|
||||
failed_files: std.AutoArrayHashMapUnmanaged(*Scope, *Compilation.ErrorMsg) = .{},
|
||||
@@ -845,8 +845,11 @@ pub fn deinit(self: *Module) void {
|
||||
}
|
||||
self.decl_table.deinit(gpa);
|
||||
|
||||
for (self.failed_decls.items()) |entry| {
|
||||
entry.value.destroy(gpa);
|
||||
for (self.failed_decls.items()) |*entry| {
|
||||
for (entry.value.items) |compile_err| {
|
||||
compile_err.destroy(gpa);
|
||||
}
|
||||
entry.value.deinit(gpa);
|
||||
}
|
||||
self.failed_decls.deinit(gpa);
|
||||
|
||||
@@ -942,8 +945,7 @@ pub fn ensureDeclAnalyzed(self: *Module, decl: *Decl) InnerError!void {
|
||||
error.OutOfMemory => return error.OutOfMemory,
|
||||
error.AnalysisFail => return error.AnalysisFail,
|
||||
else => {
|
||||
try self.failed_decls.ensureCapacity(self.gpa, self.failed_decls.items().len + 1);
|
||||
self.failed_decls.putAssumeCapacityNoClobber(decl, try Compilation.ErrorMsg.create(
|
||||
try self.addDeclErr(decl, try Compilation.ErrorMsg.create(
|
||||
self.gpa,
|
||||
decl.src(),
|
||||
"unable to analyze: {}",
|
||||
@@ -1550,7 +1552,7 @@ pub fn analyzeContainer(self: *Module, container_scope: *Scope.Container) !void
|
||||
decl.analysis = .sema_failure;
|
||||
const err_msg = try Compilation.ErrorMsg.create(self.gpa, tree.token_locs[name_tok].start, "redefinition of '{}'", .{decl.name});
|
||||
errdefer err_msg.destroy(self.gpa);
|
||||
try self.failed_decls.putNoClobber(self.gpa, decl, err_msg);
|
||||
try self.addDeclErr(decl, err_msg);
|
||||
} else {
|
||||
if (!srcHashEql(decl.contents_hash, contents_hash)) {
|
||||
try self.markOutdatedDecl(decl);
|
||||
@@ -1592,7 +1594,7 @@ pub fn analyzeContainer(self: *Module, container_scope: *Scope.Container) !void
|
||||
decl.analysis = .sema_failure;
|
||||
const err_msg = try Compilation.ErrorMsg.create(self.gpa, name_loc.start, "redefinition of '{}'", .{decl.name});
|
||||
errdefer err_msg.destroy(self.gpa);
|
||||
try self.failed_decls.putNoClobber(self.gpa, decl, err_msg);
|
||||
try self.addDeclErr(decl, err_msg);
|
||||
} else if (!srcHashEql(decl.contents_hash, contents_hash)) {
|
||||
try self.markOutdatedDecl(decl);
|
||||
decl.contents_hash = contents_hash;
|
||||
@@ -1718,8 +1720,11 @@ pub fn deleteDecl(self: *Module, decl: *Decl) !void {
|
||||
try self.markOutdatedDecl(dep);
|
||||
}
|
||||
}
|
||||
if (self.failed_decls.remove(decl)) |entry| {
|
||||
entry.value.destroy(self.gpa);
|
||||
if (self.failed_decls.remove(decl)) |*entry| {
|
||||
for (entry.value.items) |compile_err| {
|
||||
compile_err.destroy(self.gpa);
|
||||
}
|
||||
entry.value.deinit(self.gpa);
|
||||
}
|
||||
self.deleteDeclExports(decl);
|
||||
self.comp.bin_file.freeDecl(decl);
|
||||
@@ -1798,8 +1803,11 @@ pub fn analyzeFnBody(self: *Module, decl: *Decl, func: *Fn) !void {
|
||||
fn markOutdatedDecl(self: *Module, decl: *Decl) !void {
|
||||
log.debug("mark {} outdated\n", .{decl.name});
|
||||
try self.comp.work_queue.writeItem(.{ .analyze_decl = decl });
|
||||
if (self.failed_decls.remove(decl)) |entry| {
|
||||
entry.value.destroy(self.gpa);
|
||||
if (self.failed_decls.remove(decl)) |*entry| {
|
||||
for (entry.value.items) |compile_err| {
|
||||
compile_err.destroy(self.gpa);
|
||||
}
|
||||
entry.value.deinit(self.gpa);
|
||||
}
|
||||
decl.analysis = .outdated;
|
||||
}
|
||||
@@ -2944,10 +2952,14 @@ pub fn failNode(
|
||||
return self.fail(scope, src, format, args);
|
||||
}
|
||||
|
||||
pub fn addDeclErr(self: *Module, decl: *Decl, err: *Compilation.ErrorMsg) error{OutOfMemory}!void {
|
||||
const entry = try self.failed_decls.getOrPutValue(self.gpa, decl, .{});
|
||||
try entry.value.append(self.gpa, err);
|
||||
}
|
||||
|
||||
fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *Compilation.ErrorMsg) InnerError {
|
||||
{
|
||||
errdefer err_msg.destroy(self.gpa);
|
||||
try self.failed_decls.ensureCapacity(self.gpa, self.failed_decls.items().len + 1);
|
||||
try self.failed_files.ensureCapacity(self.gpa, self.failed_files.items().len + 1);
|
||||
}
|
||||
switch (scope.tag) {
|
||||
@@ -2955,7 +2967,7 @@ fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *Com
|
||||
const decl = scope.cast(Scope.DeclAnalysis).?.decl;
|
||||
decl.analysis = .sema_failure;
|
||||
decl.generation = self.generation;
|
||||
self.failed_decls.putAssumeCapacityNoClobber(decl, err_msg);
|
||||
try self.addDeclErr(decl, err_msg);
|
||||
},
|
||||
.block => {
|
||||
const block = scope.cast(Scope.Block).?;
|
||||
@@ -2965,25 +2977,25 @@ fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *Com
|
||||
block.decl.analysis = .sema_failure;
|
||||
block.decl.generation = self.generation;
|
||||
}
|
||||
self.failed_decls.putAssumeCapacityNoClobber(block.decl, err_msg);
|
||||
try self.addDeclErr(block.decl, err_msg);
|
||||
},
|
||||
.gen_zir => {
|
||||
const gen_zir = scope.cast(Scope.GenZIR).?;
|
||||
gen_zir.decl.analysis = .sema_failure;
|
||||
gen_zir.decl.generation = self.generation;
|
||||
self.failed_decls.putAssumeCapacityNoClobber(gen_zir.decl, err_msg);
|
||||
try self.addDeclErr(gen_zir.decl, err_msg);
|
||||
},
|
||||
.local_val => {
|
||||
const gen_zir = scope.cast(Scope.LocalVal).?.gen_zir;
|
||||
gen_zir.decl.analysis = .sema_failure;
|
||||
gen_zir.decl.generation = self.generation;
|
||||
self.failed_decls.putAssumeCapacityNoClobber(gen_zir.decl, err_msg);
|
||||
try self.addDeclErr(gen_zir.decl, err_msg);
|
||||
},
|
||||
.local_ptr => {
|
||||
const gen_zir = scope.cast(Scope.LocalPtr).?.gen_zir;
|
||||
gen_zir.decl.analysis = .sema_failure;
|
||||
gen_zir.decl.generation = self.generation;
|
||||
self.failed_decls.putAssumeCapacityNoClobber(gen_zir.decl, err_msg);
|
||||
try self.addDeclErr(gen_zir.decl, err_msg);
|
||||
},
|
||||
.zir_module => {
|
||||
const zir_module = scope.cast(Scope.ZIRModule).?;
|
||||
|
||||
Reference in New Issue
Block a user