| ... | @@ -3575,8 +3575,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) { | ... | @@ -3575,8 +3575,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) { |
| 3575 | case NodeTypeUse: | 3575 | case NodeTypeUse: |
| 3576 | { | 3576 | { |
| 3577 | g->use_queue.append(node); | 3577 | g->use_queue.append(node); |
| 3578 | ZigType *import = get_scope_import(&decls_scope->base); | 3578 | decls_scope->use_decls.append(node); |
| 3579 | get_container_scope(import)->use_decls.append(node); | | |
| 3580 | break; | 3579 | break; |
| 3581 | } | 3580 | } |
| 3582 | case NodeTypeTestDecl: | 3581 | case NodeTypeTestDecl: |
| ... | @@ -3900,19 +3899,19 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node) { | ... | @@ -3900,19 +3899,19 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node) { |
| 3900 | } | 3899 | } |
| 3901 | | 3900 | |
| 3902 | Tld *find_decl(CodeGen *g, Scope *scope, Buf *name) { | 3901 | Tld *find_decl(CodeGen *g, Scope *scope, Buf *name) { |
| 3903 | // we must resolve all the use decls | | |
| 3904 | ZigType *import = get_scope_import(scope); | | |
| 3905 | for (size_t i = 0; i < get_container_scope(import)->use_decls.length; i += 1) { | | |
| 3906 | AstNode *use_decl_node = get_container_scope(import)->use_decls.at(i); | | |
| 3907 | if (use_decl_node->data.use.resolution == TldResolutionUnresolved) { | | |
| 3908 | preview_use_decl(g, use_decl_node); | | |
| 3909 | resolve_use_decl(g, use_decl_node); | | |
| 3910 | } | | |
| 3911 | } | | |
| 3912 | | | |
| 3913 | while (scope) { | 3902 | while (scope) { |
| 3914 | if (scope->id == ScopeIdDecls) { | 3903 | if (scope->id == ScopeIdDecls) { |
| 3915 | ScopeDecls *decls_scope = (ScopeDecls *)scope; | 3904 | ScopeDecls *decls_scope = (ScopeDecls *)scope; |
| | 3905 | |
| | 3906 | // resolve all the use decls |
| | 3907 | for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) { |
| | 3908 | AstNode *use_decl_node = decls_scope->use_decls.at(i); |
| | 3909 | if (use_decl_node->data.use.resolution == TldResolutionUnresolved) { |
| | 3910 | preview_use_decl(g, use_decl_node); |
| | 3911 | resolve_use_decl(g, use_decl_node); |
| | 3912 | } |
| | 3913 | } |
| | 3914 | |
| 3916 | auto entry = decls_scope->decl_table.maybe_get(name); | 3915 | auto entry = decls_scope->decl_table.maybe_get(name); |
| 3917 | if (entry) | 3916 | if (entry) |
| 3918 | return entry->value; | 3917 | return entry->value; |
| ... | @@ -4353,7 +4352,7 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode * | ... | @@ -4353,7 +4352,7 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode * |
| 4353 | preview_use_decl(g, src_use_node); | 4352 | preview_use_decl(g, src_use_node); |
| 4354 | } | 4353 | } |
| 4355 | | 4354 | |
| 4356 | ConstExprValue *use_target_value = src_use_node->data.use.value; | 4355 | ConstExprValue *use_target_value = src_use_node->data.use.using_namespace_value; |
| 4357 | if (type_is_invalid(use_target_value->type)) { | 4356 | if (type_is_invalid(use_target_value->type)) { |
| 4358 | get_container_scope(dst_use_node->owner)->any_imports_failed = true; | 4357 | get_container_scope(dst_use_node->owner)->any_imports_failed = true; |
| 4359 | return; | 4358 | return; |
| ... | @@ -4365,7 +4364,6 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode * | ... | @@ -4365,7 +4364,6 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode * |
| 4365 | | 4364 | |
| 4366 | ZigType *target_import = use_target_value->data.x_type; | 4365 | ZigType *target_import = use_target_value->data.x_type; |
| 4367 | assert(target_import); | 4366 | assert(target_import); |
| 4368 | assert(target_import->id == ZigTypeIdStruct); | | |
| 4369 | | 4367 | |
| 4370 | if (get_container_scope(target_import)->any_imports_failed) { | 4368 | if (get_container_scope(target_import)->any_imports_failed) { |
| 4371 | get_container_scope(dst_use_node->owner)->any_imports_failed = true; | 4369 | get_container_scope(dst_use_node->owner)->any_imports_failed = true; |
| ... | @@ -4433,7 +4431,7 @@ void preview_use_decl(CodeGen *g, AstNode *node) { | ... | @@ -4433,7 +4431,7 @@ void preview_use_decl(CodeGen *g, AstNode *node) { |
| 4433 | if (type_is_invalid(result->type)) | 4431 | if (type_is_invalid(result->type)) |
| 4434 | get_container_scope(node->owner)->any_imports_failed = true; | 4432 | get_container_scope(node->owner)->any_imports_failed = true; |
| 4435 | | 4433 | |
| 4436 | node->data.use.value = result; | 4434 | node->data.use.using_namespace_value = result; |
| 4437 | } | 4435 | } |
| 4438 | | 4436 | |
| 4439 | ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *resolved_path, Buf *source_code, | 4437 | ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *resolved_path, Buf *source_code, |
| ... | @@ -4542,19 +4540,15 @@ ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *resolved_path, Bu | ... | @@ -4542,19 +4540,15 @@ ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *resolved_path, Bu |
| 4542 | } | 4540 | } |
| 4543 | | 4541 | |
| 4544 | void semantic_analyze(CodeGen *g) { | 4542 | void semantic_analyze(CodeGen *g) { |
| 4545 | for (; g->use_queue_index < g->use_queue.length; g->use_queue_index += 1) { | | |
| 4546 | AstNode *use_decl_node = g->use_queue.at(g->use_queue_index); | | |
| 4547 | preview_use_decl(g, use_decl_node); | | |
| 4548 | } | | |
| 4549 | | | |
| 4550 | for (size_t i = 0; i < g->use_queue.length; i += 1) { | | |
| 4551 | AstNode *use_decl_node = g->use_queue.at(i); | | |
| 4552 | resolve_use_decl(g, use_decl_node); | | |
| 4553 | } | | |
| 4554 | | | |
| 4555 | while (g->resolve_queue_index < g->resolve_queue.length || | 4543 | while (g->resolve_queue_index < g->resolve_queue.length || |
| 4556 | g->fn_defs_index < g->fn_defs.length) | 4544 | g->fn_defs_index < g->fn_defs.length || |
| | 4545 | g->use_queue_index < g->use_queue.length) |
| 4557 | { | 4546 | { |
| | 4547 | for (; g->use_queue_index < g->use_queue.length; g->use_queue_index += 1) { |
| | 4548 | AstNode *use_decl_node = g->use_queue.at(g->use_queue_index); |
| | 4549 | preview_use_decl(g, use_decl_node); |
| | 4550 | resolve_use_decl(g, use_decl_node); |
| | 4551 | } |
| 4558 | for (; g->resolve_queue_index < g->resolve_queue.length; g->resolve_queue_index += 1) { | 4552 | for (; g->resolve_queue_index < g->resolve_queue.length; g->resolve_queue_index += 1) { |
| 4559 | Tld *tld = g->resolve_queue.at(g->resolve_queue_index); | 4553 | Tld *tld = g->resolve_queue.at(g->resolve_queue_index); |
| 4560 | AstNode *source_node = nullptr; | 4554 | AstNode *source_node = nullptr; |