TypeTag

enum TypeTag : Enum<TypeTag>

TypeTag is an enumeration that corresponds with the basic type structure of Avail's type lattice. Even though the type lattice contains an infinite collection of infinitely long chains of types, some of which have an infinite number of direct ancestors and direct descendants, we're still able to extract a pragmatic tree of types from the lattice.

Since this restricted set of types form a tree, they're defined in such an order that all of a type's descendants follow it. Since this is recursively true, the types are effectively listed in depth-last order. The ordinals are assigned in the order of definition, but each type keeps track of the maximum ordinal of all of its descendants (which occupy a contiguous span of ordinals just after the type's ordinal). We can test if type A is a subtype of B by checking if a.ordinal ≥ b.ordinal and a.highOrdinal ≤ b.highOrdinal. For a proper subtype test, we turn the first condition into an inequality.

Author

Mark van Gulik

Parameters

instance

The most general instance of this TypeTag.

modifiers

The vararg list of Modifiers, which set flags or declare covariant and contravariant relationships.

Entries

Link copied to clipboard
BOTTOM_TYPE_TAG(TOP_TYPE_TAG, NIL_TAG, Unique { bottom })
Link copied to clipboard
META_TAG(ANY_TYPE_TAG, TOP_TYPE_TAG, Sup { instanceMeta(instanceMeta(Types.TOP.o)) })
Link copied to clipboard
FIBER_TYPE_TAG(NONTYPE_TYPE_TAG, FIBER_TAG, Sup { instanceMeta(mostGeneralFiberType()) }, Co("result") { resultType() })
Link copied to clipboard
RAW_FUNCTION_TYPE_TAG(NONTYPE_TYPE_TAG, RAW_FUNCTION_TAG, Sup { instanceMeta(mostGeneralCompiledCodeType()) }, Co("functionType") { functionType })
Link copied to clipboard
CONTINUATION_TYPE_TAG(NONTYPE_TYPE_TAG, CONTINUATION_TAG, Sup { continuationMeta }, Contra("arguments") { functionType.argsTupleType }, Contra("result") { functionType.returnType })
Link copied to clipboard
TUPLE_TYPE_TAG(NONTYPE_TYPE_TAG, TUPLE_TAG, Sup { instanceMeta(mostGeneralTupleType) }, Co("size", part = { fromInt(tupleSize) }) { sizeRange })
Link copied to clipboard
LITERAL_TOKEN_TYPE_TAG(TOKEN_TYPE_TAG, LITERAL_TOKEN_TAG, Sup { instanceMeta(mostGeneralLiteralTokenType()) })
Link copied to clipboard
TOKEN_TYPE_TAG(NONTYPE_TYPE_TAG, TOKEN_TAG, Sup { instanceMeta(Types.TOKEN.o) })
Link copied to clipboard
MAP_TYPE_TAG(NONTYPE_TYPE_TAG, MAP_TAG, Sup { instanceMeta(mostGeneralMapType()) }, Co("size", part = { fromInt(mapSize) }) { sizeRange }, Co("key") { keyType }, Co("value") { valueType })
Link copied to clipboard
OBJECT_TYPE_TAG(NONTYPE_TYPE_TAG, OBJECT_TAG, Sup { mostGeneralObjectMeta})
Link copied to clipboard
FUNCTION_TYPE_TAG(NONTYPE_TYPE_TAG, FUNCTION_TAG, Sup { instanceMeta(mostGeneralFunctionType()) }, Contra("arguments") { argsTupleType }, Co("return") { returnType })
Link copied to clipboard
VARIABLE_TYPE_TAG(NONTYPE_TYPE_TAG, VARIABLE_TAG, Sup { mostGeneralVariableMeta }, Co("read") { readType }, Contra("write") { writeType })
Link copied to clipboard
LIST_PHRASE_TYPE_TAG(PHRASE_TYPE_TAG, LIST_PHRASE_TAG, Sup { instanceMeta(PhraseKind.LIST_PHRASE.mostGeneralType) })
Link copied to clipboard
PHRASE_TYPE_TAG(NONTYPE_TYPE_TAG, PHRASE_TAG, Sup { instanceMeta(PhraseKind.PARSE_PHRASE.mostGeneralType) }, Co("yields") { phraseTypeExpressionType })
Link copied to clipboard
EXTENDED_INTEGER_TYPE_TAG(NUMBER_TYPE_TAG, EXTENDED_INTEGER_TAG, Sup { instanceMeta(extendedIntegers) })
Link copied to clipboard
NUMBER_TYPE_TAG(NONTYPE_TYPE_TAG, NUMBER_TAG, Sup { instanceMeta(Types.NUMBER.o) })
Link copied to clipboard
POJO_TYPE_TAG(NONTYPE_TYPE_TAG, POJO_TAG, Sup { instanceMeta(mostGeneralPojoType()) })
Link copied to clipboard
SET_TYPE_TAG(NONTYPE_TYPE_TAG, SET_TAG, Sup { instanceMeta(mostGeneralSetType()) }, Co("size", part = { fromInt(setSize) }) { sizeRange }, Co("element") { contentType })
Link copied to clipboard
FALSE_TYPE_TAG(BOOLEAN_TYPE_TAG, FALSE_TAG, Sup { instanceMeta(falseType) })
Link copied to clipboard
TRUE_TYPE_TAG(BOOLEAN_TYPE_TAG, TRUE_TAG, Sup { instanceMeta(trueType) })
Link copied to clipboard
BOOLEAN_TYPE_TAG(ATOM_TYPE_TAG, BOOLEAN_TAG, Sup { instanceMeta(booleanType) })
Link copied to clipboard
ATOM_TYPE_TAG(NONTYPE_TYPE_TAG, ATOM_TAG, Sup { instanceMeta(Types.ATOM.o) })
Link copied to clipboard
NONTYPE_TYPE_TAG(ANY_TYPE_TAG, NONTYPE_TAG, Sup { instanceMeta(Types.NONTYPE.o) })
Link copied to clipboard
ANY_TYPE_TAG(TOP_TYPE_TAG, null, Sup { instanceMeta(Types.ANY.o) })
Link copied to clipboard
TOP_TYPE_TAG(TOP_TAG, TOP_TAG, Sup { instanceMeta(Types.TOP.o) })
Link copied to clipboard
VARIABLE_TAG(NONTYPE_TAG, null, Sup { mostGeneralVariableType })
Link copied to clipboard
TUPLE_TAG(NONTYPE_TAG, null, Sup { mostGeneralTupleType })
Link copied to clipboard
LITERAL_TOKEN_TAG(TOKEN_TAG, null, Sup { mostGeneralLiteralTokenType() })
Link copied to clipboard
TOKEN_TAG(NONTYPE_TAG, null, Sup { Types.TOKEN.o })
Link copied to clipboard
SET_TAG(NONTYPE_TAG, null, Sup { mostGeneralSetType() })
Link copied to clipboard
RAW_FUNCTION_TAG(NONTYPE_TAG, null, Sup { mostGeneralCompiledCodeType() })
Link copied to clipboard
POJO_TAG(NONTYPE_TAG, null, Sup { mostGeneralPojoType() })
Link copied to clipboard
MACRO_SUBSTITUTION_PHRASE_TAG(PHRASE_TAG, null, Sup { PhraseKind.MACRO_SUBSTITUTION_PHRASE.mostGeneralType })
Link copied to clipboard
EXPRESSION_AS_STATEMENT_PHRASE_TAG(STATEMENT_PHRASE_TAG, null, Sup { PhraseKind.EXPRESSION_AS_STATEMENT_PHRASE.mostGeneralType })
Link copied to clipboard
PRIMITIVE_FAILURE_REASON_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.PRIMITIVE_FAILURE_REASON_PHRASE.mostGeneralType })
Link copied to clipboard
MODULE_CONSTANT_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.MODULE_CONSTANT_PHRASE.mostGeneralType })
Link copied to clipboard
MODULE_VARIABLE_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.MODULE_VARIABLE_PHRASE.mostGeneralType })
Link copied to clipboard
LOCAL_CONSTANT_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.LOCAL_CONSTANT_PHRASE.mostGeneralType })
Link copied to clipboard
LOCAL_VARIABLE_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.LOCAL_VARIABLE_PHRASE.mostGeneralType })
Link copied to clipboard
LABEL_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.LABEL_PHRASE.mostGeneralType })
Link copied to clipboard
ARGUMENT_PHRASE_TAG(DECLARATION_PHRASE_TAG, null, Sup { PhraseKind.ARGUMENT_PHRASE.mostGeneralType })
Link copied to clipboard
DECLARATION_PHRASE_TAG(STATEMENT_PHRASE_TAG, null, Sup { PhraseKind.STATEMENT_PHRASE.mostGeneralType })
Link copied to clipboard
FIRST_OF_SEQUENCE_PHRASE_TAG(STATEMENT_PHRASE_TAG, null, Sup { PhraseKind.FIRST_OF_SEQUENCE_PHRASE.mostGeneralType })
Link copied to clipboard
SEQUENCE_PHRASE_TAG(STATEMENT_PHRASE_TAG, null, Sup { PhraseKind.SEQUENCE_PHRASE.mostGeneralType })
Link copied to clipboard
STATEMENT_PHRASE_TAG(PHRASE_TAG, null, Abstract, Sup { PhraseKind.STATEMENT_PHRASE.mostGeneralType })
Link copied to clipboard
SEQUENCE_AS_EXPRESSION_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.SEQUENCE_AS_EXPRESSION_PHRASE.mostGeneralType })
Link copied to clipboard
VARIABLE_USE_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.VARIABLE_USE_PHRASE.mostGeneralType })
Link copied to clipboard
PERMUTED_LIST_PHRASE_TAG(LIST_PHRASE_TAG, null, Sup { PhraseKind.PERMUTED_LIST_PHRASE.mostGeneralType })
Link copied to clipboard
LIST_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.LIST_PHRASE.mostGeneralType })
Link copied to clipboard
SEND_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.SEND_PHRASE.mostGeneralType })
Link copied to clipboard
SUPER_CAST_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.SUPER_CAST_PHRASE.mostGeneralType })
Link copied to clipboard
REFERENCE_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.REFERENCE_PHRASE.mostGeneralType })
Link copied to clipboard
LITERAL_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.LITERAL_PHRASE.mostGeneralType })
Link copied to clipboard
BLOCK_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.BLOCK_PHRASE.mostGeneralType })
Link copied to clipboard
ASSIGNMENT_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.ASSIGNMENT_PHRASE.mostGeneralType })
Link copied to clipboard
MARKER_PHRASE_TAG(EXPRESSION_PHRASE_TAG, null, Sup { PhraseKind.MARKER_PHRASE.mostGeneralType })
Link copied to clipboard
EXPRESSION_PHRASE_TAG(PHRASE_TAG, null, Abstract, Sup { PhraseKind.EXPRESSION_PHRASE.mostGeneralType})
Link copied to clipboard
PHRASE_TAG(NONTYPE_TAG, null, Abstract, Sup { PhraseKind.PARSE_PHRASE.mostGeneralType })
Link copied to clipboard
PARSING_PLAN_IN_PROGRESS_TAG(NONTYPE_TAG, null, Sup {Types.PARSING_PLAN_IN_PROGRESS.o })
Link copied to clipboard
PARSING_PLAN_TAG(NONTYPE_TAG, null, Sup { Types.DEFINITION_PARSING_PLAN.o })
Link copied to clipboard
OBJECT_TAG(NONTYPE_TAG, null, Sup { mostGeneralObjectType })
Link copied to clipboard
DOUBLE_TAG(NUMBER_TAG, null, Sup { Types.DOUBLE.o })
Link copied to clipboard
FLOAT_TAG(NUMBER_TAG, null, Sup { Types.FLOAT.o })
Link copied to clipboard
POSITIVE_INFINITY_TAG(EXTENDED_INTEGER_TAG, null, Unique { positiveInfinity })
Link copied to clipboard
NEGATIVE_INFINITY_TAG(EXTENDED_INTEGER_TAG, null, Unique { negativeInfinity })
Link copied to clipboard
NATURAL_NUMBER_TAG(WHOLE_NUMBER_TAG, null, Sup { naturalNumbers })
Link copied to clipboard
WHOLE_NUMBER_TAG(INTEGER_TAG, null, Sup { wholeNumbers })
Link copied to clipboard
INTEGER_TAG(EXTENDED_INTEGER_TAG, null, Sup { integers })
Link copied to clipboard
EXTENDED_INTEGER_TAG(NUMBER_TAG, null, Abstract, Sup { extendedIntegers })
Link copied to clipboard
NUMBER_TAG(NONTYPE_TAG, null, Abstract, Sup { Types.NUMBER.o })
Link copied to clipboard
MODULE_TAG(NONTYPE_TAG, null, Sup { Types.MODULE.o })
Link copied to clipboard
METHOD_TAG(NONTYPE_TAG, null, Sup { Types.METHOD.o })
Link copied to clipboard
MAP_TAG(NONTYPE_TAG, null, Sup { mostGeneralMapType() })
Link copied to clipboard
MACRO_TAG(NONTYPE_TAG, null, Sup { Types.MACRO_DEFINITION.o })
Link copied to clipboard
LEXER_TAG(NONTYPE_TAG, null, Sup { Types.LEXER.o })
Link copied to clipboard
FUNCTION_TAG(NONTYPE_TAG, null, Sup { mostGeneralFunctionType() })
Link copied to clipboard
FIBER_TAG(NONTYPE_TAG, null, Sup { mostGeneralFiberType() })
Link copied to clipboard
DEFINITION_TAG(NONTYPE_TAG, null, Sup { Types.DEFINITION.o })
Link copied to clipboard
CONTINUATION_TAG(NONTYPE_TAG, null, Sup { mostGeneralContinuationType })
Link copied to clipboard
CHARACTER_TAG(NONTYPE_TAG, null, Sup { Types.CHARACTER.o })
Link copied to clipboard
BUNDLE_TREE_TAG(NONTYPE_TAG, null, Sup { Types.MESSAGE_BUNDLE_TREE.o })
Link copied to clipboard
BUNDLE_TAG(NONTYPE_TAG, null, Sup { Types.MESSAGE_BUNDLE.o })
Link copied to clipboard
FALSE_TAG(BOOLEAN_TAG, null, Unique { falseObject })
Link copied to clipboard
TRUE_TAG(BOOLEAN_TAG, null, Unique { trueObject })
Link copied to clipboard
BOOLEAN_TAG(ATOM_TAG, null, Abstract, Sup { booleanType })
Link copied to clipboard
ATOM_TAG(NONTYPE_TAG, null, Sup { Types.ATOM.o })
Link copied to clipboard
NONTYPE_TAG(TOP_TAG, null, Sup { Types.NONTYPE.o })
Link copied to clipboard
NIL_TAG(TOP_TAG, null, Unique { nil }, Sup { Types.TOP.o })
Link copied to clipboard
TOP_TAG(null, null, Abstract, Sup { Types.TOP.o })
Link copied to clipboard
UNKNOWN_TAG(null, UNKNOWN_TAG, Abstract, Sup { Types.TOP.o })

