mirror of
https://github.com/ziglang/zig.git
synced 2025-12-15 18:53:07 +00:00
stage1: Resolve usingnamespace decls when calling @typeInfo
Closes #7176
This commit is contained in:
parent
c6c25a1c09
commit
72980388ca
@ -4386,7 +4386,7 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node, bool all
|
||||
}
|
||||
}
|
||||
|
||||
Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name) {
|
||||
void resolve_container_usingnamespace_decls(CodeGen *g, ScopeDecls *decls_scope) {
|
||||
// resolve all the using_namespace decls
|
||||
for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) {
|
||||
TldUsingNamespace *tld_using_namespace = decls_scope->use_decls.at(i);
|
||||
@ -4396,6 +4396,10 @@ Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name) {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name) {
|
||||
resolve_container_usingnamespace_decls(g, decls_scope);
|
||||
auto entry = decls_scope->decl_table.maybe_get(name);
|
||||
return (entry == nullptr) ? nullptr : entry->value;
|
||||
}
|
||||
|
||||
@ -79,6 +79,7 @@ ZigVar *find_variable(CodeGen *g, Scope *orig_context, Buf *name, ScopeFnDef **c
|
||||
Tld *find_decl(CodeGen *g, Scope *scope, Buf *name);
|
||||
Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name);
|
||||
void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node, bool allow_lazy);
|
||||
void resolve_container_usingnamespace_decls(CodeGen *g, ScopeDecls *decls_scope);
|
||||
|
||||
ZigType *get_src_ptr_type(ZigType *type);
|
||||
uint32_t get_ptr_align(CodeGen *g, ZigType *type);
|
||||
|
||||
@ -24890,6 +24890,8 @@ static Error ir_make_type_info_decls(IrAnalyze *ira, IrInst* source_instr, ZigVa
|
||||
if ((err = type_resolve(ira->codegen, type_info_fn_decl_inline_type, ResolveStatusSizeKnown)))
|
||||
return err;
|
||||
|
||||
resolve_container_usingnamespace_decls(ira->codegen, decls_scope);
|
||||
|
||||
// The unresolved declarations are collected in a separate queue to avoid
|
||||
// modifying decl_table while iterating over it
|
||||
ZigList<Tld*> resolve_decl_queue{};
|
||||
|
||||
@ -460,3 +460,17 @@ test "StructField.is_comptime" {
|
||||
expect(!info.fields[0].is_comptime);
|
||||
expect(info.fields[1].is_comptime);
|
||||
}
|
||||
|
||||
test "typeInfo resolves usingnamespace declarations" {
|
||||
const A = struct {
|
||||
pub const f1 = 42;
|
||||
};
|
||||
|
||||
const B = struct {
|
||||
const f0 = 42;
|
||||
usingnamespace A;
|
||||
};
|
||||
|
||||
expect(@typeInfo(B).Struct.decls.len == 2);
|
||||
//a
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user