| ... | @@ -75,7 +75,7 @@ deletion_set: std.ArrayListUnmanaged(*Decl) = .{}, | ... | @@ -75,7 +75,7 @@ deletion_set: std.ArrayListUnmanaged(*Decl) = .{}, |
| 75 | | 75 | |
| 76 | keep_source_files_loaded: bool, | 76 | keep_source_files_loaded: bool, |
| 77 | | 77 | |
| 78 | const DeclTable = std.HashMap(Scope.NameHash, *Decl, Scope.name_hash_hash, Scope.name_hash_eql); | 78 | const DeclTable = std.HashMap(Scope.NameHash, *Decl, Scope.name_hash_hash, Scope.name_hash_eql, false); |
| 79 | | 79 | |
| 80 | const WorkItem = union(enum) { | 80 | const WorkItem = union(enum) { |
| 81 | /// Write the machine code for a Decl to the output file. | 81 | /// Write the machine code for a Decl to the output file. |
| ... | @@ -795,49 +795,38 @@ pub fn deinit(self: *Module) void { | ... | @@ -795,49 +795,38 @@ pub fn deinit(self: *Module) void { |
| 795 | const allocator = self.allocator; | 795 | const allocator = self.allocator; |
| 796 | self.deletion_set.deinit(allocator); | 796 | self.deletion_set.deinit(allocator); |
| 797 | self.work_queue.deinit(); | 797 | self.work_queue.deinit(); |
| 798 | { | 798 | |
| 799 | var it = self.decl_table.iterator(); | 799 | for (self.decl_table.items()) |entry| { |
| 800 | while (it.next()) |kv| { | 800 | entry.value.destroy(allocator); |
| 801 | kv.value.destroy(allocator); | | |
| 802 | } | | |
| 803 | self.decl_table.deinit(); | | |
| 804 | } | 801 | } |
| 805 | { | 802 | self.decl_table.deinit(); |
| 806 | var it = self.failed_decls.iterator(); | 803 | |
| 807 | while (it.next()) |kv| { | 804 | for (self.failed_decls.items()) |entry| { |
| 808 | kv.value.destroy(allocator); | 805 | entry.value.destroy(allocator); |
| 809 | } | | |
| 810 | self.failed_decls.deinit(); | | |
| 811 | } | 806 | } |
| 812 | { | 807 | self.failed_decls.deinit(); |
| 813 | var it = self.failed_files.iterator(); | 808 | |
| 814 | while (it.next()) |kv| { | 809 | for (self.failed_files.items()) |entry| { |
| 815 | kv.value.destroy(allocator); | 810 | entry.value.destroy(allocator); |
| 816 | } | | |
| 817 | self.failed_files.deinit(); | | |
| 818 | } | 811 | } |
| 819 | { | 812 | self.failed_files.deinit(); |
| 820 | var it = self.failed_exports.iterator(); | 813 | |
| 821 | while (it.next()) |kv| { | 814 | for (self.failed_exports.items()) |entry| { |
| 822 | kv.value.destroy(allocator); | 815 | entry.value.destroy(allocator); |
| 823 | } | | |
| 824 | self.failed_exports.deinit(); | | |
| 825 | } | 816 | } |
| 826 | { | 817 | self.failed_exports.deinit(); |
| 827 | var it = self.decl_exports.iterator(); | 818 | |
| 828 | while (it.next()) |kv| { | 819 | for (self.decl_exports.items()) |entry| { |
| 829 | const export_list = kv.value; | 820 | const export_list = entry.value; |
| 830 | allocator.free(export_list); | 821 | allocator.free(export_list); |
| 831 | } | | |
| 832 | self.decl_exports.deinit(); | | |
| 833 | } | 822 | } |
| 834 | { | 823 | self.decl_exports.deinit(); |
| 835 | var it = self.export_owners.iterator(); | 824 | |
| 836 | while (it.next()) |kv| { | 825 | for (self.export_owners.items()) |entry| { |
| 837 | freeExportList(allocator, kv.value); | 826 | freeExportList(allocator, entry.value); |
| 838 | } | | |
| 839 | self.export_owners.deinit(); | | |
| 840 | } | 827 | } |
| | 828 | self.export_owners.deinit(); |
| | 829 | |
| 841 | self.symbol_exports.deinit(); | 830 | self.symbol_exports.deinit(); |
| 842 | self.root_scope.destroy(allocator); | 831 | self.root_scope.destroy(allocator); |
| 843 | self.* = undefined; | 832 | self.* = undefined; |
| ... | @@ -918,9 +907,9 @@ pub fn makeBinFileWritable(self: *Module) !void { | ... | @@ -918,9 +907,9 @@ pub fn makeBinFileWritable(self: *Module) !void { |
| 918 | } | 907 | } |
| 919 | | 908 | |
| 920 | pub fn totalErrorCount(self: *Module) usize { | 909 | pub fn totalErrorCount(self: *Module) usize { |
| 921 | const total = self.failed_decls.size + | 910 | const total = self.failed_decls.items().len + |
| 922 | self.failed_files.size + | 911 | self.failed_files.items().len + |
| 923 | self.failed_exports.size; | 912 | self.failed_exports.items().len; |
| 924 | return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total; | 913 | return if (total == 0) @boolToInt(self.link_error_flags.no_entry_point_found) else total; |
| 925 | } | 914 | } |
| 926 | | 915 | |
| ... | @@ -931,32 +920,23 @@ pub fn getAllErrorsAlloc(self: *Module) !AllErrors { | ... | @@ -931,32 +920,23 @@ pub fn getAllErrorsAlloc(self: *Module) !AllErrors { |
| 931 | var errors = std.ArrayList(AllErrors.Message).init(self.allocator); | 920 | var errors = std.ArrayList(AllErrors.Message).init(self.allocator); |
| 932 | defer errors.deinit(); | 921 | defer errors.deinit(); |
| 933 | | 922 | |
| 934 | { | 923 | for (self.failed_files.items()) |entry| { |
| 935 | var it = self.failed_files.iterator(); | 924 | const scope = entry.key; |
| 936 | while (it.next()) |kv| { | 925 | const err_msg = entry.value; |
| 937 | const scope = kv.key; | 926 | const source = try scope.getSource(self); |
| 938 | const err_msg = kv.value; | 927 | try AllErrors.add(&arena, &errors, scope.subFilePath(), source, err_msg.*); |
| 939 | const source = try scope.getSource(self); | | |
| 940 | try AllErrors.add(&arena, &errors, scope.subFilePath(), source, err_msg.*); | | |
| 941 | } | | |
| 942 | } | 928 | } |
| 943 | { | 929 | for (self.failed_decls.items()) |entry| { |
| 944 | var it = self.failed_decls.iterator(); | 930 | const decl = entry.key; |
| 945 | while (it.next()) |kv| { | 931 | const err_msg = entry.value; |
| 946 | const decl = kv.key; | 932 | const source = try decl.scope.getSource(self); |
| 947 | const err_msg = kv.value; | 933 | try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*); |
| 948 | const source = try decl.scope.getSource(self); | | |
| 949 | try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*); | | |
| 950 | } | | |
| 951 | } | 934 | } |
| 952 | { | 935 | for (self.failed_exports.items()) |entry| { |
| 953 | var it = self.failed_exports.iterator(); | 936 | const decl = entry.key.owner_decl; |
| 954 | while (it.next()) |kv| { | 937 | const err_msg = entry.value; |
| 955 | const decl = kv.key.owner_decl; | 938 | const source = try decl.scope.getSource(self); |
| 956 | const err_msg = kv.value; | 939 | try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*); |
| 957 | const source = try decl.scope.getSource(self); | | |
| 958 | try AllErrors.add(&arena, &errors, decl.scope.subFilePath(), source, err_msg.*); | | |
| 959 | } | | |
| 960 | } | 940 | } |
| 961 | | 941 | |
| 962 | if (errors.items.len == 0 and self.link_error_flags.no_entry_point_found) { | 942 | if (errors.items.len == 0 and self.link_error_flags.no_entry_point_found) { |
| ... | @@ -1016,7 +996,7 @@ pub fn performAllTheWork(self: *Module) error{OutOfMemory}!void { | ... | @@ -1016,7 +996,7 @@ pub fn performAllTheWork(self: *Module) error{OutOfMemory}!void { |
| 1016 | decl.analysis = .dependency_failure; | 996 | decl.analysis = .dependency_failure; |
| 1017 | }, | 997 | }, |
| 1018 | else => { | 998 | else => { |
| 1019 | try self.failed_decls.ensureCapacity(self.failed_decls.size + 1); | 999 | try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1); |
| 1020 | self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create( | 1000 | self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create( |
| 1021 | self.allocator, | 1001 | self.allocator, |
| 1022 | decl.src(), | 1002 | decl.src(), |
| ... | @@ -1086,7 +1066,7 @@ fn ensureDeclAnalyzed(self: *Module, decl: *Decl) InnerError!void { | ... | @@ -1086,7 +1066,7 @@ fn ensureDeclAnalyzed(self: *Module, decl: *Decl) InnerError!void { |
| 1086 | error.OutOfMemory => return error.OutOfMemory, | 1066 | error.OutOfMemory => return error.OutOfMemory, |
| 1087 | error.AnalysisFail => return error.AnalysisFail, | 1067 | error.AnalysisFail => return error.AnalysisFail, |
| 1088 | else => { | 1068 | else => { |
| 1089 | try self.failed_decls.ensureCapacity(self.failed_decls.size + 1); | 1069 | try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1); |
| 1090 | self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create( | 1070 | self.failed_decls.putAssumeCapacityNoClobber(decl, try ErrorMsg.create( |
| 1091 | self.allocator, | 1071 | self.allocator, |
| 1092 | decl.src(), | 1072 | decl.src(), |
| ... | @@ -1636,7 +1616,7 @@ fn declareDeclDependency(self: *Module, depender: *Decl, dependee: *Decl) !void | ... | @@ -1636,7 +1616,7 @@ fn declareDeclDependency(self: *Module, depender: *Decl, dependee: *Decl) !void |
| 1636 | fn getSrcModule(self: *Module, root_scope: *Scope.ZIRModule) !*zir.Module { | 1616 | fn getSrcModule(self: *Module, root_scope: *Scope.ZIRModule) !*zir.Module { |
| 1637 | switch (root_scope.status) { | 1617 | switch (root_scope.status) { |
| 1638 | .never_loaded, .unloaded_success => { | 1618 | .never_loaded, .unloaded_success => { |
| 1639 | try self.failed_files.ensureCapacity(self.failed_files.size + 1); | 1619 | try self.failed_files.ensureCapacity(self.failed_files.items().len + 1); |
| 1640 | | 1620 | |
| 1641 | const source = try root_scope.getSource(self); | 1621 | const source = try root_scope.getSource(self); |
| 1642 | | 1622 | |
| ... | @@ -1677,7 +1657,7 @@ fn getAstTree(self: *Module, root_scope: *Scope.File) !*ast.Tree { | ... | @@ -1677,7 +1657,7 @@ fn getAstTree(self: *Module, root_scope: *Scope.File) !*ast.Tree { |
| 1677 | | 1657 | |
| 1678 | switch (root_scope.status) { | 1658 | switch (root_scope.status) { |
| 1679 | .never_loaded, .unloaded_success => { | 1659 | .never_loaded, .unloaded_success => { |
| 1680 | try self.failed_files.ensureCapacity(self.failed_files.size + 1); | 1660 | try self.failed_files.ensureCapacity(self.failed_files.items().len + 1); |
| 1681 | | 1661 | |
| 1682 | const source = try root_scope.getSource(self); | 1662 | const source = try root_scope.getSource(self); |
| 1683 | | 1663 | |
| ... | @@ -1745,8 +1725,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { | ... | @@ -1745,8 +1725,7 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { |
| 1745 | const name = tree.tokenSliceLoc(name_loc); | 1725 | const name = tree.tokenSliceLoc(name_loc); |
| 1746 | const name_hash = root_scope.fullyQualifiedNameHash(name); | 1726 | const name_hash = root_scope.fullyQualifiedNameHash(name); |
| 1747 | const contents_hash = std.zig.hashSrc(tree.getNodeSource(src_decl)); | 1727 | const contents_hash = std.zig.hashSrc(tree.getNodeSource(src_decl)); |
| 1748 | if (self.decl_table.get(name_hash)) |kv| { | 1728 | if (self.decl_table.get(name_hash)) |decl| { |
| 1749 | const decl = kv.value; | | |
| 1750 | // Update the AST Node index of the decl, even if its contents are unchanged, it may | 1729 | // Update the AST Node index of the decl, even if its contents are unchanged, it may |
| 1751 | // have been re-ordered. | 1730 | // have been re-ordered. |
| 1752 | decl.src_index = decl_i; | 1731 | decl.src_index = decl_i; |
| ... | @@ -1774,14 +1753,11 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { | ... | @@ -1774,14 +1753,11 @@ fn analyzeRootSrcFile(self: *Module, root_scope: *Scope.File) !void { |
| 1774 | // TODO also look for global variable declarations | 1753 | // TODO also look for global variable declarations |
| 1775 | // TODO also look for comptime blocks and exported globals | 1754 | // TODO also look for comptime blocks and exported globals |
| 1776 | } | 1755 | } |
| 1777 | { | 1756 | // Handle explicitly deleted decls from the source code. Not to be confused |
| 1778 | // Handle explicitly deleted decls from the source code. Not to be confused | 1757 | // with when we delete decls because they are no longer referenced. |
| 1779 | // with when we delete decls because they are no longer referenced. | 1758 | for (deleted_decls.items()) |entry| { |
| 1780 | var it = deleted_decls.iterator(); | 1759 | //std.debug.warn("noticed '{}' deleted from source\n", .{entry.key.name}); |
| 1781 | while (it.next()) |kv| { | 1760 | try self.deleteDecl(entry.key); |
| 1782 | //std.debug.warn("noticed '{}' deleted from source\n", .{kv.key.name}); | | |
| 1783 | try self.deleteDecl(kv.key); | | |
| 1784 | } | | |
| 1785 | } | 1761 | } |
| 1786 | } | 1762 | } |
| 1787 | | 1763 | |
| ... | @@ -1800,18 +1776,14 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void { | ... | @@ -1800,18 +1776,14 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void { |
| 1800 | // we know which ones have been deleted. | 1776 | // we know which ones have been deleted. |
| 1801 | var deleted_decls = std.AutoHashMap(*Decl, void).init(self.allocator); | 1777 | var deleted_decls = std.AutoHashMap(*Decl, void).init(self.allocator); |
| 1802 | defer deleted_decls.deinit(); | 1778 | defer deleted_decls.deinit(); |
| 1803 | try deleted_decls.ensureCapacity(self.decl_table.size); | 1779 | try deleted_decls.ensureCapacity(self.decl_table.items().len); |
| 1804 | { | 1780 | for (self.decl_table.items()) |entry| { |
| 1805 | var it = self.decl_table.iterator(); | 1781 | deleted_decls.putAssumeCapacityNoClobber(entry.value, {}); |
| 1806 | while (it.next()) |kv| { | | |
| 1807 | deleted_decls.putAssumeCapacityNoClobber(kv.value, {}); | | |
| 1808 | } | | |
| 1809 | } | 1782 | } |
| 1810 | | 1783 | |
| 1811 | for (src_module.decls) |src_decl, decl_i| { | 1784 | for (src_module.decls) |src_decl, decl_i| { |
| 1812 | const name_hash = root_scope.fullyQualifiedNameHash(src_decl.name); | 1785 | const name_hash = root_scope.fullyQualifiedNameHash(src_decl.name); |
| 1813 | if (self.decl_table.get(name_hash)) |kv| { | 1786 | if (self.decl_table.get(name_hash)) |decl| { |
| 1814 | const decl = kv.value; | | |
| 1815 | deleted_decls.removeAssertDiscard(decl); | 1787 | deleted_decls.removeAssertDiscard(decl); |
| 1816 | //std.debug.warn("'{}' contents: '{}'\n", .{ src_decl.name, src_decl.contents }); | 1788 | //std.debug.warn("'{}' contents: '{}'\n", .{ src_decl.name, src_decl.contents }); |
| 1817 | if (!srcHashEql(src_decl.contents_hash, decl.contents_hash)) { | 1789 | if (!srcHashEql(src_decl.contents_hash, decl.contents_hash)) { |
| ... | @@ -1835,14 +1807,11 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void { | ... | @@ -1835,14 +1807,11 @@ fn analyzeRootZIRModule(self: *Module, root_scope: *Scope.ZIRModule) !void { |
| 1835 | for (exports_to_resolve.items) |export_decl| { | 1807 | for (exports_to_resolve.items) |export_decl| { |
| 1836 | _ = try self.resolveZirDecl(&root_scope.base, export_decl); | 1808 | _ = try self.resolveZirDecl(&root_scope.base, export_decl); |
| 1837 | } | 1809 | } |
| 1838 | { | 1810 | // Handle explicitly deleted decls from the source code. Not to be confused |
| 1839 | // Handle explicitly deleted decls from the source code. Not to be confused | 1811 | // with when we delete decls because they are no longer referenced. |
| 1840 | // with when we delete decls because they are no longer referenced. | 1812 | for (deleted_decls.items()) |entry| { |
| 1841 | var it = deleted_decls.iterator(); | 1813 | //std.debug.warn("noticed '{}' deleted from source\n", .{entry.key.name}); |
| 1842 | while (it.next()) |kv| { | 1814 | try self.deleteDecl(entry.key); |
| 1843 | //std.debug.warn("noticed '{}' deleted from source\n", .{kv.key.name}); | | |
| 1844 | try self.deleteDecl(kv.key); | | |
| 1845 | } | | |
| 1846 | } | 1815 | } |
| 1847 | } | 1816 | } |
| 1848 | | 1817 | |
| ... | @@ -1888,7 +1857,7 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void { | ... | @@ -1888,7 +1857,7 @@ fn deleteDeclExports(self: *Module, decl: *Decl) void { |
| 1888 | const kv = self.export_owners.remove(decl) orelse return; | 1857 | const kv = self.export_owners.remove(decl) orelse return; |
| 1889 | | 1858 | |
| 1890 | for (kv.value) |exp| { | 1859 | for (kv.value) |exp| { |
| 1891 | if (self.decl_exports.get(exp.exported_decl)) |decl_exports_kv| { | 1860 | if (self.decl_exports.getEntry(exp.exported_decl)) |decl_exports_kv| { |
| 1892 | // Remove exports with owner_decl matching the regenerating decl. | 1861 | // Remove exports with owner_decl matching the regenerating decl. |
| 1893 | const list = decl_exports_kv.value; | 1862 | const list = decl_exports_kv.value; |
| 1894 | var i: usize = 0; | 1863 | var i: usize = 0; |
| ... | @@ -1983,7 +1952,7 @@ fn createNewDecl( | ... | @@ -1983,7 +1952,7 @@ fn createNewDecl( |
| 1983 | name_hash: Scope.NameHash, | 1952 | name_hash: Scope.NameHash, |
| 1984 | contents_hash: std.zig.SrcHash, | 1953 | contents_hash: std.zig.SrcHash, |
| 1985 | ) !*Decl { | 1954 | ) !*Decl { |
| 1986 | try self.decl_table.ensureCapacity(self.decl_table.size + 1); | 1955 | try self.decl_table.ensureCapacity(self.decl_table.items().len + 1); |
| 1987 | const new_decl = try self.allocateNewDecl(scope, src_index, contents_hash); | 1956 | const new_decl = try self.allocateNewDecl(scope, src_index, contents_hash); |
| 1988 | errdefer self.allocator.destroy(new_decl); | 1957 | errdefer self.allocator.destroy(new_decl); |
| 1989 | new_decl.name = try mem.dupeZ(self.allocator, u8, decl_name); | 1958 | 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! | ... | @@ -2043,7 +2012,7 @@ fn resolveZirDecl(self: *Module, scope: *Scope, src_decl: *zir.Decl) InnerError! |
| 2043 | | 2012 | |
| 2044 | fn resolveZirDeclHavingIndex(self: *Module, scope: *Scope, src_decl: *zir.Decl, src_index: usize) InnerError!*Decl { | 2013 | fn resolveZirDeclHavingIndex(self: *Module, scope: *Scope, src_decl: *zir.Decl, src_index: usize) InnerError!*Decl { |
| 2045 | const name_hash = scope.namespace().fullyQualifiedNameHash(src_decl.name); | 2014 | const name_hash = scope.namespace().fullyQualifiedNameHash(src_decl.name); |
| 2046 | const decl = self.decl_table.getValue(name_hash).?; | 2015 | const decl = self.decl_table.get(name_hash).?; |
| 2047 | decl.src_index = src_index; | 2016 | decl.src_index = src_index; |
| 2048 | try self.ensureDeclAnalyzed(decl); | 2017 | try self.ensureDeclAnalyzed(decl); |
| 2049 | return decl; | 2018 | return decl; |
| ... | @@ -2148,8 +2117,8 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const | ... | @@ -2148,8 +2117,8 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const |
| 2148 | else => return self.fail(scope, src, "unable to export type '{}'", .{typed_value.ty}), | 2117 | else => return self.fail(scope, src, "unable to export type '{}'", .{typed_value.ty}), |
| 2149 | } | 2118 | } |
| 2150 | | 2119 | |
| 2151 | try self.decl_exports.ensureCapacity(self.decl_exports.size + 1); | 2120 | try self.decl_exports.ensureCapacity(self.decl_exports.items().len + 1); |
| 2152 | try self.export_owners.ensureCapacity(self.export_owners.size + 1); | 2121 | try self.export_owners.ensureCapacity(self.export_owners.items().len + 1); |
| 2153 | | 2122 | |
| 2154 | const new_export = try self.allocator.create(Export); | 2123 | const new_export = try self.allocator.create(Export); |
| 2155 | errdefer self.allocator.destroy(new_export); | 2124 | errdefer self.allocator.destroy(new_export); |
| ... | @@ -2168,23 +2137,23 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const | ... | @@ -2168,23 +2137,23 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const |
| 2168 | // Add to export_owners table. | 2137 | // Add to export_owners table. |
| 2169 | const eo_gop = self.export_owners.getOrPut(owner_decl) catch unreachable; | 2138 | const eo_gop = self.export_owners.getOrPut(owner_decl) catch unreachable; |
| 2170 | if (!eo_gop.found_existing) { | 2139 | if (!eo_gop.found_existing) { |
| 2171 | eo_gop.kv.value = &[0]*Export{}; | 2140 | eo_gop.entry.value = &[0]*Export{}; |
| 2172 | } | 2141 | } |
| 2173 | eo_gop.kv.value = try self.allocator.realloc(eo_gop.kv.value, eo_gop.kv.value.len + 1); | 2142 | eo_gop.entry.value = try self.allocator.realloc(eo_gop.entry.value, eo_gop.entry.value.len + 1); |
| 2174 | eo_gop.kv.value[eo_gop.kv.value.len - 1] = new_export; | 2143 | eo_gop.entry.value[eo_gop.entry.value.len - 1] = new_export; |
| 2175 | errdefer eo_gop.kv.value = self.allocator.shrink(eo_gop.kv.value, eo_gop.kv.value.len - 1); | 2144 | errdefer eo_gop.entry.value = self.allocator.shrink(eo_gop.entry.value, eo_gop.entry.value.len - 1); |
| 2176 | | 2145 | |
| 2177 | // Add to exported_decl table. | 2146 | // Add to exported_decl table. |
| 2178 | const de_gop = self.decl_exports.getOrPut(exported_decl) catch unreachable; | 2147 | const de_gop = self.decl_exports.getOrPut(exported_decl) catch unreachable; |
| 2179 | if (!de_gop.found_existing) { | 2148 | if (!de_gop.found_existing) { |
| 2180 | de_gop.kv.value = &[0]*Export{}; | 2149 | de_gop.entry.value = &[0]*Export{}; |
| 2181 | } | 2150 | } |
| 2182 | de_gop.kv.value = try self.allocator.realloc(de_gop.kv.value, de_gop.kv.value.len + 1); | 2151 | de_gop.entry.value = try self.allocator.realloc(de_gop.entry.value, de_gop.entry.value.len + 1); |
| 2183 | de_gop.kv.value[de_gop.kv.value.len - 1] = new_export; | 2152 | de_gop.entry.value[de_gop.entry.value.len - 1] = new_export; |
| 2184 | errdefer de_gop.kv.value = self.allocator.shrink(de_gop.kv.value, de_gop.kv.value.len - 1); | 2153 | errdefer de_gop.entry.value = self.allocator.shrink(de_gop.entry.value, de_gop.entry.value.len - 1); |
| 2185 | | 2154 | |
| 2186 | if (self.symbol_exports.get(symbol_name)) |_| { | 2155 | if (self.symbol_exports.get(symbol_name)) |_| { |
| 2187 | try self.failed_exports.ensureCapacity(self.failed_exports.size + 1); | 2156 | try self.failed_exports.ensureCapacity(self.failed_exports.items().len + 1); |
| 2188 | self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create( | 2157 | self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create( |
| 2189 | self.allocator, | 2158 | self.allocator, |
| 2190 | src, | 2159 | src, |
| ... | @@ -2197,10 +2166,10 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const | ... | @@ -2197,10 +2166,10 @@ fn analyzeExport(self: *Module, scope: *Scope, src: usize, symbol_name: []const |
| 2197 | } | 2166 | } |
| 2198 | | 2167 | |
| 2199 | try self.symbol_exports.putNoClobber(symbol_name, new_export); | 2168 | try self.symbol_exports.putNoClobber(symbol_name, new_export); |
| 2200 | self.bin_file.updateDeclExports(self, exported_decl, de_gop.kv.value) catch |err| switch (err) { | 2169 | self.bin_file.updateDeclExports(self, exported_decl, de_gop.entry.value) catch |err| switch (err) { |
| 2201 | error.OutOfMemory => return error.OutOfMemory, | 2170 | error.OutOfMemory => return error.OutOfMemory, |
| 2202 | else => { | 2171 | else => { |
| 2203 | try self.failed_exports.ensureCapacity(self.failed_exports.size + 1); | 2172 | try self.failed_exports.ensureCapacity(self.failed_exports.items().len + 1); |
| 2204 | self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create( | 2173 | self.failed_exports.putAssumeCapacityNoClobber(new_export, try ErrorMsg.create( |
| 2205 | self.allocator, | 2174 | self.allocator, |
| 2206 | src, | 2175 | src, |
| ... | @@ -2494,7 +2463,7 @@ fn getNextAnonNameIndex(self: *Module) usize { | ... | @@ -2494,7 +2463,7 @@ fn getNextAnonNameIndex(self: *Module) usize { |
| 2494 | fn lookupDeclName(self: *Module, scope: *Scope, ident_name: []const u8) ?*Decl { | 2463 | fn lookupDeclName(self: *Module, scope: *Scope, ident_name: []const u8) ?*Decl { |
| 2495 | const namespace = scope.namespace(); | 2464 | const namespace = scope.namespace(); |
| 2496 | const name_hash = namespace.fullyQualifiedNameHash(ident_name); | 2465 | const name_hash = namespace.fullyQualifiedNameHash(ident_name); |
| 2497 | return self.decl_table.getValue(name_hash); | 2466 | return self.decl_table.get(name_hash); |
| 2498 | } | 2467 | } |
| 2499 | | 2468 | |
| 2500 | fn analyzeInstExport(self: *Module, scope: *Scope, export_inst: *zir.Inst.Export) InnerError!*Inst { | 2469 | fn analyzeInstExport(self: *Module, scope: *Scope, export_inst: *zir.Inst.Export) InnerError!*Inst { |
| ... | @@ -3489,8 +3458,8 @@ fn failNode( | ... | @@ -3489,8 +3458,8 @@ fn failNode( |
| 3489 | fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *ErrorMsg) InnerError { | 3458 | fn failWithOwnedErrorMsg(self: *Module, scope: *Scope, src: usize, err_msg: *ErrorMsg) InnerError { |
| 3490 | { | 3459 | { |
| 3491 | errdefer err_msg.destroy(self.allocator); | 3460 | errdefer err_msg.destroy(self.allocator); |
| 3492 | try self.failed_decls.ensureCapacity(self.failed_decls.size + 1); | 3461 | try self.failed_decls.ensureCapacity(self.failed_decls.items().len + 1); |
| 3493 | try self.failed_files.ensureCapacity(self.failed_files.size + 1); | 3462 | try self.failed_files.ensureCapacity(self.failed_files.items().len + 1); |
| 3494 | } | 3463 | } |
| 3495 | switch (scope.tag) { | 3464 | switch (scope.tag) { |
| 3496 | .decl => { | 3465 | .decl => { |