[kernel][Contexts] Move LegacyVariable to variables.dart
Change-Id: I84212013824a79772f80c60245155129e3422e01 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/504220 Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
committed by
dart-scoped@luci-project-accounts.iam.gserviceaccount.com
parent
80c9d57250
commit
a1fec21b8a
@@ -1459,511 +1459,6 @@ class YieldStatement extends Statement {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(johnniwinther): Move this to `variables.dart`.
|
||||
/// Declaration of a local variable.
|
||||
///
|
||||
/// This may occur as a statement, but is also used in several non-statement
|
||||
/// contexts, such as in [ForStatement], [Catch], and [FunctionNode].
|
||||
///
|
||||
/// When this occurs as a statement, it must be a direct child of a [Block].
|
||||
//
|
||||
// DESIGN TODO: Should we remove the 'final' modifier from variables?
|
||||
class LegacyVariable extends TreeNode implements Variable, Annotatable {
|
||||
/// Offset of the equals sign in the source file it comes from.
|
||||
///
|
||||
/// Valid values are from 0 and up, or -1 ([TreeNode.noOffset])
|
||||
/// if the equals sign offset is not available (e.g. if not initialized)
|
||||
/// (this is the default if none is specifically set).
|
||||
@override
|
||||
int fileEqualsOffset = TreeNode.noOffset;
|
||||
|
||||
@override
|
||||
List<int>? get fileOffsetsIfMultiple => [fileOffset, fileEqualsOffset];
|
||||
|
||||
/// List of metadata annotations on the variable declaration.
|
||||
///
|
||||
/// This defaults to an immutable empty list. Use [addAnnotation] to add
|
||||
/// annotations if needed.
|
||||
@override
|
||||
List<Expression> annotations = const <Expression>[];
|
||||
|
||||
/// The name of the variable or parameter as provided in the source code.
|
||||
///
|
||||
/// If this variable is synthesized, for instance the variable of a [Let]
|
||||
/// expression, the name can be `null`.
|
||||
String? _name;
|
||||
|
||||
@override
|
||||
int flags = 0;
|
||||
|
||||
/// The declared or inferred type of the variable.
|
||||
@override
|
||||
DartType type; // Not null, defaults to dynamic.
|
||||
|
||||
/// Offset of the declaration, set and used when writing the binary.
|
||||
@override
|
||||
int binaryOffsetNoTag = -1;
|
||||
|
||||
/// For locals, this is the initial value.
|
||||
/// For parameters, this is the default value.
|
||||
///
|
||||
/// Should be null in other cases.
|
||||
@override
|
||||
Expression? initializer; // May be null.
|
||||
|
||||
LegacyVariable(
|
||||
this._name, {
|
||||
this.initializer,
|
||||
this.type = const DynamicType(),
|
||||
int flags = -1,
|
||||
bool isFinal = false,
|
||||
bool isConst = false,
|
||||
bool isInitializingFormal = false,
|
||||
bool isSuperInitializingFormal = false,
|
||||
bool isCovariantByDeclaration = false,
|
||||
bool isLate = false,
|
||||
bool isRequired = false,
|
||||
bool isLowered = false,
|
||||
bool isSynthesized = false,
|
||||
bool isHoisted = false,
|
||||
bool hasDeclaredInitializer = false,
|
||||
bool isWildcard = false,
|
||||
}) {
|
||||
initializer?.parent = this;
|
||||
if (flags != -1) {
|
||||
this.flags = flags;
|
||||
} else {
|
||||
this.isFinal = isFinal;
|
||||
this.isConst = isConst;
|
||||
this.isInitializingFormal = isInitializingFormal;
|
||||
this.isSuperInitializingFormal = isSuperInitializingFormal;
|
||||
this.isCovariantByDeclaration = isCovariantByDeclaration;
|
||||
this.isLate = isLate;
|
||||
this.isRequired = isRequired;
|
||||
this.isLowered = isLowered;
|
||||
this.hasDeclaredInitializer = hasDeclaredInitializer;
|
||||
this.isSynthesized = isSynthesized;
|
||||
this.isHoisted = isHoisted;
|
||||
this.isWildcard = isWildcard;
|
||||
}
|
||||
assert(
|
||||
_name != null || this.isSynthesized,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
}
|
||||
|
||||
/// Creates a synthetic variable with the given expression as initializer.
|
||||
LegacyVariable.forValue(
|
||||
this.initializer, {
|
||||
bool isFinal = true,
|
||||
bool isConst = false,
|
||||
bool isInitializingFormal = false,
|
||||
bool isSuperInitializingFormal = false,
|
||||
bool isLate = false,
|
||||
bool isRequired = false,
|
||||
bool isLowered = false,
|
||||
this.type = const DynamicType(),
|
||||
}) {
|
||||
initializer?.parent = this;
|
||||
this.isFinal = isFinal;
|
||||
this.isConst = isConst;
|
||||
this.isInitializingFormal = isInitializingFormal;
|
||||
this.isSuperInitializingFormal = isSuperInitializingFormal;
|
||||
this.isLate = isLate;
|
||||
this.isRequired = isRequired;
|
||||
this.isLowered = isLowered;
|
||||
this.hasDeclaredInitializer = true;
|
||||
this.isSynthesized = true;
|
||||
}
|
||||
|
||||
/// The name of the variable as provided in the source code.
|
||||
///
|
||||
/// The name of a variable can only be omitted if the variable is synthesized.
|
||||
/// Otherwise, its name is as provided in the source code.
|
||||
@override
|
||||
String? get name => _name;
|
||||
|
||||
@override
|
||||
void set name(String? value) {
|
||||
assert(
|
||||
value != null || isSynthesized,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
_name = value;
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
List<VariableContext>? get capturedContexts {
|
||||
throw new UnsupportedError("${this.runtimeType}.capturedContexts");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
void set capturedContexts(List<VariableContext>? value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.capturedContexts=");
|
||||
}
|
||||
|
||||
static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
|
||||
static const int FlagConst = 1 << 1;
|
||||
static const int FlagHasDeclaredInitializer = 1 << 2;
|
||||
static const int FlagInitializingFormal = 1 << 3;
|
||||
static const int FlagCovariantByClass = 1 << 4;
|
||||
static const int FlagLate = 1 << 5;
|
||||
static const int FlagRequired = 1 << 6;
|
||||
static const int FlagCovariantByDeclaration = 1 << 7;
|
||||
static const int FlagLowered = 1 << 8;
|
||||
static const int FlagSynthesized = 1 << 9;
|
||||
static const int FlagHoisted = 1 << 10;
|
||||
static const int FlagWildcard = 1 << 11;
|
||||
static const int FlagSuperInitializingFormal = 1 << 12;
|
||||
static const int FlagErroneouslyInitialized = 1 << 13;
|
||||
|
||||
/// Whether the variable is declared with the `final` keyword.
|
||||
@override
|
||||
bool get isFinal => flags & FlagFinal != 0;
|
||||
|
||||
/// Whether the variable is declared with the `const` keyword.
|
||||
@override
|
||||
bool get isConst => flags & FlagConst != 0;
|
||||
|
||||
/// Whether the parameter is declared with the `covariant` keyword.
|
||||
@override
|
||||
bool get isCovariantByDeclaration => flags & FlagCovariantByDeclaration != 0;
|
||||
|
||||
/// Whether the variable is declared as an initializing formal parameter of
|
||||
/// a constructor.
|
||||
@informative
|
||||
@override
|
||||
bool get isInitializingFormal => flags & FlagInitializingFormal != 0;
|
||||
|
||||
/// Whether the variable is declared as a super initializing formal parameter
|
||||
/// of a constructor.
|
||||
@informative
|
||||
@override
|
||||
bool get isSuperInitializingFormal =>
|
||||
flags & FlagSuperInitializingFormal != 0;
|
||||
|
||||
@informative
|
||||
@override
|
||||
bool get isErroneouslyInitialized => flags & FlagErroneouslyInitialized != 0;
|
||||
|
||||
/// If this [LegacyVariable] is a parameter of a method, indicates
|
||||
/// whether the method implementation needs to contain a runtime type check to
|
||||
/// deal with generic covariance.
|
||||
///
|
||||
/// When `true`, runtime checks may need to be performed.
|
||||
@override
|
||||
bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
|
||||
|
||||
/// Whether the variable is declared with the `late` keyword.
|
||||
///
|
||||
/// The `late` modifier is only supported on local variables and not on
|
||||
/// parameters.
|
||||
@override
|
||||
bool get isLate => flags & FlagLate != 0;
|
||||
|
||||
/// Whether the parameter is declared with the `required` keyword.
|
||||
///
|
||||
/// The `required` modifier is only supported on named parameters and not on
|
||||
/// positional parameters and local variables.
|
||||
@override
|
||||
bool get isRequired => flags & FlagRequired != 0;
|
||||
|
||||
/// Whether the variable is part of a lowering.
|
||||
///
|
||||
/// If a variable is part of a lowering its name may be synthesized so that it
|
||||
/// doesn't reflect the name used in the source code and might not have a
|
||||
/// one-to-one correspondence with the variable in the source.
|
||||
///
|
||||
/// Lowering is used for instance of encoding of 'this' in extension instance
|
||||
/// members and encoding of late locals.
|
||||
@override
|
||||
bool get isLowered => flags & FlagLowered != 0;
|
||||
|
||||
/// Whether this variable is synthesized, that is, it is _not_ declared in
|
||||
/// the source code.
|
||||
///
|
||||
/// The name of a variable can only be omitted if the variable is synthesized.
|
||||
/// Otherwise, its name is as provided in the source code.
|
||||
@override
|
||||
bool get isSynthesized => flags & FlagSynthesized != 0;
|
||||
|
||||
/// Whether the declaration of this variable is has been moved to an earlier
|
||||
/// source location.
|
||||
///
|
||||
/// This is for instance the case for variables declared in a pattern, where
|
||||
/// the lowering requires the variable to be declared before the expression
|
||||
/// that performs that matching in which its initialization occurs.
|
||||
@override
|
||||
bool get isHoisted => flags & FlagHoisted != 0;
|
||||
|
||||
/// Whether the variable has an initializer, either by declaration or copied
|
||||
/// from an original declaration.
|
||||
///
|
||||
/// Note that the variable might have a synthesized initializer expression,
|
||||
/// so `hasDeclaredInitializer == false` doesn't imply `initializer == null`.
|
||||
/// For instance, for duplicate variable names, an invalid expression is set
|
||||
/// as the initializer of the second variable.
|
||||
@override
|
||||
bool get hasDeclaredInitializer => flags & FlagHasDeclaredInitializer != 0;
|
||||
|
||||
@override
|
||||
bool get isWildcard => flags & FlagWildcard != 0;
|
||||
|
||||
/// Whether the variable is assignable.
|
||||
///
|
||||
/// This is `true` if the variable is neither constant nor final, or if it
|
||||
/// is late final without an initializer.
|
||||
@override
|
||||
bool get isAssignable {
|
||||
if (isConst) return false;
|
||||
if (isFinal) {
|
||||
if (isLate) return initializer == null;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
void set isFinal(bool value) {
|
||||
flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isConst(bool value) {
|
||||
flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isCovariantByDeclaration(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagCovariantByDeclaration)
|
||||
: (flags & ~FlagCovariantByDeclaration);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isInitializingFormal(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagInitializingFormal)
|
||||
: (flags & ~FlagInitializingFormal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isSuperInitializingFormal(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagSuperInitializingFormal)
|
||||
: (flags & ~FlagSuperInitializingFormal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isErroneouslyInitialized(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagErroneouslyInitialized)
|
||||
: (flags & ~FlagErroneouslyInitialized);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isCovariantByClass(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagCovariantByClass)
|
||||
: (flags & ~FlagCovariantByClass);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isLate(bool value) {
|
||||
flags = value ? (flags | FlagLate) : (flags & ~FlagLate);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isRequired(bool value) {
|
||||
flags = value ? (flags | FlagRequired) : (flags & ~FlagRequired);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isLowered(bool value) {
|
||||
flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isSynthesized(bool value) {
|
||||
assert(
|
||||
value || _name != null,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
flags = value ? (flags | FlagSynthesized) : (flags & ~FlagSynthesized);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isHoisted(bool value) {
|
||||
flags = value ? (flags | FlagHoisted) : (flags & ~FlagHoisted);
|
||||
}
|
||||
|
||||
@override
|
||||
void set hasDeclaredInitializer(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagHasDeclaredInitializer)
|
||||
: (flags & ~FlagHasDeclaredInitializer);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isWildcard(bool value) {
|
||||
// TODO(kallentu): Change the name to be unique with other wildcard
|
||||
// variables.
|
||||
flags = value ? (flags | FlagWildcard) : (flags & ~FlagWildcard);
|
||||
}
|
||||
|
||||
@override
|
||||
void clearAnnotations() {
|
||||
annotations = const <Expression>[];
|
||||
}
|
||||
|
||||
@override
|
||||
void addAnnotation(Expression annotation) {
|
||||
if (annotations.isEmpty) {
|
||||
annotations = <Expression>[];
|
||||
}
|
||||
annotations.add(annotation..parent = this);
|
||||
}
|
||||
|
||||
@override
|
||||
R accept<R>(VariableVisitor<R> v) => v.visitLegacyVariable(this);
|
||||
|
||||
@override
|
||||
R accept1<R, A>(VariableVisitor1<R, A> v, A arg) =>
|
||||
v.visitLegacyVariable(this, arg);
|
||||
|
||||
@override
|
||||
void visitChildren(Visitor v) {
|
||||
visitList(annotations, v);
|
||||
type.accept(v);
|
||||
initializer?.accept(v);
|
||||
}
|
||||
|
||||
@override
|
||||
void transformChildren(Transformer v) {
|
||||
v.transformList(annotations, this);
|
||||
type = v.visitDartType(type);
|
||||
if (initializer != null) {
|
||||
initializer = v.transform(initializer!);
|
||||
initializer?.parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void transformOrRemoveChildren(RemovingTransformer v) {
|
||||
v.transformExpressionList(annotations, this);
|
||||
type = v.visitDartType(type, cannotRemoveSentinel);
|
||||
if (initializer != null) {
|
||||
initializer = v.transformOrRemoveExpression(initializer!);
|
||||
initializer?.parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a possibly synthesized name for this variable, consistent with
|
||||
/// the names used across all [toString] calls.
|
||||
@override
|
||||
String toString() {
|
||||
return "VariableDeclaration(${toStringInternal()})";
|
||||
}
|
||||
|
||||
@override
|
||||
String toStringInternal() {
|
||||
AstPrinter printer = new AstPrinter(defaultAstTextStrategy);
|
||||
printer.writeVariableInitialization(this, includeInitializer: false);
|
||||
return printer.getText();
|
||||
}
|
||||
|
||||
@override
|
||||
void toTextInternal(AstPrinter printer) {
|
||||
printer.writeVariableInitialization(this);
|
||||
printer.write(';');
|
||||
}
|
||||
|
||||
@override
|
||||
String? get cosmeticName => name;
|
||||
|
||||
@override
|
||||
void set cosmeticName(String? value) {
|
||||
name = value;
|
||||
}
|
||||
|
||||
@override
|
||||
VariableInitialization? get variableInitialization {
|
||||
throw new UnsupportedError("${this.runtimeType}.variableInitialization");
|
||||
}
|
||||
|
||||
@override
|
||||
void set variableInitialization(VariableInitialization? value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.variableInitialization");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
VariableContext? get context {
|
||||
throw new UnsupportedError("${this.runtimeType}.context");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
void set context(VariableContext value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.context=");
|
||||
}
|
||||
|
||||
@override
|
||||
Variable get asVariableDeclaration => this;
|
||||
|
||||
@override
|
||||
Variable get variable => this;
|
||||
|
||||
@override
|
||||
void set variable(Variable value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.variable=");
|
||||
}
|
||||
|
||||
@override
|
||||
bool get hasHasDeclaredInitializer => true;
|
||||
|
||||
@override
|
||||
bool get hasIsConst => true;
|
||||
|
||||
@override
|
||||
bool get hasIsCovariantByClass => true;
|
||||
|
||||
@override
|
||||
bool get hasIsCovariantByDeclaration => true;
|
||||
|
||||
@override
|
||||
bool get hasIsErroneouslyInitialized => true;
|
||||
|
||||
@override
|
||||
bool get hasIsFinal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsHoisted => true;
|
||||
|
||||
@override
|
||||
bool get hasIsInitializingFormal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsLate => true;
|
||||
|
||||
@override
|
||||
bool get hasIsLowered => true;
|
||||
|
||||
@override
|
||||
bool get hasIsRequired => true;
|
||||
|
||||
@override
|
||||
bool get hasIsSuperInitializingFormal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsSynthesized => true;
|
||||
|
||||
@override
|
||||
bool get hasIsWildcard => true;
|
||||
}
|
||||
|
||||
/// Declaration of a local variable.
|
||||
abstract class VariableStatement extends Statement {
|
||||
/// The declared variable.
|
||||
|
||||
@@ -200,6 +200,510 @@ sealed class Variable extends VariableBase
|
||||
R accept1<R, A>(VariableVisitor1<R, A> visitor, A arg);
|
||||
}
|
||||
|
||||
/// Declaration of a local variable.
|
||||
///
|
||||
/// This may occur as a statement, but is also used in several non-statement
|
||||
/// contexts, such as in [ForStatement], [Catch], and [FunctionNode].
|
||||
///
|
||||
/// When this occurs as a statement, it must be a direct child of a [Block].
|
||||
//
|
||||
// DESIGN TODO: Should we remove the 'final' modifier from variables?
|
||||
class LegacyVariable extends TreeNode implements Variable, Annotatable {
|
||||
/// Offset of the equals sign in the source file it comes from.
|
||||
///
|
||||
/// Valid values are from 0 and up, or -1 ([TreeNode.noOffset])
|
||||
/// if the equals sign offset is not available (e.g. if not initialized)
|
||||
/// (this is the default if none is specifically set).
|
||||
@override
|
||||
int fileEqualsOffset = TreeNode.noOffset;
|
||||
|
||||
@override
|
||||
List<int>? get fileOffsetsIfMultiple => [fileOffset, fileEqualsOffset];
|
||||
|
||||
/// List of metadata annotations on the variable declaration.
|
||||
///
|
||||
/// This defaults to an immutable empty list. Use [addAnnotation] to add
|
||||
/// annotations if needed.
|
||||
@override
|
||||
List<Expression> annotations = const <Expression>[];
|
||||
|
||||
/// The name of the variable or parameter as provided in the source code.
|
||||
///
|
||||
/// If this variable is synthesized, for instance the variable of a [Let]
|
||||
/// expression, the name can be `null`.
|
||||
String? _name;
|
||||
|
||||
@override
|
||||
int flags = 0;
|
||||
|
||||
/// The declared or inferred type of the variable.
|
||||
@override
|
||||
DartType type; // Not null, defaults to dynamic.
|
||||
|
||||
/// Offset of the declaration, set and used when writing the binary.
|
||||
@override
|
||||
int binaryOffsetNoTag = -1;
|
||||
|
||||
/// For locals, this is the initial value.
|
||||
/// For parameters, this is the default value.
|
||||
///
|
||||
/// Should be null in other cases.
|
||||
@override
|
||||
Expression? initializer; // May be null.
|
||||
|
||||
LegacyVariable(
|
||||
this._name, {
|
||||
this.initializer,
|
||||
this.type = const DynamicType(),
|
||||
int flags = -1,
|
||||
bool isFinal = false,
|
||||
bool isConst = false,
|
||||
bool isInitializingFormal = false,
|
||||
bool isSuperInitializingFormal = false,
|
||||
bool isCovariantByDeclaration = false,
|
||||
bool isLate = false,
|
||||
bool isRequired = false,
|
||||
bool isLowered = false,
|
||||
bool isSynthesized = false,
|
||||
bool isHoisted = false,
|
||||
bool hasDeclaredInitializer = false,
|
||||
bool isWildcard = false,
|
||||
}) {
|
||||
initializer?.parent = this;
|
||||
if (flags != -1) {
|
||||
this.flags = flags;
|
||||
} else {
|
||||
this.isFinal = isFinal;
|
||||
this.isConst = isConst;
|
||||
this.isInitializingFormal = isInitializingFormal;
|
||||
this.isSuperInitializingFormal = isSuperInitializingFormal;
|
||||
this.isCovariantByDeclaration = isCovariantByDeclaration;
|
||||
this.isLate = isLate;
|
||||
this.isRequired = isRequired;
|
||||
this.isLowered = isLowered;
|
||||
this.hasDeclaredInitializer = hasDeclaredInitializer;
|
||||
this.isSynthesized = isSynthesized;
|
||||
this.isHoisted = isHoisted;
|
||||
this.isWildcard = isWildcard;
|
||||
}
|
||||
assert(
|
||||
_name != null || this.isSynthesized,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
}
|
||||
|
||||
/// Creates a synthetic variable with the given expression as initializer.
|
||||
LegacyVariable.forValue(
|
||||
this.initializer, {
|
||||
bool isFinal = true,
|
||||
bool isConst = false,
|
||||
bool isInitializingFormal = false,
|
||||
bool isSuperInitializingFormal = false,
|
||||
bool isLate = false,
|
||||
bool isRequired = false,
|
||||
bool isLowered = false,
|
||||
this.type = const DynamicType(),
|
||||
}) {
|
||||
initializer?.parent = this;
|
||||
this.isFinal = isFinal;
|
||||
this.isConst = isConst;
|
||||
this.isInitializingFormal = isInitializingFormal;
|
||||
this.isSuperInitializingFormal = isSuperInitializingFormal;
|
||||
this.isLate = isLate;
|
||||
this.isRequired = isRequired;
|
||||
this.isLowered = isLowered;
|
||||
this.hasDeclaredInitializer = true;
|
||||
this.isSynthesized = true;
|
||||
}
|
||||
|
||||
/// The name of the variable as provided in the source code.
|
||||
///
|
||||
/// The name of a variable can only be omitted if the variable is synthesized.
|
||||
/// Otherwise, its name is as provided in the source code.
|
||||
@override
|
||||
String? get name => _name;
|
||||
|
||||
@override
|
||||
void set name(String? value) {
|
||||
assert(
|
||||
value != null || isSynthesized,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
_name = value;
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
List<VariableContext>? get capturedContexts {
|
||||
throw new UnsupportedError("${this.runtimeType}.capturedContexts");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [VariableDeclaration] interface. Remove this.
|
||||
void set capturedContexts(List<VariableContext>? value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.capturedContexts=");
|
||||
}
|
||||
|
||||
static const int FlagFinal = 1 << 0; // Must match serialized bit positions.
|
||||
static const int FlagConst = 1 << 1;
|
||||
static const int FlagHasDeclaredInitializer = 1 << 2;
|
||||
static const int FlagInitializingFormal = 1 << 3;
|
||||
static const int FlagCovariantByClass = 1 << 4;
|
||||
static const int FlagLate = 1 << 5;
|
||||
static const int FlagRequired = 1 << 6;
|
||||
static const int FlagCovariantByDeclaration = 1 << 7;
|
||||
static const int FlagLowered = 1 << 8;
|
||||
static const int FlagSynthesized = 1 << 9;
|
||||
static const int FlagHoisted = 1 << 10;
|
||||
static const int FlagWildcard = 1 << 11;
|
||||
static const int FlagSuperInitializingFormal = 1 << 12;
|
||||
static const int FlagErroneouslyInitialized = 1 << 13;
|
||||
|
||||
/// Whether the variable is declared with the `final` keyword.
|
||||
@override
|
||||
bool get isFinal => flags & FlagFinal != 0;
|
||||
|
||||
/// Whether the variable is declared with the `const` keyword.
|
||||
@override
|
||||
bool get isConst => flags & FlagConst != 0;
|
||||
|
||||
/// Whether the parameter is declared with the `covariant` keyword.
|
||||
@override
|
||||
bool get isCovariantByDeclaration => flags & FlagCovariantByDeclaration != 0;
|
||||
|
||||
/// Whether the variable is declared as an initializing formal parameter of
|
||||
/// a constructor.
|
||||
@informative
|
||||
@override
|
||||
bool get isInitializingFormal => flags & FlagInitializingFormal != 0;
|
||||
|
||||
/// Whether the variable is declared as a super initializing formal parameter
|
||||
/// of a constructor.
|
||||
@informative
|
||||
@override
|
||||
bool get isSuperInitializingFormal =>
|
||||
flags & FlagSuperInitializingFormal != 0;
|
||||
|
||||
@informative
|
||||
@override
|
||||
bool get isErroneouslyInitialized => flags & FlagErroneouslyInitialized != 0;
|
||||
|
||||
/// If this [LegacyVariable] is a parameter of a method, indicates
|
||||
/// whether the method implementation needs to contain a runtime type check to
|
||||
/// deal with generic covariance.
|
||||
///
|
||||
/// When `true`, runtime checks may need to be performed.
|
||||
@override
|
||||
bool get isCovariantByClass => flags & FlagCovariantByClass != 0;
|
||||
|
||||
/// Whether the variable is declared with the `late` keyword.
|
||||
///
|
||||
/// The `late` modifier is only supported on local variables and not on
|
||||
/// parameters.
|
||||
@override
|
||||
bool get isLate => flags & FlagLate != 0;
|
||||
|
||||
/// Whether the parameter is declared with the `required` keyword.
|
||||
///
|
||||
/// The `required` modifier is only supported on named parameters and not on
|
||||
/// positional parameters and local variables.
|
||||
@override
|
||||
bool get isRequired => flags & FlagRequired != 0;
|
||||
|
||||
/// Whether the variable is part of a lowering.
|
||||
///
|
||||
/// If a variable is part of a lowering its name may be synthesized so that it
|
||||
/// doesn't reflect the name used in the source code and might not have a
|
||||
/// one-to-one correspondence with the variable in the source.
|
||||
///
|
||||
/// Lowering is used for instance of encoding of 'this' in extension instance
|
||||
/// members and encoding of late locals.
|
||||
@override
|
||||
bool get isLowered => flags & FlagLowered != 0;
|
||||
|
||||
/// Whether this variable is synthesized, that is, it is _not_ declared in
|
||||
/// the source code.
|
||||
///
|
||||
/// The name of a variable can only be omitted if the variable is synthesized.
|
||||
/// Otherwise, its name is as provided in the source code.
|
||||
@override
|
||||
bool get isSynthesized => flags & FlagSynthesized != 0;
|
||||
|
||||
/// Whether the declaration of this variable is has been moved to an earlier
|
||||
/// source location.
|
||||
///
|
||||
/// This is for instance the case for variables declared in a pattern, where
|
||||
/// the lowering requires the variable to be declared before the expression
|
||||
/// that performs that matching in which its initialization occurs.
|
||||
@override
|
||||
bool get isHoisted => flags & FlagHoisted != 0;
|
||||
|
||||
/// Whether the variable has an initializer, either by declaration or copied
|
||||
/// from an original declaration.
|
||||
///
|
||||
/// Note that the variable might have a synthesized initializer expression,
|
||||
/// so `hasDeclaredInitializer == false` doesn't imply `initializer == null`.
|
||||
/// For instance, for duplicate variable names, an invalid expression is set
|
||||
/// as the initializer of the second variable.
|
||||
@override
|
||||
bool get hasDeclaredInitializer => flags & FlagHasDeclaredInitializer != 0;
|
||||
|
||||
@override
|
||||
bool get isWildcard => flags & FlagWildcard != 0;
|
||||
|
||||
/// Whether the variable is assignable.
|
||||
///
|
||||
/// This is `true` if the variable is neither constant nor final, or if it
|
||||
/// is late final without an initializer.
|
||||
@override
|
||||
bool get isAssignable {
|
||||
if (isConst) return false;
|
||||
if (isFinal) {
|
||||
if (isLate) return initializer == null;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
void set isFinal(bool value) {
|
||||
flags = value ? (flags | FlagFinal) : (flags & ~FlagFinal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isConst(bool value) {
|
||||
flags = value ? (flags | FlagConst) : (flags & ~FlagConst);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isCovariantByDeclaration(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagCovariantByDeclaration)
|
||||
: (flags & ~FlagCovariantByDeclaration);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isInitializingFormal(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagInitializingFormal)
|
||||
: (flags & ~FlagInitializingFormal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isSuperInitializingFormal(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagSuperInitializingFormal)
|
||||
: (flags & ~FlagSuperInitializingFormal);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isErroneouslyInitialized(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagErroneouslyInitialized)
|
||||
: (flags & ~FlagErroneouslyInitialized);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isCovariantByClass(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagCovariantByClass)
|
||||
: (flags & ~FlagCovariantByClass);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isLate(bool value) {
|
||||
flags = value ? (flags | FlagLate) : (flags & ~FlagLate);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isRequired(bool value) {
|
||||
flags = value ? (flags | FlagRequired) : (flags & ~FlagRequired);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isLowered(bool value) {
|
||||
flags = value ? (flags | FlagLowered) : (flags & ~FlagLowered);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isSynthesized(bool value) {
|
||||
assert(
|
||||
value || _name != null,
|
||||
"Only synthesized variables can have no name.",
|
||||
);
|
||||
flags = value ? (flags | FlagSynthesized) : (flags & ~FlagSynthesized);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isHoisted(bool value) {
|
||||
flags = value ? (flags | FlagHoisted) : (flags & ~FlagHoisted);
|
||||
}
|
||||
|
||||
@override
|
||||
void set hasDeclaredInitializer(bool value) {
|
||||
flags = value
|
||||
? (flags | FlagHasDeclaredInitializer)
|
||||
: (flags & ~FlagHasDeclaredInitializer);
|
||||
}
|
||||
|
||||
@override
|
||||
void set isWildcard(bool value) {
|
||||
// TODO(kallentu): Change the name to be unique with other wildcard
|
||||
// variables.
|
||||
flags = value ? (flags | FlagWildcard) : (flags & ~FlagWildcard);
|
||||
}
|
||||
|
||||
@override
|
||||
void clearAnnotations() {
|
||||
annotations = const <Expression>[];
|
||||
}
|
||||
|
||||
@override
|
||||
void addAnnotation(Expression annotation) {
|
||||
if (annotations.isEmpty) {
|
||||
annotations = <Expression>[];
|
||||
}
|
||||
annotations.add(annotation..parent = this);
|
||||
}
|
||||
|
||||
@override
|
||||
R accept<R>(VariableVisitor<R> v) => v.visitLegacyVariable(this);
|
||||
|
||||
@override
|
||||
R accept1<R, A>(VariableVisitor1<R, A> v, A arg) =>
|
||||
v.visitLegacyVariable(this, arg);
|
||||
|
||||
@override
|
||||
void visitChildren(Visitor v) {
|
||||
visitList(annotations, v);
|
||||
type.accept(v);
|
||||
initializer?.accept(v);
|
||||
}
|
||||
|
||||
@override
|
||||
void transformChildren(Transformer v) {
|
||||
v.transformList(annotations, this);
|
||||
type = v.visitDartType(type);
|
||||
if (initializer != null) {
|
||||
initializer = v.transform(initializer!);
|
||||
initializer?.parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void transformOrRemoveChildren(RemovingTransformer v) {
|
||||
v.transformExpressionList(annotations, this);
|
||||
type = v.visitDartType(type, cannotRemoveSentinel);
|
||||
if (initializer != null) {
|
||||
initializer = v.transformOrRemoveExpression(initializer!);
|
||||
initializer?.parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns a possibly synthesized name for this variable, consistent with
|
||||
/// the names used across all [toString] calls.
|
||||
@override
|
||||
String toString() {
|
||||
return "VariableDeclaration(${toStringInternal()})";
|
||||
}
|
||||
|
||||
@override
|
||||
String toStringInternal() {
|
||||
AstPrinter printer = new AstPrinter(defaultAstTextStrategy);
|
||||
printer.writeVariableInitialization(this, includeInitializer: false);
|
||||
return printer.getText();
|
||||
}
|
||||
|
||||
@override
|
||||
void toTextInternal(AstPrinter printer) {
|
||||
printer.writeVariableInitialization(this);
|
||||
printer.write(';');
|
||||
}
|
||||
|
||||
@override
|
||||
String? get cosmeticName => name;
|
||||
|
||||
@override
|
||||
void set cosmeticName(String? value) {
|
||||
name = value;
|
||||
}
|
||||
|
||||
@override
|
||||
VariableInitialization? get variableInitialization {
|
||||
throw new UnsupportedError("${this.runtimeType}.variableInitialization");
|
||||
}
|
||||
|
||||
@override
|
||||
void set variableInitialization(VariableInitialization? value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.variableInitialization");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [Variable] interface. Remove this.
|
||||
VariableContext? get context {
|
||||
throw new UnsupportedError("${this.runtimeType}.context");
|
||||
}
|
||||
|
||||
@override
|
||||
// TODO(62620): Conforming to [Variable] interface. Remove this.
|
||||
void set context(VariableContext? value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.context=");
|
||||
}
|
||||
|
||||
@override
|
||||
Variable get asVariableDeclaration => this;
|
||||
|
||||
@override
|
||||
Variable get variable => this;
|
||||
|
||||
@override
|
||||
void set variable(Variable value) {
|
||||
throw new UnsupportedError("${this.runtimeType}.variable=");
|
||||
}
|
||||
|
||||
@override
|
||||
bool get hasHasDeclaredInitializer => true;
|
||||
|
||||
@override
|
||||
bool get hasIsConst => true;
|
||||
|
||||
@override
|
||||
bool get hasIsCovariantByClass => true;
|
||||
|
||||
@override
|
||||
bool get hasIsCovariantByDeclaration => true;
|
||||
|
||||
@override
|
||||
bool get hasIsErroneouslyInitialized => true;
|
||||
|
||||
@override
|
||||
bool get hasIsFinal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsHoisted => true;
|
||||
|
||||
@override
|
||||
bool get hasIsInitializingFormal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsLate => true;
|
||||
|
||||
@override
|
||||
bool get hasIsLowered => true;
|
||||
|
||||
@override
|
||||
bool get hasIsRequired => true;
|
||||
|
||||
@override
|
||||
bool get hasIsSuperInitializingFormal => true;
|
||||
|
||||
@override
|
||||
bool get hasIsSynthesized => true;
|
||||
|
||||
@override
|
||||
bool get hasIsWildcard => true;
|
||||
}
|
||||
|
||||
/// Local variables. They aren't Statements. A [LocalVariable] is "declared" in
|
||||
/// the [VariableContext] it appears in. [VariableInitializationBase]
|
||||
/// (which is a [Statement]) marks the spot of the original variable declaration
|
||||
|
||||
@@ -986,8 +986,14 @@ class CoverageVisitor implements Visitor<void> {
|
||||
}
|
||||
|
||||
@override
|
||||
void visitLegacyVariable(LegacyVariable node) {
|
||||
visited.add(NodeKind.LegacyVariable);
|
||||
void visitNominalParameter(NominalParameter node) {
|
||||
visited.add(NodeKind.NominalParameter);
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitTypeVariable(TypeVariable node) {
|
||||
visited.add(NodeKind.TypeVariable);
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@@ -1028,14 +1034,8 @@ class CoverageVisitor implements Visitor<void> {
|
||||
}
|
||||
|
||||
@override
|
||||
void visitTypeVariable(TypeVariable node) {
|
||||
visited.add(NodeKind.TypeVariable);
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
void visitNominalParameter(NominalParameter node) {
|
||||
visited.add(NodeKind.NominalParameter);
|
||||
void visitLegacyVariable(LegacyVariable node) {
|
||||
visited.add(NodeKind.LegacyVariable);
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
|
||||
+217
-217
@@ -861,8 +861,13 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
|
||||
}
|
||||
|
||||
@override
|
||||
bool visitLegacyVariable(LegacyVariable node, Node other) {
|
||||
return strategy.checkLegacyVariable(this, node, other);
|
||||
bool visitNominalParameter(NominalParameter node, Node other) {
|
||||
return strategy.checkNominalParameter(this, node, other);
|
||||
}
|
||||
|
||||
@override
|
||||
bool visitTypeVariable(TypeVariable node, Node other) {
|
||||
return strategy.checkTypeVariable(this, node, other);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -896,13 +901,8 @@ class EquivalenceVisitor implements Visitor1<bool, Node> {
|
||||
}
|
||||
|
||||
@override
|
||||
bool visitTypeVariable(TypeVariable node, Node other) {
|
||||
return strategy.checkTypeVariable(this, node, other);
|
||||
}
|
||||
|
||||
@override
|
||||
bool visitNominalParameter(NominalParameter node, Node other) {
|
||||
return strategy.checkNominalParameter(this, node, other);
|
||||
bool visitLegacyVariable(LegacyVariable node, Node other) {
|
||||
return strategy.checkLegacyVariable(this, node, other);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -6035,41 +6035,67 @@ class EquivalenceStrategy {
|
||||
return result;
|
||||
}
|
||||
|
||||
bool checkLegacyVariable(
|
||||
bool checkNominalParameter(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable? node,
|
||||
NominalParameter? node,
|
||||
Object? other,
|
||||
) {
|
||||
if (identical(node, other)) return true;
|
||||
if (node is! LegacyVariable) return false;
|
||||
if (other is! LegacyVariable) return false;
|
||||
if (!visitor.checkDeclarations(node, other, '')) {
|
||||
return false;
|
||||
}
|
||||
if (node is! NominalParameter) return false;
|
||||
if (other is! NominalParameter) return false;
|
||||
visitor.pushNodeState(node, other);
|
||||
bool result = true;
|
||||
if (!checkLegacyVariable_fileEqualsOffset(visitor, node, other)) {
|
||||
if (!checkNominalParameter_flags(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_annotations(visitor, node, other)) {
|
||||
if (!checkNominalParameter_annotations(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_name(visitor, node, other)) {
|
||||
if (!checkNominalParameter_name(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_flags(visitor, node, other)) {
|
||||
if (!checkNominalParameter_bound(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_type(visitor, node, other)) {
|
||||
if (!checkNominalParameter_defaultType(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_binaryOffsetNoTag(visitor, node, other)) {
|
||||
if (!checkNominalParameter_variance(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_initializer(visitor, node, other)) {
|
||||
if (!checkNominalParameter_fileOffset(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkLegacyVariable_fileOffset(visitor, node, other)) {
|
||||
visitor.popState();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool checkTypeVariable(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable? node,
|
||||
Object? other,
|
||||
) {
|
||||
if (identical(node, other)) return true;
|
||||
if (node is! TypeVariable) return false;
|
||||
if (other is! TypeVariable) return false;
|
||||
visitor.pushNodeState(node, other);
|
||||
bool result = true;
|
||||
if (!checkTypeVariable_cosmeticName(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_parameter(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_annotations(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_context(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_flags(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_fileOffset(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
visitor.popState();
|
||||
@@ -6313,67 +6339,41 @@ class EquivalenceStrategy {
|
||||
return result;
|
||||
}
|
||||
|
||||
bool checkTypeVariable(
|
||||
bool checkLegacyVariable(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable? node,
|
||||
LegacyVariable? node,
|
||||
Object? other,
|
||||
) {
|
||||
if (identical(node, other)) return true;
|
||||
if (node is! TypeVariable) return false;
|
||||
if (other is! TypeVariable) return false;
|
||||
if (node is! LegacyVariable) return false;
|
||||
if (other is! LegacyVariable) return false;
|
||||
if (!visitor.checkDeclarations(node, other, '')) {
|
||||
return false;
|
||||
}
|
||||
visitor.pushNodeState(node, other);
|
||||
bool result = true;
|
||||
if (!checkTypeVariable_cosmeticName(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_fileEqualsOffset(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_parameter(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_annotations(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_annotations(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_name(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_context(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_flags(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_flags(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_type(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkTypeVariable_fileOffset(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_binaryOffsetNoTag(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
visitor.popState();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool checkNominalParameter(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter? node,
|
||||
Object? other,
|
||||
) {
|
||||
if (identical(node, other)) return true;
|
||||
if (node is! NominalParameter) return false;
|
||||
if (other is! NominalParameter) return false;
|
||||
visitor.pushNodeState(node, other);
|
||||
bool result = true;
|
||||
if (!checkNominalParameter_flags(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_initializer(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_annotations(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_name(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_bound(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_defaultType(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_variance(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
if (!checkNominalParameter_fileOffset(visitor, node, other)) {
|
||||
if (!checkLegacyVariable_fileOffset(visitor, node, other)) {
|
||||
result = visitor.resultOnInequivalence;
|
||||
}
|
||||
visitor.popState();
|
||||
@@ -13447,22 +13447,18 @@ class EquivalenceStrategy {
|
||||
return checkTreeNode_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_fileEqualsOffset(
|
||||
bool checkNominalParameter_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkValues(
|
||||
node.fileEqualsOffset,
|
||||
other.fileEqualsOffset,
|
||||
'fileEqualsOffset',
|
||||
);
|
||||
return visitor.checkValues(node.flags, other.flags, 'flags');
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_annotations(
|
||||
bool checkNominalParameter_annotations(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkLists(
|
||||
node.annotations,
|
||||
@@ -13472,62 +13468,128 @@ class EquivalenceStrategy {
|
||||
);
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_name(
|
||||
bool checkNominalParameter_name(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkValues(node.name, other.name, 'name');
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_flags(
|
||||
bool checkNominalParameter_bound(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkNodes(node.bound, other.bound, 'bound');
|
||||
}
|
||||
|
||||
bool checkNominalParameter_defaultType(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkNodes(
|
||||
node.defaultType,
|
||||
other.defaultType,
|
||||
'defaultType',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkNominalParameter_variance(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkValues(node.variance, other.variance, 'variance');
|
||||
}
|
||||
|
||||
bool checkNominalParameter_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return checkTreeNode_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_cosmeticName(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return visitor.checkValues(
|
||||
node.cosmeticName,
|
||||
other.cosmeticName,
|
||||
'cosmeticName',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_parameter(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return visitor.checkDeclarations(
|
||||
node.parameter,
|
||||
other.parameter,
|
||||
'parameter',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_annotations(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return visitor.checkLists(
|
||||
node.annotations,
|
||||
other.annotations,
|
||||
visitor.checkNodes,
|
||||
'annotations',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_context(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
'context';
|
||||
return checkVariableContext(visitor, node.context, other.context);
|
||||
}
|
||||
|
||||
bool checkVariableBase_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
VariableBase node,
|
||||
VariableBase other,
|
||||
) {
|
||||
return visitor.checkValues(node.flags, other.flags, 'flags');
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_type(
|
||||
bool checkTypeVariable_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return visitor.checkNodes(node.type, other.type, 'type');
|
||||
return checkVariableBase_flags(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_binaryOffsetNoTag(
|
||||
bool checkVariableBase_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkValues(
|
||||
node.binaryOffsetNoTag,
|
||||
other.binaryOffsetNoTag,
|
||||
'binaryOffsetNoTag',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_initializer(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkNodes(
|
||||
node.initializer,
|
||||
other.initializer,
|
||||
'initializer',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
VariableBase node,
|
||||
VariableBase other,
|
||||
) {
|
||||
return checkTreeNode_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return checkVariableBase_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkLocalVariable_cosmeticName(
|
||||
EquivalenceVisitor visitor,
|
||||
LocalVariable node,
|
||||
@@ -13606,14 +13668,6 @@ class EquivalenceStrategy {
|
||||
);
|
||||
}
|
||||
|
||||
bool checkVariableBase_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
VariableBase node,
|
||||
VariableBase other,
|
||||
) {
|
||||
return visitor.checkValues(node.flags, other.flags, 'flags');
|
||||
}
|
||||
|
||||
bool checkVariable_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
Variable node,
|
||||
@@ -13630,14 +13684,6 @@ class EquivalenceStrategy {
|
||||
return checkVariable_flags(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkVariableBase_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
VariableBase node,
|
||||
VariableBase other,
|
||||
) {
|
||||
return checkTreeNode_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkVariable_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
Variable node,
|
||||
@@ -14108,34 +14154,22 @@ class EquivalenceStrategy {
|
||||
return checkVariable_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_cosmeticName(
|
||||
bool checkLegacyVariable_fileEqualsOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkValues(
|
||||
node.cosmeticName,
|
||||
other.cosmeticName,
|
||||
'cosmeticName',
|
||||
node.fileEqualsOffset,
|
||||
other.fileEqualsOffset,
|
||||
'fileEqualsOffset',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_parameter(
|
||||
bool checkLegacyVariable_annotations(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return visitor.checkDeclarations(
|
||||
node.parameter,
|
||||
other.parameter,
|
||||
'parameter',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_annotations(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkLists(
|
||||
node.annotations,
|
||||
@@ -14145,92 +14179,58 @@ class EquivalenceStrategy {
|
||||
);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_context(
|
||||
bool checkLegacyVariable_name(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
'context';
|
||||
return checkVariableContext(visitor, node.context, other.context);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return checkVariableBase_flags(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkTypeVariable_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
TypeVariable node,
|
||||
TypeVariable other,
|
||||
) {
|
||||
return checkVariableBase_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
bool checkNominalParameter_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkValues(node.flags, other.flags, 'flags');
|
||||
}
|
||||
|
||||
bool checkNominalParameter_annotations(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
) {
|
||||
return visitor.checkLists(
|
||||
node.annotations,
|
||||
other.annotations,
|
||||
visitor.checkNodes,
|
||||
'annotations',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkNominalParameter_name(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkValues(node.name, other.name, 'name');
|
||||
}
|
||||
|
||||
bool checkNominalParameter_bound(
|
||||
bool checkLegacyVariable_flags(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkNodes(node.bound, other.bound, 'bound');
|
||||
return visitor.checkValues(node.flags, other.flags, 'flags');
|
||||
}
|
||||
|
||||
bool checkNominalParameter_defaultType(
|
||||
bool checkLegacyVariable_type(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkNodes(
|
||||
node.defaultType,
|
||||
other.defaultType,
|
||||
'defaultType',
|
||||
return visitor.checkNodes(node.type, other.type, 'type');
|
||||
}
|
||||
|
||||
bool checkLegacyVariable_binaryOffsetNoTag(
|
||||
EquivalenceVisitor visitor,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkValues(
|
||||
node.binaryOffsetNoTag,
|
||||
other.binaryOffsetNoTag,
|
||||
'binaryOffsetNoTag',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkNominalParameter_variance(
|
||||
bool checkLegacyVariable_initializer(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return visitor.checkValues(node.variance, other.variance, 'variance');
|
||||
return visitor.checkNodes(
|
||||
node.initializer,
|
||||
other.initializer,
|
||||
'initializer',
|
||||
);
|
||||
}
|
||||
|
||||
bool checkNominalParameter_fileOffset(
|
||||
bool checkLegacyVariable_fileOffset(
|
||||
EquivalenceVisitor visitor,
|
||||
NominalParameter node,
|
||||
NominalParameter other,
|
||||
LegacyVariable node,
|
||||
LegacyVariable other,
|
||||
) {
|
||||
return checkTreeNode_fileOffset(visitor, node, other);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user