blob: b4ede7ab803541a55e475e99cb3bbe898e0e7ffa [file] [log] [blame]
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
//
// This file has been automatically generated. Please do not edit it manually.
// To regenerate the file, use the SDK script
// "pkg/analyzer/tool/summary/generate.dart $IDL_FILE_PATH",
// or "pkg/analyzer/tool/generate_files" for the analyzer package IDL/sources.
/// Enum of declaration kinds in available files.
enum AvailableDeclarationKind : byte {
CLASS,
CLASS_TYPE_ALIAS,
CONSTRUCTOR,
ENUM,
ENUM_CONSTANT,
FUNCTION,
FUNCTION_TYPE_ALIAS,
GETTER,
MIXIN,
SETTER,
VARIABLE
}
/// Enum used to indicate the kind of an entity reference.
enum EntityRefKind : byte {
/// The entity represents a named type.
named,
/// The entity represents a generic function type.
genericFunctionType,
/// The entity represents a function type that was synthesized by a LUB
/// computation.
syntheticFunction
}
/// Enum representing nullability suffixes in summaries.
///
/// This enum is similar to [NullabilitySuffix], but the order is different so
/// that [EntityRefNullabilitySuffix.starOrIrrelevant] can be the default.
enum EntityRefNullabilitySuffix : byte {
/// An indication that the canonical representation of the type under
/// consideration ends with `*`. Types having this nullability suffix are
/// called "legacy types"; it has not yet been determined whether they should
/// be unioned with the Null type.
///
/// Also used in circumstances where no nullability suffix information is
/// needed.
starOrIrrelevant,
/// An indication that the canonical representation of the type under
/// consideration ends with `?`. Types having this nullability suffix should
/// be interpreted as being unioned with the Null type.
question,
/// An indication that the canonical representation of the type under
/// consideration does not end with either `?` or `*`.
none
}
/// Enum used to indicate the kind of a name in index.
enum IndexNameKind : byte {
/// A top-level element.
topLevel,
/// A class member.
classMember
}
/// Enum used to indicate the kind of an index relation.
enum IndexRelationKind : byte {
/// Left: class.
/// Is ancestor of (is extended or implemented, directly or indirectly).
/// Right: other class declaration.
IS_ANCESTOR_OF,
/// Left: class.
/// Is extended by.
/// Right: other class declaration.
IS_EXTENDED_BY,
/// Left: class.
/// Is implemented by.
/// Right: other class declaration.
IS_IMPLEMENTED_BY,
/// Left: class.
/// Is mixed into.
/// Right: other class declaration.
IS_MIXED_IN_BY,
/// Left: method, property accessor, function, variable.
/// Is invoked at.
/// Right: location.
IS_INVOKED_BY,
/// Left: any element.
/// Is referenced (and not invoked, read/written) at.
/// Right: location.
IS_REFERENCED_BY,
/// Left: unresolved member name.
/// Is read at.
/// Right: location.
IS_READ_BY,
/// Left: unresolved member name.
/// Is both read and written at.
/// Right: location.
IS_READ_WRITTEN_BY,
/// Left: unresolved member name.
/// Is written at.
/// Right: location.
IS_WRITTEN_BY
}
/// When we need to reference a synthetic element in [PackageIndex] we use a
/// value of this enum to specify which kind of the synthetic element we
/// actually reference.
enum IndexSyntheticElementKind : byte {
/// Not a synthetic element.
notSynthetic,
/// The unnamed synthetic constructor a class element.
constructor,
/// The synthetic field element.
field,
/// The synthetic getter of a property introducing element.
getter,
/// The synthetic setter of a property introducing element.
setter,
/// The synthetic top-level variable element.
topLevelVariable,
/// The synthetic `loadLibrary` element.
loadLibrary,
/// The synthetic `index` getter of an enum.
enumIndex,
/// The synthetic `values` getter of an enum.
enumValues,
/// The synthetic `toString` method of an enum.
enumToString,
/// The containing unit itself.
unit
}
/// Types of comments.
enum LinkedNodeCommentType : byte {
block,
documentation,
endOfLine
}
/// Kinds of formal parameters.
enum LinkedNodeFormalParameterKind : byte {
requiredPositional,
optionalPositional,
optionalNamed,
requiredNamed
}
/// Kinds of [LinkedNode].
enum LinkedNodeKind : byte {
adjacentStrings,
annotation,
argumentList,
asExpression,
assertInitializer,
assertStatement,
assignmentExpression,
awaitExpression,
binaryExpression,
block,
blockFunctionBody,
booleanLiteral,
breakStatement,
cascadeExpression,
catchClause,
classDeclaration,
classTypeAlias,
comment,
commentReference,
compilationUnit,
conditionalExpression,
configuration,
constructorDeclaration,
constructorFieldInitializer,
constructorName,
continueStatement,
declaredIdentifier,
defaultFormalParameter,
doubleLiteral,
doStatement,
dottedName,
emptyFunctionBody,
emptyStatement,
enumConstantDeclaration,
enumDeclaration,
exportDirective,
expressionFunctionBody,
expressionStatement,
extendsClause,
fieldDeclaration,
fieldFormalParameter,
formalParameterList,
forEachPartsWithDeclaration,
forEachPartsWithIdentifier,
forElement,
forPartsWithDeclarations,
forPartsWithExpression,
forStatement,
functionDeclaration,
functionDeclarationStatement,
functionExpression,
functionExpressionInvocation,
functionTypeAlias,
functionTypedFormalParameter,
genericFunctionType,
genericTypeAlias,
hideCombinator,
ifElement,
ifStatement,
implementsClause,
importDirective,
instanceCreationExpression,
indexExpression,
integerLiteral,
interpolationExpression,
interpolationString,
isExpression,
label,
labeledStatement,
libraryDirective,
libraryIdentifier,
listLiteral,
mapLiteralEntry,
methodDeclaration,
methodInvocation,
mixinDeclaration,
namedExpression,
nativeClause,
nativeFunctionBody,
nullLiteral,
onClause,
parenthesizedExpression,
partDirective,
partOfDirective,
postfixExpression,
prefixExpression,
prefixedIdentifier,
propertyAccess,
redirectingConstructorInvocation,
rethrowExpression,
returnStatement,
setOrMapLiteral,
showCombinator,
simpleFormalParameter,
simpleIdentifier,
simpleStringLiteral,
spreadElement,
stringInterpolation,
superConstructorInvocation,
superExpression,
switchCase,
switchDefault,
switchStatement,
symbolLiteral,
thisExpression,
throwExpression,
topLevelVariableDeclaration,
tryStatement,
typeArgumentList,
typeName,
typeParameter,
typeParameterList,
variableDeclaration,
variableDeclarationList,
variableDeclarationStatement,
whileStatement,
withClause,
yieldStatement
}
/// Kinds of [LinkedNodeType]s.
enum LinkedNodeTypeKind : byte {
bottom,
dynamic_,
function,
interface,
typeParameter,
void_
}
/// Enum used to indicate the kind of entity referred to by a
/// [LinkedReference].
enum ReferenceKind : byte {
/// The entity is a class or enum.
classOrEnum,
/// The entity is a constructor.
constructor,
/// The entity is a getter or setter inside a class. Note: this is used in
/// the case where a constant refers to a static const declared inside a
/// class.
propertyAccessor,
/// The entity is a method.
method,
/// The entity is a typedef.
typedef,
/// The entity is a local function.
function,
/// The entity is a local variable.
variable,
/// The entity is a top level function.
topLevelFunction,
/// The entity is a top level getter or setter.
topLevelPropertyAccessor,
/// The entity is a prefix.
prefix,
/// The entity being referred to does not exist.
unresolved,
/// The entity is a typedef expressed using generic function type syntax.
genericFunctionTypedef
}
/// Enum used to indicate the kind of the error during top-level inference.
enum TopLevelInferenceErrorKind : byte {
assignment,
instanceGetter,
dependencyCycle,
overrideConflictFieldType,
overrideConflictReturnType,
overrideConflictParameterType
}
/// Enum used to indicate the style of a typedef.
enum TypedefStyle : byte {
/// A typedef that defines a non-generic function type. The syntax is
/// ```
/// 'typedef' returnType? identifier typeParameters? formalParameterList ';'
/// ```
/// The typedef can have type parameters associated with it, but the function
/// type that results from applying type arguments does not.
functionType,
/// A typedef expressed using generic function type syntax. The syntax is
/// ```
/// typeAlias ::=
/// 'typedef' identifier typeParameters? '=' genericFunctionType ';'
/// genericFunctionType ::=
/// returnType? 'Function' typeParameters? parameterTypeList
/// ```
/// Both the typedef itself and the function type that results from applying
/// type arguments can have type parameters.
genericFunctionType
}
/// Enum used to indicate the kind of an constructor initializer.
enum UnlinkedConstructorInitializerKind : byte {
/// Initialization of a field.
field,
/// Invocation of a constructor in the same class.
thisInvocation,
/// Invocation of a superclass' constructor.
superInvocation,
/// Invocation of `assert`.
assertInvocation
}
/// Enum used to indicate the kind of an executable.
enum UnlinkedExecutableKind : byte {
/// Executable is a function or method.
functionOrMethod,
/// Executable is a getter.
getter,
/// Executable is a setter.
setter,
/// Executable is a constructor.
constructor
}
/// Enum representing the various kinds of assignment operations combined
/// with:
/// [UnlinkedExprOperation.assignToRef],
/// [UnlinkedExprOperation.assignToProperty],
/// [UnlinkedExprOperation.assignToIndex].
enum UnlinkedExprAssignOperator : byte {
/// Perform simple assignment `target = operand`.
assign,
/// Perform `target ??= operand`.
ifNull,
/// Perform `target *= operand`.
multiply,
/// Perform `target /= operand`.
divide,
/// Perform `target ~/= operand`.
floorDivide,
/// Perform `target %= operand`.
modulo,
/// Perform `target += operand`.
plus,
/// Perform `target -= operand`.
minus,
/// Perform `target <<= operand`.
shiftLeft,
/// Perform `target >>= operand`.
shiftRight,
/// Perform `target &= operand`.
bitAnd,
/// Perform `target ^= operand`.
bitXor,
/// Perform `target |= operand`.
bitOr,
/// Perform `++target`.
prefixIncrement,
/// Perform `--target`.
prefixDecrement,
/// Perform `target++`.
postfixIncrement,
/// Perform `target++`.
postfixDecrement
}
/// Enum representing the various kinds of operations which may be performed to
/// in an expression. These options are assumed to execute in the
/// context of a stack which is initially empty.
enum UnlinkedExprOperation : byte {
/// Push the next value from [UnlinkedExpr.ints] (a 32-bit unsigned integer)
/// onto the stack.
///
/// Note that Dart supports integers larger than 32 bits; these are
/// represented by composing 32-bit values using the [pushLongInt] operation.
pushInt,
/// Get the number of components from [UnlinkedExpr.ints], then do this number
/// of times the following operations: multiple the current value by 2^32,
/// "or" it with the next value in [UnlinkedExpr.ints]. The initial value is
/// zero. Push the result into the stack.
pushLongInt,
/// Push the next value from [UnlinkedExpr.doubles] (a double precision
/// floating point value) onto the stack.
pushDouble,
/// Push the constant `true` onto the stack.
pushTrue,
/// Push the constant `false` onto the stack.
pushFalse,
/// Push the next value from [UnlinkedExpr.strings] onto the stack.
pushString,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), convert them to strings (if they aren't already),
/// concatenate them into a single string, and push it back onto the stack.
///
/// This operation is used to represent constants whose value is a literal
/// string containing string interpolations.
concatenate,
/// Get the next value from [UnlinkedExpr.strings], convert it to a symbol,
/// and push it onto the stack.
makeSymbol,
/// Push the constant `null` onto the stack.
pushNull,
/// Push the value of the function parameter with the name obtained from
/// [UnlinkedExpr.strings].
pushParameter,
/// Evaluate a (potentially qualified) identifier expression and push the
/// resulting value onto the stack. The identifier to be evaluated is
/// obtained from [UnlinkedExpr.references].
///
/// This operation is used to represent the following kinds of constants
/// (which are indistinguishable from an unresolved AST alone):
///
/// - A qualified reference to a static constant variable (e.g. `C.v`, where
/// C is a class and `v` is a constant static variable in `C`).
/// - An identifier expression referring to a constant variable.
/// - A simple or qualified identifier denoting a class or type alias.
/// - A simple or qualified identifier denoting a top-level function or a
/// static method.
pushReference,
/// Pop the top value from the stack, extract the value of the property with
/// the name obtained from [UnlinkedExpr.strings], and push the result back
/// onto the stack.
extractProperty,
/// Pop the top `n` values from the stack (where `n` is obtained from
/// [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
/// `n` values from [UnlinkedExpr.strings] and use the lists of names and
/// values to create named arguments. Then pop the top `m` values from the
/// stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
/// from the end) and use them as positional arguments. Use the lists of
/// positional and names arguments to invoke a constant constructor obtained
/// from [UnlinkedExpr.references], and push the resulting value back onto the
/// stack.
///
/// Arguments are skipped, and `0` are specified as the numbers of arguments
/// on the stack, if the expression is not a constant. We store expression of
/// variable initializers to perform top-level inference, and arguments are
/// never used to infer types.
///
/// Note that for an invocation of the form `const a.b(...)` (where no type
/// arguments are specified), it is impossible to tell from the unresolved AST
/// alone whether `a` is a class name and `b` is a constructor name, or `a` is
/// a prefix name and `b` is a class name. For consistency between AST based
/// and elements based summaries, references to default constructors are
/// always recorded as references to corresponding classes.
invokeConstructor,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), place them in a [List], and push the result back
/// onto the stack. The type parameter for the [List] is implicitly
/// `dynamic`.
makeUntypedList,
/// Pop the top 2*n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), interpret them as key/value pairs, place them in a
/// [Map], and push the result back onto the stack. The two type parameters
/// for the [Map] are implicitly `dynamic`.
///
/// To be replaced with [makeUntypedSetOrMap] for unified collections.
makeUntypedMap,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), place them in a [List], and push the result back
/// onto the stack. The type parameter for the [List] is obtained from
/// [UnlinkedExpr.references].
makeTypedList,
/// Pop the top 2*n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), interpret them as key/value pairs, place them in a
/// [Map], and push the result back onto the stack. The two type parameters
/// for the [Map] are obtained from [UnlinkedExpr.references].
///
/// To be replaced with [makeTypedMap2] for unified collections. This is not
/// forwards compatible with [makeTypedMap2] because it expects
/// [CollectionElement]s instead of pairs of [Expression]s.
makeTypedMap,
/// Pop the top 2 values from the stack, evaluate `v1 == v2`, and push the
/// result back onto the stack.
equal,
/// Pop the top 2 values from the stack, evaluate `v1 != v2`, and push the
/// result back onto the stack.
notEqual,
/// Pop the top value from the stack, compute its boolean negation, and push
/// the result back onto the stack.
not,
/// Pop the top 2 values from the stack, compute `v1 && v2`, and push the
/// result back onto the stack.
and,
/// Pop the top 2 values from the stack, compute `v1 || v2`, and push the
/// result back onto the stack.
or,
/// Pop the top value from the stack, compute its integer complement, and push
/// the result back onto the stack.
complement,
/// Pop the top 2 values from the stack, compute `v1 ^ v2`, and push the
/// result back onto the stack.
bitXor,
/// Pop the top 2 values from the stack, compute `v1 & v2`, and push the
/// result back onto the stack.
bitAnd,
/// Pop the top 2 values from the stack, compute `v1 | v2`, and push the
/// result back onto the stack.
bitOr,
/// Pop the top 2 values from the stack, compute `v1 >> v2`, and push the
/// result back onto the stack.
bitShiftRight,
/// Pop the top 2 values from the stack, compute `v1 << v2`, and push the
/// result back onto the stack.
bitShiftLeft,
/// Pop the top 2 values from the stack, compute `v1 + v2`, and push the
/// result back onto the stack.
add,
/// Pop the top value from the stack, compute its integer negation, and push
/// the result back onto the stack.
negate,
/// Pop the top 2 values from the stack, compute `v1 - v2`, and push the
/// result back onto the stack.
subtract,
/// Pop the top 2 values from the stack, compute `v1 * v2`, and push the
/// result back onto the stack.
multiply,
/// Pop the top 2 values from the stack, compute `v1 / v2`, and push the
/// result back onto the stack.
divide,
/// Pop the top 2 values from the stack, compute `v1 ~/ v2`, and push the
/// result back onto the stack.
floorDivide,
/// Pop the top 2 values from the stack, compute `v1 > v2`, and push the
/// result back onto the stack.
greater,
/// Pop the top 2 values from the stack, compute `v1 < v2`, and push the
/// result back onto the stack.
less,
/// Pop the top 2 values from the stack, compute `v1 >= v2`, and push the
/// result back onto the stack.
greaterEqual,
/// Pop the top 2 values from the stack, compute `v1 <= v2`, and push the
/// result back onto the stack.
lessEqual,
/// Pop the top 2 values from the stack, compute `v1 % v2`, and push the
/// result back onto the stack.
modulo,
/// Pop the top 3 values from the stack, compute `v1 ? v2 : v3`, and push the
/// result back onto the stack.
conditional,
/// Pop from the stack `value` and get the next `target` reference from
/// [UnlinkedExpr.references] - a top-level variable (prefixed or not), an
/// assignable field of a class (prefixed or not), or a sequence of getters
/// ending with an assignable property `a.b.b.c.d.e`. In general `a.b` cannot
/// not be distinguished between: `a` is a prefix and `b` is a top-level
/// variable; or `a` is an object and `b` is the name of a property. Perform
/// `reference op= value` where `op` is the next assignment operator from
/// [UnlinkedExpr.assignmentOperators]. Push `value` back into the stack.
///
/// If the assignment operator is a prefix/postfix increment/decrement, then
/// `value` is not present in the stack, so it should not be popped and the
/// corresponding value of the `target` after/before update is pushed into the
/// stack instead.
assignToRef,
/// Pop from the stack `target` and `value`. Get the name of the property
/// from `UnlinkedConst.strings` and assign the `value` to the named property
/// of the `target`. This operation is used when we know that the `target`
/// is an object reference expression, e.g. `new Foo().a.b.c` or `a.b[0].c.d`.
/// Perform `target.property op= value` where `op` is the next assignment
/// operator from [UnlinkedExpr.assignmentOperators]. Push `value` back into
/// the stack.
///
/// If the assignment operator is a prefix/postfix increment/decrement, then
/// `value` is not present in the stack, so it should not be popped and the
/// corresponding value of the `target` after/before update is pushed into the
/// stack instead.
assignToProperty,
/// Pop from the stack `index`, `target` and `value`. Perform
/// `target[index] op= value` where `op` is the next assignment operator from
/// [UnlinkedExpr.assignmentOperators]. Push `value` back into the stack.
///
/// If the assignment operator is a prefix/postfix increment/decrement, then
/// `value` is not present in the stack, so it should not be popped and the
/// corresponding value of the `target` after/before update is pushed into the
/// stack instead.
assignToIndex,
/// Pop from the stack `index` and `target`. Push into the stack the result
/// of evaluation of `target[index]`.
extractIndex,
/// Pop the top `n` values from the stack (where `n` is obtained from
/// [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
/// `n` values from [UnlinkedExpr.strings] and use the lists of names and
/// values to create named arguments. Then pop the top `m` values from the
/// stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
/// from the end) and use them as positional arguments. Use the lists of
/// positional and names arguments to invoke a method (or a function) with
/// the reference from [UnlinkedExpr.references]. If `k` is nonzero (where
/// `k` is obtained from [UnlinkedExpr.ints]), obtain `k` type arguments from
/// [UnlinkedExpr.references] and use them as generic type arguments for the
/// aforementioned method or function. Push the result of the invocation onto
/// the stack.
///
/// Arguments are skipped, and `0` are specified as the numbers of arguments
/// on the stack, if the expression is not a constant. We store expression of
/// variable initializers to perform top-level inference, and arguments are
/// never used to infer types.
///
/// In general `a.b` cannot not be distinguished between: `a` is a prefix and
/// `b` is a top-level function; or `a` is an object and `b` is the name of a
/// method. This operation should be used for a sequence of identifiers
/// `a.b.b.c.d.e` ending with an invokable result.
invokeMethodRef,
/// Pop the top `n` values from the stack (where `n` is obtained from
/// [UnlinkedExpr.ints]) into a list (filled from the end) and take the next
/// `n` values from [UnlinkedExpr.strings] and use the lists of names and
/// values to create named arguments. Then pop the top `m` values from the
/// stack (where `m` is obtained from [UnlinkedExpr.ints]) into a list (filled
/// from the end) and use them as positional arguments. Use the lists of
/// positional and names arguments to invoke the method with the name from
/// [UnlinkedExpr.strings] of the target popped from the stack. If `k` is
/// nonzero (where `k` is obtained from [UnlinkedExpr.ints]), obtain `k` type
/// arguments from [UnlinkedExpr.references] and use them as generic type
/// arguments for the aforementioned method. Push the result of the
/// invocation onto the stack.
///
/// Arguments are skipped, and `0` are specified as the numbers of arguments
/// on the stack, if the expression is not a constant. We store expression of
/// variable initializers to perform top-level inference, and arguments are
/// never used to infer types.
///
/// This operation should be used for invocation of a method invocation
/// where `target` is known to be an object instance.
invokeMethod,
/// Begin a new cascade section. Duplicate the top value of the stack.
cascadeSectionBegin,
/// End a new cascade section. Pop the top value from the stack and throw it
/// away.
cascadeSectionEnd,
/// Pop the top value from the stack and cast it to the type with reference
/// from [UnlinkedExpr.references], push the result into the stack.
typeCast,
/// Pop the top value from the stack and check whether it is a subclass of the
/// type with reference from [UnlinkedExpr.references], push the result into
/// the stack.
typeCheck,
/// Pop the top value from the stack and raise an exception with this value.
throwException,
/// Obtain two values `n` and `m` from [UnlinkedExpr.ints]. Then, starting at
/// the executable element for the expression being evaluated, if n > 0, pop
/// to the nth enclosing function element. Then, push the mth local function
/// of that element onto the stack.
pushLocalFunctionReference,
/// Pop the top two values from the stack. If the first value is non-null,
/// keep it and discard the second. Otherwise, keep the second and discard
/// the first.
ifNull,
/// Pop the top value from the stack. Treat it as a Future and await its
/// completion. Then push the awaited value onto the stack.
await,
/// Push an abstract value onto the stack. Abstract values mark the presence
/// of a value, but whose details are not included.
///
/// This is not used by the summary generators today, but it will be used to
/// experiment with prunning the initializer expression tree, so only
/// information that is necessary gets included in the output summary file.
pushUntypedAbstract,
/// Get the next type reference from [UnlinkedExpr.references] and push an
/// abstract value onto the stack that has that type.
///
/// Like [pushUntypedAbstract], this is also not used by the summary
/// generators today. The plan is to experiment with prunning the initializer
/// expression tree, and include just enough type information to perform
/// strong-mode type inference, but not all the details of how this type was
/// obtained.
pushTypedAbstract,
/// Push an error onto the stack.
///
/// Like [pushUntypedAbstract], this is not used by summary generators today.
/// This will be used to experiment with prunning the const expression tree.
/// If a constant has an error, we can omit the subexpression containing the
/// error and only include a marker that an error was detected.
pushError,
/// Push `this` expression onto the stack.
pushThis,
/// Push `super` expression onto the stack.
pushSuper,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), place them in a [Set], and push the result back
/// onto the stack. The type parameter for the [Set] is implicitly
/// `dynamic`.
makeUntypedSet,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), place them in a [Set], and push the result back
/// onto the stack. The type parameter for the [Set] is obtained from
/// [UnlinkedExpr.references].
makeTypedSet,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), which should be [CollectionElement]s, place them in
/// a [SetOrMap], and push the result back onto the stack.
makeUntypedSetOrMap,
/// Pop the top n values from the stack (where n is obtained from
/// [UnlinkedExpr.ints]), which should be [CollectionElement]s, place them in
/// a [Map], and push the result back onto the stack. The two type parameters
/// for the [Map] are obtained from [UnlinkedExpr.references].
///
/// To replace [makeTypedMap] for unified collections. This is not backwards
/// compatible with [makeTypedMap] because it expects [CollectionElement]s
/// instead of pairs of [Expression]s.
makeTypedMap2,
/// Pop the top 2 values from the stack, place them in a [MapLiteralEntry],
/// and push the result back onto the stack.
makeMapLiteralEntry,
/// Pop the top value from the stack, convert it to a spread element of type
/// `...`, and push the result back onto the stack.
spreadElement,
/// Pop the top value from the stack, convert it to a spread element of type
/// `...?`, and push the result back onto the stack.
nullAwareSpreadElement,
/// Pop the top two values from the stack. The first is a condition
/// and the second is a collection element. Push an "if" element having the
/// given condition, with the collection element as its "then" clause.
ifElement,
/// Pop the top three values from the stack. The first is a condition and the
/// other two are collection elements. Push an "if" element having the given
/// condition, with the two collection elements as its "then" and "else"
/// clauses, respectively.
ifElseElement,
/// Pop the top n+2 values from the stack, where n is obtained from
/// [UnlinkedExpr.ints]. The first two are the initialization and condition
/// of the for-loop; the remainder are the updaters.
forParts,
/// Pop the top 2 values from the stack. The first is the for loop parts.
/// The second is the body.
forElement,
/// Push the empty expression (used for missing initializers and conditions in
/// `for` loops)
pushEmptyExpression,
/// Add a variable to the current scope whose name is obtained from
/// [UnlinkedExpr.strings]. This is separate from [variableDeclaration]
/// because the scope of the variable includes its own initializer.
variableDeclarationStart,
/// Pop the top value from the stack, and use it as the initializer for a
/// variable declaration; the variable being declared is obtained by looking
/// at the nth variable most recently added to the scope (where n counts from
/// zero and is obtained from [UnlinkedExpr.ints]).
variableDeclaration,
/// Pop the top n values from the stack, which should all be variable
/// declarations, and use them to create an untyped for-initializer
/// declaration. The value of n is obtained from [UnlinkedExpr.ints].
forInitializerDeclarationsUntyped,
/// Pop the top n values from the stack, which should all be variable
/// declarations, and use them to create a typed for-initializer
/// declaration. The value of n is obtained from [UnlinkedExpr.ints]. The
/// type is obtained from [UnlinkedExpr.references].
forInitializerDeclarationsTyped,
/// Pop from the stack `value` and get a string from [UnlinkedExpr.strings].
/// Use this string to look up a parameter. Perform `parameter op= value`,
/// where `op` is the next assignment operator from
/// [UnlinkedExpr.assignmentOperators]. Push `value` back onto the stack.
///
/// If the assignment operator is a prefix/postfix increment/decrement, then
/// `value` is not present in the stack, so it should not be popped and the
/// corresponding value of the parameter after/before update is pushed onto
/// the stack instead.
assignToParameter,
/// Pop from the stack an identifier and an expression, and create for-each
/// parts of the form `identifier in expression`.
forEachPartsWithIdentifier,
/// Pop the top 2 values from the stack. The first is the for loop parts.
/// The second is the body.
forElementWithAwait,
/// Pop an expression from the stack, and create for-each parts of the form
/// `var name in expression`, where `name` is obtained from
/// [UnlinkedExpr.strings].
forEachPartsWithUntypedDeclaration,
/// Pop an expression from the stack, and create for-each parts of the form
/// `Type name in expression`, where `name` is obtained from
/// [UnlinkedExpr.strings], and `Type` is obtained from
/// [UnlinkedExpr.references].
forEachPartsWithTypedDeclaration,
/// Pop the top 2 values from the stack, compute `v1 >>> v2`, and push the
/// result back onto the stack.
bitShiftRightLogical
}
/// Enum used to indicate the kind of a parameter.
enum UnlinkedParamKind : byte {
/// Parameter is required and positional.
requiredPositional,
/// Parameter is optional and positional (enclosed in `[]`)
optionalPositional,
/// Parameter is optional and named (enclosed in `{}`)
optionalNamed,
/// Parameter is required and named (enclosed in `{}`).
requiredNamed
}
/// TODO(scheglov) document
enum UnlinkedTokenKind : byte {
nothing,
comment,
keyword,
simple,
string
}
/// TODO(scheglov) document
enum UnlinkedTokenType : byte {
NOTHING,
ABSTRACT,
AMPERSAND,
AMPERSAND_AMPERSAND,
AMPERSAND_EQ,
AS,
ASSERT,
ASYNC,
AT,
AWAIT,
BACKPING,
BACKSLASH,
BANG,
BANG_EQ,
BANG_EQ_EQ,
BAR,
BAR_BAR,
BAR_EQ,
BREAK,
CARET,
CARET_EQ,
CASE,
CATCH,
CLASS,
CLOSE_CURLY_BRACKET,
CLOSE_PAREN,
CLOSE_SQUARE_BRACKET,
COLON,
COMMA,
CONST,
CONTINUE,
COVARIANT,
DEFAULT,
DEFERRED,
DO,
DOUBLE,
DYNAMIC,
ELSE,
ENUM,
EOF,
EQ,
EQ_EQ,
EQ_EQ_EQ,
EXPORT,
EXTENDS,
EXTERNAL,
FACTORY,
FALSE,
FINAL,
FINALLY,
FOR,
FUNCTION,
FUNCTION_KEYWORD,
GET,
GT,
GT_EQ,
GT_GT,
GT_GT_EQ,
GT_GT_GT,
GT_GT_GT_EQ,
HASH,
HEXADECIMAL,
HIDE,
IDENTIFIER,
IF,
IMPLEMENTS,
IMPORT,
IN,
INDEX,
INDEX_EQ,
INT,
INTERFACE,
IS,
LATE,
LIBRARY,
LT,
LT_EQ,
LT_LT,
LT_LT_EQ,
MINUS,
MINUS_EQ,
MINUS_MINUS,
MIXIN,
MULTI_LINE_COMMENT,
NATIVE,
NEW,
NULL,
OF,
ON,
OPEN_CURLY_BRACKET,
OPEN_PAREN,
OPEN_SQUARE_BRACKET,
OPERATOR,
PART,
PATCH,
PERCENT,
PERCENT_EQ,
PERIOD,
PERIOD_PERIOD,
PERIOD_PERIOD_PERIOD,
PERIOD_PERIOD_PERIOD_QUESTION,
PLUS,
PLUS_EQ,
PLUS_PLUS,
QUESTION,
QUESTION_PERIOD,
QUESTION_QUESTION,
QUESTION_QUESTION_EQ,
REQUIRED,
RETHROW,
RETURN,
SCRIPT_TAG,
SEMICOLON,
SET,
SHOW,
SINGLE_LINE_COMMENT,
SLASH,
SLASH_EQ,
SOURCE,
STAR,
STAR_EQ,
STATIC,
STRING,
STRING_INTERPOLATION_EXPRESSION,
STRING_INTERPOLATION_IDENTIFIER,
SUPER,
SWITCH,
SYNC,
THIS,
THROW,
TILDE,
TILDE_SLASH,
TILDE_SLASH_EQ,
TRUE,
TRY,
TYPEDEF,
VAR,
VOID,
WHILE,
WITH,
YIELD
}
/// Information about the context of an exception in analysis driver.
table AnalysisDriverExceptionContext {
/// The exception string.
exception:string (id: 1);
/// The state of files when the exception happened.
files:[AnalysisDriverExceptionFile] (id: 3);
/// The path of the file being analyzed when the exception happened.
path:string (id: 0);
/// The exception stack trace string.
stackTrace:string (id: 2);
}
/// Information about a single file in [AnalysisDriverExceptionContext].
table AnalysisDriverExceptionFile {
/// The content of the file.
content:string (id: 1);
/// The path of the file.
path:string (id: 0);
}
/// Information about a resolved unit.
table AnalysisDriverResolvedUnit {
/// The full list of analysis errors, both syntactic and semantic.
errors:[AnalysisDriverUnitError] (id: 0);
/// The index of the unit.
index:AnalysisDriverUnitIndex (id: 1);
}
/// Information about a subtype of one or more classes.
table AnalysisDriverSubtype {
/// The names of defined instance members.
/// They are indexes into [AnalysisDriverUnitError.strings] list.
/// The list is sorted in ascending order.
members:[uint] (id: 1);
/// The name of the class.
/// It is an index into [AnalysisDriverUnitError.strings] list.
name:uint (id: 0);
}
/// Information about an error in a resolved unit.
table AnalysisDriverUnitError {
/// The optional correction hint for the error.
correction:string (id: 4);
/// The length of the error in the file.
length:uint (id: 1);
/// The message of the error.
message:string (id: 3);
/// The offset from the beginning of the file.
offset:uint (id: 0);
/// The unique name of the error code.
uniqueName:string (id: 2);
}
/// Information about a resolved unit.
table AnalysisDriverUnitIndex {
/// Each item of this list corresponds to a unique referenced element. It is
/// the kind of the synthetic element.
elementKinds:[IndexSyntheticElementKind] (id: 4);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the class member element name, or `null` if the element
/// is a top-level element. The list is sorted in ascending order, so that
/// the client can quickly check whether an element is referenced in this
/// index.
elementNameClassMemberIds:[uint] (id: 7);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the named parameter name, or `null` if the element is
/// not a named parameter. The list is sorted in ascending order, so that the
/// client can quickly check whether an element is referenced in this index.
elementNameParameterIds:[uint] (id: 8);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the top-level element name, or `null` if the element is
/// the unit. The list is sorted in ascending order, so that the client can
/// quickly check whether an element is referenced in this index.
elementNameUnitMemberIds:[uint] (id: 6);
/// Each item of this list corresponds to a unique referenced element. It is
/// the index into [unitLibraryUris] and [unitUnitUris] for the library
/// specific unit where the element is declared.
elementUnits:[uint] (id: 5);
/// Identifier of the null string in [strings].
nullStringId:uint (id: 1);
/// List of unique element strings used in this index. The list is sorted in
/// ascending order, so that the client can quickly check the presence of a
/// string in this index.
strings:[string] (id: 0);
/// The list of classes declared in the unit.
subtypes:[AnalysisDriverSubtype] (id: 19);
/// The identifiers of supertypes of elements at corresponding indexes
/// in [subtypes]. They are indexes into [strings] list. The list is sorted
/// in ascending order. There might be more than one element with the same
/// value if there is more than one subtype of this supertype.
supertypes:[uint] (id: 18);
/// Each item of this list corresponds to the library URI of a unique library
/// specific unit referenced in the index. It is an index into [strings]
/// list.
unitLibraryUris:[uint] (id: 2);
/// Each item of this list corresponds to the unit URI of a unique library
/// specific unit referenced in the index. It is an index into [strings]
/// list.
unitUnitUris:[uint] (id: 3);
/// Each item of this list is the `true` if the corresponding element usage
/// is qualified with some prefix.
usedElementIsQualifiedFlags:[ubyte] (id: 13);
/// Each item of this list is the kind of the element usage.
usedElementKinds:[IndexRelationKind] (id: 10);
/// Each item of this list is the length of the element usage.
usedElementLengths:[uint] (id: 12);
/// Each item of this list is the offset of the element usage relative to the
/// beginning of the file.
usedElementOffsets:[uint] (id: 11);
/// Each item of this list is the index into [elementUnits],
/// [elementNameUnitMemberIds], [elementNameClassMemberIds] and
/// [elementNameParameterIds]. The list is sorted in ascending order, so
/// that the client can quickly find element references in this index.
usedElements:[uint] (id: 9);
/// Each item of this list is the `true` if the corresponding name usage
/// is qualified with some prefix.
usedNameIsQualifiedFlags:[ubyte] (id: 17);
/// Each item of this list is the kind of the name usage.
usedNameKinds:[IndexRelationKind] (id: 15);
/// Each item of this list is the offset of the name usage relative to the
/// beginning of the file.
usedNameOffsets:[uint] (id: 16);
/// Each item of this list is the index into [strings] for a used name. The
/// list is sorted in ascending order, so that the client can quickly find
/// whether a name is used in this index.
usedNames:[uint] (id: 14);
}
/// Information about an unlinked unit.
table AnalysisDriverUnlinkedUnit {
/// List of class member names defined by the unit.
definedClassMemberNames:[string] (id: 3);
/// List of top-level names defined by the unit.
definedTopLevelNames:[string] (id: 2);
/// List of external names referenced by the unit.
referencedNames:[string] (id: 0);
/// List of names which are used in `extends`, `with` or `implements` clauses
/// in the file. Import prefixes and type arguments are not included.
subtypedNames:[string] (id: 4);
/// Unlinked information for the unit.
unit:UnlinkedUnit (id: 1);
/// Unlinked information for the unit.
unit2:UnlinkedUnit2 (id: 5);
}
/// Information about a single declaration.
table AvailableDeclaration {
children:[AvailableDeclaration] (id: 0);
defaultArgumentListString:string (id: 1);
defaultArgumentListTextRanges:[uint] (id: 2);
docComplete:string (id: 3);
docSummary:string (id: 4);
fieldMask:uint (id: 5);
isAbstract:bool (id: 6);
isConst:bool (id: 7);
isDeprecated:bool (id: 8);
isFinal:bool (id: 9);
/// The kind of the declaration.
kind:AvailableDeclarationKind (id: 10);
locationOffset:uint (id: 11);
locationStartColumn:uint (id: 12);
locationStartLine:uint (id: 13);
/// The first part of the declaration name, usually the only one, for example
/// the name of a class like `MyClass`, or a function like `myFunction`.
name:string (id: 14);
parameterNames:[string] (id: 15);
parameters:string (id: 16);
parameterTypes:[string] (id: 17);
/// The partial list of relevance tags. Not every declaration has one (for
/// example, function do not currently), and not every declaration has to
/// store one (for classes it can be computed when we know the library that
/// includes this file).
relevanceTags:[string] (id: 18);
requiredParameterCount:uint (id: 19);
returnType:string (id: 20);
typeParameters:string (id: 21);
}
/// Information about an available, even if not yet imported file.
table AvailableFile {
/// Declarations of the file.
declarations:[AvailableDeclaration] (id: 0);
/// The Dartdoc directives in the file.
directiveInfo:DirectiveInfo (id: 5);
/// Exports directives of the file.
exports:[AvailableFileExport] (id: 1);
/// Is `true` if this file is a library.
isLibrary:bool (id: 2);
/// Is `true` if this file is a library, and it is deprecated.
isLibraryDeprecated:bool (id: 3);
/// URIs of `part` directives.
parts:[string] (id: 4);
}
/// Information about an export directive.
table AvailableFileExport {
/// Combinators contained in this export directive.
combinators:[AvailableFileExportCombinator] (id: 1);
/// URI of the exported library.
uri:string (id: 0);
}
/// Information about a `show` or `hide` combinator in an export directive.
table AvailableFileExportCombinator {
/// List of names which are hidden. Empty if this is a `show` combinator.
hides:[string] (id: 1);
/// List of names which are shown. Empty if this is a `hide` combinator.
shows:[string] (id: 0);
}
/// Information about an element code range.
table CodeRange {
/// Length of the element code.
length:uint (id: 1);
/// Offset of the element code relative to the beginning of the file.
offset:uint (id: 0);
}
/// Information about the Dartdoc directives in an [AvailableFile].
table DirectiveInfo {
/// The names of the defined templates.
templateNames:[string] (id: 0);
/// The values of the defined templates.
templateValues:[string] (id: 1);
}
/// Summary information about a reference to an entity such as a type, top level
/// executable, or executable within a class.
table EntityRef {
/// The kind of entity being represented.
entityKind:EntityRefKind (id: 8);
/// Notice: This will be deprecated. However, its not deprecated yet, as we're
/// keeping it for backwards compatibilty, and marking it deprecated makes it
/// unreadable.
///
/// TODO(mfairhurst) mark this deprecated, and remove its logic.
///
/// If this is a reference to a function type implicitly defined by a
/// function-typed parameter, a list of zero-based indices indicating the path
/// from the entity referred to by [reference] to the appropriate type
/// parameter. Otherwise the empty list.
///
/// If there are N indices in this list, then the entity being referred to is
/// the function type implicitly defined by a function-typed parameter of a
/// function-typed parameter, to N levels of nesting. The first index in the
/// list refers to the outermost level of nesting; for example if [reference]
/// refers to the entity defined by:
///
/// void f(x, void g(y, z, int h(String w))) { ... }
///
/// Then to refer to the function type implicitly defined by parameter `h`
/// (which is parameter 2 of parameter 1 of `f`), then
/// [implicitFunctionTypeIndices] should be [1, 2].
///
/// Note that if the entity being referred to is a generic method inside a
/// generic class, then the type arguments in [typeArguments] are applied
/// first to the class and then to the method.
implicitFunctionTypeIndices:[uint] (id: 4);
/// If the reference represents a type, the nullability of the type.
nullabilitySuffix:EntityRefNullabilitySuffix (id: 10);
/// If this is a reference to a type parameter, one-based index into the list
/// of [UnlinkedTypeParam]s currently in effect. Indexing is done using De
/// Bruijn index conventions; that is, innermost parameters come first, and
/// if a class or method has multiple parameters, they are indexed from right
/// to left. So for instance, if the enclosing declaration is
///
/// class C<T,U> {
/// m<V,W> {
/// ...
/// }
/// }
///
/// Then [paramReference] values of 1, 2, 3, and 4 represent W, V, U, and T,
/// respectively.
///
/// If the type being referred to is not a type parameter, [paramReference] is
/// zero.
paramReference:uint (id: 3);
/// Index into [UnlinkedUnit.references] for the entity being referred to, or
/// zero if this is a reference to a type parameter.
reference:uint (id: 0);
/// If this [EntityRef] appears in a syntactic context where its type
/// arguments might need to be inferred by a method other than
/// instantiate-to-bounds, and [typeArguments] is empty, a slot id (which is
/// unique within the compilation unit). If an entry appears in
/// [LinkedUnit.types] whose [slot] matches this value, that entry will
/// contain the complete inferred type.
///
/// This is called `refinedSlot` to clarify that if it points to an inferred
/// type, it points to a type that is a "refinement" of this one (one in which
/// some type arguments have been inferred).
refinedSlot:uint (id: 9);
/// If this [EntityRef] is contained within [LinkedUnit.types], slot id (which
/// is unique within the compilation unit) identifying the target of type
/// propagation or type inference with which this [EntityRef] is associated.
///
/// Otherwise zero.
slot:uint (id: 2);
/// If this [EntityRef] is a reference to a function type whose
/// [FunctionElement] is not in any library (e.g. a function type that was
/// synthesized by a LUB computation), the function parameters. Otherwise
/// empty.
syntheticParams:[UnlinkedParam] (id: 6);
/// If this [EntityRef] is a reference to a function type whose
/// [FunctionElement] is not in any library (e.g. a function type that was
/// synthesized by a LUB computation), the return type of the function.
/// Otherwise `null`.
syntheticReturnType:EntityRef (id: 5);
/// If this is an instantiation of a generic type or generic executable, the
/// type arguments used to instantiate it (if any).
typeArguments:[EntityRef] (id: 1);
/// If this is a function type, the type parameters defined for the function
/// type (if any).
typeParameters:[UnlinkedTypeParam] (id: 7);
}
/// Information about a dependency that exists between one library and another
/// due to an "import" declaration.
table LinkedDependency {
/// Absolute URI for the compilation units listed in the library's `part`
/// declarations, empty string for invalid URI.
parts:[string] (id: 1);
/// The absolute URI of the dependent library, e.g. `package:foo/bar.dart`.
uri:string (id: 0);
}
/// Information about a single name in the export namespace of the library that
/// is not in the public namespace.
table LinkedExportName {
/// Index into [LinkedLibrary.dependencies] for the library in which the
/// entity is defined.
dependency:uint (id: 0);
/// The kind of the entity being referred to.
kind:ReferenceKind (id: 3);
/// Name of the exported entity. For an exported setter, this name includes
/// the trailing '='.
name:string (id: 1);
/// Integer index indicating which unit in the exported library contains the
/// definition of the entity. As with indices into [LinkedLibrary.units],
/// zero represents the defining compilation unit, and nonzero values
/// represent parts in the order of the corresponding `part` declarations.
unit:uint (id: 2);
}
/// Linked summary of a library.
table LinkedLibrary {
/// The libraries that this library depends on (either via an explicit import
/// statement or via the implicit dependencies on `dart:core` and
/// `dart:async`). The first element of this array is a pseudo-dependency
/// representing the library itself (it is also used for `dynamic` and
/// `void`). This is followed by elements representing "prelinked"
/// dependencies (direct imports and the transitive closure of exports).
/// After the prelinked dependencies are elements representing "linked"
/// dependencies.
///
/// A library is only included as a "linked" dependency if it is a true
/// dependency (e.g. a propagated or inferred type or constant value
/// implicitly refers to an element declared in the library) or
/// anti-dependency (e.g. the result of type propagation or type inference
/// depends on the lack of a certain declaration in the library).
dependencies:[LinkedDependency] (id: 0);
/// For each export in [UnlinkedUnit.exports], an index into [dependencies]
/// of the library being exported.
exportDependencies:[uint] (id: 6);
/// Information about entities in the export namespace of the library that are
/// not in the public namespace of the library (that is, entities that are
/// brought into the namespace via `export` directives).
///
/// Sorted by name.
exportNames:[LinkedExportName] (id: 4);
/// Indicates whether this library was summarized in "fallback mode". If
/// true, all other fields in the data structure have their default values.
fallbackMode:bool (id: 5, deprecated);
/// For each import in [UnlinkedUnit.imports], an index into [dependencies]
/// of the library being imported.
importDependencies:[uint] (id: 1);
/// The number of elements in [dependencies] which are not "linked"
/// dependencies (that is, the number of libraries in the direct imports plus
/// the transitive closure of exports, plus the library itself).
numPrelinkedDependencies:uint (id: 2);
/// The linked summary of all the compilation units constituting the
/// library. The summary of the defining compilation unit is listed first,
/// followed by the summary of each part, in the order of the `part`
/// declarations in the defining compilation unit.
units:[LinkedUnit] (id: 3);
}
/// Information about a linked AST node.
table LinkedNode {
/// The explicit or inferred return type of a function typed node.
variantField_24:LinkedNodeType (id: 24);
variantField_2:[LinkedNode] (id: 2);
variantField_11:LinkedNode (id: 11);
variantField_4:[LinkedNode] (id: 4);
variantField_6:LinkedNode (id: 6);
variantField_7:LinkedNode (id: 7);
variantField_17:uint (id: 17);
variantField_23:LinkedNodeType (id: 23);
variantField_8:LinkedNode (id: 8);
variantField_15:uint (id: 15);
variantField_28:UnlinkedTokenType (id: 28);
variantField_27:bool (id: 27);
variantField_9:LinkedNode (id: 9);
variantField_12:LinkedNode (id: 12);
variantField_5:[LinkedNode] (id: 5);
variantField_13:LinkedNode (id: 13);
variantField_34:uint (id: 34);
variantField_33:uint (id: 33);
variantField_36:[string] (id: 36);
variantField_29:LinkedNodeCommentType (id: 29);
variantField_3:[LinkedNode] (id: 3);
variantField_10:LinkedNode (id: 10);
variantField_26:LinkedNodeFormalParameterKind (id: 26);
variantField_21:double (id: 21);
variantField_25:LinkedNodeType (id: 25);
flags:uint (id: 18);
variantField_1:string (id: 1);
variantField_16:uint (id: 16);
variantField_30:string (id: 30);
variantField_14:LinkedNode (id: 14);
kind:LinkedNodeKind (id: 0);
name:string (id: 37);
variantField_20:string (id: 20);
variantField_31:bool (id: 31);
variantField_38:UnlinkedTokenType (id: 38);
variantField_35:TopLevelInferenceError (id: 35);
variantField_22:string (id: 22);
variantField_19:uint (id: 19);
variantField_32:LinkedNodeVariablesDeclaration (id: 32);
}
/// Information about a group of libraries linked together, for example because
/// they form a single cycle, or because they represent a single build artifact.
table LinkedNodeBundle {
libraries:[LinkedNodeLibrary] (id: 1);
/// The shared list of references used in the [libraries].
references:LinkedNodeReferences (id: 0);
}
/// Information about a single library in a [LinkedNodeBundle].
table LinkedNodeLibrary {
exports:[uint] (id: 2);
name:string (id: 3);
nameLength:uint (id: 5);
nameOffset:uint (id: 4);
units:[LinkedNodeUnit] (id: 1);
uriStr:string (id: 0);
}
/// Flattened tree of declarations referenced from [LinkedNode]s.
table LinkedNodeReferences {
name:[string] (id: 1);
parent:[uint] (id: 0);
}
/// Information about a Dart type.
table LinkedNodeType {
functionFormalParameters:[LinkedNodeTypeFormalParameter] (id: 0);
functionReturnType:LinkedNodeType (id: 1);
functionTypeParameters:[LinkedNodeTypeTypeParameter] (id: 2);
genericTypeAliasReference:uint (id: 8);
genericTypeAliasTypeArguments:[LinkedNodeType] (id: 9);
/// Reference to a [LinkedNodeReferences].
interfaceClass:uint (id: 3);
interfaceTypeArguments:[LinkedNodeType] (id: 4);
kind:LinkedNodeTypeKind (id: 5);
nullabilitySuffix:EntityRefNullabilitySuffix (id: 10);
typeParameterElement:uint (id: 6);
typeParameterId:uint (id: 7);
}
/// Information about a formal parameter in a function type.
table LinkedNodeTypeFormalParameter {
kind:LinkedNodeFormalParameterKind (id: 0);
name:string (id: 1);
type:LinkedNodeType (id: 2);
}
/// Information about a type parameter in a function type.
table LinkedNodeTypeTypeParameter {
bound:LinkedNodeType (id: 1);
name:string (id: 0);
}
/// Information about a single library in a [LinkedNodeLibrary].
table LinkedNodeUnit {
/// All generic function types in the unit - in generic type aliases, or used
/// directly as type annotations.
///
/// They are requested in two cases: when we are reading a node that contains
/// them (e.g. a return type of a method), or when we run over unresolved
/// AST in declaration resolver.
genericFunctionTypes:[LinkedNode] (id: 5);
isSynthetic:bool (id: 3);
/// Offsets of the first character of each line in the source code.
lineStarts:[uint] (id: 4);
node:LinkedNode (id: 2);
tokens:UnlinkedTokens (id: 1);
uriStr:string (id: 0);
isNNBD:bool (id: 6);
}
/// Information about a top-level declaration, or a field declaration that
/// contributes information to [LinkedNodeKind.variableDeclaration].
table LinkedNodeVariablesDeclaration {
comment:LinkedNode (id: 0);
isConst:bool (id: 1);
isCovariant:bool (id: 2);
isFinal:bool (id: 3);
isStatic:bool (id: 4);
}
/// Information about the resolution of an [UnlinkedReference].
table LinkedReference {
/// If this [LinkedReference] doesn't have an associated [UnlinkedReference],
/// and the entity being referred to is contained within another entity, index
/// of the containing entity. This behaves similarly to
/// [UnlinkedReference.prefixReference], however it is only used for class
/// members, not for prefixed imports.
///
/// Containing references must always point backward; that is, for all i, if
/// LinkedUnit.references[i].containingReference != 0, then
/// LinkedUnit.references[i].containingReference < i.
containingReference:uint (id: 5);
/// Index into [LinkedLibrary.dependencies] indicating which imported library
/// declares the entity being referred to.
///
/// Zero if this entity is contained within another entity (e.g. a class
/// member), or if [kind] is [ReferenceKind.prefix].
dependency:uint (id: 1);
/// The kind of the entity being referred to. For the pseudo-types `dynamic`
/// and `void`, the kind is [ReferenceKind.classOrEnum].
kind:ReferenceKind (id: 2);
/// If [kind] is [ReferenceKind.function] (that is, the entity being referred
/// to is a local function), the index of the function within
/// [UnlinkedExecutable.localFunctions]. Otherwise zero.
localIndex:uint (id: 6, deprecated);
/// If this [LinkedReference] doesn't have an associated [UnlinkedReference],
/// name of the entity being referred to. For the pseudo-type `dynamic`, the
/// string is "dynamic". For the pseudo-type `void`, the string is "void".
name:string (id: 3);
/// If the entity being referred to is generic, the number of type parameters
/// it declares (does not include type parameters of enclosing entities).
/// Otherwise zero.
numTypeParameters:uint (id: 4);
/// Integer index indicating which unit in the imported library contains the
/// definition of the entity. As with indices into [LinkedLibrary.units],
/// zero represents the defining compilation unit, and nonzero values
/// represent parts in the order of the corresponding `part` declarations.
///
/// Zero if this entity is contained within another entity (e.g. a class
/// member).
unit:uint (id: 0);
}
/// Linked summary of a compilation unit.
table LinkedUnit {
/// List of slot ids (referring to [UnlinkedExecutable.constCycleSlot])
/// corresponding to const constructors that are part of cycles.
constCycles:[uint] (id: 2);
/// List of slot ids (referring to [UnlinkedClass.notSimplyBoundedSlot] or
/// [UnlinkedTypedef.notSimplyBoundedSlot]) corresponding to classes and
/// typedefs that are not simply bounded.
notSimplyBounded:[uint] (id: 5);
/// List of slot ids (referring to [UnlinkedParam.inheritsCovariantSlot] or
/// [UnlinkedVariable.inheritsCovariantSlot]) corresponding to parameters
/// that inherit `@covariant` behavior from a base class.
parametersInheritingCovariant:[uint] (id: 3);
/// Information about the resolution of references within the compilation
/// unit. Each element of [UnlinkedUnit.references] has a corresponding
/// element in this list (at the same index). If this list has additional
/// elements beyond the number of elements in [UnlinkedUnit.references], those
/// additional elements are references that are only referred to implicitly
/// (e.g. elements involved in inferred or propagated types).
references:[LinkedReference] (id: 0);
/// The list of type inference errors.
topLevelInferenceErrors:[TopLevelInferenceError] (id: 4);
/// List associating slot ids found inside the unlinked summary for the
/// compilation unit with propagated and inferred types.
types:[EntityRef] (id: 1);
}
/// Summary information about a package.
table PackageBundle {
/// MD5 hash of the non-informative fields of the [PackageBundle] (not
/// including this one). This can be used to identify when the API of a
/// package may have changed.
apiSignature:string (id: 7, deprecated);
/// Information about the packages this package depends on, if known.
dependencies:[PackageDependencyInfo] (id: 8, deprecated);
/// Linked libraries.
linkedLibraries:[LinkedLibrary] (id: 0);
/// The list of URIs of items in [linkedLibraries], e.g. `dart:core` or
/// `package:foo/bar.dart`.
linkedLibraryUris:[string] (id: 1);
/// Major version of the summary format. See
/// [PackageBundleAssembler.currentMajorVersion].
majorVersion:uint (id: 5);
/// Minor version of the summary format. See
/// [PackageBundleAssembler.currentMinorVersion].
minorVersion:uint (id: 6);
/// List of MD5 hashes of the files listed in [unlinkedUnitUris]. Each hash
/// is encoded as a hexadecimal string using lower case letters.
unlinkedUnitHashes:[string] (id: 4, deprecated);
/// Unlinked information for the compilation units constituting the package.
unlinkedUnits:[UnlinkedUnit] (id: 2);
/// The list of URIs of items in [unlinkedUnits], e.g. `dart:core/bool.dart`.
unlinkedUnitUris:[string] (id: 3);
}
/// Information about a single dependency of a summary package.
table PackageDependencyInfo {
/// API signature of this dependency.
apiSignature:string (id: 0);
/// If this dependency summarizes any files whose URI takes the form
/// "package:<package_name>/...", a list of all such package names, sorted
/// lexicographically. Otherwise empty.
includedPackageNames:[string] (id: 2);
/// Indicates whether this dependency summarizes any files whose URI takes the
/// form "dart:...".
includesDartUris:bool (id: 4);
/// Indicates whether this dependency summarizes any files whose URI takes the
/// form "file:...".
includesFileUris:bool (id: 3);
/// Relative path to the summary file for this dependency. This is intended
/// as a hint to help the analysis server locate summaries of dependencies.
/// We don't specify precisely what this path is relative to, but we expect
/// it to be relative to a directory the analysis server can find (e.g. for
/// projects built using Bazel, it would be relative to the "bazel-bin"
/// directory).
///
/// Absent if the path is not known.
summaryPath:string (id: 1);
}
/// Index information about a package.
table PackageIndex {
/// Each item of this list corresponds to a unique referenced element. It is
/// the kind of the synthetic element.
elementKinds:[IndexSyntheticElementKind] (id: 5);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the class member element name, or `null` if the element
/// is a top-level element. The list is sorted in ascending order, so that
/// the client can quickly check whether an element is referenced in this
/// [PackageIndex].
elementNameClassMemberIds:[uint] (id: 7);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the named parameter name, or `null` if the element is
/// not a named parameter. The list is sorted in ascending order, so that the
/// client can quickly check whether an element is referenced in this
/// [PackageIndex].
elementNameParameterIds:[uint] (id: 8);
/// Each item of this list corresponds to a unique referenced element. It is
/// the identifier of the top-level element name, or `null` if the element is
/// the unit. The list is sorted in ascending order, so that the client can
/// quickly check whether an element is referenced in this [PackageIndex].
elementNameUnitMemberIds:[uint] (id: 1);
/// Each item of this list corresponds to a unique referenced element. It is
/// the index into [unitLibraryUris] and [unitUnitUris] for the library
/// specific unit where the element is declared.
elementUnits:[uint] (id: 0);
/// List of unique element strings used in this [PackageIndex]. The list is
/// sorted in ascending order, so that the client can quickly check the
/// presence of a string in this [PackageIndex].
strings:[string] (id: 6);
/// Each item of this list corresponds to the library URI of a unique library
/// specific unit referenced in the [PackageIndex]. It is an index into
/// [strings] list.
unitLibraryUris:[uint] (id: 2);
/// List of indexes of each unit in this [PackageIndex].
units:[UnitIndex] (id: 4);
/// Each item of this list corresponds to the unit URI of a unique library
/// specific unit referenced in the [PackageIndex]. It is an index into
/// [strings] list.
unitUnitUris:[uint] (id: 3);
}
/// Summary information about a top-level type inference error.
table TopLevelInferenceError {
/// The [kind] specific arguments.
arguments:[string] (id: 2);
/// The kind of the error.
kind:TopLevelInferenceErrorKind (id: 1);
/// The slot id (which is unique within the compilation unit) identifying the
/// target of type inference with which this [TopLevelInferenceError] is
/// associated.
slot:uint (id: 0);
}
/// Index information about a unit in a [PackageIndex].
table UnitIndex {
/// Each item of this list is the kind of an element defined in this unit.
definedNameKinds:[IndexNameKind] (id: 6);
/// Each item of this list is the name offset of an element defined in this
/// unit relative to the beginning of the file.
definedNameOffsets:[uint] (id: 7);
/// Each item of this list corresponds to an element defined in this unit. It
/// is an index into [PackageIndex.strings] list. The list is sorted in
/// ascending order, so that the client can quickly find name definitions in
/// this [UnitIndex].
definedNames:[uint] (id: 5);
/// Index into [PackageIndex.unitLibraryUris] and [PackageIndex.unitUnitUris]
/// for the library specific unit that corresponds to this [UnitIndex].
unit:uint (id: 0);
/// Each item of this list is the `true` if the corresponding element usage
/// is qualified with some prefix.
usedElementIsQualifiedFlags:[ubyte] (id: 11);
/// Each item of this list is the kind of the element usage.
usedElementKinds:[IndexRelationKind] (id: 4);
/// Each item of this list is the length of the element usage.
usedElementLengths:[uint] (id: 1);
/// Each item of this list is the offset of the element usage relative to the
/// beginning of the file.
usedElementOffsets:[uint] (id: 2);
/// Each item of this list is the index into [PackageIndex.elementUnits] and
/// [PackageIndex.elementOffsets]. The list is sorted in ascending order, so
/// that the client can quickly find element references in this [UnitIndex].
usedElements:[uint] (id: 3);
/// Each item of this list is the `true` if the corresponding name usage
/// is qualified with some prefix.
usedNameIsQualifiedFlags:[ubyte] (id: 12);
/// Each item of this list is the kind of the name usage.
usedNameKinds:[IndexRelationKind] (id: 10);
/// Each item of this list is the offset of the name usage relative to the
/// beginning of the file.
usedNameOffsets:[uint] (id: 9);
/// Each item of this list is the index into [PackageIndex.strings] for a
/// used name. The list is sorted in ascending order, so that the client can
/// quickly find name uses in this [UnitIndex].
usedNames:[uint] (id: 8);
}
/// Unlinked summary information about a class declaration.
table UnlinkedClass {
/// Annotations for this class.
annotations:[UnlinkedExpr] (id: 5);
/// Code range of the class.
codeRange:CodeRange (id: 13);
/// Documentation comment for the class, or `null` if there is no
/// documentation comment.
documentationComment:UnlinkedDocumentationComment (id: 6);
/// Executable objects (methods, getters, and setters) contained in the class.
executables:[UnlinkedExecutable] (id: 2);
/// Field declarations contained in the class.
fields:[UnlinkedVariable] (id: 4);
/// Indicates whether this class is the core "Object" class (and hence has no
/// supertype)
hasNoSupertype:bool (id: 12);
/// Interfaces appearing in an `implements` clause, if any.
interfaces:[EntityRef] (id: 7);
/// Indicates whether the class is declared with the `abstract` keyword.
isAbstract:bool (id: 8);
/// Indicates whether the class is declared using mixin application syntax.
isMixinApplication:bool (id: 11);
/// Mixins appearing in a `with` clause, if any.
mixins:[EntityRef] (id: 10);
/// Name of the class.
name:string (id: 0);
/// Offset of the class name relative to the beginning of the file.
nameOffset:uint (id: 1);
/// If the class might not be simply bounded, a nonzero slot id which is unique
/// within this compilation unit. If this id is found in
/// [LinkedUnit.notSimplyBounded], then at least one of this class's type
/// parameters is not simply bounded, hence this class can't be used as a raw
/// type when specifying the bound of a type parameter.
///
/// Otherwise, zero.
notSimplyBoundedSlot:uint (id: 16);
/// Superclass constraints for this mixin declaration. The list will be empty
/// if this class is not a mixin declaration, or if the declaration does not
/// have an `on` clause (in which case the type `Object` is implied).
superclassConstraints:[EntityRef] (id: 14);
/// Names of methods, getters, setters, and operators that this mixin
/// declaration super-invokes. For setters this includes the trailing "=".
/// The list will be empty if this class is not a mixin declaration.
superInvokedNames:[string] (id: 15);
/// Supertype of the class, or `null` if either (a) the class doesn't
/// explicitly declare a supertype (and hence has supertype `Object`), or (b)
/// the class *is* `Object` (and hence has no supertype).
supertype:EntityRef (id: 3);
/// Type parameters of the class, if any.
typeParameters:[UnlinkedTypeParam] (id: 9);
}
/// Unlinked summary information about a `show` or `hide` combinator in an
/// import or export declaration.
table UnlinkedCombinator {
/// If this is a `show` combinator, offset of the end of the list of shown
/// names. Otherwise zero.
end:uint (id: 3);
/// List of names which are hidden. Empty if this is a `show` combinator.
hides:[string] (id: 1);
/// If this is a `show` combinator, offset of the `show` keyword. Otherwise
/// zero.
offset:uint (id: 2);
/// List of names which are shown. Empty if this is a `hide` combinator.
shows:[string] (id: 0);
}
/// Unlinked summary information about a single import or export configuration.
table UnlinkedConfiguration {
/// The name of the declared variable whose value is being used in the
/// condition.
name:string (id: 0);
/// The URI of the implementation library to be used if the condition is true.
uri:string (id: 2);
/// The value to which the value of the declared variable will be compared,
/// or `true` if the condition does not include an equality test.
value:string (id: 1);
}
/// Unlinked summary information about a constructor initializer.
table UnlinkedConstructorInitializer {
/// If there are `m` [arguments] and `n` [argumentNames], then each argument
/// from [arguments] with index `i` such that `n + i - m >= 0`, should be used
/// with the name at `n + i - m`.
argumentNames:[string] (id: 4);
/// If [kind] is `thisInvocation` or `superInvocation`, the arguments of the
/// invocation. Otherwise empty.
arguments:[UnlinkedExpr] (id: 3);
/// If [kind] is `field`, the expression of the field initializer.
/// Otherwise `null`.
expression:UnlinkedExpr (id: 1);
/// The kind of the constructor initializer (field, redirect, super).
kind:UnlinkedConstructorInitializerKind (id: 2);
/// If [kind] is `field`, the name of the field declared in the class. If
/// [kind] is `thisInvocation`, the name of the constructor, declared in this
/// class, to redirect to. If [kind] is `superInvocation`, the name of the
/// constructor, declared in the superclass, to invoke.
name:string (id: 0);
}
/// Unlinked summary information about a documentation comment.
table UnlinkedDocumentationComment {
/// Length of the documentation comment (prior to replacing '\r\n' with '\n').
length:uint (id: 0, deprecated);
/// Offset of the beginning of the documentation comment relative to the
/// beginning of the file.
offset:uint (id: 2, deprecated);
/// Text of the documentation comment, with '\r\n' replaced by '\n'.
///
/// References appearing within the doc comment in square brackets are not
/// specially encoded.
text:string (id: 1);
}
/// Unlinked summary information about an enum declaration.
table UnlinkedEnum {
/// Annotations for this enum.
annotations:[UnlinkedExpr] (id: 4);
/// Code range of the enum.
codeRange:CodeRange (id: 5);
/// Documentation comment for the enum, or `null` if there is no documentation
/// comment.
documentationComment:UnlinkedDocumentationComment (id: 3);
/// Name of the enum type.
name:string (id: 0);
/// Offset of the enum name relative to the beginning of the file.
nameOffset:uint (id: 1);
/// Values listed in the enum declaration, in declaration order.
values:[UnlinkedEnumValue] (id: 2);
}
/// Unlinked summary information about a single enumerated value in an enum
/// declaration.
table UnlinkedEnumValue {
/// Annotations for this value.
annotations:[UnlinkedExpr] (id: 3);
/// Documentation comment for the enum value, or `null` if there is no
/// documentation comment.
documentationComment:UnlinkedDocumentationComment (id: 2);
/// Name of the enumerated value.
name:string (id: 0);
/// Offset of the enum value name relative to the beginning of the file.
nameOffset:uint (id: 1);
}
/// Unlinked summary information about a function, method, getter, or setter
/// declaration.
table UnlinkedExecutable {
/// Annotations for this executable.
annotations:[UnlinkedExpr] (id: 6);
/// If this executable's function body is declared using `=>`, the expression
/// to the right of the `=>`. May be omitted if neither type inference nor
/// constant evaluation depends on the function body.
bodyExpr:UnlinkedExpr (id: 29);
/// Code range of the executable.
codeRange:CodeRange (id: 26);
/// If a constant [UnlinkedExecutableKind.constructor], the constructor
/// initializers. Otherwise empty.
constantInitializers:[UnlinkedConstructorInitializer] (id: 14);
/// If [kind] is [UnlinkedExecutableKind.constructor] and [isConst] is `true`,
/// a nonzero slot id which is unique within this compilation unit. If this
/// id is found in [LinkedUnit.constCycles], then this constructor is part of
/// a cycle.
///
/// Otherwise, zero.
constCycleSlot:uint (id: 25);
/// Documentation comment for the executable, or `null` if there is no
/// documentation comment.
documentationComment:UnlinkedDocumentationComment (id: 7);
/// If this executable's return type is inferable, nonzero slot id
/// identifying which entry in [LinkedUnit.types] contains the inferred
/// return type. If there is no matching entry in [LinkedUnit.types], then
/// no return type was inferred for this variable, so its static type is
/// `dynamic`.
inferredReturnTypeSlot:uint (id: 5);
/// Indicates whether the executable is declared using the `abstract` keyword.
isAbstract:bool (id: 10);
/// Indicates whether the executable has body marked as being asynchronous.
isAsynchronous:bool (id: 27);
/// Indicates whether the executable is declared using the `const` keyword.
isConst:bool (id: 12);
/// Indicates whether the executable is declared using the `external` keyword.
isExternal:bool (id: 11);
/// Indicates whether the executable is declared using the `factory` keyword.
isFactory:bool (id: 8);
/// Indicates whether the executable has body marked as being a generator.
isGenerator:bool (id: 28);
/// Indicates whether the executable is a redirected constructor.
isRedirectedConstructor:bool (id: 13);
/// Indicates whether the executable is declared using the `static` keyword.
///
/// Note that for top level executables, this flag is false, since they are
/// not declared using the `static` keyword (even though they are considered
/// static for semantic purposes).
isStatic:bool (id: 9);
/// The kind of the executable (function/method, getter, setter, or
/// constructor).
kind:UnlinkedExecutableKind (id: 4);
/// The list of local functions.
localFunctions:[UnlinkedExecutable] (id: 18);
/// The list of local labels.
localLabels:[string] (id: 22, deprecated);
/// The list of local variables.
localVariables:[UnlinkedVariable] (id: 19, deprecated);
/// Name of the executable. For setters, this includes the trailing "=". For
/// named constructors, this excludes the class name and excludes the ".".
/// For unnamed constructors, this is the empty string.
name:string (id: 1);
/// If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
/// the offset of the end of the constructor name. Otherwise zero.
nameEnd:uint (id: 23);
/// Offset of the executable name relative to the beginning of the file. For
/// named constructors, this excludes the class name and excludes the ".".
/// For unnamed constructors, this is the offset of the class name (i.e. the
/// offset of the second "C" in "class C { C(); }").
nameOffset:uint (id: 0);
/// Parameters of the executable, if any. Note that getters have no
/// parameters (hence this will be the empty list), and setters have a single
/// parameter.
parameters:[UnlinkedParam] (id: 2);
/// If [kind] is [UnlinkedExecutableKind.constructor] and [name] is not empty,
/// the offset of the period before the constructor name. Otherwise zero.
periodOffset:uint (id: 24);
/// If [isRedirectedConstructor] and [isFactory] are both `true`, the
/// constructor to which this constructor redirects; otherwise empty.
redirectedConstructor:EntityRef (id: 15);
/// If [isRedirectedConstructor] is `true` and [isFactory] is `false`, the
/// name of the constructor that this constructor redirects to; otherwise
/// empty.
redirectedConstructorName:string (id: 17);
/// Declared return type of the executable. Absent if the executable is a
/// constructor or the return type is implicit. Absent for executables
/// associated with variable initializers and closures, since these
/// executables may have return types that are not accessible via direct
/// imports.
returnType:EntityRef (id: 3);
/// Type parameters of the executable, if any. Empty if support for generic
/// method syntax is disabled.
typeParameters:[UnlinkedTypeParam] (id: 16);
/// If a local function, the length of the visible range; zero otherwise.
visibleLength:uint (id: 20);
/// If a local function, the beginning of the visible range; zero otherwise.
visibleOffset:uint (id: 21);
}
/// Unlinked summary information about an export declaration (stored outside
/// [UnlinkedPublicNamespace]).
table UnlinkedExportNonPublic {
/// Annotations for this export directive.
annotations:[UnlinkedExpr] (id: 3);
/// Offset of the "export" keyword.
offset:uint (id: 0);
/// End of the URI string (including quotes) relative to the beginning of the
/// file.
uriEnd:uint (id: 1);
/// Offset of the URI string (including quotes) relative to the beginning of
/// the file.
uriOffset:uint (id: 2);
}
/// Unlinked summary information about an export declaration (stored inside
/// [UnlinkedPublicNamespace]).
table UnlinkedExportPublic {
/// Combinators contained in this export declaration.
combinators:[UnlinkedCombinator] (id: 1);
/// Configurations used to control which library will actually be loaded at
/// run-time.
configurations:[UnlinkedConfiguration] (id: 2);
/// URI used in the source code to reference the exported library.
uri:string (id: 0);
}
/// Unlinked summary information about an expression.
///
/// Expressions are represented using a simple stack-based language
/// where [operations] is a sequence of operations to execute starting with an
/// empty stack. Once all operations have been executed, the stack should
/// contain a single value which is the value of the constant. Note that some
/// operations consume additional data from the other fields of this class.
table UnlinkedExpr {
/// Sequence of operators used by assignment operations.
assignmentOperators:[UnlinkedExprAssignOperator] (id: 6);
/// Sequence of 64-bit doubles consumed by the operation `pushDouble`.
doubles:[double] (id: 4);
/// Sequence of unsigned 32-bit integers consumed by the operations
/// `pushArgument`, `pushInt`, `shiftOr`, `concatenate`, `invokeConstructor`,
/// `makeList`, and `makeMap`.
ints:[uint] (id: 1);
/// Indicates whether the expression is a valid potentially constant
/// expression.
isValidConst:bool (id: 5);
/// Sequence of operations to execute (starting with an empty stack) to form
/// the constant value.
operations:[UnlinkedExprOperation] (id: 0);
/// Sequence of language constructs consumed by the operations
/// `pushReference`, `invokeConstructor`, `makeList`, and `makeMap`. Note
/// that in the case of `pushReference` (and sometimes `invokeConstructor` the
/// actual entity being referred to may be something other than a type.
references:[EntityRef] (id: 2);
/// String representation of the expression in a form suitable to be tokenized
/// and parsed.
sourceRepresentation:string (id: 7);
/// Sequence of strings consumed by the operations `pushString` and
/// `invokeConstructor`.
strings:[string] (id: 3);
}
/// Unlinked summary information about an import declaration.
table UnlinkedImport {
/// Annotations for this import declaration.
annotations:[UnlinkedExpr] (id: 8);
/// Combinators contained in this import declaration.
combinators:[UnlinkedCombinator] (id: 4);
/// Configurations used to control which library will actually be loaded at
/// run-time.
configurations:[UnlinkedConfiguration] (id: 10);
/// Indicates whether the import declaration uses the `deferred` keyword.
isDeferred:bool (id: 9);
/// Indicates whether the import declaration is implicit.
isImplicit:bool (id: 5);
/// If [isImplicit] is false, offset of the "import" keyword. If [isImplicit]
/// is true, zero.
offset:uint (id: 0);
/// Offset of the prefix name relative to the beginning of the file, or zero
/// if there is no prefix.
prefixOffset:uint (id: 6);
/// Index into [UnlinkedUnit.references] of the prefix declared by this
/// import declaration, or zero if this import declaration declares no prefix.
///
/// Note that multiple imports can declare the same prefix.
prefixReference:uint (id: 7);
/// URI used in the source code to reference the imported library.
uri:string (id: 1);
/// End of the URI string (including quotes) relative to the beginning of the
/// file. If [isImplicit] is true, zero.
uriEnd:uint (id: 2);
/// Offset of the URI string (including quotes) relative to the beginning of
/// the file. If [isImplicit] is true, zero.
uriOffset:uint (id: 3);
}
/// Unlinked summary information about a function parameter.
table UnlinkedParam {
/// Annotations for this parameter.
annotations:[UnlinkedExpr] (id: 9);
/// Code range of the parameter.
codeRange:CodeRange (id: 7);
/// If the parameter has a default value, the source text of the constant
/// expression in the default value. Otherwise the empty string.
defaultValueCode:string (id: 13);
/// If this parameter's type is inferable, nonzero slot id identifying which
/// entry in [LinkedLibrary.types] contains the inferred type. If there is no
/// matching entry in [LinkedLibrary.types], then no type was inferred for
/// this variable, so its static type is `dynamic`.
///
/// Note that although strong mode considers initializing formals to be
/// inferable, they are not marked as such in the summary; if their type is
/// not specified, they always inherit the static type of the corresponding
/// field.
inferredTypeSlot:uint (id: 2);
/// If this is a parameter of an instance method, a nonzero slot id which is
/// unique within this compilation unit. If this id is found in
/// [LinkedUnit.parametersInheritingCovariant], then this parameter inherits
/// `@covariant` behavior from a base class.
///
/// Otherwise, zero.
inheritsCovariantSlot:uint (id: 14);
/// The synthetic initializer function of the parameter. Absent if the
/// variable does not have an initializer.
initializer:UnlinkedExecutable (id: 12);
/// Indicates whether this parameter is explicitly marked as being covariant.
isExplicitlyCovariant:bool (id: 15);
/// Indicates whether the parameter is declared using the `final` keyword.
isFinal:bool (id: 16);
/// Indicates whether this is a function-typed parameter. A parameter is
/// function-typed if the declaration of the parameter has explicit formal
/// parameters
/// ```
/// int functionTyped(int p)
/// ```
/// but is not function-typed if it does not, even if the type of the
/// parameter is a function type.
isFunctionTyped:bool (id: 5);
/// Indicates whether this is an initializing formal parameter (i.e. it is
/// declared using `this.` syntax).
isInitializingFormal:bool (id: 6);
/// Kind of the parameter.
kind:UnlinkedParamKind (id: 4);
/// Name of the parameter.
name:string (id: 0);
/// Offset of the parameter name relative to the beginning of the file.
nameOffset:uint (id: 1);
/// If [isFunctionTyped] is `true`, the parameters of the function type.
parameters:[UnlinkedParam] (id: 8);
/// If [isFunctionTyped] is `true`, the declared return type. If
/// [isFunctionTyped] is `false`, the declared type. Absent if the type is
/// implicit.
type:EntityRef (id: 3);
/// The length of the visible range.
visibleLength:uint (id: 10);
/// The beginning of the visible range.
visibleOffset:uint (id: 11);
}
/// Unlinked summary information about a part declaration.
table UnlinkedPart {
/// Annotations for this part declaration.
annotations:[UnlinkedExpr] (id: 2);
/// End of the URI string (including quotes) relative to the beginning of the
/// file.
uriEnd:uint (id: 0);
/// Offset of the URI string (including quotes) relative to the beginning of
/// the file.
uriOffset:uint (id: 1);
}
/// Unlinked summary information about a specific name contributed by a
/// compilation unit to a library's public namespace.
///
/// TODO(paulberry): some of this information is redundant with information
/// elsewhere in the summary. Consider reducing the redundancy to reduce
/// summary size.
table UnlinkedPublicName {
/// The kind of object referred to by the name.
kind:ReferenceKind (id: 1);
/// If this [UnlinkedPublicName] is a class, the list of members which can be
/// referenced statically - static fields, static methods, and constructors.
/// Otherwise empty.
///
/// Unnamed constructors are not included since they do not constitute a
/// separate name added to any namespace.
members:[UnlinkedPublicName] (id: 2);
/// The name itself.
name:string (id: 0);
/// If the entity being referred to is generic, the number of type parameters
/// it accepts. Otherwise zero.
numTypeParameters:uint (id: 3);
}
/// Unlinked summary information about what a compilation unit contributes to a
/// library's public namespace. This is the subset of [UnlinkedUnit] that is
/// required from dependent libraries in order to perform prelinking.
table UnlinkedPublicNamespace {
/// Export declarations in the compilation unit.
exports:[UnlinkedExportPublic] (id: 2);
/// Public names defined in the compilation unit.
///
/// TODO(paulberry): consider sorting these names to reduce unnecessary
/// relinking.
names:[UnlinkedPublicName] (id: 0);
/// URIs referenced by part declarations in the compilation unit.
parts:[string] (id: 1);
}
/// Unlinked summary information about a name referred to in one library that
/// might be defined in another.
table UnlinkedReference {
/// Name of the entity being referred to. For the pseudo-type `dynamic`, the
/// string is "dynamic". For the pseudo-type `void`, the string is "void".
/// For the pseudo-type `bottom`, the string is "*bottom*".
name:string (id: 0);
/// Prefix used to refer to the entity, or zero if no prefix is used. This is
/// an index into [UnlinkedUnit.references].
///
/// Prefix references must always point backward; that is, for all i, if
/// UnlinkedUnit.references[i].prefixReference != 0, then
/// UnlinkedUnit.references[i].prefixReference < i.
prefixReference:uint (id: 1);
}
/// TODO(scheglov) document
table UnlinkedTokens {
/// The token that corresponds to this token, or `0` if this token is not
/// the first of a pair of matching tokens (such as parentheses).
endGroup:[uint] (id: 0);
/// Return `true` if this token is a synthetic token. A synthetic token is a
/// token that was introduced by the parser in order to recover from an error
/// in the code.
isSynthetic:[ubyte] (id: 1);
kind:[UnlinkedTokenKind] (id: 2);
length:[uint] (id: 3);
lexeme:[string] (id: 4);
/// The next token in the token stream, `0` for [UnlinkedTokenType.EOF] or
/// the last comment token.
next:[uint] (id: 5);
offset:[uint] (id: 6);
/// The first comment token in the list of comments that precede this token,
/// or `0` if there are no comments preceding this token. Additional comments
/// can be reached by following the token stream using [next] until `0` is
/// reached.
precedingComment:[uint] (id: 7);
type:[UnlinkedTokenType] (id: 8);
}
/// Unlinked summary information about a typedef declaration.
table UnlinkedTypedef {
/// Annotations for this typedef.
annotations:[UnlinkedExpr] (id: 4);
/// Code range of the typedef.
codeRange:CodeRange (id: 7);
/// Documentation comment for the typedef, or `null` if there is no
/// documentation comment.
documentationComment:UnlinkedDocumentationComment (id: 6);
/// Name of the typedef.
name:string (id: 0);
/// Offset of the typedef name relative to the beginning of the file.
nameOffset:uint (id: 1);
/// If the typedef might not be simply bounded, a nonzero slot id which is
/// unique within this compilation unit. If this id is found in
/// [LinkedUnit.notSimplyBounded], then at least one of this typedef's type
/// parameters is not simply bounded, hence this typedef can't be used as a
/// raw type when specifying the bound of a type parameter.
///
/// Otherwise, zero.
notSimplyBoundedSlot:uint (id: 9);
/// Parameters of the executable, if any.
parameters:[UnlinkedParam] (id: 3);
/// If [style] is [TypedefStyle.functionType], the return type of the typedef.
/// If [style] is [TypedefStyle.genericFunctionType], the function type being
/// defined.
returnType:EntityRef (id: 2);
/// The style of the typedef.
style:TypedefStyle (id: 8);
/// Type parameters of the typedef, if any.
typeParameters:[UnlinkedTypeParam] (id: 5);
}
/// Unlinked summary information about a type parameter declaration.
table UnlinkedTypeParam {
/// Annotations for this type parameter.
annotations:[UnlinkedExpr] (id: 3);
/// Bound of the type parameter, if a bound is explicitly declared. Otherwise
/// null.
bound:EntityRef (id: 2);
/// Code range of the type parameter.
codeRange:CodeRange (id: 4);
/// Name of the type parameter.
name:string (id: 0);
/// Offset of the type parameter name relative to the beginning of the file.
nameOffset:uint (id: 1);
}
/// Unlinked summary information about a compilation unit ("part file").
table UnlinkedUnit {
/// MD5 hash of the non-informative fields of the [UnlinkedUnit] (not
/// including this one) as 16 unsigned 8-bit integer values. This can be used
/// to identify when the API of a unit may have changed.
apiSignature:[uint] (id: 19);
/// Classes declared in the compilation unit.
classes:[UnlinkedClass] (id: 2);
/// Code range of the unit.
codeRange:CodeRange (id: 15);
/// Enums declared in the compilation unit.
enums:[UnlinkedEnum] (id: 12);
/// Top level executable objects (functions, getters, and setters) declared in
/// the compilation unit.
executables:[UnlinkedExecutable] (id: 4);
/// Export declarations in the compilation unit.
exports:[UnlinkedExportNonPublic] (id: 13);
/// If this compilation unit was summarized in fallback mode, the path where
/// the compilation unit may be found on disk. Otherwise empty.
///
/// When this field is non-empty, all other fields in the data structure have
/// their default values.
fallbackModePath:string (id: 16, deprecated);
/// Import declarations in the compilation unit.
imports:[UnlinkedImport] (id: 5);
/// Indicates whether this compilation unit is opted into NNBD.
isNNBD:bool (id: 21);
/// Indicates whether the unit contains a "part of" declaration.
isPartOf:bool (id: 18);
/// Annotations for the library declaration, or the empty list if there is no
/// library declaration.
libraryAnnotations:[UnlinkedExpr] (id: 14);
/// Documentation comment for the library, or `null` if there is no
/// documentation comment.
libraryDocumentationComment:UnlinkedDocumentationComment (id: 9);
/// Name of the library (from a "library" declaration, if present).
libraryName:string (id: 6);
/// Length of the library name as it appears in the source code (or 0 if the
/// library has no name).
libraryNameLength:uint (id: 7);
/// Offset of the library name relative to the beginning of the file (or 0 if
/// the library has no name).
libraryNameOffset:uint (id: 8);
/// Offsets of the first character of each line in the source code.
lineStarts:[uint] (id: 17);
/// Mixins declared in the compilation unit.
mixins:[UnlinkedClass] (id: 20);
/// Part declarations in the compilation unit.
parts:[UnlinkedPart] (id: 11);
/// Unlinked public namespace of this compilation unit.
publicNamespace:UnlinkedPublicNamespace (id: 0);
/// Top level and prefixed names referred to by this compilation unit. The
/// zeroth element of this array is always populated and is used to represent
/// the absence of a reference in places where a reference is optional (for
/// example [UnlinkedReference.prefixReference or
/// UnlinkedImport.prefixReference]).
references:[UnlinkedReference] (id: 1);
/// Typedefs declared in the compilation unit.
typedefs:[UnlinkedTypedef] (id: 10);
/// Top level variables declared in the compilation unit.
variables:[UnlinkedVariable] (id: 3);
}
/// Unlinked summary information about a compilation unit.
table UnlinkedUnit2 {
/// The MD5 hash signature of the API portion of this unit. It depends on all
/// tokens that might affect APIs of declarations in the unit.
apiSignature:[uint] (id: 0);
/// URIs of `export` directives.
exports:[string] (id: 1);
/// Is `true` if the unit contains a `library` directive.
hasLibraryDirective:bool (id: 6);
/// Is `true` if the unit contains a `part of` directive.
hasPartOfDirective:bool (id: 3);
/// URIs of `import` directives.
imports:[string] (id: 2);
/// Offsets of the first character of each line in the source code.
lineStarts:[uint] (id: 5);
/// URIs of `part` directives.
parts:[string] (id: 4);
}
/// Unlinked summary information about a top level variable, local variable, or
/// a field.
table UnlinkedVariable {
/// Annotations for this variable.
annotations:[UnlinkedExpr] (id: 8);
/// Code range of the variable.
codeRange:CodeRange (id: 5);
/// Documentation comment for the variable, or `null` if there is no
/// documentation comment.
documentationComment:UnlinkedDocumentationComment (id: 10);
/// If this variable is inferable, nonzero slot id identifying which entry in
/// [LinkedLibrary.types] contains the inferred type for this variable. If
/// there is no matching entry in [LinkedLibrary.types], then no type was
/// inferred for this variable, so its static type is `dynamic`.
inferredTypeSlot:uint (id: 9);
/// If this is an instance non-final field, a nonzero slot id which is unique
/// within this compilation unit. If this id is found in
/// [LinkedUnit.parametersInheritingCovariant], then the parameter of the
/// synthetic setter inherits `@covariant` behavior from a base class.
///
/// Otherwise, zero.
inheritsCovariantSlot:uint (id: 15);
/// The synthetic initializer function of the variable. Absent if the
/// variable does not have an initializer.
initializer:UnlinkedExecutable (id: 13);
/// Indicates whether the variable is declared using the `const` keyword.
isConst:bool (id: 6);
/// Indicates whether this variable is declared using the `covariant` keyword.
/// This should be false for everything except instance fields.
isCovariant:bool (id: 14);
/// Indicates whether the variable is declared using the `final` keyword.
isFinal:bool (id: 7);
/// Indicates whether the variable is declared using the `late` keyword.
isLate:bool (id: 16);
/// Indicates whether the variable is declared using the `static` keyword.
///
/// Note that for top level variables, this flag is false, since they are not
/// declared using the `static` keyword (even though they are considered
/// static for semantic purposes).
isStatic:bool (id: 4);
/// Name of the variable.
name:string (id: 0);
/// Offset of the variable name relative to the beginning of the file.
nameOffset:uint (id: 1);
/// If this variable is propagable, nonzero slot id identifying which entry in
/// [LinkedLibrary.types] contains the propagated type for this variable. If
/// there is no matching entry in [LinkedLibrary.types], then this variable's
/// propagated type is the same as its declared type.
///
/// Non-propagable variables have a [propagatedTypeSlot] of zero.
propagatedTypeSlot:uint (id: 2);
/// Declared type of the variable. Absent if the type is implicit.
type:EntityRef (id: 3);
/// If a local variable, the length of the visible range; zero otherwise.
visibleLength:uint (id: 11, deprecated);
/// If a local variable, the beginning of the visible range; zero otherwise.
visibleOffset:uint (id: 12, deprecated);
}
root_type PackageBundle;
file_identifier "PBdl";