update more HashMap API usage
This commit is contained in:
parent
3c8b13d998
commit
3a89f214aa
@ -392,7 +392,7 @@ fn genToc(allocator: *mem.Allocator, tokenizer: *Tokenizer) !Toc {
|
||||
.n = header_stack_size,
|
||||
},
|
||||
});
|
||||
if (try urls.put(urlized, tag_token)) |entry| {
|
||||
if (try urls.fetchPut(urlized, tag_token)) |entry| {
|
||||
parseError(tokenizer, tag_token, "duplicate header url: #{}", .{urlized}) catch {};
|
||||
parseError(tokenizer, entry.value, "other tag here", .{}) catch {};
|
||||
return error.ParseError;
|
||||
|
@ -5363,11 +5363,11 @@ const std = @import("std");
|
||||
const assert = std.debug.assert;
|
||||
|
||||
test "turn HashMap into a set with void" {
|
||||
var map = std.HashMap(i32, void, hash_i32, eql_i32).init(std.testing.allocator);
|
||||
var map = std.AutoHashMap(i32, void).init(std.testing.allocator);
|
||||
defer map.deinit();
|
||||
|
||||
_ = try map.put(1, {});
|
||||
_ = try map.put(2, {});
|
||||
try map.put(1, {});
|
||||
try map.put(2, {});
|
||||
|
||||
assert(map.contains(2));
|
||||
assert(!map.contains(3));
|
||||
@ -5375,14 +5375,6 @@ test "turn HashMap into a set with void" {
|
||||
_ = map.remove(2);
|
||||
assert(!map.contains(2));
|
||||
}
|
||||
|
||||
fn hash_i32(x: i32) u32 {
|
||||
return @bitCast(u32, x);
|
||||
}
|
||||
|
||||
fn eql_i32(a: i32, b: i32) bool {
|
||||
return a == b;
|
||||
}
|
||||
{#code_end#}
|
||||
<p>Note that this is different from using a dummy value for the hash map value.
|
||||
By using {#syntax#}void{#endsyntax#} as the type of the value, the hash map entry type has no value field, and
|
||||
|
@ -1132,7 +1132,7 @@ pub const DebugInfo = struct {
|
||||
const seg_end = seg_start + segment_cmd.vmsize;
|
||||
|
||||
if (rebased_address >= seg_start and rebased_address < seg_end) {
|
||||
if (self.address_map.getValue(base_address)) |obj_di| {
|
||||
if (self.address_map.get(base_address)) |obj_di| {
|
||||
return obj_di;
|
||||
}
|
||||
|
||||
@ -1204,7 +1204,7 @@ pub const DebugInfo = struct {
|
||||
const seg_end = seg_start + info.SizeOfImage;
|
||||
|
||||
if (address >= seg_start and address < seg_end) {
|
||||
if (self.address_map.getValue(seg_start)) |obj_di| {
|
||||
if (self.address_map.get(seg_start)) |obj_di| {
|
||||
return obj_di;
|
||||
}
|
||||
|
||||
@ -1441,7 +1441,7 @@ pub const ModuleDebugInfo = switch (builtin.os.tag) {
|
||||
const o_file_path = mem.spanZ(self.strings[symbol.ofile.?.n_strx..]);
|
||||
|
||||
// Check if its debug infos are already in the cache
|
||||
var o_file_di = self.ofiles.getValue(o_file_path) orelse
|
||||
var o_file_di = self.ofiles.get(o_file_path) orelse
|
||||
(self.loadOFile(o_file_path) catch |err| switch (err) {
|
||||
error.FileNotFound,
|
||||
error.MissingDebugInfo,
|
||||
|
@ -458,7 +458,7 @@ pub fn HashMapUnmanaged(
|
||||
}
|
||||
|
||||
/// Inserts a new `Entry` into the hash map, returning the previous one, if any.
|
||||
/// If insertion happuns, asserts there is enough capacity without allocating.
|
||||
/// If insertion happens, asserts there is enough capacity without allocating.
|
||||
pub fn fetchPutAssumeCapacity(self: *Self, key: K, value: V) ?Entry {
|
||||
const gop = self.getOrPutAssumeCapacity(key);
|
||||
var result: ?Entry = null;
|
||||
|
@ -75,7 +75,7 @@ deletion_set: std.ArrayListUnmanaged(*Decl) = .{},
|
||||
|
||||
keep_source_files_loaded: bool,
|
||||
|
||||
const DeclTable = std.HashMap(Scope.NameHash, *Decl, Scope.name_hash_hash, Scope.name_hash_eql);
|
||||
const DeclTable = std.HashMap(Scope.NameHash, *Decl, Scope.name_hash_hash, Scope.name_hash_eql, false);
|
||||
|
||||
const WorkItem = union(enum) {
|
||||
/// Write the machine code for a Decl to the output file.
|
||||
@ -795,49 +795,38 @@ pub fn deinit(self: *Module) void {
|
||||
const allocator = self.allocator;
|
||||
self.deletion_set.deinit(allocator);
|
||||
self.work_queue.deinit();
|
||||
{
|
||||
var it = self.decl_table.iterator();
|
||||
while (it.next()) |kv| {
|
||||
kv.value.destroy(allocator);
|
||||
|
||||
for (self.decl_table.items()) |entry| {
|
||||
entry.value.destroy(allocator);
|
||||
}
|
||||
self.decl_table.deinit();
|
||||
}
|
||||
{
|
||||
var it = self.failed_decls.iterator();
|
||||
while (it.next()) |kv| {
|
||||
kv.value.destroy(allocator);
|
||||
|
||||
for (self.failed_decls.items()) |entry| {
|
||||
entry.value.destroy(allocator);
|
||||
}
|
||||
self.failed_decls.deinit();
|
||||
}
|
||||
{
|
||||
var it = self.failed_files.iterator();
|
||||
while (it.next()) |kv| {
|
||||
kv.value.destroy(allocator);
|
||||
|
||||
for (self.failed_files.items()) |entry| {
|
||||
entry.value.destroy(allocator);
|
||||
}
|
||||
self.failed_files.deinit();
|
||||
}
|
||||
{
|
||||
var it = self.failed_exports.iterator();
|
||||
while (it.next()) |kv| {
|
||||
kv.value.destroy(allocator);
|
||||
|
||||
for (self.failed_exports.items()) |entry| {
|
||||
entry.value.destroy(allocator);
|
||||
}
|
||||
self.failed_exports.deinit();
|
||||
}
|
||||
{
|
||||
var it = self.decl_exports.iterator();
|
||||
while (it.next()) |kv| {
|
||||
const export_list = kv.value;
|
||||
|
||||
for (self.decl_exports.items()) |entry| {
|
||||
const export_list = entry.value;
|
||||
allocator.free(export_list);
|
||||
}
|
||||
self.decl_exports.deinit();
|
||||
}
|
||||
{
|
||||
var it = self.export_owners.iterator();
|
||||
while (it.next()) |kv| {
|
||||
freeExportList(allocator, kv.value);
|
||||
|
||||
for (self.export_owners.items()) |entry| {
|
||||
freeExportList(allocator, entry.value);
|
||||
}
|
||||
self.export_owners.deinit();
|
||||
}
|
||||
|
||||
self.symbol_exports.deinit();
|
||||
self.root_scope.destroy(allocator);
|
||||
self.* = undefined;
|
||||
@ -918,9 +907,9 @@ pub fn makeBinFileWritable(self: *Module) !void {
|
||||
}
|
||||
|
||||
pub fn totalErrorCount(self: *Module) usize {
|
||||
const total = self.failed_decls.size +
|
||||
self.failed_files.size +
|
||||
self.failed_exports.size;
|
||||
const total = self.failed_decls.items().len +
|
||||
self.failed_files.items().len +
|
||||
self.failed_exports.items().len;
|
||||
return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total;
|
||||
}
|
||||
|
||||
@ -931,33 +920,24 @@ pub fn getAllErrorsAlloc(self: *Module) !AllErrors {
|
||||
var errors = std.ArrayList(AllErrors.Message).init(self.allocator);
|
||||
defer errors.deinit();
|
||||
|
||||
{
|
||||
var it = self.failed_files.iterator();
|
||||
while (it.next()) |kv| {
|
||||
const scope = kv.key;
|
||||
const err_msg = kv.value;
|
||||
for (self.failed_files.items()) |entry| {
|
||||
const scope = entry.key;
|
||||
const err_msg = entry.value;
|
||||
const source = try scope.getSource(self);
|
||||
try AllErrors.add(&arena, &errors, scope.subFilePath(), source, err_msg.*);
|
||||
}
|
||||
}
|
||||
{
|
||||
var it = self.failed_decls.iterator();
|
||||
while (it.next()) |kv| {
|
||||
const decl = kv.key;
|
||||
const err_msg = kv.value;
|
||||
for (self.failed_decls.items()) |entry| {
|
||||
const decl = entry.key;
|
||||
const err_msg = entry.value;
|
||||
const source = try decl.scope.getSource(self);
|
||||
try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*);
|
||||
}
|
||||
}
|
||||
{
|
||||
var it = self.failed_exports.iterator();
|
||||
while (it.next()) |kv| {
|
||||
const decl = kv.key.owner_decl;
|
||||
const err_msg = kv.value;
|
||||
for (self.failed_exports.items()) |entry| {
|
||||
const decl = entry.key.owner_decl;
|
||||
const err_msg = entry.value;
|
||||
const source = try decl.scope.getSource(self);
|
||||
try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*);
|
||||
}
|
||||
}
|
||||
|
||||
if (errors.items.len == 0 and self.link_error_flags.no_entry_point_found) {
|
||||
try errors.append(.{
|
||||
@ -1016,7 +996,7 @@ pub fn performAllTheWork(self: *Module) error{OutOfMemory}!void {
|
||||
decl.analysis = .dependency_failure;
|
||||
},
|
||||
else => {
|
||||
try self.failed_decls.ensureCapacity(self.failed_decls.size + 1);
|
||||
try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1);
|
||||
self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create(
|
||||
self.allocator,
|
||||
decl.src(),
|
||||
@ -1086,7 +1066,7 @@ 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.failed_decls.size + 1);
|
||||
try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1);
|
||||
self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create(
|
||||
self.allocator,
|
||||
decl.src(),
|
||||
@ -1636,7 +1616,7 @@ fn declareDeclDependency(self: *Module, depender: *Decl, dependee: *Decl) !void
|
||||
fn getSrcModule(self: *Module, root_scope: *Scope.ZIRModule) !*zir.Module {
|
||||
switch (root_scope.status) {
|
||||
.never_loaded, .unloaded_success => {
|
||||
try self.failed_files.ensureCapacity(self.failed_files.size + 1);
|
||||
try self.failed_files.ensureCapacity(self.failed_files.items().len + 1);
|
||||
|
||||
const source = try root_scope.getSource(self);
|
||||
|
||||
@ -1677,7 +1657,7 @@ fn getAstTree(self: *Module, root_scope: *Scope.File) !*ast.Tree {
|
||||
|
||||
switch (root_scope.status) {
|
||||
.never_loaded, .unloaded_success => {
|
||||
try self.failed_files.ensureCapacity(self.failed_files.size + 1);
|
||||
try self.failed_files.ensureCapacity(self.failed_files.items().len + 1);
|
||||
|
||||
const source = try root_scope.getSource(self);
|
||||
|
||||
@ -1745,8 +1725,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void {
|
||||
const name = tree.tokenSliceLoc(name_loc);
|
||||
const name_hash = root_scope.fullyQualifiedNameHash(name);
|
||||
const contents_hash = std.zig.hashSrc(tree.getNodeSource(src_decl));
|
||||
if (self.decl_table.get(name_hash)) |kv| {
|
||||
const decl = kv.value;
|
||||
if (self.decl_table.get(name_hash)) |decl| {
|
||||
// Update the AST Node index of the decl, even if its contents are unchanged, it may
|
||||
// have been re-ordered.
|
||||
decl.src_index = decl_i;
|
||||
@ -1774,14 +1753,11 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void {
|
||||
// TODO also look for global variable declarations
|
||||
// TODO also look for comptime blocks and exported globals
|
||||
}
|
||||
{
|
||||
// Handle explicitly deleted decls from the source code. Not to be confused
|
||||
// with when we delete decls because they are no longer referenced.
|
||||
var it = deleted_decls.iterator();
|
||||
while (it.next()) |kv| {
|
||||
//std.debug.warn("noticed '{}' deleted from source\n", .{kv.key.name});
|
||||
try self.deleteDecl(kv.key);
|
||||
}
|
||||
for (deleted_decls.items()) |entry| {
|
||||
//std.debug.warn("noticed '{}' deleted from source\n", .{entry.key.name});
|
||||
try self.deleteDecl(entry.key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1800,18 +1776,14 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void {
|
||||
// we know which ones have been deleted.
|
||||
var deleted_decls = std.AutoHashMap(*Decl, void).init(self.allocator);
|
||||
defer deleted_decls.deinit();
|
||||
try deleted_decls.ensureCapacity(self.decl_table.size);
|
||||
{
|
||||
var it = self.decl_table.iterator();
|
||||
while (it.next()) |kv| {
|
||||
deleted_decls.putAssumeCapacityNoClobber(kv.value, {});
|
||||
}
|
||||
try deleted_decls.ensureCapacity(self.decl_table.items().len);
|
||||
for (self.decl_table.items()) |entry| {
|
||||
deleted_decls.putAssumeCapacityNoClobber(entry.value, {});
|
||||
}
|
||||
|
||||
for (src_module.decls) |src_decl, decl_i| {
|
||||
const name_hash = root_scope.fullyQualifiedNameHash(src_decl.name);
|
||||
if (self.decl_table.get(name_hash)) |kv| {
|
||||
const decl = kv.value;
|
||||
if (self.decl_table.get(name_hash)) |decl| {
|
||||
deleted_decls.removeAssertDiscard(decl);
|
||||
//std.debug.warn("'{}' contents: '{}'\n", .{ src_decl.name, src_decl.contents });
|
||||
if (!srcHashEql(src_decl.contents_hash, decl.contents_hash)) {
|
||||
@ -1835,14 +1807,11 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void {
|
||||
for (exports_to_resolve.items) |export_decl| {
|
||||
_ = try self.resolveZirDecl(&root_scope.base, export_decl);
|
||||
}
|
||||
{
|
||||
// Handle explicitly deleted decls from the source code. Not to be confused
|
||||
// with when we delete decls because they are no longer referenced.
|
||||
var it = deleted_decls.iterator();
|
||||
while (it.next()) |kv| {
|
||||
//std.debug.warn("noticed '{}' deleted from source\n", .{kv.key.name});
|
||||
try self.deleteDecl(kv.key);
|
||||
}
|
||||
for (deleted_decls.items()) |entry| {
|
||||
//std.debug.warn("noticed '{}' deleted from source\n", .{entry.key.name});
|
||||
try self.deleteDecl(entry.key);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1888,7 +1857,7 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void {
|
||||
const kv = self.export_owners.remove(decl) orelse return;
|
||||
|
||||
for (kv.value) |exp| {
|
||||
if (self.decl_exports.get(exp.exported_decl)) |decl_exports_kv| {
|
||||
if (self.decl_exports.getEntry(exp.exported_decl)) |decl_exports_kv| {
|
||||
// Remove exports with owner_decl matching the regenerating decl.
|
||||
const list = decl_exports_kv.value;
|
||||
var i: usize = 0;
|
||||
@ -1983,7 +1952,7 @@ fn createNewDecl(
|
||||
name_hash: Scope.NameHash,
|
||||
contents_hash: std.zig.SrcHash,
|
||||
) !*Decl {
|
||||
try self.decl_table.ensureCapacity(self.decl_table.size + 1);
|
||||
try self.decl_table.ensureCapacity(self.decl_table.items().len + 1);
|
||||
const new_decl = try self.allocateNewDecl(scope, src_index, contents_hash);
|
||||
errdefer self.allocator.destroy(new_decl);
|
||||
new_decl.name = try mem.dupeZ(self.allocator, u8, decl_name);
|
||||
@ -2043,7 +2012,7 @@ fn resolveZirDecl(self: *Module, scope: *Scope, src_decl: *zir.Decl) InnerError!
|
||||
|
||||
fn resolveZirDeclHavingIndex(self: *Module, scope: *Scope, src_decl: *zir.Decl, src_index: usize) InnerError!*Decl {
|
||||
const name_hash = scope.namespace().fullyQualifiedNameHash(src_decl.name);
|
||||
const decl = self.decl_table.getValue(name_hash).?;
|
||||
const decl = self.decl_table.get(name_hash).?;
|
||||
decl.src_index = src_index;
|
||||
try self.ensureDeclAnalyzed(decl);
|
||||
return decl;
|
||||
@ -2148,8 +2117,8 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
|
||||
else => return self.fail(scope, src, "unable to export type '{}'", .{typed_value.ty}),
|
||||
}
|
||||
|
||||
try self.decl_exports.ensureCapacity(self.decl_exports.size + 1);
|
||||
try self.export_owners.ensureCapacity(self.export_owners.size + 1);
|
||||
try self.decl_exports.ensureCapacity(self.decl_exports.items().len + 1);
|
||||
try self.export_owners.ensureCapacity(self.export_owners.items().len + 1);
|
||||
|
||||
const new_export = try self.allocator.create(Export);
|
||||
errdefer self.allocator.destroy(new_export);
|
||||
@ -2168,23 +2137,23 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
|
||||
// Add to export_owners table.
|
||||
const eo_gop = self.export_owners.getOrPut(owner_decl) catch unreachable;
|
||||
if (!eo_gop.found_existing) {
|
||||
eo_gop.kv.value = &[0]*Export{};
|
||||
eo_gop.entry.value = &[0]*Export{};
|
||||
}
|
||||
eo_gop.kv.value = try self.allocator.realloc(eo_gop.kv.value, eo_gop.kv.value.len + 1);
|
||||
eo_gop.kv.value[eo_gop.kv.value.len - 1] = new_export;
|
||||
errdefer eo_gop.kv.value = self.allocator.shrink(eo_gop.kv.value, eo_gop.kv.value.len - 1);
|
||||
eo_gop.entry.value = try self.allocator.realloc(eo_gop.entry.value, eo_gop.entry.value.len + 1);
|
||||
eo_gop.entry.value[eo_gop.entry.value.len - 1] = new_export;
|
||||
errdefer eo_gop.entry.value = self.allocator.shrink(eo_gop.entry.value, eo_gop.entry.value.len - 1);
|
||||
|
||||
// Add to exported_decl table.
|
||||
const de_gop = self.decl_exports.getOrPut(exported_decl) catch unreachable;
|
||||
if (!de_gop.found_existing) {
|
||||
de_gop.kv.value = &[0]*Export{};
|
||||
de_gop.entry.value = &[0]*Export{};
|
||||
}
|
||||
de_gop.kv.value = try self.allocator.realloc(de_gop.kv.value, de_gop.kv.value.len + 1);
|
||||
de_gop.kv.value[de_gop.kv.value.len - 1] = new_export;
|
||||
errdefer de_gop.kv.value = self.allocator.shrink(de_gop.kv.value, de_gop.kv.value.len - 1);
|
||||
de_gop.entry.value = try self.allocator.realloc(de_gop.entry.value, de_gop.entry.value.len + 1);
|
||||
de_gop.entry.value[de_gop.entry.value.len - 1] = new_export;
|
||||
errdefer de_gop.entry.value = self.allocator.shrink(de_gop.entry.value, de_gop.entry.value.len - 1);
|
||||
|
||||
if (self.symbol_exports.get(symbol_name)) |_| {
|
||||
try self.failed_exports.ensureCapacity(self.failed_exports.size + 1);
|
||||
try self.failed_exports.ensureCapacity(self.failed_exports.items().len + 1);
|
||||
self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create(
|
||||
self.allocator,
|
||||
src,
|
||||
@ -2197,10 +2166,10 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const
|
||||
}
|
||||
|
||||
try self.symbol_exports.putNoClobber(symbol_name, new_export);
|
||||
self.bin_file.updateDeclExports(self, exported_decl, de_gop.kv.value) catch |err| switch (err) {
|
||||
self.bin_file.updateDeclExports(self, exported_decl, de_gop.entry.value) catch |err| switch (err) {
|
||||
error.OutOfMemory => return error.OutOfMemory,
|
||||
else => {
|
||||
try self.failed_exports.ensureCapacity(self.failed_exports.size + 1);
|
||||
try self.failed_exports.ensureCapacity(self.failed_exports.items().len + 1);
|
||||
self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create(
|
||||
self.allocator,
|
||||
src,
|
||||
@ -2494,7 +2463,7 @@ fn getNextAnonNameIndex(self: *Module) usize {
|
||||
fn lookupDeclName(self: *Module, scope: *Scope, ident_name: []const u8) ?*Decl {
|
||||
const namespace = scope.namespace();
|
||||
const name_hash = namespace.fullyQualifiedNameHash(ident_name);
|
||||
return self.decl_table.getValue(name_hash);
|
||||
return self.decl_table.get(name_hash);
|
||||
}
|
||||
|
||||
fn analyzeInstExport(self: *Module, scope: *Scope, export_inst: *zir.Inst.Export) InnerError!*Inst {
|
||||
@ -3489,8 +3458,8 @@ fn failNode(
|
||||
fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *ErrorMsg) InnerError {
|
||||
{
|
||||
errdefer err_msg.destroy(self.allocator);
|
||||
try self.failed_decls.ensureCapacity(self.failed_decls.size + 1);
|
||||
try self.failed_files.ensureCapacity(self.failed_files.size + 1);
|
||||
try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1);
|
||||
try self.failed_files.ensureCapacity(self.failed_files.items().len + 1);
|
||||
}
|
||||
switch (scope.tag) {
|
||||
.decl => {
|
||||
|
@ -705,7 +705,7 @@ const Function = struct {
|
||||
}
|
||||
|
||||
fn resolveInst(self: *Function, inst: *ir.Inst) !MCValue {
|
||||
if (self.inst_table.getValue(inst)) |mcv| {
|
||||
if (self.inst_table.get(inst)) |mcv| {
|
||||
return mcv;
|
||||
}
|
||||
if (inst.cast(ir.Inst.Constant)) |const_inst| {
|
||||
@ -713,7 +713,7 @@ const Function = struct {
|
||||
try self.inst_table.putNoClobber(inst, mcvalue);
|
||||
return mcvalue;
|
||||
} else {
|
||||
return self.inst_table.getValue(inst).?;
|
||||
return self.inst_table.get(inst).?;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1071,7 +1071,7 @@ pub const ElfFile = struct {
|
||||
try self.file.?.pwriteAll(code, file_offset);
|
||||
|
||||
// Since we updated the vaddr and the size, each corresponding export symbol also needs to be updated.
|
||||
const decl_exports = module.decl_exports.getValue(decl) orelse &[0]*Module.Export{};
|
||||
const decl_exports = module.decl_exports.get(decl) orelse &[0]*Module.Export{};
|
||||
return self.updateDeclExports(module, decl, decl_exports);
|
||||
}
|
||||
|
||||
@ -1093,7 +1093,7 @@ pub const ElfFile = struct {
|
||||
for (exports) |exp| {
|
||||
if (exp.options.section) |section_name| {
|
||||
if (!mem.eql(u8, section_name, ".text")) {
|
||||
try module.failed_exports.ensureCapacity(module.failed_exports.size + 1);
|
||||
try module.failed_exports.ensureCapacity(module.failed_exports.items().len + 1);
|
||||
module.failed_exports.putAssumeCapacityNoClobber(
|
||||
exp,
|
||||
try Module.ErrorMsg.create(self.allocator, 0, "Unimplemented: ExportOptions.section", .{}),
|
||||
@ -1111,7 +1111,7 @@ pub const ElfFile = struct {
|
||||
},
|
||||
.Weak => elf.STB_WEAK,
|
||||
.LinkOnce => {
|
||||
try module.failed_exports.ensureCapacity(module.failed_exports.size + 1);
|
||||
try module.failed_exports.ensureCapacity(module.failed_exports.items().len + 1);
|
||||
module.failed_exports.putAssumeCapacityNoClobber(
|
||||
exp,
|
||||
try Module.ErrorMsg.create(self.allocator, 0, "Unimplemented: GlobalLinkage.LinkOnce", .{}),
|
||||
|
@ -758,7 +758,7 @@ pub const Module = struct {
|
||||
}
|
||||
|
||||
fn writeInstParamToStream(self: Module, stream: var, inst: *Inst, inst_table: *const InstPtrTable) !void {
|
||||
if (inst_table.getValue(inst)) |info| {
|
||||
if (inst_table.get(inst)) |info| {
|
||||
if (info.index) |i| {
|
||||
try stream.print("%{}", .{info.index});
|
||||
} else {
|
||||
@ -843,7 +843,7 @@ const Parser = struct {
|
||||
skipSpace(self);
|
||||
const decl = try parseInstruction(self, &body_context, ident);
|
||||
const ident_index = body_context.instructions.items.len;
|
||||
if (try body_context.name_map.put(ident, decl.inst)) |_| {
|
||||
if (try body_context.name_map.fetchPut(ident, decl.inst)) |_| {
|
||||
return self.fail("redefinition of identifier '{}'", .{ident});
|
||||
}
|
||||
try body_context.instructions.append(decl.inst);
|
||||
@ -929,7 +929,7 @@ const Parser = struct {
|
||||
skipSpace(self);
|
||||
const decl = try parseInstruction(self, null, ident);
|
||||
const ident_index = self.decls.items.len;
|
||||
if (try self.global_name_map.put(ident, decl.inst)) |_| {
|
||||
if (try self.global_name_map.fetchPut(ident, decl.inst)) |_| {
|
||||
return self.fail("redefinition of identifier '{}'", .{ident});
|
||||
}
|
||||
try self.decls.append(self.allocator, decl);
|
||||
@ -1153,7 +1153,7 @@ const Parser = struct {
|
||||
else => continue,
|
||||
};
|
||||
const ident = self.source[name_start..self.i];
|
||||
const kv = map.get(ident) orelse {
|
||||
return map.get(ident) orelse {
|
||||
const bad_name = self.source[name_start - 1 .. self.i];
|
||||
const src = name_start - 1;
|
||||
if (local_ref) {
|
||||
@ -1172,7 +1172,6 @@ const Parser = struct {
|
||||
return &declval.base;
|
||||
}
|
||||
};
|
||||
return kv.value;
|
||||
}
|
||||
|
||||
fn generateName(self: *Parser) ![]u8 {
|
||||
@ -1219,13 +1218,12 @@ const EmitZIR = struct {
|
||||
// by the hash table.
|
||||
var src_decls = std.ArrayList(*IrModule.Decl).init(self.allocator);
|
||||
defer src_decls.deinit();
|
||||
try src_decls.ensureCapacity(self.old_module.decl_table.size);
|
||||
try self.decls.ensureCapacity(self.allocator, self.old_module.decl_table.size);
|
||||
try self.names.ensureCapacity(self.old_module.decl_table.size);
|
||||
try src_decls.ensureCapacity(self.old_module.decl_table.items().len);
|
||||
try self.decls.ensureCapacity(self.allocator, self.old_module.decl_table.items().len);
|
||||
try self.names.ensureCapacity(self.old_module.decl_table.items().len);
|
||||
|
||||
var decl_it = self.old_module.decl_table.iterator();
|
||||
while (decl_it.next()) |kv| {
|
||||
const decl = kv.value;
|
||||
for (self.old_module.decl_table.items()) |entry| {
|
||||
const decl = entry.value;
|
||||
src_decls.appendAssumeCapacity(decl);
|
||||
self.names.putAssumeCapacityNoClobber(mem.spanZ(decl.name), {});
|
||||
}
|
||||
@ -1248,7 +1246,7 @@ const EmitZIR = struct {
|
||||
.codegen_failure,
|
||||
.dependency_failure,
|
||||
.codegen_failure_retryable,
|
||||
=> if (self.old_module.failed_decls.getValue(ir_decl)) |err_msg| {
|
||||
=> if (self.old_module.failed_decls.get(ir_decl)) |err_msg| {
|
||||
const fail_inst = try self.arena.allocator.create(Inst.CompileError);
|
||||
fail_inst.* = .{
|
||||
.base = .{
|
||||
@ -1270,7 +1268,7 @@ const EmitZIR = struct {
|
||||
continue;
|
||||
},
|
||||
}
|
||||
if (self.old_module.export_owners.getValue(ir_decl)) |exports| {
|
||||
if (self.old_module.export_owners.get(ir_decl)) |exports| {
|
||||
for (exports) |module_export| {
|
||||
const symbol_name = try self.emitStringLiteral(module_export.src, module_export.options.name);
|
||||
const export_inst = try self.arena.allocator.create(Inst.Export);
|
||||
@ -1314,7 +1312,7 @@ const EmitZIR = struct {
|
||||
try new_body.inst_table.putNoClobber(inst, new_inst);
|
||||
return new_inst;
|
||||
} else {
|
||||
return new_body.inst_table.getValue(inst).?;
|
||||
return new_body.inst_table.get(inst).?;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1424,7 +1422,7 @@ const EmitZIR = struct {
|
||||
try self.emitBody(body, &inst_table, &instructions);
|
||||
},
|
||||
.sema_failure => {
|
||||
const err_msg = self.old_module.failed_decls.getValue(module_fn.owner_decl).?;
|
||||
const err_msg = self.old_module.failed_decls.get(module_fn.owner_decl).?;
|
||||
const fail_inst = try self.arena.allocator.create(Inst.CompileError);
|
||||
fail_inst.* = .{
|
||||
.base = .{
|
||||
@ -1841,7 +1839,7 @@ const EmitZIR = struct {
|
||||
self.next_auto_name += 1;
|
||||
const gop = try self.names.getOrPut(proposed_name);
|
||||
if (!gop.found_existing) {
|
||||
gop.kv.value = {};
|
||||
gop.entry.value = {};
|
||||
return proposed_name;
|
||||
}
|
||||
}
|
||||
@ -1861,9 +1859,9 @@ const EmitZIR = struct {
|
||||
},
|
||||
.kw_args = .{},
|
||||
};
|
||||
gop.kv.value = try self.emitUnnamedDecl(&primitive_inst.base);
|
||||
gop.entry.value = try self.emitUnnamedDecl(&primitive_inst.base);
|
||||
}
|
||||
return gop.kv.value;
|
||||
return gop.entry.value;
|
||||
}
|
||||
|
||||
fn emitStringLiteral(self: *EmitZIR, src: usize, str: []const u8) !*Decl {
|
||||
|
Loading…
x
Reference in New Issue
Block a user