Types

Link copied to clipboard
object Companion
Link copied to clipboard
sealed class Modifier

Functions

Link copied to clipboard
fun commonAncestorWith(other: TypeTag?): TypeTag
Link copied to clipboard
fun isSubtagOf(otherTag: TypeTag): Boolean

Properties

Link copied to clipboard
val contravariants: MutableList<TypeTag.Modifier.Contra>

The array of Contravariant relationships defined during construction.

Link copied to clipboard
val covariants: MutableList<TypeTag.Modifier.Co>

The array of Covariant relationships defined during construction.

Link copied to clipboard
val depth: Int

The number of ancestors of this TypeTag

Link copied to clipboard
val highOrdinal: Int

The highest ordinal value of all of this TypeTag's descendants, including itself. The descendants' ordinals must start just after the current TypeTag's ordinal, and be contiguously numbered. Since the ordinals are assigned by the Enum mechanism, that means a TypeTag definition must be followed immediately by each of its children and their descendants, which is prefix tree order.

Link copied to clipboard
var isAbstract: Boolean = false

A flag set during initialization, indicating this TypeTag has no direct instances.

Link copied to clipboard
val metaTag: TypeTag? = null

If object X has tag T, then X's type has tag T.metaTag.

Link copied to clipboard
val name: String
Link copied to clipboard
val ordinal: Int
Link copied to clipboard
val parent: TypeTag?

The parent of this TypeTag.

Link copied to clipboard
val supremum: A_Type

Every TypeTag has a (potentially infinite) collection of values that use that tag. After initialization, this property has the least upper bound A_Type that constrains all those values.

Link copied to clipboard
val uniqueValue: AvailObject?

Some TypeTags occur in exactly one AvailObject. If so, this field will be initialized to a lambda that produces the value.