| ... | @@ -64,8 +64,6 @@ static AstNode *first_executing_node(AstNode *node) { | ... | @@ -64,8 +64,6 @@ static AstNode *first_executing_node(AstNode *node) { |
| 64 | case NodeTypeAsmExpr: | 64 | case NodeTypeAsmExpr: |
| 65 | case NodeTypeStructDecl: | 65 | case NodeTypeStructDecl: |
| 66 | case NodeTypeStructField: | 66 | case NodeTypeStructField: |
| 67 | case NodeTypeEnumDecl: | | |
| 68 | case NodeTypeEnumField: | | |
| 69 | case NodeTypeStructValueExpr: | 67 | case NodeTypeStructValueExpr: |
| 70 | case NodeTypeStructValueField: | 68 | case NodeTypeStructValueField: |
| 71 | case NodeTypeWhileExpr: | 69 | case NodeTypeWhileExpr: |
| ... | @@ -167,7 +165,7 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool | ... | @@ -167,7 +165,7 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool |
| 167 | static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, TypeTableEntry *child_type) { | 165 | static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, TypeTableEntry *child_type) { |
| 168 | if (child_type->maybe_parent) { | 166 | if (child_type->maybe_parent) { |
| 169 | TypeTableEntry *entry = child_type->maybe_parent; | 167 | TypeTableEntry *entry = child_type->maybe_parent; |
| 170 | import->type_table.put(&entry->name, entry); | 168 | import->block_context->type_table.put(&entry->name, entry); |
| 171 | return entry; | 169 | return entry; |
| 172 | } else { | 170 | } else { |
| 173 | TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdMaybe); | 171 | TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdMaybe); |
| ... | @@ -211,7 +209,7 @@ static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, Type | ... | @@ -211,7 +209,7 @@ static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, Type |
| 211 | | 209 | |
| 212 | entry->data.maybe.child_type = child_type; | 210 | entry->data.maybe.child_type = child_type; |
| 213 | | 211 | |
| 214 | import->type_table.put(&entry->name, entry); | 212 | import->block_context->type_table.put(&entry->name, entry); |
| 215 | child_type->maybe_parent = entry; | 213 | child_type->maybe_parent = entry; |
| 216 | return entry; | 214 | return entry; |
| 217 | } | 215 | } |
| ... | @@ -223,7 +221,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import, | ... | @@ -223,7 +221,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import, |
| 223 | auto existing_entry = child_type->arrays_by_size.maybe_get(array_size); | 221 | auto existing_entry = child_type->arrays_by_size.maybe_get(array_size); |
| 224 | if (existing_entry) { | 222 | if (existing_entry) { |
| 225 | TypeTableEntry *entry = existing_entry->value; | 223 | TypeTableEntry *entry = existing_entry->value; |
| 226 | import->type_table.put(&entry->name, entry); | 224 | import->block_context->type_table.put(&entry->name, entry); |
| 227 | return entry; | 225 | return entry; |
| 228 | } else { | 226 | } else { |
| 229 | TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdArray); | 227 | TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdArray); |
| ... | @@ -239,7 +237,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import, | ... | @@ -239,7 +237,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import, |
| 239 | entry->data.array.child_type = child_type; | 237 | entry->data.array.child_type = child_type; |
| 240 | entry->data.array.len = array_size; | 238 | entry->data.array.len = array_size; |
| 241 | | 239 | |
| 242 | import->type_table.put(&entry->name, entry); | 240 | import->block_context->type_table.put(&entry->name, entry); |
| 243 | child_type->arrays_by_size.put(array_size, entry); | 241 | child_type->arrays_by_size.put(array_size, entry); |
| 244 | return entry; | 242 | return entry; |
| 245 | } | 243 | } |
| ... | @@ -441,7 +439,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry | ... | @@ -441,7 +439,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry |
| 441 | case AstNodeTypeTypePrimitive: | 439 | case AstNodeTypeTypePrimitive: |
| 442 | { | 440 | { |
| 443 | Buf *name = &node->data.type.primitive_name; | 441 | Buf *name = &node->data.type.primitive_name; |
| 444 | auto table_entry = import->type_table.maybe_get(name); | 442 | auto table_entry = import->block_context->type_table.maybe_get(name); |
| 445 | if (!table_entry) { | 443 | if (!table_entry) { |
| 446 | table_entry = g->primitive_type_table.maybe_get(name); | 444 | table_entry = g->primitive_type_table.maybe_get(name); |
| 447 | } | 445 | } |
| ... | @@ -895,11 +893,6 @@ static void resolve_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -895,11 +893,6 @@ static void resolve_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode |
| 895 | // struct member fns will get resolved independently | 893 | // struct member fns will get resolved independently |
| 896 | break; | 894 | break; |
| 897 | } | 895 | } |
| 898 | case NodeTypeEnumDecl: | | |
| 899 | { | | |
| 900 | zig_panic("TODO resolve enum decl"); | | |
| 901 | break; | | |
| 902 | } | | |
| 903 | case NodeTypeVariableDeclaration: | 896 | case NodeTypeVariableDeclaration: |
| 904 | { | 897 | { |
| 905 | VariableTableEntry *var = analyze_variable_declaration(g, import, import->block_context, | 898 | VariableTableEntry *var = analyze_variable_declaration(g, import, import->block_context, |
| ... | @@ -942,7 +935,6 @@ static void resolve_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -942,7 +935,6 @@ static void resolve_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode |
| 942 | case NodeTypeAsmExpr: | 935 | case NodeTypeAsmExpr: |
| 943 | case NodeTypeFieldAccessExpr: | 936 | case NodeTypeFieldAccessExpr: |
| 944 | case NodeTypeStructField: | 937 | case NodeTypeStructField: |
| 945 | case NodeTypeEnumField: | | |
| 946 | case NodeTypeStructValueExpr: | 938 | case NodeTypeStructValueExpr: |
| 947 | case NodeTypeStructValueField: | 939 | case NodeTypeStructValueField: |
| 948 | case NodeTypeCompilerFnExpr: | 940 | case NodeTypeCompilerFnExpr: |
| ... | @@ -1212,6 +1204,7 @@ BlockContext *new_block_context(AstNode *node, BlockContext *parent) { | ... | @@ -1212,6 +1204,7 @@ BlockContext *new_block_context(AstNode *node, BlockContext *parent) { |
| 1212 | context->node = node; | 1204 | context->node = node; |
| 1213 | context->parent = parent; | 1205 | context->parent = parent; |
| 1214 | context->variable_table.init(8); | 1206 | context->variable_table.init(8); |
| | 1207 | context->type_table.init(8); |
| 1215 | | 1208 | |
| 1216 | if (parent) { | 1209 | if (parent) { |
| 1217 | if (parent->next_child_parent_loop_node) { | 1210 | if (parent->next_child_parent_loop_node) { |
| ... | @@ -1258,6 +1251,17 @@ VariableTableEntry *find_variable(BlockContext *context, Buf *name) { | ... | @@ -1258,6 +1251,17 @@ VariableTableEntry *find_variable(BlockContext *context, Buf *name) { |
| 1258 | return nullptr; | 1251 | return nullptr; |
| 1259 | } | 1252 | } |
| 1260 | | 1253 | |
| | 1254 | TypeTableEntry *find_container(BlockContext *context, Buf *name) { |
| | 1255 | while (context) { |
| | 1256 | auto entry = context->type_table.maybe_get(name); |
| | 1257 | if (entry != nullptr) |
| | 1258 | return entry->value; |
| | 1259 | |
| | 1260 | context = context->parent; |
| | 1261 | } |
| | 1262 | return nullptr; |
| | 1263 | } |
| | 1264 | |
| 1261 | static void get_struct_field(TypeTableEntry *struct_type, Buf *name, TypeStructField **out_tsf, int *out_i) { | 1265 | static void get_struct_field(TypeTableEntry *struct_type, Buf *name, TypeStructField **out_tsf, int *out_i) { |
| 1262 | for (int i = 0; i < struct_type->data.structure.field_count; i += 1) { | 1266 | for (int i = 0; i < struct_type->data.structure.field_count; i += 1) { |
| 1263 | TypeStructField *type_struct_field = &struct_type->data.structure.fields[i]; | 1267 | TypeStructField *type_struct_field = &struct_type->data.structure.fields[i]; |
| ... | @@ -1397,6 +1401,25 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i | ... | @@ -1397,6 +1401,25 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i |
| 1397 | return return_type; | 1401 | return return_type; |
| 1398 | } | 1402 | } |
| 1399 | | 1403 | |
| | 1404 | static TypeTableEntry *analyze_symbol_expr(CodeGen *g, ImportTableEntry *import, BlockContext *context, |
| | 1405 | TypeTableEntry *expected_type, AstNode *node) |
| | 1406 | { |
| | 1407 | Buf *variable_name = &node->data.symbol_expr.symbol; |
| | 1408 | VariableTableEntry *var = find_variable(context, variable_name); |
| | 1409 | if (var) { |
| | 1410 | return var->type; |
| | 1411 | } else { |
| | 1412 | TypeTableEntry *container_type = find_container(context, variable_name); |
| | 1413 | if (container_type) { |
| | 1414 | return container_type; |
| | 1415 | } else { |
| | 1416 | add_node_error(g, node, |
| | 1417 | buf_sprintf("use of undeclared identifier '%s'", buf_ptr(variable_name))); |
| | 1418 | return g->builtin_types.entry_invalid; |
| | 1419 | } |
| | 1420 | } |
| | 1421 | } |
| | 1422 | |
| 1400 | static TypeTableEntry *analyze_variable_name(CodeGen *g, ImportTableEntry *import, BlockContext *context, | 1423 | static TypeTableEntry *analyze_variable_name(CodeGen *g, ImportTableEntry *import, BlockContext *context, |
| 1401 | AstNode *node, Buf *variable_name) | 1424 | AstNode *node, Buf *variable_name) |
| 1402 | { | 1425 | { |
| ... | @@ -2381,7 +2404,7 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, | ... | @@ -2381,7 +2404,7 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, |
| 2381 | | 2404 | |
| 2382 | case NodeTypeSymbol: | 2405 | case NodeTypeSymbol: |
| 2383 | { | 2406 | { |
| 2384 | return_type = analyze_variable_name(g, import, context, node, &node->data.symbol_expr.symbol); | 2407 | return_type = analyze_symbol_expr(g, import, context, expected_type, node); |
| 2385 | break; | 2408 | break; |
| 2386 | } | 2409 | } |
| 2387 | case NodeTypeCastExpr: | 2410 | case NodeTypeCastExpr: |
| ... | @@ -2499,8 +2522,6 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, | ... | @@ -2499,8 +2522,6 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import, |
| 2499 | case NodeTypeLabel: | 2522 | case NodeTypeLabel: |
| 2500 | case NodeTypeStructDecl: | 2523 | case NodeTypeStructDecl: |
| 2501 | case NodeTypeStructField: | 2524 | case NodeTypeStructField: |
| 2502 | case NodeTypeEnumDecl: | | |
| 2503 | case NodeTypeEnumField: | | |
| 2504 | case NodeTypeStructValueField: | 2525 | case NodeTypeStructValueField: |
| 2505 | case NodeTypeCompilerFnExpr: | 2526 | case NodeTypeCompilerFnExpr: |
| 2506 | zig_unreachable(); | 2527 | zig_unreachable(); |
| ... | @@ -2609,7 +2630,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -2609,7 +2630,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode |
| 2609 | case NodeTypeRootExportDecl: | 2630 | case NodeTypeRootExportDecl: |
| 2610 | case NodeTypeExternBlock: | 2631 | case NodeTypeExternBlock: |
| 2611 | case NodeTypeUse: | 2632 | case NodeTypeUse: |
| 2612 | case NodeTypeEnumDecl: | | |
| 2613 | case NodeTypeVariableDeclaration: | 2633 | case NodeTypeVariableDeclaration: |
| 2614 | // already took care of these | 2634 | // already took care of these |
| 2615 | break; | 2635 | break; |
| ... | @@ -2645,7 +2665,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -2645,7 +2665,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode |
| 2645 | case NodeTypeAsmExpr: | 2665 | case NodeTypeAsmExpr: |
| 2646 | case NodeTypeFieldAccessExpr: | 2666 | case NodeTypeFieldAccessExpr: |
| 2647 | case NodeTypeStructField: | 2667 | case NodeTypeStructField: |
| 2648 | case NodeTypeEnumField: | | |
| 2649 | case NodeTypeStructValueExpr: | 2668 | case NodeTypeStructValueExpr: |
| 2650 | case NodeTypeStructValueField: | 2669 | case NodeTypeStructValueField: |
| 2651 | case NodeTypeCompilerFnExpr: | 2670 | case NodeTypeCompilerFnExpr: |
| ... | @@ -2779,8 +2798,6 @@ static void collect_expr_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -2779,8 +2798,6 @@ static void collect_expr_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode |
| 2779 | case NodeTypeLabel: | 2798 | case NodeTypeLabel: |
| 2780 | case NodeTypeStructDecl: | 2799 | case NodeTypeStructDecl: |
| 2781 | case NodeTypeStructField: | 2800 | case NodeTypeStructField: |
| 2782 | case NodeTypeEnumDecl: | | |
| 2783 | case NodeTypeEnumField: | | |
| 2784 | case NodeTypeStructValueField: | 2801 | case NodeTypeStructValueField: |
| 2785 | zig_unreachable(); | 2802 | zig_unreachable(); |
| 2786 | } | 2803 | } |
| ... | @@ -2794,7 +2811,7 @@ static void collect_type_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode | ... | @@ -2794,7 +2811,7 @@ static void collect_type_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode |
| 2794 | Buf *name = &type_node->data.type.primitive_name; | 2811 | Buf *name = &type_node->data.type.primitive_name; |
| 2795 | auto table_entry = g->primitive_type_table.maybe_get(name); | 2812 | auto table_entry = g->primitive_type_table.maybe_get(name); |
| 2796 | if (!table_entry) { | 2813 | if (!table_entry) { |
| 2797 | table_entry = import->type_table.maybe_get(name); | 2814 | table_entry = import->block_context->type_table.maybe_get(name); |
| 2798 | } | 2815 | } |
| 2799 | if (!table_entry) { | 2816 | if (!table_entry) { |
| 2800 | decl_node->deps.put(name, type_node); | 2817 | decl_node->deps.put(name, type_node); |
| ... | @@ -2826,7 +2843,7 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast | ... | @@ -2826,7 +2843,7 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast |
| 2826 | Buf *name = &node->data.struct_decl.name; | 2843 | Buf *name = &node->data.struct_decl.name; |
| 2827 | auto table_entry = g->primitive_type_table.maybe_get(name); | 2844 | auto table_entry = g->primitive_type_table.maybe_get(name); |
| 2828 | if (!table_entry) { | 2845 | if (!table_entry) { |
| 2829 | table_entry = import->type_table.maybe_get(name); | 2846 | table_entry = import->block_context->type_table.maybe_get(name); |
| 2830 | } | 2847 | } |
| 2831 | if (table_entry) { | 2848 | if (table_entry) { |
| 2832 | node->data.struct_decl.type_entry = table_entry->value; | 2849 | node->data.struct_decl.type_entry = table_entry->value; |
| ... | @@ -2843,20 +2860,20 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast | ... | @@ -2843,20 +2860,20 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast |
| 2843 | buf_init_from_buf(&entry->name, name); | 2860 | buf_init_from_buf(&entry->name, name); |
| 2844 | // put off adding the debug type until we do the full struct body | 2861 | // put off adding the debug type until we do the full struct body |
| 2845 | // this type is incomplete until we do another pass | 2862 | // this type is incomplete until we do another pass |
| 2846 | import->type_table.put(&entry->name, entry); | 2863 | import->block_context->type_table.put(&entry->name, entry); |
| 2847 | node->data.struct_decl.type_entry = entry; | 2864 | node->data.struct_decl.type_entry = entry; |
| 2848 | | 2865 | |
| 2849 | bool is_pub = (node->data.struct_decl.visib_mod != VisibModPrivate); | 2866 | bool is_pub = (node->data.struct_decl.visib_mod != VisibModPrivate); |
| 2850 | if (is_pub) { | 2867 | if (is_pub) { |
| 2851 | for (int i = 0; i < import->importers.length; i += 1) { | 2868 | for (int i = 0; i < import->importers.length; i += 1) { |
| 2852 | ImporterInfo importer = import->importers.at(i); | 2869 | ImporterInfo importer = import->importers.at(i); |
| 2853 | auto table_entry = importer.import->type_table.maybe_get(&entry->name); | 2870 | auto table_entry = importer.import->block_context->type_table.maybe_get(&entry->name); |
| 2854 | if (table_entry) { | 2871 | if (table_entry) { |
| 2855 | add_node_error(g, importer.source_node, | 2872 | add_node_error(g, importer.source_node, |
| 2856 | buf_sprintf("import of type '%s' overrides existing definition", | 2873 | buf_sprintf("import of type '%s' overrides existing definition", |
| 2857 | buf_ptr(&entry->name))); | 2874 | buf_ptr(&entry->name))); |
| 2858 | } else { | 2875 | } else { |
| 2859 | importer.import->type_table.put(&entry->name, entry); | 2876 | importer.import->block_context->type_table.put(&entry->name, entry); |
| 2860 | } | 2877 | } |
| 2861 | } | 2878 | } |
| 2862 | } | 2879 | } |
| ... | @@ -2886,11 +2903,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast | ... | @@ -2886,11 +2903,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast |
| 2886 | detect_top_level_decl_deps(g, import, fn_def_node); | 2903 | detect_top_level_decl_deps(g, import, fn_def_node); |
| 2887 | } | 2904 | } |
| 2888 | | 2905 | |
| 2889 | break; | | |
| 2890 | } | | |
| 2891 | case NodeTypeEnumDecl: | | |
| 2892 | { | | |
| 2893 | zig_panic("TODO detect enum top level decl deps"); | | |
| 2894 | break; | 2906 | break; |
| 2895 | } | 2907 | } |
| 2896 | case NodeTypeExternBlock: | 2908 | case NodeTypeExternBlock: |
| ... | @@ -2986,7 +2998,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast | ... | @@ -2986,7 +2998,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast |
| 2986 | case NodeTypeAsmExpr: | 2998 | case NodeTypeAsmExpr: |
| 2987 | case NodeTypeFieldAccessExpr: | 2999 | case NodeTypeFieldAccessExpr: |
| 2988 | case NodeTypeStructField: | 3000 | case NodeTypeStructField: |
| 2989 | case NodeTypeEnumField: | | |
| 2990 | case NodeTypeStructValueExpr: | 3001 | case NodeTypeStructValueExpr: |
| 2991 | case NodeTypeStructValueField: | 3002 | case NodeTypeStructValueField: |
| 2992 | case NodeTypeCompilerFnExpr: | 3003 | case NodeTypeCompilerFnExpr: |
| ... | @@ -3216,8 +3227,6 @@ Expr *get_resolved_expr(AstNode *node) { | ... | @@ -3216,8 +3227,6 @@ Expr *get_resolved_expr(AstNode *node) { |
| 3216 | case NodeTypeStructDecl: | 3227 | case NodeTypeStructDecl: |
| 3217 | case NodeTypeStructField: | 3228 | case NodeTypeStructField: |
| 3218 | case NodeTypeStructValueField: | 3229 | case NodeTypeStructValueField: |
| 3219 | case NodeTypeEnumDecl: | | |
| 3220 | case NodeTypeEnumField: | | |
| 3221 | zig_unreachable(); | 3230 | zig_unreachable(); |
| 3222 | } | 3231 | } |
| 3223 | } | 3232 | } |
| ... | @@ -3267,8 +3276,6 @@ NumLitCodeGen *get_resolved_num_lit(AstNode *node) { | ... | @@ -3267,8 +3276,6 @@ NumLitCodeGen *get_resolved_num_lit(AstNode *node) { |
| 3267 | case NodeTypeStructDecl: | 3276 | case NodeTypeStructDecl: |
| 3268 | case NodeTypeStructField: | 3277 | case NodeTypeStructField: |
| 3269 | case NodeTypeStructValueField: | 3278 | case NodeTypeStructValueField: |
| 3270 | case NodeTypeEnumDecl: | | |
| 3271 | case NodeTypeEnumField: | | |
| 3272 | case NodeTypeCompilerFnExpr: | 3279 | case NodeTypeCompilerFnExpr: |
| 3273 | zig_unreachable(); | 3280 | zig_unreachable(); |
| 3274 | } | 3281 | } |
| ... | @@ -3319,8 +3326,6 @@ TopLevelDecl *get_resolved_top_level_decl(AstNode *node) { | ... | @@ -3319,8 +3326,6 @@ TopLevelDecl *get_resolved_top_level_decl(AstNode *node) { |
| 3319 | case NodeTypeContinue: | 3326 | case NodeTypeContinue: |
| 3320 | case NodeTypeStructField: | 3327 | case NodeTypeStructField: |
| 3321 | case NodeTypeStructValueField: | 3328 | case NodeTypeStructValueField: |
| 3322 | case NodeTypeEnumDecl: | | |
| 3323 | case NodeTypeEnumField: | | |
| 3324 | case NodeTypeCompilerFnExpr: | 3329 | case NodeTypeCompilerFnExpr: |
| 3325 | case NodeTypeCompilerFnType: | 3330 | case NodeTypeCompilerFnType: |
| 3326 | zig_unreachable(); | 3331 | zig_unreachable(); |