refactor(ir): add ResolveEnv + TypeResolver shell; own primitives + compounds (A2.1)
Architecture phase A2.1 -- behavior-preserving. Introduce src/ir/type_resolver.zig as the canonical AST-type-node -> TypeId resolver (Principle 1), starting with: - ResolveEnv: the explicit resolution-context shape (Principle 2) -- type/pack/ comptime bindings + target_type. Defined now; consumed as A2.2/A2.3 move the cases that need it. - TypeResolver.resolvePrimitive(name): the builtin keyword table, MOVED here from type_bridge.resolveTypePrimitive (now a re-export -> single source; its 7 callers are unaffected; no import cycle). - TypeResolver.resolveCompound(node, inner): the structural compound types *T / [*]T / []T / ?T / [N]T. Element types recurse via inner.resolveInner (an anytype callback) so generic structs / bindings in element position keep their full stateful resolution. Lowering.resolveTypeWithBindings duplicated the 5 simple compounds across its bindings and no-bindings blocks (10 arms). Both are replaced with a single self.typeResolver().resolveCompound(node, self) delegation; adds Lowering.resolveInner (recursion hook) + typeResolver() (by-value view). Deliberately deferred: tuples, closures, and function types stay on the existing pack-aware helpers (resolveClosure/Tuple/FunctionTypeWithBindings); A2.3 owns their pack-projection logic. Tests: src/ir/type_resolver.test.zig (resolvePrimitive keyword/null cases; resolveCompound for all 5 + null for non-compound; ResolveEnv defaults), wired into the ir.zig barrel. No new fallback path; no duplicate truth. Gate green: zig build, zig build test, bash tests/run_examples.sh (350 passed, 0 failed). lower.zig 19393 -> 19372.
This commit is contained in:
@@ -5,6 +5,7 @@ pub const print = @import("print.zig");
|
||||
pub const interp = @import("interp.zig");
|
||||
pub const lower = @import("lower.zig");
|
||||
pub const program_index = @import("program_index.zig");
|
||||
pub const type_resolver = @import("type_resolver.zig");
|
||||
|
||||
pub const TypeId = types.TypeId;
|
||||
pub const TypeInfo = types.TypeInfo;
|
||||
@@ -32,6 +33,8 @@ pub const Interpreter = interp.Interpreter;
|
||||
pub const Value = interp.Value;
|
||||
pub const Lowering = lower.Lowering;
|
||||
pub const ProgramIndex = program_index.ProgramIndex;
|
||||
pub const TypeResolver = type_resolver.TypeResolver;
|
||||
pub const ResolveEnv = type_resolver.ResolveEnv;
|
||||
|
||||
pub const compiler_hooks = @import("compiler_hooks.zig");
|
||||
pub const emit_llvm = @import("emit_llvm.zig");
|
||||
@@ -51,6 +54,7 @@ pub const print_tests = @import("print.test.zig");
|
||||
pub const interp_tests = @import("interp.test.zig");
|
||||
pub const lower_tests = @import("lower.test.zig");
|
||||
pub const program_index_tests = @import("program_index.test.zig");
|
||||
pub const type_resolver_tests = @import("type_resolver.test.zig");
|
||||
pub const type_bridge_tests = @import("type_bridge.test.zig");
|
||||
pub const emit_llvm_tests = @import("emit_llvm.test.zig");
|
||||
pub const jni_descriptor_tests = @import("jni_descriptor.test.zig");
|
||||
|
||||
Reference in New Issue
Block a user