refactor(ir): extract ErrorFlow (error_flow.zig) for path-sensitive error-flow diagnostics (A5.2 step 2)
Move the diagnostic-only Pass 1e (ERR E1.7 cleanup-absorption + E1.8 value-slot liveness) out of lower.zig into src/ir/error_flow.zig behind an ErrorFlow *Lowering facade (Principle 5, like ErrorAnalysis/CoercionResolver). Behavior preserved exactly — pure relocation. Moved verbatim (self. -> self.l. for Lowering members; sibling calls stay on the facade; provenHas is a file-local free fn): checkErrorFlow, analyzeFnBody, flowWalk, flowStmt, flowIf, flowMatch, flowExpr, applyRefinement, provenAdd/provenClone/provenIntersect, registerFailableDestructure, checkCleanupBody/checkCleanupNode/cleanupReject, plus the FlowCtx/ProvenSet types. - lowerRoot routes the single call site through self.errorFlow().checkErrorFlow(decls); no Lowering wrapper kept (only the pipeline calls it, no unit-test caller). New errorFlow() accessor. - The pass takes AST decls + ProgramIndex + diagnostics only — independent of IR Builder state (PLAN-ARCH A5.2 success criterion). - New pub: exprIsFailable (only widening; inferExprType/errorChannelOf already pub). lower.zig -389 (->17030); error_flow.zig 407. Barrel-wired in ir.zig. - No .test.zig: diagnostic-pass altitude (functions return only bool + emit diagnostics) — guarded by example anchors 1046-1053 (incl. scaffolding 1051/1052/1053). Phase A5 complete. Gate: zig build, zig build test, bash tests/run_examples.sh -> 361/0 (anchors 1046-1053 all ok, no .ir churn).
This commit is contained in:
@@ -13,6 +13,7 @@ pub const generics = @import("generics.zig");
|
||||
pub const protocols = @import("protocols.zig");
|
||||
pub const conversions = @import("conversions.zig");
|
||||
pub const error_analysis = @import("error_analysis.zig");
|
||||
pub const error_flow = @import("error_flow.zig");
|
||||
pub const semantic_diagnostics = @import("semantic_diagnostics.zig");
|
||||
|
||||
pub const TypeId = types.TypeId;
|
||||
@@ -52,6 +53,7 @@ pub const ProtocolResolver = protocols.ProtocolResolver;
|
||||
pub const CoercionResolver = conversions.CoercionResolver;
|
||||
pub const CoercionPlan = conversions.CoercionResolver.CoercionPlan;
|
||||
pub const ErrorAnalysis = error_analysis.ErrorAnalysis;
|
||||
pub const ErrorFlow = error_flow.ErrorFlow;
|
||||
pub const ErrorFacts = error_analysis.ErrorFacts;
|
||||
|
||||
pub const compiler_hooks = @import("compiler_hooks.zig");
|
||||
|
||||
Reference in New Issue
Block a user