abstract class Savi::Compiler::TInfer::Phi
- Savi::Compiler::TInfer::Phi
- Savi::Compiler::TInfer::DynamicInfo
- Savi::Compiler::TInfer::Info
- Reference
- Object
Overview
TODO add some kind of logic for analyzing exhausted choices, as well as necessary/sufficient conditions for each branch to be in play letting us better specialize the codegen later by eliminating impossible branches in particular reifications of this type or function.
Direct Known Subclasses
Defined in:
savi/compiler/t_infer/info.crConstructors
Instance Method Summary
- #as_conduit? : Conduit | Nil
-
#as_downstream_constraint_meta_type(ctx : Context, type_check : TTypeCheck::ForReifiedFunc) : MetaType
In the rare case that an Info subclass needs to dynamically pretend to be a different downstream constraint, it can override this method.
-
#as_multiple_downstream_constraints(ctx : Context, type_check : TTypeCheck::ForReifiedFunc) : Array(Tuple(Source::Pos, MetaType)) | Nil
In the rare case that an Info subclass needs to dynamically pretend to be multiple different downstream constraints, it can override this method.
- #branches : Array(Tuple(Info | Nil, Info, Bool))
-
#describe_kind : String
Must be implemented by the child class as an required hook.
- #fixed_bool : Info
- #tether_upward_transform_span(ctx : Context, infer : Visitor, span : Span) : Span
Instance methods inherited from class Savi::Compiler::TInfer::DynamicInfo
add_downstream(use_pos : Source::Pos, info : Info)
add_downstream,
adds_alias
adds_alias,
after_add_downstream(use_pos : Source::Pos, info : Info)
after_add_downstream,
describe_downstream_constraints(ctx : Context, type_check : TTypeCheck::ForReifiedFunc)
describe_downstream_constraints,
describe_kind : String
describe_kind,
described_kind
described_kind,
downstream_tethers(querent : Info) : Array(Tether)
downstream_tethers,
downstream_use_pos
downstream_use_pos,
downstreams_each
downstreams_each,
downstreams_empty?
downstreams_empty?,
list_downstream_constraints(ctx : Context, type_check : TTypeCheck::ForReifiedFunc)
list_downstream_constraints,
tether_constraint_spans(ctx : Context, infer : Visitor)
tether_constraint_spans,
tethers(querent : Info) : Array(Tether)
tethers,
this_would_be_possible_if : Tuple(Source::Pos, String) | Nil
this_would_be_possible_if,
this_would_be_possible_if=(this_would_be_possible_if : Tuple(Source::Pos, String) | Nil)
this_would_be_possible_if=,
total_downstream_constraint(ctx : Context, type_check : TTypeCheck::ForReifiedFunc)
total_downstream_constraint
Instance methods inherited from class Savi::Compiler::TInfer::Info
add_downstream(use_pos : Source::Pos, info : Info)
add_downstream,
add_peer_hint(peer : Info)
add_peer_hint,
as_conduit? : Conduit | Nil
as_conduit?,
as_downstream_constraint_meta_type(ctx : Context, type_check : TTypeCheck::ForReifiedFunc) : MetaType | Nil
as_downstream_constraint_meta_type,
as_multiple_downstream_constraints(ctx : Context, type_check : TTypeCheck::ForReifiedFunc) : Array(Tuple(Source::Pos, MetaType)) | Nil
as_multiple_downstream_constraints,
as_upstream_conduits : Array(Conduit)
as_upstream_conduits,
layer_index : Int32
layer_index,
layer_index=(layer_index : Int32)
layer_index=,
layer_index? : Int32 | Nil
layer_index?,
override_describe_kind : String | Nil
override_describe_kind,
override_describe_kind=(override_describe_kind : String | Nil)
override_describe_kind=,
pos : Source::Pos
pos,
pos=(pos : Source::Pos)
pos=,
resolve_span!(ctx : Context, infer : Visitor)
resolve_span!,
tether_resolve_span(ctx : Context, infer : Visitor)
tether_resolve_span,
tether_terminal?
tether_terminal?,
tether_upward_transform_span(ctx : Context, infer : Visitor, span : Span) : Span
tether_upward_transform_span,
tethers(querent : Info) : Array(Tether)
tethers,
to_s
to_s
Constructor Detail
Instance Method Detail
In the rare case that an Info subclass needs to dynamically pretend to be a different downstream constraint, it can override this method. If you need to report multiple positions, also override the other method below called as_multiple_downstream_constraints. This will prevent upstream DynamicInfos from eagerly resolving you.
In the rare case that an Info subclass needs to dynamically pretend to be multiple different downstream constraints, it can override this method. This is only used to report positions in more detail, and it is expected that the intersection of all MetaTypes here is the same as the resolve.
Must be implemented by the child class as an required hook.