Package-level declarations
Types
An A_Phrase is generally produced when the AvailCompiler parses source code of an A_Module. Avail defines a variety of phrases, which are implemented by the subclasses of PhraseDescriptor. A_Phrase is a sub-interface of A_BasicObject, and defines the operations that phrases implement.
My instances represent assignment statements.
My instances represent occurrences of blocks (functions) encountered in code.
My instances represent variable and constant declaration statements. There are several kinds of declarations, some with initializing expressions and some with type expressions.
My instances adapt expressions to be statements. The two currently supported examples are ⊤-value message sends and assignments.
My instances represent a sequence of phrases to be treated as statements, except the first one. All phrases are executed, and all results except the one from the first phrase are discarded. The first-of-sequence phrase's effective value is the value produced by the first phrase.
My instances represent phrases which will generate tuples directly at runtime.
My instances are occurrences of literals parsed from Avail source code. At the moment only strings and non-negative numbers are supported.
A macro substitution phrase represents the result of applying a macro to its argument expressions to produce an output phrase.
My instances represent a parsing marker that can be pushed onto the parse stack. It should never occur as part of a composite phrase, and is not capable of emitting code.
My instances represent phrases which will generate permuted tuples at runtime. The elements still have to be generated in their lexical order, but an L1Operation.L1Ext_doPermute changes their order while they're still on the stack (before being made into a tuple or passed as the top level arguments in a send).
I'm used to implement the abstract notion of phrases. All concrete phrase kinds are below me in the hierarchy.
My instances represent a reference-taking expression. A variable itself is to be pushed on the stack. Note that this does not work for arguments or constants or labels, as no actual variable object is created for those.
My instances represent invocations of multi-methods in Avail code.
My instances adapt a sequence of statements, the last one potentially producing a non-⊤ value, as an expression. The two currently supported examples are ⊤-value message sends and assignments.
My instances represent a sequence of phrases to be treated as statements, except possibly the last one.
My instances represent the use of some declaration.