| ... | @@ -20,7 +20,6 @@ | ... | @@ -20,7 +20,6 @@ |
| 20 | CodeGen *codegen_create(Buf *root_source_dir) { | 20 | CodeGen *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, ""); |
| 1905 | | 1889 | |
| 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) { |