mirror of
https://github.com/ziglang/zig.git
synced 2025-12-16 03:03:09 +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
|
// resolve all the using_namespace decls
|
||||||
for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) {
|
for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) {
|
||||||
TldUsingNamespace *tld_using_namespace = decls_scope->use_decls.at(i);
|
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);
|
auto entry = decls_scope->decl_table.maybe_get(name);
|
||||||
return (entry == nullptr) ? nullptr : entry->value;
|
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_decl(CodeGen *g, Scope *scope, Buf *name);
|
||||||
Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_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_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);
|
ZigType *get_src_ptr_type(ZigType *type);
|
||||||
uint32_t get_ptr_align(CodeGen *g, 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)))
|
if ((err = type_resolve(ira->codegen, type_info_fn_decl_inline_type, ResolveStatusSizeKnown)))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
resolve_container_usingnamespace_decls(ira->codegen, decls_scope);
|
||||||
|
|
||||||
// The unresolved declarations are collected in a separate queue to avoid
|
// The unresolved declarations are collected in a separate queue to avoid
|
||||||
// modifying decl_table while iterating over it
|
// modifying decl_table while iterating over it
|
||||||
ZigList<Tld*> resolve_decl_queue{};
|
ZigList<Tld*> resolve_decl_queue{};
|
||||||
|
|||||||
@ -460,3 +460,17 @@ test "StructField.is_comptime" {
|
|||||||
expect(!info.fields[0].is_comptime);
|
expect(!info.fields[0].is_comptime);
|
||||||
expect(info.fields[1].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