authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-04 03:52:37-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-04 03:52:37-07:00
log2c8958f4549d6076385d80c73f2830306728b081
tree0719a28a2e4aa1e9f7f85d504f50aecc8d8b841d
parent44d5d008d025c7f081d87da393363f40616bfe47

import segregation for types

See #3

3 files changed, 39 insertions(+), 31 deletions(-)

src/analyze.cpp+20-13
...@@ -142,15 +142,16 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool...@@ -142,15 +142,16 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool
142 entry->data.pointer.child_type = child_type;142 entry->data.pointer.child_type = child_type;
143 entry->data.pointer.is_const = is_const;143 entry->data.pointer.is_const = is_const;
144144
145 g->type_table.put(&entry->name, entry);
146 *parent_pointer = entry;145 *parent_pointer = entry;
147 return entry;146 return entry;
148 }147 }
149}148}
150149
151static TypeTableEntry *get_maybe_type(CodeGen *g, TypeTableEntry *child_type) {150static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, TypeTableEntry *child_type) {
152 if (child_type->maybe_parent) {151 if (child_type->maybe_parent) {
153 return child_type->maybe_parent;152 TypeTableEntry *entry = child_type->maybe_parent;
153 import->type_table.put(&entry->name, entry);
154 return entry;
154 } else {155 } else {
155 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdMaybe);156 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdMaybe);
156 // create a struct with a boolean whether this is the null value157 // create a struct with a boolean whether this is the null value
...@@ -193,16 +194,20 @@ static TypeTableEntry *get_maybe_type(CodeGen *g, TypeTableEntry *child_type) {...@@ -193,16 +194,20 @@ static TypeTableEntry *get_maybe_type(CodeGen *g, TypeTableEntry *child_type) {
193194
194 entry->data.maybe.child_type = child_type;195 entry->data.maybe.child_type = child_type;
195196
196 g->type_table.put(&entry->name, entry);197 import->type_table.put(&entry->name, entry);
197 child_type->maybe_parent = entry;198 child_type->maybe_parent = entry;
198 return entry;199 return entry;
199 }200 }
200}201}
201202
202static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, uint64_t array_size) {203static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import,
204 TypeTableEntry *child_type, uint64_t array_size)
205{
203 auto existing_entry = child_type->arrays_by_size.maybe_get(array_size);206 auto existing_entry = child_type->arrays_by_size.maybe_get(array_size);
204 if (existing_entry) {207 if (existing_entry) {
205 return existing_entry->value;208 TypeTableEntry *entry = existing_entry->value;
209 import->type_table.put(&entry->name, entry);
210 return entry;
206 } else {211 } else {
207 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdArray);212 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdArray);
208 entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);213 entry->type_ref = LLVMArrayType(child_type->type_ref, array_size);
...@@ -217,7 +222,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, ui...@@ -217,7 +222,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, TypeTableEntry *child_type, ui
217 entry->data.array.child_type = child_type;222 entry->data.array.child_type = child_type;
218 entry->data.array.len = array_size;223 entry->data.array.len = array_size;
219224
220 g->type_table.put(&entry->name, entry);225 import->type_table.put(&entry->name, entry);
221 child_type->arrays_by_size.put(array_size, entry);226 child_type->arrays_by_size.put(array_size, entry);
222 return entry;227 return entry;
223 }228 }
...@@ -231,7 +236,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry...@@ -231,7 +236,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry
231 case AstNodeTypeTypePrimitive:236 case AstNodeTypeTypePrimitive:
232 {237 {
233 Buf *name = &node->data.type.primitive_name;238 Buf *name = &node->data.type.primitive_name;
234 auto table_entry = g->type_table.maybe_get(name);239 auto table_entry = import->type_table.maybe_get(name);
235 if (table_entry) {240 if (table_entry) {
236 type_node->entry = table_entry->value;241 type_node->entry = table_entry->value;
237 } else {242 } else {
...@@ -268,7 +273,8 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry...@@ -268,7 +273,8 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry
268 if (size_node->type == NodeTypeNumberLiteral &&273 if (size_node->type == NodeTypeNumberLiteral &&
269 is_num_lit_unsigned(size_node->data.number_literal.kind))274 is_num_lit_unsigned(size_node->data.number_literal.kind))
270 {275 {
271 type_node->entry = get_array_type(g, child_type, size_node->data.number_literal.data.x_uint);276 type_node->entry = get_array_type(g, import, child_type,
277 size_node->data.number_literal.data.x_uint);
272 } else {278 } else {
273 add_node_error(g, size_node,279 add_node_error(g, size_node,
274 buf_create_from_str("array size must be literal unsigned integer"));280 buf_create_from_str("array size must be literal unsigned integer"));
...@@ -287,7 +293,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry...@@ -287,7 +293,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry
287 } else if (child_type->id == TypeTableEntryIdInvalid) {293 } else if (child_type->id == TypeTableEntryIdInvalid) {
288 return child_type;294 return child_type;
289 }295 }
290 type_node->entry = get_maybe_type(g, child_type);296 type_node->entry = get_maybe_type(g, import, child_type);
291 return type_node->entry;297 return type_node->entry;
292 }298 }
293 case AstNodeTypeTypeCompilerExpr:299 case AstNodeTypeTypeCompilerExpr:
...@@ -651,7 +657,7 @@ static void preview_types(CodeGen *g, ImportTableEntry *import, AstNode *node) {...@@ -651,7 +657,7 @@ static void preview_types(CodeGen *g, ImportTableEntry *import, AstNode *node) {
651 StructDeclNode *struct_codegen = &node->codegen_node->data.struct_decl_node;657 StructDeclNode *struct_codegen = &node->codegen_node->data.struct_decl_node;
652658
653 Buf *name = &node->data.struct_decl.name;659 Buf *name = &node->data.struct_decl.name;
654 auto table_entry = g->type_table.maybe_get(name);660 auto table_entry = import->type_table.maybe_get(name);
655 if (table_entry) {661 if (table_entry) {
656 struct_codegen->type_entry = table_entry->value;662 struct_codegen->type_entry = table_entry->value;
657 add_node_error(g, node,663 add_node_error(g, node,
...@@ -667,7 +673,7 @@ static void preview_types(CodeGen *g, ImportTableEntry *import, AstNode *node) {...@@ -667,7 +673,7 @@ static void preview_types(CodeGen *g, ImportTableEntry *import, AstNode *node) {
667 buf_init_from_buf(&entry->name, name);673 buf_init_from_buf(&entry->name, name);
668 // put off adding the debug type until we do the full struct body674 // put off adding the debug type until we do the full struct body
669 // this type is incomplete until we do another pass675 // this type is incomplete until we do another pass
670 g->type_table.put(&entry->name, entry);676 import->type_table.put(&entry->name, entry);
671 struct_codegen->type_entry = entry;677 struct_codegen->type_entry = entry;
672 }678 }
673 break;679 break;
...@@ -1809,7 +1815,8 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import,...@@ -1809,7 +1815,8 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import,
1809 if (node->data.string_literal.c) {1815 if (node->data.string_literal.c) {
1810 return_type = g->builtin_types.entry_c_string_literal;1816 return_type = g->builtin_types.entry_c_string_literal;
1811 } else {1817 } else {
1812 return_type = get_array_type(g, g->builtin_types.entry_u8, buf_len(&node->data.string_literal.buf));1818 return_type = get_array_type(g, import, g->builtin_types.entry_u8,
1819 buf_len(&node->data.string_literal.buf));
1813 }1820 }
1814 break;1821 break;
1815 case NodeTypeCharLiteral:1822 case NodeTypeCharLiteral:
src/analyze.hpp+1-1
...@@ -110,6 +110,7 @@ struct ImportTableEntry {...@@ -110,6 +110,7 @@ struct ImportTableEntry {
110110
111 // reminder: hash tables must be initialized before use111 // reminder: hash tables must be initialized before use
112 HashMap<Buf *, FnTableEntry *, buf_hash, buf_eql_buf> fn_table;112 HashMap<Buf *, FnTableEntry *, buf_hash, buf_eql_buf> fn_table;
113 HashMap<Buf *, TypeTableEntry *, buf_hash, buf_eql_buf> type_table;
113};114};
114115
115struct LabelTableEntry {116struct LabelTableEntry {
...@@ -151,7 +152,6 @@ struct CodeGen {...@@ -151,7 +152,6 @@ struct CodeGen {
151152
152 // reminder: hash tables must be initialized before use153 // reminder: hash tables must be initialized before use
153 HashMap<Buf *, LLVMValueRef, buf_hash, buf_eql_buf> str_table;154 HashMap<Buf *, LLVMValueRef, buf_hash, buf_eql_buf> str_table;
154 HashMap<Buf *, TypeTableEntry *, buf_hash, buf_eql_buf> type_table;
155 HashMap<Buf *, bool, buf_hash, buf_eql_buf> link_table;155 HashMap<Buf *, bool, buf_hash, buf_eql_buf> link_table;
156 HashMap<Buf *, ImportTableEntry *, buf_hash, buf_eql_buf> import_table;156 HashMap<Buf *, ImportTableEntry *, buf_hash, buf_eql_buf> import_table;
157157
src/codegen.cpp+18-17
...@@ -20,7 +20,6 @@...@@ -20,7 +20,6 @@
20CodeGen *codegen_create(Buf *root_source_dir) {20CodeGen *codegen_create(Buf *root_source_dir) {
21 CodeGen *g = allocate<CodeGen>(1);21 CodeGen *g = allocate<CodeGen>(1);
22 g->str_table.init(32);22 g->str_table.init(32);
23 g->type_table.init(32);
24 g->link_table.init(32);23 g->link_table.init(32);
25 g->import_table.init(32);24 g->import_table.init(32);
26 g->build_type = CodeGenBuildTypeDebug;25 g->build_type = CodeGenBuildTypeDebug;
...@@ -1695,7 +1694,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1695,7 +1694,6 @@ static void define_builtin_types(CodeGen *g) {
1695 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1694 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1696 entry->size_in_bits, entry->align_in_bits,1695 entry->size_in_bits, entry->align_in_bits,
1697 LLVMZigEncoding_DW_ATE_unsigned());1696 LLVMZigEncoding_DW_ATE_unsigned());
1698 g->type_table.put(&entry->name, entry);
1699 g->builtin_types.entry_bool = entry;1697 g->builtin_types.entry_bool = entry;
1700 }1698 }
1701 {1699 {
...@@ -1707,7 +1705,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1707,7 +1705,6 @@ static void define_builtin_types(CodeGen *g) {
1707 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1705 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1708 entry->size_in_bits, entry->align_in_bits,1706 entry->size_in_bits, entry->align_in_bits,
1709 LLVMZigEncoding_DW_ATE_unsigned());1707 LLVMZigEncoding_DW_ATE_unsigned());
1710 g->type_table.put(&entry->name, entry);
1711 g->builtin_types.entry_u8 = entry;1708 g->builtin_types.entry_u8 = entry;
1712 }1709 }
1713 {1710 {
...@@ -1720,7 +1717,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1720,7 +1717,6 @@ static void define_builtin_types(CodeGen *g) {
1720 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1717 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1721 entry->size_in_bits, entry->align_in_bits,1718 entry->size_in_bits, entry->align_in_bits,
1722 LLVMZigEncoding_DW_ATE_unsigned());1719 LLVMZigEncoding_DW_ATE_unsigned());
1723 g->type_table.put(&entry->name, entry);
1724 g->builtin_types.entry_u16 = entry;1720 g->builtin_types.entry_u16 = entry;
1725 }1721 }
1726 {1722 {
...@@ -1733,7 +1729,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1733,7 +1729,6 @@ static void define_builtin_types(CodeGen *g) {
1733 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1729 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1734 entry->size_in_bits, entry->align_in_bits,1730 entry->size_in_bits, entry->align_in_bits,
1735 LLVMZigEncoding_DW_ATE_unsigned());1731 LLVMZigEncoding_DW_ATE_unsigned());
1736 g->type_table.put(&entry->name, entry);
1737 g->builtin_types.entry_u32 = entry;1732 g->builtin_types.entry_u32 = entry;
1738 }1733 }
1739 {1734 {
...@@ -1746,7 +1741,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1746,7 +1741,6 @@ static void define_builtin_types(CodeGen *g) {
1746 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1741 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1747 entry->size_in_bits, entry->align_in_bits,1742 entry->size_in_bits, entry->align_in_bits,
1748 LLVMZigEncoding_DW_ATE_unsigned());1743 LLVMZigEncoding_DW_ATE_unsigned());
1749 g->type_table.put(&entry->name, entry);
1750 g->builtin_types.entry_u64 = entry;1744 g->builtin_types.entry_u64 = entry;
1751 }1745 }
1752 g->builtin_types.entry_c_string_literal = get_pointer_to_type(g, g->builtin_types.entry_u8, true);1746 g->builtin_types.entry_c_string_literal = get_pointer_to_type(g, g->builtin_types.entry_u8, true);
...@@ -1760,7 +1754,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1760,7 +1754,6 @@ static void define_builtin_types(CodeGen *g) {
1760 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1754 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1761 entry->size_in_bits, entry->align_in_bits,1755 entry->size_in_bits, entry->align_in_bits,
1762 LLVMZigEncoding_DW_ATE_signed());1756 LLVMZigEncoding_DW_ATE_signed());
1763 g->type_table.put(&entry->name, entry);
1764 g->builtin_types.entry_i8 = entry;1757 g->builtin_types.entry_i8 = entry;
1765 }1758 }
1766 {1759 {
...@@ -1773,7 +1766,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1773,7 +1766,6 @@ static void define_builtin_types(CodeGen *g) {
1773 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1766 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1774 entry->size_in_bits, entry->align_in_bits,1767 entry->size_in_bits, entry->align_in_bits,
1775 LLVMZigEncoding_DW_ATE_signed());1768 LLVMZigEncoding_DW_ATE_signed());
1776 g->type_table.put(&entry->name, entry);
1777 g->builtin_types.entry_i16 = entry;1769 g->builtin_types.entry_i16 = entry;
1778 }1770 }
1779 {1771 {
...@@ -1786,7 +1778,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1786,7 +1778,6 @@ static void define_builtin_types(CodeGen *g) {
1786 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1778 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1787 entry->size_in_bits, entry->align_in_bits,1779 entry->size_in_bits, entry->align_in_bits,
1788 LLVMZigEncoding_DW_ATE_signed());1780 LLVMZigEncoding_DW_ATE_signed());
1789 g->type_table.put(&entry->name, entry);
1790 g->builtin_types.entry_i32 = entry;1781 g->builtin_types.entry_i32 = entry;
1791 }1782 }
1792 {1783 {
...@@ -1799,7 +1790,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1799,7 +1790,6 @@ static void define_builtin_types(CodeGen *g) {
1799 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1790 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1800 entry->size_in_bits, entry->align_in_bits,1791 entry->size_in_bits, entry->align_in_bits,
1801 LLVMZigEncoding_DW_ATE_signed());1792 LLVMZigEncoding_DW_ATE_signed());
1802 g->type_table.put(&entry->name, entry);
1803 g->builtin_types.entry_i64 = entry;1793 g->builtin_types.entry_i64 = entry;
1804 }1794 }
1805 {1795 {
...@@ -1812,7 +1802,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1812,7 +1802,6 @@ static void define_builtin_types(CodeGen *g) {
1812 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1802 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1813 entry->size_in_bits, entry->align_in_bits,1803 entry->size_in_bits, entry->align_in_bits,
1814 LLVMZigEncoding_DW_ATE_signed());1804 LLVMZigEncoding_DW_ATE_signed());
1815 g->type_table.put(&entry->name, entry);
1816 g->builtin_types.entry_isize = entry;1805 g->builtin_types.entry_isize = entry;
1817 }1806 }
1818 {1807 {
...@@ -1825,7 +1814,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1825,7 +1814,6 @@ static void define_builtin_types(CodeGen *g) {
1825 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1814 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1826 entry->size_in_bits, entry->align_in_bits,1815 entry->size_in_bits, entry->align_in_bits,
1827 LLVMZigEncoding_DW_ATE_unsigned());1816 LLVMZigEncoding_DW_ATE_unsigned());
1828 g->type_table.put(&entry->name, entry);
1829 g->builtin_types.entry_usize = entry;1817 g->builtin_types.entry_usize = entry;
1830 }1818 }
1831 {1819 {
...@@ -1837,7 +1825,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1837,7 +1825,6 @@ static void define_builtin_types(CodeGen *g) {
1837 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1825 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1838 entry->size_in_bits, entry->align_in_bits,1826 entry->size_in_bits, entry->align_in_bits,
1839 LLVMZigEncoding_DW_ATE_float());1827 LLVMZigEncoding_DW_ATE_float());
1840 g->type_table.put(&entry->name, entry);
1841 g->builtin_types.entry_f32 = entry;1828 g->builtin_types.entry_f32 = entry;
1842 }1829 }
1843 {1830 {
...@@ -1849,7 +1836,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1849,7 +1836,6 @@ static void define_builtin_types(CodeGen *g) {
1849 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1836 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1850 entry->size_in_bits, entry->align_in_bits,1837 entry->size_in_bits, entry->align_in_bits,
1851 LLVMZigEncoding_DW_ATE_float());1838 LLVMZigEncoding_DW_ATE_float());
1852 g->type_table.put(&entry->name, entry);
1853 g->builtin_types.entry_f64 = entry;1839 g->builtin_types.entry_f64 = entry;
1854 }1840 }
1855 {1841 {
...@@ -1859,7 +1845,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1859,7 +1845,6 @@ static void define_builtin_types(CodeGen *g) {
1859 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),1845 entry->di_type = LLVMZigCreateDebugBasicType(g->dbuilder, buf_ptr(&entry->name),
1860 entry->size_in_bits, entry->align_in_bits,1846 entry->size_in_bits, entry->align_in_bits,
1861 LLVMZigEncoding_DW_ATE_unsigned());1847 LLVMZigEncoding_DW_ATE_unsigned());
1862 g->type_table.put(&entry->name, entry);
1863 g->builtin_types.entry_void = entry;1848 g->builtin_types.entry_void = entry;
1864 }1849 }
1865 {1850 {
...@@ -1867,7 +1852,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1867,7 +1852,6 @@ static void define_builtin_types(CodeGen *g) {
1867 entry->type_ref = LLVMVoidType();1852 entry->type_ref = LLVMVoidType();
1868 buf_init_from_str(&entry->name, "unreachable");1853 buf_init_from_str(&entry->name, "unreachable");
1869 entry->di_type = g->builtin_types.entry_void->di_type;1854 entry->di_type = g->builtin_types.entry_void->di_type;
1870 g->type_table.put(&entry->name, entry);
1871 g->builtin_types.entry_unreachable = entry;1855 g->builtin_types.entry_unreachable = entry;
1872 }1856 }
1873 {1857 {
...@@ -1903,7 +1887,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -1903,7 +1887,6 @@ static void define_builtin_types(CodeGen *g) {
1903 "string", g->dummy_di_file, 0, entry->size_in_bits, entry->align_in_bits, 0,1887 "string", g->dummy_di_file, 0, entry->size_in_bits, entry->align_in_bits, 0,
1904 nullptr, di_element_types, element_count, 0, nullptr, "");1888 nullptr, di_element_types, element_count, 0, nullptr, "");
19051889
1906 g->type_table.put(&entry->name, entry);
1907 g->builtin_types.entry_string = entry;1890 g->builtin_types.entry_string = entry;
1908 }1891 }
1909}1892}
...@@ -2033,6 +2016,24 @@ static ImportTableEntry *codegen_add_code(CodeGen *g, Buf *abs_full_path,...@@ -2033,6 +2016,24 @@ static ImportTableEntry *codegen_add_code(CodeGen *g, Buf *abs_full_path,
2033 import_entry->line_offsets = tokenization.line_offsets;2016 import_entry->line_offsets = tokenization.line_offsets;
2034 import_entry->path = full_path;2017 import_entry->path = full_path;
2035 import_entry->fn_table.init(32);2018 import_entry->fn_table.init(32);
2019 import_entry->type_table.init(32);
2020 import_entry->type_table.put(&g->builtin_types.entry_bool->name, g->builtin_types.entry_bool);
2021 import_entry->type_table.put(&g->builtin_types.entry_u8->name, g->builtin_types.entry_u8);
2022 import_entry->type_table.put(&g->builtin_types.entry_u16->name, g->builtin_types.entry_u16);
2023 import_entry->type_table.put(&g->builtin_types.entry_u32->name, g->builtin_types.entry_u32);
2024 import_entry->type_table.put(&g->builtin_types.entry_u64->name, g->builtin_types.entry_u64);
2025 import_entry->type_table.put(&g->builtin_types.entry_i8->name, g->builtin_types.entry_i8);
2026 import_entry->type_table.put(&g->builtin_types.entry_i16->name, g->builtin_types.entry_i16);
2027 import_entry->type_table.put(&g->builtin_types.entry_i32->name, g->builtin_types.entry_i32);
2028 import_entry->type_table.put(&g->builtin_types.entry_i64->name, g->builtin_types.entry_i64);
2029 import_entry->type_table.put(&g->builtin_types.entry_isize->name, g->builtin_types.entry_isize);
2030 import_entry->type_table.put(&g->builtin_types.entry_usize->name, g->builtin_types.entry_usize);
2031 import_entry->type_table.put(&g->builtin_types.entry_f32->name, g->builtin_types.entry_f32);
2032 import_entry->type_table.put(&g->builtin_types.entry_f64->name, g->builtin_types.entry_f64);
2033 import_entry->type_table.put(&g->builtin_types.entry_void->name, g->builtin_types.entry_void);
2034 import_entry->type_table.put(&g->builtin_types.entry_unreachable->name, g->builtin_types.entry_unreachable);
2035 import_entry->type_table.put(&g->builtin_types.entry_string->name, g->builtin_types.entry_string);
2036
2036 import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);2037 import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);
2037 assert(import_entry->root);2038 assert(import_entry->root);
2038 if (g->verbose) {2039 if (g->verbose) {