authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-10 17:27:58-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-10 17:27:58-07:00
log4d7835e21a28fbfeca5202332c52cb47340941d5
treee794aaf5ae5affed11c324b42f2044648437f8d8
parentfc748e2ccdf69dd02ae2e7e6e9913e2d98711129

delete unused enumfield and enumdecl node types


5 files changed, 44 insertions(+), 80 deletions(-)

src/all_types.hpp+1-18
......@@ -128,8 +128,6 @@ enum NodeType {
128128 NodeTypeStructField,
129129 NodeTypeStructValueExpr,
130130 NodeTypeStructValueField,
131 NodeTypeEnumDecl,
132 NodeTypeEnumField,
133131 NodeTypeCompilerFnExpr,
134132 NodeTypeCompilerFnType,
135133};
......@@ -475,19 +473,6 @@ struct AstNodeStructField {
475473 ZigList<AstNode *> *directives;
476474};
477475
478struct AstNodeEnumDecl {
479 Buf name;
480 ZigList<AstNode *> fields;
481 ZigList<AstNode *> *directives;
482 VisibMod visib_mod;
483};
484
485struct AstNodeEnumField {
486 Buf name;
487 ZigList<AstNode *> fields; // length 0 means simple enum
488 AstNode *val_expr;
489};
490
491476struct AstNodeStringLiteral {
492477 Buf buf;
493478 bool c;
......@@ -646,8 +631,6 @@ struct AstNode {
646631 AstNodeFieldAccessExpr field_access_expr;
647632 AstNodeStructDecl struct_decl;
648633 AstNodeStructField struct_field;
649 AstNodeEnumDecl enum_decl;
650 AstNodeEnumField enum_field;
651634 AstNodeStringLiteral string_literal;
652635 AstNodeCharLiteral char_literal;
653636 AstNodeNumberLiteral number_literal;
......@@ -778,7 +761,6 @@ struct ImportTableEntry {
778761
779762 // reminder: hash tables must be initialized before use
780763 HashMap<Buf *, FnTableEntry *, buf_hash, buf_eql_buf> fn_table;
781 HashMap<Buf *, TypeTableEntry *, buf_hash, buf_eql_buf> type_table;
782764};
783765
784766struct LabelTableEntry {
......@@ -924,6 +906,7 @@ struct BlockContext {
924906 FnTableEntry *fn_entry; // null at the module scope
925907 BlockContext *parent; // null when this is the root
926908 HashMap<Buf *, VariableTableEntry *, buf_hash, buf_eql_buf> variable_table;
909 HashMap<Buf *, TypeTableEntry *, buf_hash, buf_eql_buf> type_table;
927910 ZigList<Cast *> cast_expr_alloca_list;
928911 ZigList<StructValExprCodeGen *> struct_val_expr_alloca_list;
929912 AstNode *parent_loop_node;
src/analyze.cpp+42-37
......@@ -64,8 +64,6 @@ static AstNode *first_executing_node(AstNode *node) {
6464 case NodeTypeAsmExpr:
6565 case NodeTypeStructDecl:
6666 case NodeTypeStructField:
67 case NodeTypeEnumDecl:
68 case NodeTypeEnumField:
6967 case NodeTypeStructValueExpr:
7068 case NodeTypeStructValueField:
7169 case NodeTypeWhileExpr:
......@@ -167,7 +165,7 @@ TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool
167165static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, TypeTableEntry *child_type) {
168166 if (child_type->maybe_parent) {
169167 TypeTableEntry *entry = child_type->maybe_parent;
170 import->type_table.put(&entry->name, entry);
168 import->block_context->type_table.put(&entry->name, entry);
171169 return entry;
172170 } else {
173171 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdMaybe);
......@@ -211,7 +209,7 @@ static TypeTableEntry *get_maybe_type(CodeGen *g, ImportTableEntry *import, Type
211209
212210 entry->data.maybe.child_type = child_type;
213211
214 import->type_table.put(&entry->name, entry);
212 import->block_context->type_table.put(&entry->name, entry);
215213 child_type->maybe_parent = entry;
216214 return entry;
217215 }
......@@ -223,7 +221,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import,
223221 auto existing_entry = child_type->arrays_by_size.maybe_get(array_size);
224222 if (existing_entry) {
225223 TypeTableEntry *entry = existing_entry->value;
226 import->type_table.put(&entry->name, entry);
224 import->block_context->type_table.put(&entry->name, entry);
227225 return entry;
228226 } else {
229227 TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdArray);
......@@ -239,7 +237,7 @@ static TypeTableEntry *get_array_type(CodeGen *g, ImportTableEntry *import,
239237 entry->data.array.child_type = child_type;
240238 entry->data.array.len = array_size;
241239
242 import->type_table.put(&entry->name, entry);
240 import->block_context->type_table.put(&entry->name, entry);
243241 child_type->arrays_by_size.put(array_size, entry);
244242 return entry;
245243 }
......@@ -441,7 +439,7 @@ static TypeTableEntry *resolve_type(CodeGen *g, AstNode *node, ImportTableEntry
441439 case AstNodeTypeTypePrimitive:
442440 {
443441 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);
445443 if (!table_entry) {
446444 table_entry = g->primitive_type_table.maybe_get(name);
447445 }
......@@ -895,11 +893,6 @@ static void resolve_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode
895893 // struct member fns will get resolved independently
896894 break;
897895 }
898 case NodeTypeEnumDecl:
899 {
900 zig_panic("TODO resolve enum decl");
901 break;
902 }
903896 case NodeTypeVariableDeclaration:
904897 {
905898 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
942935 case NodeTypeAsmExpr:
943936 case NodeTypeFieldAccessExpr:
944937 case NodeTypeStructField:
945 case NodeTypeEnumField:
946938 case NodeTypeStructValueExpr:
947939 case NodeTypeStructValueField:
948940 case NodeTypeCompilerFnExpr:
......@@ -1212,6 +1204,7 @@ BlockContext *new_block_context(AstNode *node, BlockContext *parent) {
12121204 context->node = node;
12131205 context->parent = parent;
12141206 context->variable_table.init(8);
1207 context->type_table.init(8);
12151208
12161209 if (parent) {
12171210 if (parent->next_child_parent_loop_node) {
......@@ -1258,6 +1251,17 @@ VariableTableEntry *find_variable(BlockContext *context, Buf *name) {
12581251 return nullptr;
12591252}
12601253
1254TypeTableEntry *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
12611265static void get_struct_field(TypeTableEntry *struct_type, Buf *name, TypeStructField **out_tsf, int *out_i) {
12621266 for (int i = 0; i < struct_type->data.structure.field_count; i += 1) {
12631267 TypeStructField *type_struct_field = &struct_type->data.structure.fields[i];
......@@ -1397,6 +1401,25 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i
13971401 return return_type;
13981402}
13991403
1404static 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
14001423static TypeTableEntry *analyze_variable_name(CodeGen *g, ImportTableEntry *import, BlockContext *context,
14011424 AstNode *node, Buf *variable_name)
14021425{
......@@ -2381,7 +2404,7 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import,
23812404
23822405 case NodeTypeSymbol:
23832406 {
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);
23852408 break;
23862409 }
23872410 case NodeTypeCastExpr:
......@@ -2499,8 +2522,6 @@ static TypeTableEntry * analyze_expression(CodeGen *g, ImportTableEntry *import,
24992522 case NodeTypeLabel:
25002523 case NodeTypeStructDecl:
25012524 case NodeTypeStructField:
2502 case NodeTypeEnumDecl:
2503 case NodeTypeEnumField:
25042525 case NodeTypeStructValueField:
25052526 case NodeTypeCompilerFnExpr:
25062527 zig_unreachable();
......@@ -2609,7 +2630,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode
26092630 case NodeTypeRootExportDecl:
26102631 case NodeTypeExternBlock:
26112632 case NodeTypeUse:
2612 case NodeTypeEnumDecl:
26132633 case NodeTypeVariableDeclaration:
26142634 // already took care of these
26152635 break;
......@@ -2645,7 +2665,6 @@ static void analyze_top_level_decl(CodeGen *g, ImportTableEntry *import, AstNode
26452665 case NodeTypeAsmExpr:
26462666 case NodeTypeFieldAccessExpr:
26472667 case NodeTypeStructField:
2648 case NodeTypeEnumField:
26492668 case NodeTypeStructValueExpr:
26502669 case NodeTypeStructValueField:
26512670 case NodeTypeCompilerFnExpr:
......@@ -2779,8 +2798,6 @@ static void collect_expr_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode
27792798 case NodeTypeLabel:
27802799 case NodeTypeStructDecl:
27812800 case NodeTypeStructField:
2782 case NodeTypeEnumDecl:
2783 case NodeTypeEnumField:
27842801 case NodeTypeStructValueField:
27852802 zig_unreachable();
27862803 }
......@@ -2794,7 +2811,7 @@ static void collect_type_decl_deps(CodeGen *g, ImportTableEntry *import, AstNode
27942811 Buf *name = &type_node->data.type.primitive_name;
27952812 auto table_entry = g->primitive_type_table.maybe_get(name);
27962813 if (!table_entry) {
2797 table_entry = import->type_table.maybe_get(name);
2814 table_entry = import->block_context->type_table.maybe_get(name);
27982815 }
27992816 if (!table_entry) {
28002817 decl_node->deps.put(name, type_node);
......@@ -2826,7 +2843,7 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast
28262843 Buf *name = &node->data.struct_decl.name;
28272844 auto table_entry = g->primitive_type_table.maybe_get(name);
28282845 if (!table_entry) {
2829 table_entry = import->type_table.maybe_get(name);
2846 table_entry = import->block_context->type_table.maybe_get(name);
28302847 }
28312848 if (table_entry) {
28322849 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
28432860 buf_init_from_buf(&entry->name, name);
28442861 // put off adding the debug type until we do the full struct body
28452862 // 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);
28472864 node->data.struct_decl.type_entry = entry;
28482865
28492866 bool is_pub = (node->data.struct_decl.visib_mod != VisibModPrivate);
28502867 if (is_pub) {
28512868 for (int i = 0; i < import->importers.length; i += 1) {
28522869 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);
28542871 if (table_entry) {
28552872 add_node_error(g, importer.source_node,
28562873 buf_sprintf("import of type '%s' overrides existing definition",
28572874 buf_ptr(&entry->name)));
28582875 } else {
2859 importer.import->type_table.put(&entry->name, entry);
2876 importer.import->block_context->type_table.put(&entry->name, entry);
28602877 }
28612878 }
28622879 }
......@@ -2886,11 +2903,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast
28862903 detect_top_level_decl_deps(g, import, fn_def_node);
28872904 }
28882905
2889 break;
2890 }
2891 case NodeTypeEnumDecl:
2892 {
2893 zig_panic("TODO detect enum top level decl deps");
28942906 break;
28952907 }
28962908 case NodeTypeExternBlock:
......@@ -2986,7 +2998,6 @@ static void detect_top_level_decl_deps(CodeGen *g, ImportTableEntry *import, Ast
29862998 case NodeTypeAsmExpr:
29872999 case NodeTypeFieldAccessExpr:
29883000 case NodeTypeStructField:
2989 case NodeTypeEnumField:
29903001 case NodeTypeStructValueExpr:
29913002 case NodeTypeStructValueField:
29923003 case NodeTypeCompilerFnExpr:
......@@ -3216,8 +3227,6 @@ Expr *get_resolved_expr(AstNode *node) {
32163227 case NodeTypeStructDecl:
32173228 case NodeTypeStructField:
32183229 case NodeTypeStructValueField:
3219 case NodeTypeEnumDecl:
3220 case NodeTypeEnumField:
32213230 zig_unreachable();
32223231 }
32233232}
......@@ -3267,8 +3276,6 @@ NumLitCodeGen *get_resolved_num_lit(AstNode *node) {
32673276 case NodeTypeStructDecl:
32683277 case NodeTypeStructField:
32693278 case NodeTypeStructValueField:
3270 case NodeTypeEnumDecl:
3271 case NodeTypeEnumField:
32723279 case NodeTypeCompilerFnExpr:
32733280 zig_unreachable();
32743281 }
......@@ -3319,8 +3326,6 @@ TopLevelDecl *get_resolved_top_level_decl(AstNode *node) {
33193326 case NodeTypeContinue:
33203327 case NodeTypeStructField:
33213328 case NodeTypeStructValueField:
3322 case NodeTypeEnumDecl:
3323 case NodeTypeEnumField:
33243329 case NodeTypeCompilerFnExpr:
33253330 case NodeTypeCompilerFnType:
33263331 zig_unreachable();
src/analyze.hpp+1
......@@ -15,6 +15,7 @@ void add_node_error(CodeGen *g, AstNode *node, Buf *msg);
1515TypeTableEntry *new_type_table_entry(TypeTableEntryId id);
1616TypeTableEntry *get_pointer_to_type(CodeGen *g, TypeTableEntry *child_type, bool is_const, bool is_noalias);
1717VariableTableEntry *find_variable(BlockContext *context, Buf *name);
18TypeTableEntry *find_container(BlockContext *context, Buf *name);
1819BlockContext *new_block_context(AstNode *node, BlockContext *parent);
1920Expr *get_resolved_expr(AstNode *node);
2021NumLitCodeGen *get_resolved_num_lit(AstNode *node);
src/codegen.cpp-3
......@@ -1752,8 +1752,6 @@ static LLVMValueRef gen_expr_no_cast(CodeGen *g, AstNode *node) {
17521752 case NodeTypeUse:
17531753 case NodeTypeStructDecl:
17541754 case NodeTypeStructField:
1755 case NodeTypeEnumDecl:
1756 case NodeTypeEnumField:
17571755 case NodeTypeStructValueField:
17581756 case NodeTypeCompilerFnExpr:
17591757 zig_unreachable();
......@@ -2516,7 +2514,6 @@ static ImportTableEntry *codegen_add_code(CodeGen *g, Buf *abs_full_path,
25162514 import_entry->line_offsets = tokenization.line_offsets;
25172515 import_entry->path = full_path;
25182516 import_entry->fn_table.init(32);
2519 import_entry->type_table.init(32);
25202517
25212518 import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);
25222519 assert(import_entry->root);
src/parser.cpp-22
......@@ -144,10 +144,6 @@ const char *node_type_str(NodeType node_type) {
144144 return "StructDecl";
145145 case NodeTypeStructField:
146146 return "StructField";
147 case NodeTypeEnumDecl:
148 return "EnumDecl";
149 case NodeTypeEnumField:
150 return "EnumField";
151147 case NodeTypeStructValueExpr:
152148 return "StructValueExpr";
153149 case NodeTypeStructValueField:
......@@ -435,24 +431,6 @@ void ast_print(AstNode *node, int indent) {
435431 ast_print(node->data.struct_field.type, indent + 2);
436432 }
437433 break;
438 case NodeTypeEnumDecl:
439 fprintf(stderr, "%s '%s'\n",
440 node_type_str(node->type), buf_ptr(&node->data.enum_decl.name));
441 for (int i = 0; i < node->data.enum_decl.fields.length; i += 1) {
442 AstNode *child = node->data.enum_decl.fields.at(i);
443 ast_print(child, indent + 2);
444 }
445 break;
446 case NodeTypeEnumField:
447 fprintf(stderr, "%s '%s'\n", node_type_str(node->type), buf_ptr(&node->data.enum_field.name));
448 if (node->data.enum_field.val_expr) {
449 ast_print(node->data.enum_field.val_expr, indent + 2);
450 }
451 for (int i = 0; i < node->data.enum_field.fields.length; i += 1) {
452 AstNode *child = node->data.enum_field.fields.at(i);
453 ast_print(child, indent + 2);
454 }
455 break;
456434 case NodeTypeStructValueExpr:
457435 fprintf(stderr, "%s\n", node_type_str(node->type));
458436 ast_print(node->data.struct_val_expr.type, indent + 2);