Internal Lookup Tree
A LookupTree representing an incomplete search. To further the search, its decisionStep performs some sort of dynamic test, producing the next subtree to visit.
Author
Mark van Gulik
Parameters
The kind of elements in the lookup tree, such as method definitions.
What we expect to produce from a lookup activity, such as the tuple of most-specific matching method definitions for some arguments.
Functions
Strengthen the type to a lookup tree suitable for method lookups.
If it has not already been computed, compute and cache the decisionStep to use for making progress at this InternalLookupTree.
Properties
An Avail integer coding which arguments (and extras that may have been generated during traversal of ancestors) were known to contain at least one enumeration of non-types. Those actual values can be used to look up subtrees for which that value is a possible instance of an actual provided type. See TestForEnumerationOfNontypeDecisionStep. The flag for argument #n is indicated by a set bit in the n-1st bit position, and serves to suppress subsequent attempts to dispatch this way on this argument in subtrees.
An A_Map from Avail integer to Avail integer. They key integer is the one-based argument (or extras) subscript of the source object, and the value integer is an encoding of which fields have been extracted, where bit 2^(N-1) indicates the Nth field (one-based) has been extracted already. Since objects and object types are disjoint, this same map is used for both purposes without ambiguity.
An Avail integer coding which arguments (and extras that may have been generated during traversal of ancestors) were known to be metatypes, and have had their instance (a type) extracted already into another field via an ExtractMetaInstanceDecisionStep in an ancestor. Argument #n is indicated by a set bit in the n-1st bit position, the one whose value in the integer is 2^(n-1).
An Avail integer coding which arguments (and extras that may have been generated during traversal of ancestors) were known to be phrase types, and have had their yield type extracted already into another field via an ExtractPhraseTypeDecisionStep in an ancestor. Argument #n is indicated by a set bit in the n-1st bit position, the one whose value in the integer is 2^(n-1).
The list of argument TypeRestrictions known to hold at this position in the decision tree. Each element corresponds with an argument position for the method.
Answer the lookup solution (List of A_Definition at this leaf node, or null if this is not a leaf node.