refactor(ir): add CallPlan + CallResolver.plan(c); resultType delegates (A3.2 convergence step 2)
Introduce CallPlan — the single classification record for a call: kind (14 variants), return_type, a Target union (builtin/func/named/protocol_method/ foreign_method/constructed/none), variant tag, and the prepends_receiver / prepends_ctx / expands_defaults properties the selected dispatch implies. Move call recognition into CallResolver.plan(c) (branch order preserved exactly) and reimplement resultType(c) as plan(c).return_type — the typing consumer converges onto the plan first. lowerCall is untouched; routing it through plan(c) is sub-step 3. 10 plan-object tests assert kind/target/variant + receiver/ctx/default properties for every pinned call form: builtin/reflection, lazy + resolved direct fn (incl. default-arg expansion + __sx_ctx prepend), closure / default-conv vs C-conv fn-pointer, protocol dispatch, struct/UFCS #compiler method, foreign instance vs static, qualified + dot-shorthand enum construction, namespace fn, and the unresolved fallthrough. Widen for the new collaborator only: resolveVariantIndex -> pub (plan resolves the variant tag); Scope/Binding + init/deinit/put -> pub (so unit tests can stand up a lexical scope for closure/fn-ptr callees without a full lowering). zig build, zig build test, and tests/run_examples.sh (357/0) all green; no behavior change.
This commit is contained in:
@@ -42,6 +42,7 @@ pub const ResolveEnv = type_resolver.ResolveEnv;
|
||||
pub const PackResolver = packs.PackResolver;
|
||||
pub const ExprTyper = expr_typer.ExprTyper;
|
||||
pub const CallResolver = calls.CallResolver;
|
||||
pub const CallPlan = calls.CallPlan;
|
||||
|
||||
pub const compiler_hooks = @import("compiler_hooks.zig");
|
||||
pub const emit_llvm = @import("emit_llvm.zig");
|
||||
|
||||
Reference in New Issue
Block a user