module Savi::Compiler::Completeness
Overview
The purpose of the Completeness pass is to prove that constructors initialize all fields in the type that it constructs, such that no other code may ever interact with a readable reference to an uninitialized/NULL field.
This validation work also includes storing analysis of "self" references shared during a constructor before the type is "complete" (all fields initialized) so that the later TypeCheck pass can confirm that the tag capability is all that is needed to satisfy those.
This pass does not mutate the Program topology. This pass does not mutate the AST. This pass may raise a compilation error. This pass keeps state at the per-function level for constructors. This pass produces output state at the per-function level for constructors.