authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-07-13 18:22:49-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-07-13 18:22:49-07:00
log3971bf3d728ebb78a90caab504827db8a4c24423
tree7f8a480bb7c49b22f6aa9727b34148b1af836c33
parentf2fc9b8a7b50cba4b8b2698a06cfbe7ba8018f4f

fix not resolving use declarations

causing bogus compile errors

1 files changed, 18 insertions(+), 0 deletions(-)

src/analyze.cpp+18
......@@ -48,6 +48,8 @@ static VariableTableEntry *analyze_variable_declaration_raw(CodeGen *g, ImportTa
4848 bool expr_is_maybe, AstNode *decl_node, bool var_is_ptr);
4949static void scan_decls(CodeGen *g, ImportTableEntry *import, BlockContext *context, AstNode *node);
5050static void analyze_fn_body(CodeGen *g, FnTableEntry *fn_table_entry);
51static void resolve_use_decl(CodeGen *g, AstNode *node);
52static void preview_use_decl(CodeGen *g, AstNode *node);
5153
5254static AstNode *first_executing_node(AstNode *node) {
5355 switch (node->type) {
......@@ -2692,6 +2694,17 @@ static TypeTableEntry *analyze_field_access_expr(CodeGen *g, ImportTableEntry *i
26922694 assert(const_val->ok);
26932695 ImportTableEntry *namespace_import = const_val->data.x_import;
26942696 AstNode *decl_node = find_decl(namespace_import->block_context, field_name);
2697 if (!decl_node) {
2698 // we must now resolve all the use decls
2699 for (int i = 0; i < namespace_import->use_decls.length; i += 1) {
2700 AstNode *use_decl_node = namespace_import->use_decls.at(i);
2701 if (!get_resolved_expr(use_decl_node->data.use.expr)->type_entry) {
2702 preview_use_decl(g, use_decl_node);
2703 }
2704 resolve_use_decl(g, use_decl_node);
2705 }
2706 decl_node = find_decl(namespace_import->block_context, field_name);
2707 }
26952708 if (decl_node) {
26962709 TopLevelDecl *tld = get_as_top_level_decl(decl_node);
26972710 if (tld->visib_mod == VisibModPrivate) {
......@@ -6522,6 +6535,8 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
65226535 return;
65236536 }
65246537
6538 tld->resolution = TldResolutionOk;
6539
65256540 ConstExprValue *const_val = &expr->const_val;
65266541 assert(const_val->ok);
65276542
......@@ -6570,6 +6585,9 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
65706585
65716586static void resolve_use_decl(CodeGen *g, AstNode *node) {
65726587 assert(node->type == NodeTypeUse);
6588 if (get_as_top_level_decl(node)->resolution != TldResolutionUnresolved) {
6589 return;
6590 }
65736591 add_symbols_from_import(g, node, node);
65746592}
65756593