Version 2.15.0-65.0.dev
Merge commit '9ac299bb0d1c17471f36120e1da4d70688d9c1d0' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5f02905..1ab41b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,30 @@
This brings the implementation behavior in line with the spec.
+- Initializer expressions on implicitly typed condition variables can now
+ contribute to type promotion. For example, this program no longer produces a
+ compile-time error:
+
+ ```dart
+ f(int? i) {
+ var iIsNull = i == null;
+ if (!iIsNull) {
+ print(i + 1); // OK, because `i` is known to be non-null
+ }
+ }
+ ```
+
+ Previously, the above program had a compile-time error because type promotion
+ due to a bug ([#1785][]) which prevented the initializer expression (`i ==
+ null`) from being accounted for when the variable in question (`iIsNull`)
+ lacked an explicit type.
+
+ To avoid causing problems for packages that are intended to work with older
+ versions of Dart, the fix only takes effect when the "constructor tearoffs"
+ language feature is enabled.
+
+[#1785]: https://github.com/dart-lang/language/issues/1785
+
### Tools
#### Dart command line
diff --git a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
index b050ba3..55b94a9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/flow_analysis/flow_analysis.dart
@@ -368,8 +368,11 @@
abstract class FlowAnalysis<Node extends Object, Statement extends Node,
Expression extends Object, Variable extends Object, Type extends Object> {
factory FlowAnalysis(TypeOperations<Variable, Type> typeOperations,
- AssignedVariables<Node, Variable> assignedVariables) {
- return new _FlowAnalysisImpl(typeOperations, assignedVariables);
+ AssignedVariables<Node, Variable> assignedVariables,
+ {required bool respectImplicitlyTypedVarInitializers}) {
+ return new _FlowAnalysisImpl(typeOperations, assignedVariables,
+ respectImplicitlyTypedVarInitializers:
+ respectImplicitlyTypedVarInitializers);
}
factory FlowAnalysis.legacy(TypeOperations<Variable, Type> typeOperations,
@@ -634,7 +637,9 @@
/// Call this method after visiting the initializer of a variable declaration.
void initialize(
Variable variable, Type initializerType, Expression initializerExpression,
- {required bool isFinal, required bool isLate});
+ {required bool isFinal,
+ required bool isLate,
+ required bool isImplicitlyTyped});
/// Return whether the [variable] is definitely assigned in the current state.
bool isAssigned(Variable variable);
@@ -724,11 +729,6 @@
void parenthesizedExpression(
Expression outerExpression, Expression innerExpression);
- /// Attempt to promote [variable] to [type]. The client may use this to
- /// ensure that a variable declaration of the form `var x = expr;` promotes
- /// `x` to type `X&T` in the circumstance where the type of `expr` is `X&T`.
- void promote(Variable variable, Type type);
-
/// Retrieves the type that the [variable] is promoted to, if the [variable]
/// is currently promoted. Otherwise returns `null`.
Type? promotedType(Variable variable);
@@ -986,10 +986,13 @@
bool _exceptionOccurred = false;
factory FlowAnalysisDebug(TypeOperations<Variable, Type> typeOperations,
- AssignedVariables<Node, Variable> assignedVariables) {
+ AssignedVariables<Node, Variable> assignedVariables,
+ {required bool respectImplicitlyTypedVarInitializers}) {
print('FlowAnalysisDebug()');
- return new FlowAnalysisDebug._(
- new _FlowAnalysisImpl(typeOperations, assignedVariables));
+ return new FlowAnalysisDebug._(new _FlowAnalysisImpl(
+ typeOperations, assignedVariables,
+ respectImplicitlyTypedVarInitializers:
+ respectImplicitlyTypedVarInitializers));
}
factory FlowAnalysisDebug.legacy(
@@ -1225,13 +1228,18 @@
@override
void initialize(
Variable variable, Type initializerType, Expression initializerExpression,
- {required bool isFinal, required bool isLate}) {
+ {required bool isFinal,
+ required bool isLate,
+ required bool isImplicitlyTyped}) {
_wrap(
'initialize($variable, $initializerType, $initializerExpression, '
- 'isFinal: $isFinal, isLate: $isLate)',
+ 'isFinal: $isFinal, isLate: $isLate, '
+ 'isImplicitlyTyped: $isImplicitlyTyped)',
() => _wrapped.initialize(
variable, initializerType, initializerExpression,
- isFinal: isFinal, isLate: isLate));
+ isFinal: isFinal,
+ isLate: isLate,
+ isImplicitlyTyped: isImplicitlyTyped));
}
@override
@@ -1341,11 +1349,6 @@
}
@override
- void promote(Variable variable, Type type) {
- _wrap('promote($variable, $type', () => _wrapped.promote(variable, type));
- }
-
- @override
Type? promotedType(Variable variable) {
return _wrap(
'promotedType($variable)', () => _wrapped.promotedType(variable),
@@ -2059,12 +2062,14 @@
Variable variable,
Type writtenType,
SsaNode<Variable, Type> newSsaNode,
- TypeOperations<Variable, Type> typeOperations) {
+ TypeOperations<Variable, Type> typeOperations,
+ {bool promoteToTypeOfInterest = true}) {
VariableModel<Variable, Type>? infoForVar = variableInfo[variable];
if (infoForVar == null) return this;
VariableModel<Variable, Type> newInfoForVar = infoForVar.write(
- nonPromotionReason, variable, writtenType, typeOperations, newSsaNode);
+ nonPromotionReason, variable, writtenType, typeOperations, newSsaNode,
+ promoteToTypeOfInterest: promoteToTypeOfInterest);
if (identical(newInfoForVar, infoForVar)) return this;
return _updateVariableInfo(new VariableReference(variable), newInfoForVar);
@@ -2663,6 +2668,9 @@
/// Return `true` if the [leftType] is a subtype of the [rightType].
bool isSubtypeOf(Type leftType, Type rightType);
+ /// Returns `true` if [type] is a reference to a type parameter.
+ bool isTypeParameterType(Type type);
+
/// Returns the non-null promoted version of [type].
///
/// Note that some types don't have a non-nullable version (e.g.
@@ -2819,7 +2827,8 @@
Variable variable,
Type writtenType,
TypeOperations<Variable, Type> typeOperations,
- SsaNode<Variable, Type> newSsaNode) {
+ SsaNode<Variable, Type> newSsaNode,
+ {required bool promoteToTypeOfInterest}) {
if (writeCaptured) {
return new VariableModel<Variable, Type>(
promotedTypes: promotedTypes,
@@ -2834,8 +2843,10 @@
List<Type>? newPromotedTypes = demotionResult.promotedTypes;
Type declaredType = typeOperations.variableType(variable);
- newPromotedTypes = _tryPromoteToTypeOfInterest(
- typeOperations, declaredType, newPromotedTypes, writtenType);
+ if (promoteToTypeOfInterest) {
+ newPromotedTypes = _tryPromoteToTypeOfInterest(
+ typeOperations, declaredType, newPromotedTypes, writtenType);
+ }
// TODO(paulberry): remove demotions from demotionResult.nonPromotionHistory
// that are no longer in effect due to re-promotion.
if (identical(promotedTypes, newPromotedTypes) && assigned) {
@@ -3449,7 +3460,15 @@
final AssignedVariables<Node, Variable> _assignedVariables;
- _FlowAnalysisImpl(this.typeOperations, this._assignedVariables);
+ /// Indicates whether initializers of implicitly typed variables should be
+ /// accounted for by SSA analysis. (In an ideal world, they always would be,
+ /// but due to https://github.com/dart-lang/language/issues/1785, they weren't
+ /// always, and we need to be able to replicate the old behavior when
+ /// analyzing old language versions).
+ final bool respectImplicitlyTypedVarInitializers;
+
+ _FlowAnalysisImpl(this.typeOperations, this._assignedVariables,
+ {required this.respectImplicitlyTypedVarInitializers});
@override
bool get isReachable => _current.reachable.overallReachable;
@@ -3798,21 +3817,38 @@
@override
void initialize(
Variable variable, Type initializerType, Expression initializerExpression,
- {required bool isFinal, required bool isLate}) {
- ExpressionInfo<Variable, Type>? expressionInfo =
- _getExpressionInfo(initializerExpression);
- SsaNode<Variable, Type> newSsaNode = new SsaNode<Variable, Type>(isLate
- ? null
- : expressionInfo is _TrivialExpressionInfo
- ? null
- : expressionInfo);
- if (isFinal) {
- // We don't promote final variables on initialization, so pretend the
- // written type is the variable's declared type.
- initializerType = typeOperations.variableType(variable);
+ {required bool isFinal,
+ required bool isLate,
+ required bool isImplicitlyTyped}) {
+ ExpressionInfo<Variable, Type>? expressionInfo;
+ if (isLate) {
+ // Don't get expression info for late variables, since we don't know when
+ // they'll be initialized.
+ } else if (isImplicitlyTyped && !respectImplicitlyTypedVarInitializers) {
+ // If the language version is too old, SSA analysis has to ignore
+ // initializer expressions for implicitly typed variables, in order to
+ // preserve the buggy behavior of
+ // https://github.com/dart-lang/language/issues/1785.
+ } else {
+ expressionInfo = _getExpressionInfo(initializerExpression);
}
+ SsaNode<Variable, Type> newSsaNode = new SsaNode<Variable, Type>(
+ expressionInfo is _TrivialExpressionInfo ? null : expressionInfo);
_current = _current.write(
- null, variable, initializerType, newSsaNode, typeOperations);
+ null, variable, initializerType, newSsaNode, typeOperations,
+ promoteToTypeOfInterest: !isImplicitlyTyped && !isFinal);
+ if (isImplicitlyTyped &&
+ typeOperations.isTypeParameterType(initializerType)) {
+ _current = _current
+ .tryPromoteForTypeCheck(
+ typeOperations,
+ new ReferenceWithType<Variable, Type>(
+ new VariableReference<Variable, Type>(variable),
+ promotedType(variable) ??
+ typeOperations.variableType(variable)),
+ initializerType)
+ .ifTrue;
+ }
}
@override
@@ -3958,19 +3994,6 @@
}
@override
- void promote(Variable variable, Type type) {
- _current = _current
- .tryPromoteForTypeCheck(
- typeOperations,
- new ReferenceWithType<Variable, Type>(
- new VariableReference<Variable, Type>(variable),
- promotedType(variable) ??
- typeOperations.variableType(variable)),
- type)
- .ifTrue;
- }
-
- @override
Type? promotedType(Variable variable) {
return _current.infoFor(variable).promotedTypes?.last;
}
@@ -4544,7 +4567,9 @@
@override
void initialize(
Variable variable, Type initializerType, Expression initializerExpression,
- {required bool isFinal, required bool isLate}) {}
+ {required bool isFinal,
+ required bool isLate,
+ required bool isImplicitlyTyped}) {}
@override
bool isAssigned(Variable variable) {
@@ -4704,11 +4729,6 @@
}
@override
- void promote(Variable variable, Type type) {
- throw new UnimplementedError('TODO(paulberry)');
- }
-
- @override
Type? promotedType(Variable variable) {
return _knownTypes[variable];
}
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
index c1236e8..2546579 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
@@ -370,32 +370,11 @@
/// indicating that the `<` and `>` should be interpreted as operators (so two
/// arguments are being passed to `f`: `a < b` and `c > -d`).
bool mayFollowTypeArgs(Token token) {
+ const Set<String> continuationTokens = {'(', '.', '==', '!='};
+ const Set<String> stopTokens = {')', ']', '}', ';', ':', ','};
const Set<String> tokensThatMayFollowTypeArg = {
- '(',
- ')',
- ']',
- '}',
- ':',
- ';',
- ',',
- '.',
- '?',
- '==',
- '!=',
- '..',
- '?.',
- '??',
- '?..',
- '&',
- '|',
- '^',
- '+',
- '*',
- '%',
- '/',
- '~/',
- 'is',
- 'as'
+ ...continuationTokens,
+ ...stopTokens
};
if (token.type == TokenType.EOF) {
// The spec doesn't have anything to say about this case, since an
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
index 31f5089..07b7e12 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/flow_analysis_test.dart
@@ -594,7 +594,8 @@
var e = expr('Null');
var s = if_(e, []);
var flow = FlowAnalysis<Node, Statement, Expression, Var, Type>(
- h, AssignedVariables<Node, Var>());
+ h, AssignedVariables<Node, Var>(),
+ respectImplicitlyTypedVarInitializers: true);
flow.ifStatement_conditionBegin();
flow.ifStatement_thenBegin(e, s);
expect(() => flow.finish(), _asserts);
@@ -1308,6 +1309,75 @@
]);
});
+ group('initialize() promotes implicitly typed vars to type parameter types',
+ () {
+ test('when not final', () {
+ var h = Harness()
+ ..addSubtype('T&int', 'T', true)
+ ..addFactor('T', 'T&int', 'T');
+ var x = Var('x', 'T', isImplicitlyTyped: true);
+ h.run([
+ declareInitialized(x, expr('T&int')),
+ checkPromoted(x, 'T&int'),
+ ]);
+ });
+
+ test('when final', () {
+ var h = Harness()
+ ..addSubtype('T&int', 'T', true)
+ ..addFactor('T', 'T&int', 'T');
+ var x = Var('x', 'T', isImplicitlyTyped: true);
+ h.run([
+ declareInitialized(x, expr('T&int'), isFinal: true),
+ checkPromoted(x, 'T&int'),
+ ]);
+ });
+ });
+
+ group(
+ "initialize() doesn't promote explicitly typed vars to type "
+ 'parameter types', () {
+ test('when not final', () {
+ var h = Harness();
+ var x = Var('x', 'T');
+ h.run([
+ declareInitialized(x, expr('T&int')),
+ checkNotPromoted(x),
+ ]);
+ });
+
+ test('when final', () {
+ var h = Harness();
+ var x = Var('x', 'T');
+ h.run([
+ declareInitialized(x, expr('T&int'), isFinal: true),
+ checkNotPromoted(x),
+ ]);
+ });
+ });
+
+ group(
+ "initialize() doesn't promote implicitly typed vars to ordinary types",
+ () {
+ test('when not final', () {
+ var h = Harness();
+ var x = Var('x', 'dynamic', isImplicitlyTyped: true);
+ h.run([
+ declareInitialized(x, expr('Null')),
+ checkNotPromoted(x),
+ ]);
+ });
+
+ test('when final', () {
+ var h = Harness();
+ var x = Var('x', 'dynamic', isImplicitlyTyped: true);
+ h.run([
+ declareInitialized(x, expr('Null'), isFinal: true),
+ checkNotPromoted(x),
+ ]);
+ });
+ });
+
test('initialize() stores expressionInfo when not late', () {
var h = Harness();
var x = Var('x', 'Object');
@@ -1338,6 +1408,48 @@
]);
});
+ test(
+ 'initialize() does not store expressionInfo for implicitly typed '
+ 'vars, pre-bug fix', () {
+ var h = Harness(respectImplicitlyTypedVarInitializers: false);
+ var x = Var('x', 'Object', isImplicitlyTyped: true);
+ var y = Var('y', 'int?');
+ h.run([
+ declareInitialized(x, y.expr.eq(nullLiteral)),
+ getSsaNodes((nodes) {
+ expect(nodes[x]!.expressionInfo, isNull);
+ }),
+ ]);
+ });
+
+ test(
+ 'initialize() stores expressionInfo for implicitly typed '
+ 'vars, post-bug fix', () {
+ var h = Harness(respectImplicitlyTypedVarInitializers: true);
+ var x = Var('x', 'Object', isImplicitlyTyped: true);
+ var y = Var('y', 'int?');
+ h.run([
+ declareInitialized(x, y.expr.eq(nullLiteral)),
+ getSsaNodes((nodes) {
+ expect(nodes[x]!.expressionInfo, isNotNull);
+ }),
+ ]);
+ });
+
+ test(
+ 'initialize() stores expressionInfo for explicitly typed '
+ 'vars, pre-bug fix', () {
+ var h = Harness(respectImplicitlyTypedVarInitializers: false);
+ var x = Var('x', 'Object');
+ var y = Var('y', 'int?');
+ h.run([
+ declareInitialized(x, y.expr.eq(nullLiteral)),
+ getSsaNodes((nodes) {
+ expect(nodes[x]!.expressionInfo, isNotNull);
+ }),
+ ]);
+ });
+
test('initialize() does not store expressionInfo for trivial expressions',
() {
var h = Harness();
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart
index 7fd0b63..32dd3c6 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/nullability/data/local_boolean.dart
@@ -2,6 +2,8 @@
// 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.
+// @dart=2.13
+
finalLocalBool(int? x) {
final bool b = x == null;
if (!b) {
diff --git a/pkg/_fe_analyzer_shared/test/mini_ast.dart b/pkg/_fe_analyzer_shared/test/mini_ast.dart
index b8ce9e9..57ce172 100644
--- a/pkg/_fe_analyzer_shared/test/mini_ast.dart
+++ b/pkg/_fe_analyzer_shared/test/mini_ast.dart
@@ -388,7 +388,17 @@
late final _typeAnalyzer = _MiniAstTypeAnalyzer(this);
- Harness({this.legacy = false, String? thisType})
+ /// Indicates whether initializers of implicitly typed variables should be
+ /// accounted for by SSA analysis. (In an ideal world, they always would be,
+ /// but due to https://github.com/dart-lang/language/issues/1785, they weren't
+ /// always, and we need to be able to replicate the old behavior when
+ /// analyzing old language versions).
+ final bool respectImplicitlyTypedVarInitializers;
+
+ Harness(
+ {this.legacy = false,
+ String? thisType,
+ this.respectImplicitlyTypedVarInitializers = true})
: thisType = thisType == null ? null : Type(thisType);
MiniIrBuilder get _irBuilder => _typeAnalyzer._irBuilder;
@@ -460,6 +470,9 @@
}
@override
+ bool isTypeParameterType(Type type) => type is PromotedTypeVariableType;
+
+ @override
Type promoteToNonNull(Type type) {
if (type.type.endsWith('?')) {
return Type(type.type.substring(0, type.type.length - 1));
@@ -480,7 +493,9 @@
? FlowAnalysis<Node, Statement, Expression, Var, Type>.legacy(
this, assignedVariables)
: FlowAnalysis<Node, Statement, Expression, Var, Type>(
- this, assignedVariables);
+ this, assignedVariables,
+ respectImplicitlyTypedVarInitializers:
+ respectImplicitlyTypedVarInitializers);
_typeAnalyzer.dispatchStatement(b);
_typeAnalyzer.finish();
}
@@ -649,8 +664,10 @@
class Var {
final String name;
final Type type;
+ final bool isImplicitlyTyped;
- Var(this.name, String typeStr) : type = Type(typeStr);
+ Var(this.name, String typeStr, {this.isImplicitlyTyped = false})
+ : type = Type(typeStr);
/// Creates an L-value representing a reference to this variable.
LValue get expr => new _VariableReference(this, null);
@@ -1608,7 +1625,9 @@
var initializerType = analyzeExpression(initializer);
flow.declare(variable, true);
flow.initialize(variable, initializerType, initializer,
- isFinal: isFinal, isLate: isLate);
+ isFinal: isFinal,
+ isLate: isLate,
+ isImplicitlyTyped: variable.isImplicitlyTyped);
}
}
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index 76b327e..dd94f01 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -267,6 +267,7 @@
CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR,
CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED,
CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MACRO_EXECUTION_ERROR,
CompileTimeErrorCode.MAIN_FIRST_POSITIONAL_PARAMETER_TYPE,
CompileTimeErrorCode.MAIN_HAS_REQUIRED_NAMED_PARAMETERS,
CompileTimeErrorCode.MAIN_HAS_TOO_MANY_REQUIRED_POSITIONAL_PARAMETERS,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 61f515c..433fcaa 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 172;
+ static const int DATA_VERSION = 174;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index ec1e0ed..57d2d82 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -43,6 +43,7 @@
import 'package:analyzer/src/generated/utilities_collection.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
import 'package:analyzer/src/summary2/bundle_reader.dart';
import 'package:analyzer/src/summary2/reference.dart';
@@ -447,6 +448,10 @@
/// TODO(scheglov) implement as modifier
bool _isSimplyBounded = true;
+ /// The list of errors recorded during execution of macro builders
+ /// over this class.
+ List<macro.MacroExecutionError> macroExecutionErrors = [];
+
ElementLinkedData? linkedData;
/// Initialize a newly created class element to have the given [name] at the
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 24533f2..ba78ccb 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -2230,7 +2230,7 @@
// your pubspec.yaml to set the minimum SDK constraint to 2.14 or
// higher, and running 'pub get'."
correction: "Try enabling the experiment by including "
- "'--enable-experiments=constructor-tearoffs' in the 'dart' command.");
+ "'--enable-experiment=constructor-tearoffs' in the 'dart' command.");
/**
* No parameters.
diff --git a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
index 8b431a0..5b6a4fb 100644
--- a/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/flow_analysis_visitor.dart
@@ -13,6 +13,7 @@
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart' show TypeSystemImpl;
import 'package:analyzer/src/generated/migration.dart';
+import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/variable_type_provider.dart';
/// Data gathered by flow analysis, retained for testing purposes.
@@ -222,7 +223,8 @@
flow!.labeledStatement_end();
}
- void topLevelDeclaration_enter(AstNode node, FormalParameterList? parameters,
+ void topLevelDeclaration_enter(
+ ResolverVisitor resolver, AstNode node, FormalParameterList? parameters,
{void Function(AstVisitor<Object?> visitor)? visit}) {
assert(flow == null);
assignedVariables = computeAssignedVariables(node, parameters,
@@ -233,7 +235,9 @@
}
flow = isNonNullableByDefault
? FlowAnalysis<AstNode, Statement, Expression, PromotableElement,
- DartType>(_typeOperations, assignedVariables!)
+ DartType>(_typeOperations, assignedVariables!,
+ respectImplicitlyTypedVarInitializers:
+ resolver.isConstructorTearoffsEnabled)
: FlowAnalysis<AstNode, Statement, Expression, PromotableElement,
DartType>.legacy(_typeOperations, assignedVariables!);
}
@@ -349,9 +353,10 @@
: super(typeSystem, false, isNonNullableByDefault);
@override
- void topLevelDeclaration_enter(AstNode node, FormalParameterList? parameters,
+ void topLevelDeclaration_enter(
+ ResolverVisitor resolver, AstNode node, FormalParameterList? parameters,
{void Function(AstVisitor<Object?> visitor)? visit}) {
- super.topLevelDeclaration_enter(node, parameters, visit: visit);
+ super.topLevelDeclaration_enter(resolver, node, parameters, visit: visit);
migrationResolutionHooks.setFlowAnalysis(flow);
}
@@ -400,6 +405,9 @@
}
@override
+ bool isTypeParameterType(DartType type) => type is TypeParameterType;
+
+ @override
DartType promoteToNonNull(DartType type) {
return typeSystem.promoteToNonNull(type);
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
index 1e41759..3654269 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variable_declaration_resolver.dart
@@ -45,7 +45,7 @@
InferenceContext.setTypeFromNode(initializer, node);
if (isTopLevel) {
- _resolver.flowAnalysis.topLevelDeclaration_enter(node, null);
+ _resolver.flowAnalysis.topLevelDeclaration_enter(_resolver, node, null);
} else if (element.isLate) {
_resolver.flowAnalysis.flow?.lateInitializer_begin(node);
}
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 6a29b7d..e2e2151 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -7653,6 +7653,15 @@
hasPublishedDocs: true);
/**
+ * Parameters:
+ * 0: the name of the macro
+ * 1: the message
+ */
+ static const CompileTimeErrorCode MACRO_EXECUTION_ERROR =
+ CompileTimeErrorCode(
+ 'MACRO_EXECUTION_ERROR', "Exception thrown by macro {0}: {1}");
+
+ /**
* No parameters.
*/
// #### Description
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 7f5d9e6..f68eea7 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -45,6 +45,7 @@
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
import 'package:analyzer/src/generated/this_access_tracker.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
import 'package:collection/collection.dart';
class EnclosingExecutableContext {
@@ -444,7 +445,8 @@
var outerClass = _enclosingClass;
try {
_isInNativeClass = node.nativeClause != null;
- _enclosingClass = node.declaredElement as ClassElementImpl;
+ var enclosingClass = node.declaredElement as ClassElementImpl;
+ _enclosingClass = enclosingClass;
List<ClassMember> members = node.members;
_duplicateDefinitionVerifier.checkClass(node);
@@ -468,6 +470,10 @@
_checkForBadFunctionUse(node);
_checkForWrongTypeParameterVarianceInSuperinterfaces();
_checkForMainFunction(node.name);
+ _reportMacroExecutionErrors(
+ node.metadata,
+ enclosingClass.macroExecutionErrors,
+ );
super.visitClassDeclaration(node);
} finally {
_isInNativeClass = false;
@@ -4986,6 +4992,23 @@
return null;
}
+ /// Report [macroExecutionErrors] at the corresponding [annotations].
+ void _reportMacroExecutionErrors(
+ List<Annotation> annotations,
+ List<macro.MacroExecutionError> macroExecutionErrors,
+ ) {
+ for (var macroExecutionError in macroExecutionErrors) {
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.MACRO_EXECUTION_ERROR,
+ annotations[macroExecutionError.annotationIndex],
+ [
+ macroExecutionError.macroName,
+ macroExecutionError.message,
+ ],
+ );
+ }
+ }
+
void _withEnclosingExecutable(
ExecutableElement element,
void Function() operation,
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2ef5319..4fc7f04 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -1185,7 +1185,7 @@
@override
void visitConstructorDeclaration(ConstructorDeclaration node) {
- flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
+ flowAnalysis.topLevelDeclaration_enter(this, node, node.parameters);
flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
var returnType = node.declaredElement!.type.returnType;
@@ -1409,7 +1409,7 @@
flowAnalysis.flow!.functionExpression_begin(node);
} else {
flowAnalysis.topLevelDeclaration_enter(
- node, node.functionExpression.parameters);
+ this, node, node.functionExpression.parameters);
}
flowAnalysis.executableDeclaration_enter(
node,
@@ -1638,7 +1638,7 @@
@override
void visitMethodDeclaration(MethodDeclaration node) {
- flowAnalysis.topLevelDeclaration_enter(node, node.parameters);
+ flowAnalysis.topLevelDeclaration_enter(this, node, node.parameters);
flowAnalysis.executableDeclaration_enter(node, node.parameters, false);
DartType returnType = node.declaredElement!.returnType;
@@ -2014,17 +2014,11 @@
var declaredType = parent.type;
if (initializer != null) {
var initializerStaticType = initializer.typeOrThrow;
- if (declaredType == null) {
- if (_isNonNullableByDefault &&
- initializerStaticType is TypeParameterType) {
- flowAnalysis.flow?.promote(
- declaredElement as PromotableElement, initializerStaticType);
- }
- } else {
- flowAnalysis.flow?.initialize(declaredElement as PromotableElement,
- initializerStaticType, initializer,
- isFinal: parent.isFinal, isLate: parent.isLate);
- }
+ flowAnalysis.flow?.initialize(declaredElement as PromotableElement,
+ initializerStaticType, initializer,
+ isFinal: parent.isFinal,
+ isLate: parent.isLate,
+ isImplicitlyTyped: declaredType == null);
}
}
diff --git a/pkg/analyzer/lib/src/macro/impl/error.dart b/pkg/analyzer/lib/src/macro/impl/error.dart
new file mode 100644
index 0000000..8c2780c
--- /dev/null
+++ b/pkg/analyzer/lib/src/macro/impl/error.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2021, 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.
+
+/// Error that happened during executing a macro builder.
+class MacroExecutionError {
+ final int annotationIndex;
+ final String macroName;
+ final String message;
+
+ MacroExecutionError({
+ required this.annotationIndex,
+ required this.macroName,
+ required this.message,
+ });
+}
diff --git a/pkg/analyzer/lib/src/summary2/ast_resolver.dart b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
index 96f8760..04523e4 100644
--- a/pkg/analyzer/lib/src/summary2/ast_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_resolver.dart
@@ -58,7 +58,7 @@
node.accept(_resolutionVisitor);
node.accept(_scopeResolverVisitor);
_prepareEnclosingDeclarations();
- _flowAnalysis.topLevelDeclaration_enter(node, null);
+ _flowAnalysis.topLevelDeclaration_enter(_resolverVisitor, node, null);
node.accept(_resolverVisitor);
_flowAnalysis.topLevelDeclaration_exit();
}
@@ -76,7 +76,8 @@
visit(_scopeResolverVisitor);
_prepareEnclosingDeclarations();
- _flowAnalysis.topLevelDeclaration_enter(node, node.parameters,
+ _flowAnalysis.topLevelDeclaration_enter(
+ _resolverVisitor, node, node.parameters,
visit: visit);
visit(_resolverVisitor);
_flowAnalysis.topLevelDeclaration_exit();
@@ -95,7 +96,8 @@
node.accept(_scopeResolverVisitor);
}
_prepareEnclosingDeclarations();
- _flowAnalysis.topLevelDeclaration_enter(node.parent!, null);
+ _flowAnalysis.topLevelDeclaration_enter(
+ _resolverVisitor, node.parent!, null);
node.accept(_resolverVisitor);
_flowAnalysis.topLevelDeclaration_exit();
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index bdfc35d..f406b41 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -18,6 +18,7 @@
import 'package:analyzer/src/dart/resolver/variance.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
import 'package:analyzer/src/summary2/ast_binary_reader.dart';
import 'package:analyzer/src/summary2/ast_binary_tag.dart';
import 'package:analyzer/src/summary2/data_reader.dart';
@@ -528,6 +529,10 @@
element.setLinkedData(reference, linkedData);
ClassElementFlags.read(_reader, element);
+ element.macroExecutionErrors = _reader.readTypedList(
+ _readMacroExecutionError,
+ );
+
element.typeParameters = _readTypeParameters();
if (!element.isMixinApplication) {
@@ -866,6 +871,14 @@
}
}
+ macro.MacroExecutionError _readMacroExecutionError() {
+ return macro.MacroExecutionError(
+ annotationIndex: _reader.readUInt30(),
+ macroName: _reader.readStringReference(),
+ message: _reader.readStringReference(),
+ );
+ }
+
List<MethodElementImpl> _readMethods(
CompilationUnitElementImpl unitElement,
ElementImpl enclosingElement,
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 6c96d5e..44dcc92 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -14,6 +14,7 @@
import 'package:analyzer/src/dart/element/member.dart';
import 'package:analyzer/src/dart/element/type_algebra.dart';
import 'package:analyzer/src/dart/resolver/variance.dart';
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
import 'package:analyzer/src/summary2/ast_binary_tag.dart';
import 'package:analyzer/src/summary2/ast_binary_writer.dart';
import 'package:analyzer/src/summary2/data_writer.dart';
@@ -129,6 +130,11 @@
_sink._writeStringReference(element.name);
ClassElementFlags.write(_sink, element);
+ _writeList(
+ element.macroExecutionErrors,
+ _sink._writeMacroExecutionError,
+ );
+
_resolutionSink._writeAnnotationList(element.metadata);
_writeTypeParameters(element.typeParameters, () {
@@ -974,6 +980,12 @@
}
}
+ void _writeMacroExecutionError(macro.MacroExecutionError error) {
+ writeUInt30(error.annotationIndex);
+ _writeStringReference(error.macroName);
+ _writeStringReference(error.message);
+ }
+
void _writeOptionalStringReference(String? value) {
if (value != null) {
writeBool(true);
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 8cadf5b..4b894a9 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -8,8 +8,10 @@
import 'package:analyzer/src/dart/ast/mixin_super_invoked_names.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/resolver/scope.dart';
+import 'package:analyzer/src/macro/api/macro.dart' as macro;
import 'package:analyzer/src/macro/builders/data_class.dart' as macro;
import 'package:analyzer/src/macro/builders/observable.dart' as macro;
+import 'package:analyzer/src/macro/impl/error.dart' as macro;
import 'package:analyzer/src/macro/impl/macro.dart' as macro;
import 'package:analyzer/src/summary2/combinator.dart';
import 'package:analyzer/src/summary2/constructor_initializer_resolver.dart';
@@ -200,19 +202,25 @@
/// Run built-in declaration macros.
void runDeclarationMacros() {
- bool hasMacroAnnotation(ast.AnnotatedNode node, String name) {
- for (var annotation in node.metadata) {
+ /// If [node] has a macro annotation with the required [name],
+ /// return the index of this annotation node.
+ int? hasMacroAnnotation(ast.AnnotatedNode node, String name) {
+ var metadata = node.metadata;
+ for (var i = 0; i < metadata.length; i++) {
+ var annotation = metadata[i];
var nameNode = annotation.name;
if (nameNode is ast.SimpleIdentifier &&
annotation.arguments == null &&
annotation.constructorName == null &&
nameNode.name == name) {
var nameElement = element.scope.lookup(name).getter;
- return nameElement != null &&
- nameElement.library?.name == 'analyzer.macro.annotations';
+ if (nameElement != null &&
+ nameElement.library?.name == 'analyzer.macro.annotations') {
+ return i;
+ }
}
}
- return false;
+ return null;
}
/// Build types for type annotations in new [nodes].
@@ -236,39 +244,53 @@
for (var declaration in linkingUnit.node.declarations) {
if (declaration is ast.ClassDeclarationImpl) {
classDeclarationIndex++;
+ var macroExecutionErrors = <macro.MacroExecutionError>[];
+
var members = declaration.members.toList();
var classBuilder = macro.ClassDeclarationBuilderImpl(
linkingUnit,
classDeclarationIndex,
declaration,
);
- if (hasMacroAnnotation(declaration, 'autoConstructor')) {
- macro.AutoConstructorMacro().visitClassDeclaration(
- declaration,
- classBuilder,
- );
+
+ void runClassMacro(
+ String name,
+ macro.ClassDeclarationMacro Function() newInstance,
+ ) {
+ var annotationIndex = hasMacroAnnotation(declaration, name);
+ if (annotationIndex != null) {
+ try {
+ newInstance().visitClassDeclaration(
+ declaration,
+ classBuilder,
+ );
+ } catch (e) {
+ macroExecutionErrors.add(
+ macro.MacroExecutionError(
+ annotationIndex: annotationIndex,
+ macroName: name,
+ message: e.toString(),
+ ),
+ );
+ }
+ }
}
- if (hasMacroAnnotation(declaration, 'dataClass')) {
- macro.DataClassMacro().visitClassDeclaration(
- declaration,
- classBuilder,
- );
- }
- if (hasMacroAnnotation(declaration, 'hashCode')) {
- macro.HashCodeMacro().visitClassDeclaration(
- declaration,
- classBuilder,
- );
- }
- if (hasMacroAnnotation(declaration, 'toString')) {
- macro.ToStringMacro().visitClassDeclaration(
- declaration,
- classBuilder,
- );
- }
+
+ runClassMacro('autoConstructor', () => macro.AutoConstructorMacro());
+ runClassMacro('dataClass', () => macro.DataClassMacro());
+ runClassMacro('hashCode', () => macro.HashCodeMacro());
+ runClassMacro('toString', () => macro.ToStringMacro());
+
+ var classElement = declaration.declaredElement as ClassElementImpl;
+ classElement.macroExecutionErrors = macroExecutionErrors;
+
for (var member in members) {
if (member is ast.FieldDeclarationImpl) {
- if (hasMacroAnnotation(member, 'observable')) {
+ var annotationIndex = hasMacroAnnotation(
+ member,
+ 'observable',
+ );
+ if (annotationIndex != null) {
macro.ObservableMacro().visitFieldDeclaration(
member,
classBuilder,
diff --git a/pkg/analyzer/test/generated/function_reference_parser_test.dart b/pkg/analyzer/test/generated/function_reference_parser_test.dart
index e76a9a7..89ffcb5 100644
--- a/pkg/analyzer/test/generated/function_reference_parser_test.dart
+++ b/pkg/analyzer/test/generated/function_reference_parser_test.dart
@@ -44,41 +44,6 @@
]);
}
- void test_followingToken_accepted_ampersand() {
- expect_f_a_b(
- (parseExpression('f<a, b> & 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
- void test_followingToken_accepted_as() {
- expect_f_a_b(
- (parseExpression('f<a, b> as int', featureSet: constructorTearoffs)
- as AsExpression)
- .expression);
- }
-
- void test_followingToken_accepted_asterisk() {
- expect_f_a_b(
- (parseExpression('f<a, b> * 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
- void test_followingToken_accepted_bar() {
- expect_f_a_b(
- (parseExpression('f<a, b> | 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
- void test_followingToken_accepted_caret() {
- expect_f_a_b(
- (parseExpression('f<a, b> ^ 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
void test_followingToken_accepted_closeBrace() {
expect_f_a_b((parseExpression('{f<a, b>}', featureSet: constructorTearoffs)
as SetOrMapLiteral)
@@ -120,13 +85,6 @@
.leftOperand);
}
- void test_followingToken_accepted_is() {
- expect_f_a_b(
- (parseExpression('f<a, b> is int', featureSet: constructorTearoffs)
- as IsExpression)
- .expression);
- }
-
void test_followingToken_accepted_not_equals() {
expect_f_a_b(
(parseExpression('f<a, b> != null', featureSet: constructorTearoffs)
@@ -148,13 +106,6 @@
expect(methodInvocation.argumentList.arguments, isEmpty);
}
- void test_followingToken_accepted_percent() {
- expect_f_a_b(
- (parseExpression('f<a, b> % 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
void test_followingToken_accepted_period_methodInvocation() {
// This is a special case because `f<a, b>.methodName(...)` is parsed as an
// InstanceCreationExpression.
@@ -179,13 +130,6 @@
.target!);
}
- void test_followingToken_accepted_period_period() {
- expect_f_a_b(
- (parseExpression('f<a, b>..toString()', featureSet: constructorTearoffs)
- as CascadeExpression)
- .target);
- }
-
void test_followingToken_accepted_period_propertyAccess() {
expect_f_a_b(
(parseExpression('f<a, b>.hashCode', featureSet: constructorTearoffs)
@@ -193,53 +137,6 @@
.target!);
}
- void test_followingToken_accepted_plus() {
- expect_f_a_b(
- (parseExpression('f<a, b> + 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
- void test_followingToken_accepted_question() {
- expect_f_a_b((parseExpression('f<a, b> ? null : null',
- featureSet: constructorTearoffs) as ConditionalExpression)
- .condition);
- }
-
- void test_followingToken_accepted_question_period_methodInvocation() {
- expect_f_a_b(
- (parseExpression('f<a, b>?.toString()', featureSet: constructorTearoffs)
- as MethodInvocation)
- .target!);
- }
-
- void test_followingToken_accepted_question_period_methodInvocation_generic() {
- expect_f_a_b(
- (parseExpression('f<a, b>?.foo<c>()', featureSet: constructorTearoffs)
- as MethodInvocation)
- .target!);
- }
-
- void test_followingToken_accepted_question_period_period() {
- expect_f_a_b((parseExpression('f<a, b>?..toString()',
- featureSet: constructorTearoffs) as CascadeExpression)
- .target);
- }
-
- void test_followingToken_accepted_question_period_propertyAccess() {
- expect_f_a_b(
- (parseExpression('f<a, b>?.hashCode', featureSet: constructorTearoffs)
- as PropertyAccess)
- .target!);
- }
-
- void test_followingToken_accepted_question_question() {
- expect_f_a_b(
- (parseExpression('f<a, b> ?? 0', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
- }
-
void test_followingToken_accepted_semicolon() {
expect_f_a_b((parseStatement('f<a, b>;', featureSet: constructorTearoffs)
as ExpressionStatement)
@@ -247,18 +144,26 @@
listener.assertNoErrors();
}
- void test_followingToken_accepted_slash() {
- expect_f_a_b(
- (parseExpression('f<a, b> / 1', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
+ void test_followingToken_rejected_ampersand() {
+ expect_two_args(parseExpression('f(a<b,c>&d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
}
- void test_followingToken_accepted_tilde_slash() {
- expect_f_a_b(
- (parseExpression('f<a, b> ~/ 1', featureSet: constructorTearoffs)
- as BinaryExpression)
- .leftOperand);
+ void test_followingToken_rejected_as() {
+ expect_two_args(
+ parseExpression('f(a<b,c>as)', featureSet: constructorTearoffs)
+ as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_asterisk() {
+ expect_two_args(parseExpression('f(a<b,c>*d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
}
void test_followingToken_rejected_bang_openBracket() {
@@ -273,6 +178,34 @@
as MethodInvocation);
}
+ void test_followingToken_rejected_bar() {
+ expect_two_args(parseExpression('f(a<b,c>|d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_caret() {
+ expect_two_args(parseExpression('f(a<b,c>^d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_is() {
+ var methodInvocation = parseExpression('f(a<b,c> is int)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation;
+ var arguments = methodInvocation.argumentList.arguments;
+ expect(arguments, hasLength(2));
+ expect(arguments[0], TypeMatcher<BinaryExpression>());
+ expect(arguments[1], TypeMatcher<IsExpression>());
+ }
+
void test_followingToken_rejected_lessThan() {
// Note: in principle we could parse this as a generic instantiation of a
// generic instantiation, but such an expression would be meaningless so we
@@ -314,6 +247,108 @@
as MethodInvocation);
}
+ void test_followingToken_rejected_percent() {
+ expect_two_args(parseExpression('f(a<b,c>%d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_period_period() {
+ var methodInvocation = parseExpression('f(a<b,c>..toString())',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation;
+ var arguments = methodInvocation.argumentList.arguments;
+ expect(arguments, hasLength(2));
+ expect(arguments[0], TypeMatcher<BinaryExpression>());
+ expect(arguments[1], TypeMatcher<CascadeExpression>());
+ }
+
+ void test_followingToken_rejected_plus() {
+ expect_two_args(parseExpression('f(a<b,c>+d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_question() {
+ var methodInvocation = parseExpression('f(a<b,c> ? null : null)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation;
+ var arguments = methodInvocation.argumentList.arguments;
+ expect(arguments, hasLength(2));
+ expect(arguments[0], TypeMatcher<BinaryExpression>());
+ expect(arguments[1], TypeMatcher<ConditionalExpression>());
+ }
+
+ void test_followingToken_rejected_question_period_methodInvocation() {
+ expect_two_args(parseExpression('f(a<b,c>?.toString())',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_question_period_methodInvocation_generic() {
+ expect_two_args(parseExpression('f(a<b,c>?.foo<c>())',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_question_period_period() {
+ var methodInvocation = parseExpression('f(a<b,c>?..toString())',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 3),
+ expectedError(ParserErrorCode.EXPECTED_TOKEN, 11, 8),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation;
+ var arguments = methodInvocation.argumentList.arguments;
+ expect(arguments, hasLength(3));
+ expect(arguments[0], TypeMatcher<BinaryExpression>());
+ expect(arguments[1], TypeMatcher<BinaryExpression>());
+ expect(arguments[2], TypeMatcher<MethodInvocation>());
+ }
+
+ void test_followingToken_rejected_question_period_propertyAccess() {
+ expect_two_args(parseExpression('f(a<b,c>?.hashCode)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_question_question() {
+ expect_two_args(parseExpression('f(a<b,c> ?? d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 9, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_slash() {
+ expect_two_args(parseExpression('f(a<b,c>/d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 1),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
+ void test_followingToken_rejected_tilde_slash() {
+ expect_two_args(parseExpression('f(a<b,c>~/d)',
+ errors: [
+ expectedError(ParserErrorCode.MISSING_IDENTIFIER, 8, 2),
+ ],
+ featureSet: constructorTearoffs) as MethodInvocation);
+ }
+
void test_functionReference_after_indexExpression() {
// Note: this is not legal Dart, but it's important that we do error
// recovery and don't crash the parser.
diff --git a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
index 769396f..eba7e07 100644
--- a/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constructor_reference_test.dart
@@ -2,7 +2,7 @@
// 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.
-import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -150,19 +150,17 @@
A<int>..foo;
}
''', [
- error(CompileTimeErrorCode.UNDEFINED_GETTER, 50, 3),
+ error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 43, 1),
+ error(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 47, 1),
+ error(ParserErrorCode.MISSING_IDENTIFIER, 48, 2),
]);
-
- // The nodes are not rewritten into a [ConstructorReference].
- var cascade = findNode.cascade('A<int>..foo;');
- assertType(cascade, 'Type');
- var section = cascade.cascadeSections.first as PropertyAccess;
- assertType(section, 'dynamic');
- assertType(section.propertyName, 'dynamic');
+ // The parser produces nonsense here because the `<` disambiguates as a
+ // relational operator, so no need to assert anything about analysis
+ // results.
}
test_class_generic_named_nullAware() async {
- await assertNoErrorsInCode('''
+ await assertErrorsInCode('''
class A<T> {
A.foo();
}
@@ -170,17 +168,14 @@
void bar() {
A<int>?.foo;
}
-''');
-
- var classElement = findElement.class_('A');
- assertConstructorReference(
- findNode.constructorReference('A<int>?.foo;'),
- elementMatcher(classElement.getNamedConstructor('foo')!,
- substitution: {'T': 'int'}),
- classElement,
- 'A<int> Function()',
- expectedTypeNameType: 'A<int>',
- );
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 43, 1),
+ error(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, 47, 1),
+ error(ParserErrorCode.MISSING_IDENTIFIER, 48, 2),
+ ]);
+ // The parser produces nonsense here because the `<` disambiguates as a
+ // relational operator, so no need to assert anything about analysis
+ // results.
}
test_class_generic_named_typeArgs() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/macro_test.dart b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
index b309301..a2e3aa4 100644
--- a/pkg/analyzer/test/src/dart/resolution/macro_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/macro_test.dart
@@ -101,6 +101,20 @@
]);
}
+ test_executionError_autoConstructor() async {
+ await assertErrorsInCode(r'''
+import 'macro_annotations.dart';
+
+@autoConstructor
+class A {
+ final int a;
+ A(this.a);
+}
+''', [
+ error(CompileTimeErrorCode.MACRO_EXECUTION_ERROR, 34, 16),
+ ]);
+ }
+
test_observable() async {
var code = r'''
import 'macro_annotations.dart';
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
index f60e50d..35beee6 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
@@ -79,12 +79,14 @@
}
test_ifElementWithElse_mayBeConst() async {
- await assertNoErrorsInCode('''
+ await assertErrorsInCode('''
void main() {
const isTrue = true;
const {1: null, if (isTrue) null: null else null: null};
}
-''');
+''', [
+ error(HintCode.DEAD_CODE, 83, 12),
+ ]);
}
test_spreadElement_mayBeConst() async {
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index b6b2ccb..02efb6f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -6458,20 +6458,15 @@
}
if (initializerResult != null) {
DartType initializerType = initializerResult.inferredType;
- if (node.isImplicitlyTyped) {
- if (inferrer.isNonNullableByDefault &&
- initializerType is TypeParameterType) {
- inferrer.flowAnalysis.promote(node, initializerType);
- }
- } else {
- // TODO(paulberry): `initializerType` is sometimes `null` during top
- // level inference. Figure out how to prevent this.
- // ignore: unnecessary_null_comparison
- if (initializerType != null) {
- inferrer.flowAnalysis.initialize(
- node, initializerType, initializerResult.expression,
- isFinal: node.isFinal, isLate: node.isLate);
- }
+ // TODO(paulberry): `initializerType` is sometimes `null` during top
+ // level inference. Figure out how to prevent this.
+ // ignore: unnecessary_null_comparison
+ if (initializerType != null) {
+ inferrer.flowAnalysis.initialize(
+ node, initializerType, initializerResult.expression,
+ isFinal: node.isFinal,
+ isLate: node.isLate,
+ isImplicitlyTyped: node.isImplicitlyTyped);
}
Expression initializer = inferrer.ensureAssignableResult(
node.type, initializerResult,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
index 5ba0cfa..884dfc4 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_engine.dart
@@ -312,6 +312,9 @@
}
@override
+ bool isTypeParameterType(DartType type) => type is TypeParameterType;
+
+ @override
DartType tryPromoteToType(DartType to, DartType from) {
if (isSubtypeOf(to, from)) {
return to;
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index ff7e4aa..8ff9315 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -224,7 +224,9 @@
flowAnalysis = library.isNonNullableByDefault
? new FlowAnalysis(
new TypeOperationsCfe(engine.typeSchemaEnvironment),
- assignedVariables)
+ assignedVariables,
+ respectImplicitlyTypedVarInitializers:
+ library.enableConstructorTearOffsInLibrary)
: new FlowAnalysis.legacy(
new TypeOperationsCfe(engine.typeSchemaEnvironment),
assignedVariables) {}
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
index dfe8eeb..2f3c136 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart
@@ -5,66 +5,43 @@
// The test cases called `typeArgs_...` verify that `<` and `>` are treated as
// delimiting type arguments when the `>` is followed by one of the tokens:
//
-// ( ) ] } : ; , . ? == != .. ?. ?? ?..
-// & | ^ + * % / ~/
-//
-// Unless otherwise noted, these test cases should not result in a parse error,
-// because they can be made into valid expressions through user-defined
-// operators.
+// ( . == != ) ] } ; : ,
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_as = f<a, b> as int;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
var typeArgs_closeBrace = {f<a, b>};
var typeArgs_closeBracket = [f<a, b>];
var typeArgs_closeParen = g(f<a, b>);
var typeArgs_colon = {f<a, b>: null};
var typeArgs_comma = [f<a, b>, null];
var typeArgs_equals = f<a, b> == null;
-var typeArgs_is = f<a, b> is int;
var typeArgs_not_equals = f<a, b> != null;
// This is a special case because when a `(` follows `<typeArguments>` it is
// parsed as a MethodInvocation rather than a GenericInstantiation.
var typeArgs_openParen = f<a, b>();
-var typeArgs_percent = f<a, b> % 0;
-
// This is a special case because `f<a, b>.methodName(...)` is parsed as an
// InstanceCreationExpression.
var typeArgs_period_methodInvocation = f<a, b>.toString();
var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
-// Note: this could never be a valid expression because the thing to the left of
-// `?` is required to have type `bool`, and `f<a, b>` can only have type `Type`
-// or a function type. But it is not the responsibility of the parser to report
-// an error here; that should be done by type analysis.
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
// The test cases called `operators_...` verify that `<` and `>` are treated as
// operators when the `>` is not followed by one of the tokens:
//
-// ( ) ] } : ; , . ? == != .. ?. ?? ?..
-// & | ^ + * % / ~/
+// ( . == != ) ] } ; : ,
//
-// Unless otherwise noted, these test cases should not result in a parse error,
-// because they can be made into valid expressions through user-defined
-// operators.
+// Except as noted, these test cases should result in parse errors.
+
+var operators_ampersand = f(a<b,c>&d);
+
+// Note: this should not be a parse error since it is allowed to have an
+// identifier called `as`.
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*d);
// Note: this could never be a valid expression because the thing to the right
// of `!` is required to have type `bool`, and the type of `[d]` will always be
@@ -72,15 +49,26 @@
// error here; that should be done by type analysis.
var operators_bang_openBracket = f(a<b,c>![d]);
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `bool`.
var operators_bang_paren = f(a<b,c>!(d));
+var operators_bar = f(a<b,c>|d);
+var operators_caret = f(a<b,c>^d);
+var operators_is = f(a<b,c> is int);
+
// Note: in principle we could parse this as a generic instantiation of a
// generic instantiation, but since `<` is not one of the tokens that signals
// `<` and `>` to be treated as type argument delimiters, the first pair of `<`
// and `>` is treated as operators, and this results in a parse error.
var operators_lessThan = f<a><b>;
+// Note: this should not be a parse error (indeed, this is valid if `a`, `b`,
+// `c`, and `d` are all of type `num`).
var operators_minus = f(a<b,c>-d);
+
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `List`.
var operators_openBracket = f(a<b,c>[d]);
// Note: in principle we could parse `<b, c>` as type arguments, `[d]` as an
@@ -90,4 +78,18 @@
// in a parse error.
var operators_openBracket_error = f(a<b,c>[d]>e);
+// Note: this should not be a parse error since `c` could have a type that
+// defines a `>` operator that accepts `List`.
var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
+
+var operators_percent = f(a<b,c>%d);
+var operators_period_period = f(a<b,c>..toString());
+var operators_plus = f(a<b,c>+d);
+var operators_question = f(a<b,c> ? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..toString());
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+var operators_question_question = f(a<b,c> ?? d);
+var operators_slash = f(a<b,c>/d);
+var operators_tilde_slash = f(a<b,c>~/d);
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
index 9e0f65c..eb3e565 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.expect
@@ -1,156 +1,91 @@
Problems reported:
-parser/general/function_reference_following_token:81:29: A comparison expression can't be an operand of another comparison expression.
+parser/general/function_reference_following_token:38:35: Expected an identifier, but got '&'.
+var operators_ampersand = f(a<b,c>&d);
+ ^
+
+parser/general/function_reference_following_token:44:34: Expected an identifier, but got '*'.
+var operators_asterisk = f(a<b,c>*d);
+ ^
+
+parser/general/function_reference_following_token:56:29: Expected an identifier, but got '|'.
+var operators_bar = f(a<b,c>|d);
+ ^
+
+parser/general/function_reference_following_token:57:31: Expected an identifier, but got '^'.
+var operators_caret = f(a<b,c>^d);
+ ^
+
+parser/general/function_reference_following_token:58:29: Expected an identifier, but got 'is'.
+var operators_is = f(a<b,c> is int);
+ ^^
+
+parser/general/function_reference_following_token:64:29: A comparison expression can't be an operand of another comparison expression.
var operators_lessThan = f<a><b>;
^
-parser/general/function_reference_following_token:81:33: Expected '[' before this.
+parser/general/function_reference_following_token:64:33: Expected '[' before this.
var operators_lessThan = f<a><b>;
^
-parser/general/function_reference_following_token:91:46: A comparison expression can't be an operand of another comparison expression.
+parser/general/function_reference_following_token:79:46: A comparison expression can't be an operand of another comparison expression.
var operators_openBracket_error = f(a<b,c>[d]>e);
^
+parser/general/function_reference_following_token:85:33: Expected an identifier, but got '%'.
+var operators_percent = f(a<b,c>%d);
+ ^
+
+parser/general/function_reference_following_token:86:39: Expected an identifier, but got '..'.
+var operators_period_period = f(a<b,c>..toString());
+ ^^
+
+parser/general/function_reference_following_token:87:30: '+' is not a prefix operator.
+var operators_plus = f(a<b,c>+d);
+ ^
+
+parser/general/function_reference_following_token:88:35: Expected an identifier, but got '?'.
+var operators_question = f(a<b,c> ? null : null);
+ ^
+
+parser/general/function_reference_following_token:89:58: Expected an identifier, but got '?.'.
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+ ^^
+
+parser/general/function_reference_following_token:90:66: Expected an identifier, but got '?.'.
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+ ^^
+
+parser/general/function_reference_following_token:91:48: Expected an identifier, but got '?..'.
+var operators_question_period_period = f(a<b,c>?..toString());
+ ^^^
+
+parser/general/function_reference_following_token:91:51: Expected ',' before this.
+var operators_question_period_period = f(a<b,c>?..toString());
+ ^^^^^^^^
+
+parser/general/function_reference_following_token:92:56: Expected an identifier, but got '?.'.
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+ ^^
+
+parser/general/function_reference_following_token:93:44: Expected an identifier, but got '??'.
+var operators_question_question = f(a<b,c> ?? d);
+ ^^
+
+parser/general/function_reference_following_token:94:31: Expected an identifier, but got '/'.
+var operators_slash = f(a<b,c>/d);
+ ^
+
+parser/general/function_reference_following_token:95:37: Expected an identifier, but got '~/'.
+var operators_tilde_slash = f(a<b,c>~/d);
+ ^^
+
beginCompilationUnit(var)
beginMetadataStar(var)
endMetadataStar(0)
beginTopLevelMember(var)
beginFields()
handleNoType(var)
- handleIdentifier(typeArgs_ampersand, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(&)
- handleLiteralInt(0)
- endBinaryExpression(&)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_as, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginAsOperatorType(as)
- handleIdentifier(int, typeReference)
- handleNoTypeArguments(;)
- handleType(int, null)
- endAsOperatorType(as)
- handleAsOperator(as)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_asterisk, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(*)
- handleLiteralInt(0)
- endBinaryExpression(*)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_bar, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(|)
- handleLiteralInt(0)
- endBinaryExpression(|)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_caret, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(^)
- handleLiteralInt(0)
- endBinaryExpression(^)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleNoTypeArguments({)
@@ -308,35 +243,6 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_is, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginIsOperatorType(is)
- handleIdentifier(int, typeReference)
- handleNoTypeArguments(;)
- handleType(int, null)
- endIsOperatorType(is)
- handleIsOperator(is, null)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
handleIdentifier(typeArgs_not_equals, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
@@ -385,32 +291,6 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_percent, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(%)
- handleLiteralInt(0)
- endBinaryExpression(%)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
handleIdentifier(typeArgs_period_methodInvocation, topLevelVariableDeclaration)
beginFieldInitializer(=)
beginImplicitCreationExpression(=)
@@ -470,37 +350,6 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_period_period, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginCascade(..)
- handleIdentifier(toString, expressionContinuation)
- handleNoTypeArguments(()
- beginArguments(()
- endArguments(0, (, ))
- handleSend(toString, ;)
- handleEndingBinaryExpression(..)
- endCascade()
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
handleIdentifier(typeArgs_period_propertyAccess, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
@@ -529,207 +378,6 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_plus, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(+)
- handleLiteralInt(0)
- endBinaryExpression(+)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginConditionalExpression(?)
- handleLiteralNull(null)
- handleConditionalExpressionColon()
- handleLiteralNull(null)
- endConditionalExpression(?, :)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question_period_methodInvocation, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- handleIdentifier(toString, expressionContinuation)
- handleNoTypeArguments(()
- beginArguments(()
- endArguments(0, (, ))
- handleSend(toString, ;)
- handleEndingBinaryExpression(?.)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question_period_methodInvocation_generic, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- handleIdentifier(foo, expressionContinuation)
- beginTypeArguments(<)
- handleIdentifier(c, typeReference)
- handleNoTypeArguments(>)
- handleType(c, null)
- endTypeArguments(1, <, >)
- beginArguments(()
- endArguments(0, (, ))
- handleSend(foo, ;)
- handleEndingBinaryExpression(?.)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question_period_period, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginCascade(?..)
- handleIdentifier(toString, expressionContinuation)
- handleNoTypeArguments(()
- beginArguments(()
- endArguments(0, (, ))
- handleSend(toString, ;)
- handleEndingBinaryExpression(?..)
- endCascade()
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question_period_propertyAccess, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- handleIdentifier(hashCode, expressionContinuation)
- handleNoTypeArguments(;)
- handleNoArguments(;)
- handleSend(hashCode, ;)
- handleEndingBinaryExpression(?.)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
- handleIdentifier(typeArgs_question_question, topLevelVariableDeclaration)
- beginFieldInitializer(=)
- handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
- handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(??)
- handleLiteralInt(0)
- endBinaryExpression(??)
- endFieldInitializer(=, ;)
- endTopLevelFields(null, null, null, null, var, 1, var, ;)
- endTopLevelDeclaration(var)
- beginMetadataStar(var)
- endMetadataStar(0)
- beginTopLevelMember(var)
- beginFields(;)
- handleNoType(var)
handleIdentifier(typeArgs_semicolon, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
@@ -753,24 +401,40 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_slash, topLevelVariableDeclaration)
+ handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(/)
- handleLiteralInt(1)
- endBinaryExpression(/)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '&'., Try inserting an identifier before '&'., {lexeme: &}], &, &)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(&)
+ handleNoArguments(&)
+ handleSend(, &)
+ beginBinaryExpression(&)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(&)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
endFieldInitializer(=, ;)
endTopLevelFields(null, null, null, null, var, 1, var, ;)
endTopLevelDeclaration(var)
@@ -779,24 +443,75 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
- handleIdentifier(typeArgs_tilde_slash, topLevelVariableDeclaration)
+ handleIdentifier(operators_as, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
- handleNoTypeArguments(<)
- handleNoArguments(<)
- handleSend(f, <)
- beginTypeArguments(<)
- handleIdentifier(a, typeReference)
- handleNoTypeArguments(,)
- handleType(a, null)
- handleIdentifier(b, typeReference)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
handleNoTypeArguments(>)
- handleType(b, null)
- endTypeArguments(2, <, >)
- handleTypeArgumentApplication(<)
- beginBinaryExpression(~/)
- handleLiteralInt(1)
- endBinaryExpression(~/)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleIdentifier(as, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(as, ))
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '*'., Try inserting an identifier before '*'., {lexeme: *}], *, *)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(*)
+ handleNoArguments(*)
+ handleSend(, *)
+ beginBinaryExpression(*)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(*)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
endFieldInitializer(=, ;)
endTopLevelFields(null, null, null, null, var, 1, var, ;)
endTopLevelDeclaration(var)
@@ -880,6 +595,132 @@
beginTopLevelMember(var)
beginFields(;)
handleNoType(var)
+ handleIdentifier(operators_bar, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '|'., Try inserting an identifier before '|'., {lexeme: |}], |, |)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(|)
+ handleNoArguments(|)
+ handleSend(, |)
+ beginBinaryExpression(|)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(|)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_caret, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '^'., Try inserting an identifier before '^'., {lexeme: ^}], ^, ^)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(^)
+ handleNoArguments(^)
+ handleSend(, ^)
+ beginBinaryExpression(^)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(^)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_is, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(is)
+ handleNoArguments(is)
+ handleSend(, is)
+ endBinaryExpression(>)
+ beginIsOperatorType(is)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ endIsOperatorType(is)
+ handleIsOperator(is, null)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
handleIdentifier(operators_lessThan, topLevelVariableDeclaration)
beginFieldInitializer(=)
handleIdentifier(f, expression)
@@ -1062,5 +903,471 @@
handleSend(f, ;)
endFieldInitializer(=, ;)
endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_percent, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '%'., Try inserting an identifier before '%'., {lexeme: %}], %, %)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(%)
+ handleNoArguments(%)
+ handleSend(, %)
+ beginBinaryExpression(%)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(%)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_period_period, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '..'., Try inserting an identifier before '..'., {lexeme: ..}], .., ..)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(..)
+ handleNoArguments(..)
+ handleSend(, ..)
+ endBinaryExpression(>)
+ beginCascade(..)
+ handleIdentifier(toString, expressionContinuation)
+ handleNoTypeArguments(()
+ beginArguments(()
+ endArguments(0, (, ))
+ handleSend(toString, ))
+ handleEndingBinaryExpression(..)
+ endCascade()
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_plus, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(UnsupportedPrefixPlus, +, +)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(+)
+ handleNoArguments(+)
+ handleSend(, +)
+ beginBinaryExpression(+)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(+)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?'., Try inserting an identifier before '?'., {lexeme: ?}], ?, ?)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(?)
+ handleNoArguments(?)
+ handleSend(, ?)
+ endBinaryExpression(>)
+ beginConditionalExpression(?)
+ handleLiteralNull(null)
+ handleConditionalExpressionColon()
+ handleLiteralNull(null)
+ endConditionalExpression(?, :)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(?.)
+ handleNoArguments(?.)
+ handleSend(, ?.)
+ handleIdentifier(toString, expressionContinuation)
+ handleNoTypeArguments(()
+ beginArguments(()
+ endArguments(0, (, ))
+ handleSend(toString, ))
+ handleEndingBinaryExpression(?.)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(?.)
+ handleNoArguments(?.)
+ handleSend(, ?.)
+ handleIdentifier(foo, expressionContinuation)
+ beginTypeArguments(<)
+ handleIdentifier(c, typeReference)
+ handleNoTypeArguments(>)
+ handleType(c, null)
+ endTypeArguments(1, <, >)
+ beginArguments(()
+ endArguments(0, (, ))
+ handleSend(foo, ))
+ handleEndingBinaryExpression(?.)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?..'., Try inserting an identifier before '?..'., {lexeme: ?..}], ?.., ?..)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(toString)
+ handleNoArguments(toString)
+ handleSend(, toString)
+ endBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], toString, toString)
+ handleIdentifier(toString, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ endArguments(0, (, ))
+ handleSend(toString, ))
+ endArguments(3, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(?.)
+ handleNoArguments(?.)
+ handleSend(, ?.)
+ handleIdentifier(hashCode, expressionContinuation)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(hashCode, ))
+ handleEndingBinaryExpression(?.)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_question_question, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '??'., Try inserting an identifier before '??'., {lexeme: ??}], ??, ??)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(??)
+ handleNoArguments(??)
+ handleSend(, ??)
+ endBinaryExpression(>)
+ beginBinaryExpression(??)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(??)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_slash, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '/'., Try inserting an identifier before '/'., {lexeme: /}], /, /)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(/)
+ handleNoArguments(/)
+ handleSend(, /)
+ beginBinaryExpression(/)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(/)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ endTopLevelDeclaration(var)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ beginTopLevelMember(var)
+ beginFields(;)
+ handleNoType(var)
+ handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
+ beginFieldInitializer(=)
+ handleIdentifier(f, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(a, expression)
+ handleNoTypeArguments(<)
+ handleNoArguments(<)
+ handleSend(a, <)
+ beginBinaryExpression(<)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(,)
+ handleNoArguments(,)
+ handleSend(b, ,)
+ endBinaryExpression(<)
+ handleIdentifier(c, expression)
+ handleNoTypeArguments(>)
+ handleNoArguments(>)
+ handleSend(c, >)
+ beginBinaryExpression(>)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '~/'., Try inserting an identifier before '~/'., {lexeme: ~/}], ~/, ~/)
+ handleIdentifier(, expression)
+ handleNoTypeArguments(~/)
+ handleNoArguments(~/)
+ handleSend(, ~/)
+ beginBinaryExpression(~/)
+ handleIdentifier(d, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(d, ))
+ endBinaryExpression(~/)
+ endBinaryExpression(>)
+ endArguments(2, (, ))
+ handleSend(f, ;)
+ endFieldInitializer(=, ;)
+ endTopLevelFields(null, null, null, null, var, 1, var, ;)
endTopLevelDeclaration()
endCompilationUnit(36, )
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
index dff1e80..ffafde7 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.intertwined.expect
@@ -8,237 +8,10 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl()
listener: beginTopLevelMember(var)
- parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_ampersand, DeclarationKind.TopLevel, null, false)
+ parseFields(, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
listener: beginFields()
listener: handleNoType(var)
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_ampersand, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_ampersand, typeArgs_ampersand, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(&)
- parsePrecedenceExpression(&, 12, true)
- parseUnaryExpression(&, true)
- parsePrimary(&, expression)
- parseLiteralInt(&)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(&)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_as, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_as, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_as, typeArgs_as, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parseAsOperatorRest(>)
- listener: beginAsOperatorType(as)
- computeTypeAfterIsOrAs(as)
- listener: handleIdentifier(int, typeReference)
- listener: handleNoTypeArguments(;)
- listener: handleType(int, null)
- listener: endAsOperatorType(as)
- listener: handleAsOperator(as)
- skipChainedAsIsOperators(int)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_asterisk, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_asterisk, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_asterisk, typeArgs_asterisk, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(*)
- parsePrecedenceExpression(*, 15, true)
- parseUnaryExpression(*, true)
- parsePrimary(*, expression)
- parseLiteralInt(*)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(*)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_bar, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_bar, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_bar, typeArgs_bar, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(|)
- parsePrecedenceExpression(|, 10, true)
- parseUnaryExpression(|, true)
- parsePrimary(|, expression)
- parseLiteralInt(|)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(|)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_caret, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_caret, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_caret, typeArgs_caret, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(^)
- parsePrecedenceExpression(^, 11, true)
- parseUnaryExpression(^, true)
- parsePrimary(^, expression)
- parseLiteralInt(^)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(^)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_closeBrace, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
listener: handleIdentifier(typeArgs_closeBrace, topLevelVariableDeclaration)
parseFieldInitializerOpt(typeArgs_closeBrace, typeArgs_closeBrace, null, null, null, var, DeclarationKind.TopLevel, null)
listener: beginFieldInitializer(=)
@@ -528,53 +301,6 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_is, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_is, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_is, typeArgs_is, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parseIsOperatorRest(>)
- listener: beginIsOperatorType(is)
- computeTypeAfterIsOrAs(is)
- listener: handleIdentifier(int, typeReference)
- listener: handleNoTypeArguments(;)
- listener: handleType(int, null)
- listener: endIsOperatorType(is)
- listener: handleIsOperator(is, null)
- skipChainedAsIsOperators(int)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_not_equals, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
@@ -660,51 +386,6 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_percent, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_percent, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_percent, typeArgs_percent, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(%)
- parsePrecedenceExpression(%, 15, true)
- parseUnaryExpression(%, true)
- parsePrimary(%, expression)
- parseLiteralInt(%)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(%)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_methodInvocation, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
@@ -804,60 +485,6 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_period, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_period_period, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_period_period, typeArgs_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parseCascadeExpression(>)
- listener: beginCascade(..)
- parseSend(.., expressionContinuation)
- isNextIdentifier(..)
- ensureIdentifier(.., expressionContinuation)
- listener: handleIdentifier(toString, expressionContinuation)
- listener: handleNoTypeArguments(()
- parseArgumentsOpt(toString)
- parseArguments(toString)
- parseArgumentsRest(()
- listener: beginArguments(()
- listener: endArguments(0, (, ))
- listener: handleSend(toString, ;)
- listener: handleEndingBinaryExpression(..)
- parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
- listener: endCascade()
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_period_propertyAccess, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
@@ -907,364 +534,6 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_plus, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_plus, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_plus, typeArgs_plus, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(+)
- parsePrecedenceExpression(+, 14, true)
- parseUnaryExpression(+, true)
- parsePrimary(+, expression)
- parseLiteralInt(+)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(+)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question, typeArgs_question, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parseConditionalExpressionRest(>)
- listener: beginConditionalExpression(?)
- parseExpressionWithoutCascade(?)
- parsePrecedenceExpression(?, 1, false)
- parseUnaryExpression(?, false)
- parsePrimary(?, expression)
- parseLiteralNull(?)
- listener: handleLiteralNull(null)
- ensureColon(null)
- listener: handleConditionalExpressionColon()
- parseExpressionWithoutCascade(:)
- parsePrecedenceExpression(:, 1, false)
- parseUnaryExpression(:, false)
- parsePrimary(:, expression)
- parseLiteralNull(:)
- listener: handleLiteralNull(null)
- listener: endConditionalExpression(?, :)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question_period_methodInvocation, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question_period_methodInvocation, typeArgs_question_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parsePrimary(?., expressionContinuation)
- parseSendOrFunctionLiteral(?., expressionContinuation)
- looksLikeFunctionBody(;)
- parseSend(?., expressionContinuation)
- isNextIdentifier(?.)
- ensureIdentifier(?., expressionContinuation)
- listener: handleIdentifier(toString, expressionContinuation)
- listener: handleNoTypeArguments(()
- parseArgumentsOpt(toString)
- parseArguments(toString)
- parseArgumentsRest(()
- listener: beginArguments(()
- listener: endArguments(0, (, ))
- listener: handleSend(toString, ;)
- listener: handleEndingBinaryExpression(?.)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question_period_methodInvocation_generic, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question_period_methodInvocation_generic, typeArgs_question_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parsePrimary(?., expressionContinuation)
- parseSendOrFunctionLiteral(?., expressionContinuation)
- looksLikeFunctionBody(;)
- parseSend(?., expressionContinuation)
- isNextIdentifier(?.)
- ensureIdentifier(?., expressionContinuation)
- listener: handleIdentifier(foo, expressionContinuation)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(c, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(c, null)
- listener: endTypeArguments(1, <, >)
- parseArgumentsOpt(>)
- parseArguments(>)
- parseArgumentsRest(()
- listener: beginArguments(()
- listener: endArguments(0, (, ))
- listener: handleSend(foo, ;)
- listener: handleEndingBinaryExpression(?.)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_period, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question_period_period, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question_period_period, typeArgs_question_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parseCascadeExpression(>)
- listener: beginCascade(?..)
- parseSend(?.., expressionContinuation)
- isNextIdentifier(?..)
- ensureIdentifier(?.., expressionContinuation)
- listener: handleIdentifier(toString, expressionContinuation)
- listener: handleNoTypeArguments(()
- parseArgumentsOpt(toString)
- parseArguments(toString)
- parseArgumentsRest(()
- listener: beginArguments(()
- listener: endArguments(0, (, ))
- listener: handleSend(toString, ;)
- listener: handleEndingBinaryExpression(?..)
- parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
- listener: endCascade()
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question_period_propertyAccess, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question_period_propertyAccess, typeArgs_question_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- parsePrimary(?., expressionContinuation)
- parseSendOrFunctionLiteral(?., expressionContinuation)
- parseSend(?., expressionContinuation)
- isNextIdentifier(?.)
- ensureIdentifier(?., expressionContinuation)
- listener: handleIdentifier(hashCode, expressionContinuation)
- listener: handleNoTypeArguments(;)
- parseArgumentsOpt(hashCode)
- listener: handleNoArguments(;)
- listener: handleSend(hashCode, ;)
- listener: handleEndingBinaryExpression(?.)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_question_question, DeclarationKind.TopLevel, null, false)
- listener: beginFields(;)
- listener: handleNoType(var)
- ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_question_question, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_question_question, typeArgs_question_question, null, null, null, var, DeclarationKind.TopLevel, null)
- listener: beginFieldInitializer(=)
- parseExpression(=)
- parsePrecedenceExpression(=, 1, true)
- parseUnaryExpression(=, true)
- parsePrimary(=, expression)
- parseSendOrFunctionLiteral(=, expression)
- parseSend(=, expression)
- isNextIdentifier(=)
- ensureIdentifier(=, expression)
- listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
- parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(??)
- parsePrecedenceExpression(??, 5, true)
- parseUnaryExpression(??, true)
- parsePrimary(??, expression)
- parseLiteralInt(??)
- listener: handleLiteralInt(0)
- listener: endBinaryExpression(??)
- listener: endFieldInitializer(=, ;)
- listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
- listener: endTopLevelDeclaration(var)
- parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
- parseMetadataStar(;)
- listener: beginMetadataStar(var)
- listener: endMetadataStar(0)
- parseTopLevelMemberImpl(;)
- listener: beginTopLevelMember(var)
parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_semicolon, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
@@ -1303,42 +572,100 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_slash, DeclarationKind.TopLevel, null, false)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_ampersand, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_slash, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_slash, typeArgs_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: handleIdentifier(operators_ampersand, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_ampersand, operators_ampersand, null, null, null, var, DeclarationKind.TopLevel, null)
listener: beginFieldInitializer(=)
parseExpression(=)
parsePrecedenceExpression(=, 1, true)
parseUnaryExpression(=, true)
parsePrimary(=, expression)
parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
parseSend(=, expression)
isNextIdentifier(=)
ensureIdentifier(=, expression)
listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
+ listener: handleNoTypeArguments(()
parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(/)
- parsePrecedenceExpression(/, 15, true)
- parseUnaryExpression(/, true)
- parsePrimary(/, expression)
- parseLiteralInt(/)
- listener: handleLiteralInt(1)
- listener: endBinaryExpression(/)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(&, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '&'., Try inserting an identifier before '&'., {lexeme: &}], &, &)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(&)
+ parseArgumentsOpt()
+ listener: handleNoArguments(&)
+ listener: handleSend(, &)
+ listener: beginBinaryExpression(&)
+ parsePrecedenceExpression(&, 12, true)
+ parseUnaryExpression(&, true)
+ parsePrimary(&, expression)
+ parseSendOrFunctionLiteral(&, expression)
+ parseSend(&, expression)
+ isNextIdentifier(&)
+ ensureIdentifier(&, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(&)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
listener: endFieldInitializer(=, ;)
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
listener: endTopLevelDeclaration(var)
@@ -1348,42 +675,189 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
- parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', typeArgs_tilde_slash, DeclarationKind.TopLevel, null, false)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_as, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
- listener: handleIdentifier(typeArgs_tilde_slash, topLevelVariableDeclaration)
- parseFieldInitializerOpt(typeArgs_tilde_slash, typeArgs_tilde_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: handleIdentifier(operators_as, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_as, operators_as, null, null, null, var, DeclarationKind.TopLevel, null)
listener: beginFieldInitializer(=)
parseExpression(=)
parsePrecedenceExpression(=, 1, true)
parseUnaryExpression(=, true)
parsePrimary(=, expression)
parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
parseSend(=, expression)
isNextIdentifier(=)
ensureIdentifier(=, expression)
listener: handleIdentifier(f, expression)
- listener: handleNoTypeArguments(<)
+ listener: handleNoTypeArguments(()
parseArgumentsOpt(f)
- listener: handleNoArguments(<)
- listener: handleSend(f, <)
- listener: beginTypeArguments(<)
- listener: handleIdentifier(a, typeReference)
- listener: handleNoTypeArguments(,)
- listener: handleType(a, null)
- listener: handleIdentifier(b, typeReference)
- listener: handleNoTypeArguments(>)
- listener: handleType(b, null)
- listener: endTypeArguments(2, <, >)
- listener: handleTypeArgumentApplication(<)
- listener: beginBinaryExpression(~/)
- parsePrecedenceExpression(~/, 15, true)
- parseUnaryExpression(~/, true)
- parsePrimary(~/, expression)
- parseLiteralInt(~/)
- listener: handleLiteralInt(1)
- listener: endBinaryExpression(~/)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ inPlainSync()
+ parseSendOrFunctionLiteral(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ inPlainSync()
+ listener: handleIdentifier(as, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(as)
+ listener: handleNoArguments())
+ listener: handleSend(as, ))
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_asterisk, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_asterisk, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_asterisk, operators_asterisk, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(*, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '*'., Try inserting an identifier before '*'., {lexeme: *}], *, *)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(*)
+ parseArgumentsOpt()
+ listener: handleNoArguments(*)
+ listener: handleSend(, *)
+ listener: beginBinaryExpression(*)
+ parsePrecedenceExpression(*, 15, true)
+ parseUnaryExpression(*, true)
+ parsePrimary(*, expression)
+ parseSendOrFunctionLiteral(*, expression)
+ parseSend(*, expression)
+ isNextIdentifier(*)
+ ensureIdentifier(*, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(*)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
listener: endFieldInitializer(=, ;)
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
listener: endTopLevelDeclaration(var)
@@ -1590,6 +1064,311 @@
listener: endMetadataStar(0)
parseTopLevelMemberImpl(;)
listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_bar, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_bar, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_bar, operators_bar, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(|, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '|'., Try inserting an identifier before '|'., {lexeme: |}], |, |)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(|)
+ parseArgumentsOpt()
+ listener: handleNoArguments(|)
+ listener: handleSend(, |)
+ listener: beginBinaryExpression(|)
+ parsePrecedenceExpression(|, 10, true)
+ parseUnaryExpression(|, true)
+ parsePrimary(|, expression)
+ parseSendOrFunctionLiteral(|, expression)
+ parseSend(|, expression)
+ isNextIdentifier(|)
+ ensureIdentifier(|, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(|)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_caret, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_caret, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_caret, operators_caret, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(^, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '^'., Try inserting an identifier before '^'., {lexeme: ^}], ^, ^)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(^)
+ parseArgumentsOpt()
+ listener: handleNoArguments(^)
+ listener: handleSend(, ^)
+ listener: beginBinaryExpression(^)
+ parsePrecedenceExpression(^, 11, true)
+ parseUnaryExpression(^, true)
+ parsePrimary(^, expression)
+ parseSendOrFunctionLiteral(^, expression)
+ parseSend(^, expression)
+ isNextIdentifier(^)
+ ensureIdentifier(^, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(^)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_is, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_is, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_is, operators_is, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ inPlainSync()
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got 'is'., Try inserting an identifier before 'is'., {lexeme: is}], is, is)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(is)
+ parseArgumentsOpt()
+ listener: handleNoArguments(is)
+ listener: handleSend(, is)
+ listener: endBinaryExpression(>)
+ parseIsOperatorRest()
+ listener: beginIsOperatorType(is)
+ computeTypeAfterIsOrAs(is)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: endIsOperatorType(is)
+ listener: handleIsOperator(is, null)
+ skipChainedAsIsOperators(int)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_lessThan, DeclarationKind.TopLevel, null, false)
listener: beginFields(;)
listener: handleNoType(var)
@@ -2048,6 +1827,1156 @@
listener: handleSend(f, ;)
listener: endFieldInitializer(=, ;)
listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_percent, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_percent, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_percent, operators_percent, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(%, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '%'., Try inserting an identifier before '%'., {lexeme: %}], %, %)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(%)
+ parseArgumentsOpt()
+ listener: handleNoArguments(%)
+ listener: handleSend(, %)
+ listener: beginBinaryExpression(%)
+ parsePrecedenceExpression(%, 15, true)
+ parseUnaryExpression(%, true)
+ parsePrimary(%, expression)
+ parseSendOrFunctionLiteral(%, expression)
+ parseSend(%, expression)
+ isNextIdentifier(%)
+ ensureIdentifier(%, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(%)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_period_period, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_period_period, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_period_period, operators_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(.., Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '..'., Try inserting an identifier before '..'., {lexeme: ..}], .., ..)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(..)
+ parseArgumentsOpt()
+ listener: handleNoArguments(..)
+ listener: handleSend(, ..)
+ listener: endBinaryExpression(>)
+ parseCascadeExpression()
+ listener: beginCascade(..)
+ parseSend(.., expressionContinuation)
+ isNextIdentifier(..)
+ ensureIdentifier(.., expressionContinuation)
+ listener: handleIdentifier(toString, expressionContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(toString)
+ parseArguments(toString)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ listener: endArguments(0, (, ))
+ listener: handleSend(toString, ))
+ listener: handleEndingBinaryExpression(..)
+ parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
+ listener: endCascade()
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_plus, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_plus, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_plus, operators_plus, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ rewriteAndRecover(>, UnsupportedPrefixPlus, )
+ reportRecoverableError(+, UnsupportedPrefixPlus)
+ listener: handleRecoverableError(UnsupportedPrefixPlus, +, +)
+ rewriter()
+ parsePrimary(>, expression)
+ parseSendOrFunctionLiteral(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(+)
+ parseArgumentsOpt()
+ listener: handleNoArguments(+)
+ listener: handleSend(, +)
+ listener: beginBinaryExpression(+)
+ parsePrecedenceExpression(+, 14, true)
+ parseUnaryExpression(+, true)
+ parsePrimary(+, expression)
+ parseSendOrFunctionLiteral(+, expression)
+ parseSend(+, expression)
+ isNextIdentifier(+)
+ ensureIdentifier(+, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(+)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question, operators_question, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(?, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?'., Try inserting an identifier before '?'., {lexeme: ?}], ?, ?)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(?)
+ parseArgumentsOpt()
+ listener: handleNoArguments(?)
+ listener: handleSend(, ?)
+ listener: endBinaryExpression(>)
+ parseConditionalExpressionRest()
+ listener: beginConditionalExpression(?)
+ parseExpressionWithoutCascade(?)
+ parsePrecedenceExpression(?, 1, false)
+ parseUnaryExpression(?, false)
+ parsePrimary(?, expression)
+ parseLiteralNull(?)
+ listener: handleLiteralNull(null)
+ ensureColon(null)
+ listener: handleConditionalExpressionColon()
+ parseExpressionWithoutCascade(:)
+ parsePrecedenceExpression(:, 1, false)
+ parseUnaryExpression(:, false)
+ parsePrimary(:, expression)
+ parseLiteralNull(:)
+ listener: handleLiteralNull(null)
+ listener: endConditionalExpression(?, :)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question_period_methodInvocation, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question_period_methodInvocation, operators_question_period_methodInvocation, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(?.)
+ parseArgumentsOpt()
+ listener: handleNoArguments(?.)
+ listener: handleSend(, ?.)
+ parsePrimary(?., expressionContinuation)
+ parseSendOrFunctionLiteral(?., expressionContinuation)
+ looksLikeFunctionBody())
+ parseSend(?., expressionContinuation)
+ isNextIdentifier(?.)
+ ensureIdentifier(?., expressionContinuation)
+ listener: handleIdentifier(toString, expressionContinuation)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(toString)
+ parseArguments(toString)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ listener: endArguments(0, (, ))
+ listener: handleSend(toString, ))
+ listener: handleEndingBinaryExpression(?.)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_methodInvocation_generic, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question_period_methodInvocation_generic, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question_period_methodInvocation_generic, operators_question_period_methodInvocation_generic, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(?.)
+ parseArgumentsOpt()
+ listener: handleNoArguments(?.)
+ listener: handleSend(, ?.)
+ parsePrimary(?., expressionContinuation)
+ parseSendOrFunctionLiteral(?., expressionContinuation)
+ looksLikeFunctionBody())
+ parseSend(?., expressionContinuation)
+ isNextIdentifier(?.)
+ ensureIdentifier(?., expressionContinuation)
+ listener: handleIdentifier(foo, expressionContinuation)
+ listener: beginTypeArguments(<)
+ listener: handleIdentifier(c, typeReference)
+ listener: handleNoTypeArguments(>)
+ listener: handleType(c, null)
+ listener: endTypeArguments(1, <, >)
+ parseArgumentsOpt(>)
+ parseArguments(>)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ listener: endArguments(0, (, ))
+ listener: handleSend(foo, ))
+ listener: handleEndingBinaryExpression(?.)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_period, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question_period_period, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question_period_period, operators_question_period_period, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(?.., Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?..'., Try inserting an identifier before '?..'., {lexeme: ?..}], ?.., ?..)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(toString)
+ parseArgumentsOpt()
+ listener: handleNoArguments(toString)
+ listener: handleSend(, toString)
+ listener: endBinaryExpression(>)
+ rewriteAndRecover(, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], ,)
+ reportRecoverableError(toString, Message[ExpectedButGot, Expected ',' before this., null, {string: ,}])
+ listener: handleRecoverableError(Message[ExpectedButGot, Expected ',' before this., null, {string: ,}], toString, toString)
+ rewriter()
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ looksLikeFunctionBody())
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(toString, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(toString)
+ parseArguments(toString)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ listener: endArguments(0, (, ))
+ listener: handleSend(toString, ))
+ listener: endArguments(3, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_period_propertyAccess, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question_period_propertyAccess, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question_period_propertyAccess, operators_question_period_propertyAccess, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(?., Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '?.'., Try inserting an identifier before '?.'., {lexeme: ?.}], ?., ?.)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(?.)
+ parseArgumentsOpt()
+ listener: handleNoArguments(?.)
+ listener: handleSend(, ?.)
+ parsePrimary(?., expressionContinuation)
+ parseSendOrFunctionLiteral(?., expressionContinuation)
+ parseSend(?., expressionContinuation)
+ isNextIdentifier(?.)
+ ensureIdentifier(?., expressionContinuation)
+ listener: handleIdentifier(hashCode, expressionContinuation)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(hashCode)
+ listener: handleNoArguments())
+ listener: handleSend(hashCode, ))
+ listener: handleEndingBinaryExpression(?.)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_question_question, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_question_question, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_question_question, operators_question_question, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(??, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '??'., Try inserting an identifier before '??'., {lexeme: ??}], ??, ??)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(??)
+ parseArgumentsOpt()
+ listener: handleNoArguments(??)
+ listener: handleSend(, ??)
+ listener: endBinaryExpression(>)
+ listener: beginBinaryExpression(??)
+ parsePrecedenceExpression(??, 5, true)
+ parseUnaryExpression(??, true)
+ parsePrimary(??, expression)
+ parseSendOrFunctionLiteral(??, expression)
+ parseSend(??, expression)
+ isNextIdentifier(??)
+ ensureIdentifier(??, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(??)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_slash, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_slash, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_slash, operators_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(/, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '/'., Try inserting an identifier before '/'., {lexeme: /}], /, /)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(/)
+ parseArgumentsOpt()
+ listener: handleNoArguments(/)
+ listener: handleSend(, /)
+ listener: beginBinaryExpression(/)
+ parsePrecedenceExpression(/, 15, true)
+ parseUnaryExpression(/, true)
+ parsePrimary(/, expression)
+ parseSendOrFunctionLiteral(/, expression)
+ parseSend(/, expression)
+ isNextIdentifier(/)
+ ensureIdentifier(/, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(/)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
+ listener: endTopLevelDeclaration(var)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(;)
+ listener: beginTopLevelMember(var)
+ parseFields(;, null, null, null, null, null, var, var, Instance of 'NoType', operators_tilde_slash, DeclarationKind.TopLevel, null, false)
+ listener: beginFields(;)
+ listener: handleNoType(var)
+ ensureIdentifierPotentiallyRecovered(var, topLevelVariableDeclaration, false)
+ listener: handleIdentifier(operators_tilde_slash, topLevelVariableDeclaration)
+ parseFieldInitializerOpt(operators_tilde_slash, operators_tilde_slash, null, null, null, var, DeclarationKind.TopLevel, null)
+ listener: beginFieldInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseSendOrFunctionLiteral(=, expression)
+ looksLikeFunctionBody(;)
+ parseSend(=, expression)
+ isNextIdentifier(=)
+ ensureIdentifier(=, expression)
+ listener: handleIdentifier(f, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(f)
+ parseArguments(f)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments(<)
+ parseArgumentsOpt(a)
+ listener: handleNoArguments(<)
+ listener: handleSend(a, <)
+ listener: beginBinaryExpression(<)
+ parsePrecedenceExpression(<, 9, true)
+ parseUnaryExpression(<, true)
+ parsePrimary(<, expression)
+ parseSendOrFunctionLiteral(<, expression)
+ parseSend(<, expression)
+ isNextIdentifier(<)
+ ensureIdentifier(<, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(,)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(,)
+ listener: handleSend(b, ,)
+ listener: endBinaryExpression(<)
+ parseExpression(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseSendOrFunctionLiteral(,, expression)
+ parseSend(,, expression)
+ isNextIdentifier(,)
+ ensureIdentifier(,, expression)
+ listener: handleIdentifier(c, expression)
+ listener: handleNoTypeArguments(>)
+ parseArgumentsOpt(c)
+ listener: handleNoArguments(>)
+ listener: handleSend(c, >)
+ listener: beginBinaryExpression(>)
+ parsePrecedenceExpression(>, 9, true)
+ parseUnaryExpression(>, true)
+ parsePrimary(>, expression)
+ parseSend(>, expression)
+ isNextIdentifier(>)
+ ensureIdentifier(>, expression)
+ reportRecoverableErrorWithToken(~/, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got '~/'., Try inserting an identifier before '~/'., {lexeme: ~/}], ~/, ~/)
+ rewriter()
+ listener: handleIdentifier(, expression)
+ listener: handleNoTypeArguments(~/)
+ parseArgumentsOpt()
+ listener: handleNoArguments(~/)
+ listener: handleSend(, ~/)
+ listener: beginBinaryExpression(~/)
+ parsePrecedenceExpression(~/, 15, true)
+ parseUnaryExpression(~/, true)
+ parsePrimary(~/, expression)
+ parseSendOrFunctionLiteral(~/, expression)
+ parseSend(~/, expression)
+ isNextIdentifier(~/)
+ ensureIdentifier(~/, expression)
+ listener: handleIdentifier(d, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(d)
+ listener: handleNoArguments())
+ listener: handleSend(d, ))
+ listener: endBinaryExpression(~/)
+ listener: endBinaryExpression(>)
+ listener: endArguments(2, (, ))
+ listener: handleSend(f, ;)
+ listener: endFieldInitializer(=, ;)
+ listener: endTopLevelFields(null, null, null, null, var, 1, var, ;)
listener: endTopLevelDeclaration()
reportAllErrorTokens(var)
listener: endCompilationUnit(36, )
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
index 0ccc331..9318b29 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.parser.expect
@@ -1,48 +1,25 @@
NOTICE: Stream was rewritten by parser!
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_as = f<a, b> as int;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
var typeArgs_closeBrace = {f<a, b>};
var typeArgs_closeBracket = [f<a, b>];
var typeArgs_closeParen = g(f<a, b>);
var typeArgs_colon = {f<a, b>: null};
var typeArgs_comma = [f<a, b>, null];
var typeArgs_equals = f<a, b> == null;
-var typeArgs_is = f<a, b> is int;
var typeArgs_not_equals = f<a, b> != null;
var typeArgs_openParen = f<a, b>();
-var typeArgs_percent = f<a, b> % 0;
-
var typeArgs_period_methodInvocation = f<a, b>.toString();
var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
-
-
-
-
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
@@ -51,24 +28,40 @@
+var operators_ampersand = f(a<b,c>*synthetic*&d);
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*synthetic**d);
+
var operators_bang_openBracket = f(a<b,c>![d]);
+
+
var operators_bang_paren = f(a<b,c>!(d));
+var operators_bar = f(a<b,c>*synthetic*|d);
+var operators_caret = f(a<b,c>*synthetic*^d);
+var operators_is = f(a<b,c> *synthetic*is int);
+
var operators_lessThan = f<a><b>[];
+
+
var operators_minus = f(a<b,c>-d);
+
+
+
var operators_openBracket = f(a<b,c>[d]);
@@ -78,52 +71,43 @@
var operators_openBracket_error = f(a<b,c>[d]>e);
+
+
var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
+var operators_percent = f(a<b,c>*synthetic*%d);
+var operators_period_period = f(a<b,c>*synthetic*..toString());
+var operators_plus = f(a<b,c>*synthetic*+d);
+var operators_question = f(a<b,c> *synthetic*? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>*synthetic*?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>*synthetic*?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..*synthetic*,toString());
+var operators_question_period_propertyAccess = f(a<b,c>*synthetic*?.hashCode);
+var operators_question_question = f(a<b,c> *synthetic*?? d);
+var operators_slash = f(a<b,c>*synthetic*/d);
+var operators_tilde_slash = f(a<b,c>*synthetic*~/d);
-var[KeywordToken] typeArgs_ampersand[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] &[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_as[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] as[KeywordToken] int[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_asterisk[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] *[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_bar[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] |[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_caret[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ^[SimpleToken] 0[StringToken];[SimpleToken]
+
var[KeywordToken] typeArgs_closeBrace[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]}[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_closeBracket[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]][SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_closeParen[StringToken] =[SimpleToken] g[StringToken]([BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_colon[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]:[SimpleToken] null[KeywordToken]}[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_comma[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken],[SimpleToken] null[KeywordToken]][SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_equals[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ==[SimpleToken] null[KeywordToken];[SimpleToken]
-var[KeywordToken] typeArgs_is[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] is[KeywordToken] int[StringToken];[SimpleToken]
var[KeywordToken] typeArgs_not_equals[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] !=[SimpleToken] null[KeywordToken];[SimpleToken]
var[KeywordToken] typeArgs_openParen[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_percent[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] %[SimpleToken] 0[StringToken];[SimpleToken]
-
var[KeywordToken] typeArgs_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_plus[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] +[SimpleToken] 0[StringToken];[SimpleToken]
-
-
-
-
-var[KeywordToken] typeArgs_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken];[SimpleToken]
-
-var[KeywordToken] typeArgs_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ??[SimpleToken] 0[StringToken];[SimpleToken]
var[KeywordToken] typeArgs_semicolon[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] /[SimpleToken] 1[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_tilde_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ~/[SimpleToken] 1[StringToken];[SimpleToken]
@@ -132,24 +116,40 @@
+var[KeywordToken] operators_ampersand[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]&[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_as[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]as[KeywordToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_asterisk[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]*[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
var[KeywordToken] operators_bang_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+
var[KeywordToken] operators_bang_paren[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken]([BeginToken]d[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_bar[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]|[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_caret[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]^[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_is[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]is[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+
var[KeywordToken] operators_lessThan[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken]>[SimpleToken]<[BeginToken]b[StringToken]>[SimpleToken][[SyntheticBeginToken]][SyntheticToken];[SimpleToken]
+
+
var[KeywordToken] operators_minus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]-[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
+
+
var[KeywordToken] operators_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
@@ -159,5 +159,19 @@
var[KeywordToken] operators_openBracket_error[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken]>[SimpleToken]e[StringToken])[SimpleToken];[SimpleToken]
+
+
var[KeywordToken] operators_openBracket_unambiguous[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken],[SimpleToken] e[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_percent[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]%[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_plus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]+[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?..[SimpleToken][SyntheticStringToken],[SyntheticToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]?.[SimpleToken]hashCode[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] [SyntheticStringToken]??[SimpleToken] d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_tilde_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][SyntheticStringToken]~/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
index 44f7742..401acc1 100644
--- a/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
+++ b/pkg/front_end/parser_testcases/general/function_reference_following_token.dart.scanner.expect
@@ -1,46 +1,23 @@
-var typeArgs_ampersand = f<a, b> & 0;
-var typeArgs_as = f<a, b> as int;
-var typeArgs_asterisk = f<a, b> * 0;
-var typeArgs_bar = f<a, b> | 0;
-var typeArgs_caret = f<a, b> ^ 0;
var typeArgs_closeBrace = {f<a, b>};
var typeArgs_closeBracket = [f<a, b>];
var typeArgs_closeParen = g(f<a, b>);
var typeArgs_colon = {f<a, b>: null};
var typeArgs_comma = [f<a, b>, null];
var typeArgs_equals = f<a, b> == null;
-var typeArgs_is = f<a, b> is int;
var typeArgs_not_equals = f<a, b> != null;
var typeArgs_openParen = f<a, b>();
-var typeArgs_percent = f<a, b> % 0;
-
var typeArgs_period_methodInvocation = f<a, b>.toString();
var typeArgs_period_methodInvocation_generic = f<a, b>.foo<c>();
-var typeArgs_period_period = f<a, b>..toString();
var typeArgs_period_propertyAccess = f<a, b>.hashCode;
-var typeArgs_plus = f<a, b> + 0;
-
-
-
-
-var typeArgs_question = f<a, b> ? null : null;
-
-var typeArgs_question_period_methodInvocation = f<a, b>?.toString();
-var typeArgs_question_period_methodInvocation_generic = f<a, b>?.foo<c>();
-var typeArgs_question_period_period = f<a, b>?..toString();
-var typeArgs_question_period_propertyAccess = f<a, b>?.hashCode;
-var typeArgs_question_question = f<a, b> ?? 0;
var typeArgs_semicolon = f<a, b>;
-var typeArgs_slash = f<a, b> / 1;
-var typeArgs_tilde_slash = f<a, b> ~/ 1;
@@ -49,24 +26,40 @@
+var operators_ampersand = f(a<b,c>&d);
+var operators_as = f(a<b,c>as);
+
+var operators_asterisk = f(a<b,c>*d);
+
var operators_bang_openBracket = f(a<b,c>![d]);
+
+
var operators_bang_paren = f(a<b,c>!(d));
+var operators_bar = f(a<b,c>|d);
+var operators_caret = f(a<b,c>^d);
+var operators_is = f(a<b,c> is int);
+
var operators_lessThan = f<a><b>;
+
+
var operators_minus = f(a<b,c>-d);
+
+
+
var operators_openBracket = f(a<b,c>[d]);
@@ -76,52 +69,43 @@
var operators_openBracket_error = f(a<b,c>[d]>e);
+
+
var operators_openBracket_unambiguous = f(a<b,c>[d, e]);
+var operators_percent = f(a<b,c>%d);
+var operators_period_period = f(a<b,c>..toString());
+var operators_plus = f(a<b,c>+d);
+var operators_question = f(a<b,c> ? null : null);
+var operators_question_period_methodInvocation = f(a<b,c>?.toString());
+var operators_question_period_methodInvocation_generic = f(a<b,c>?.foo<c>());
+var operators_question_period_period = f(a<b,c>?..toString());
+var operators_question_period_propertyAccess = f(a<b,c>?.hashCode);
+var operators_question_question = f(a<b,c> ?? d);
+var operators_slash = f(a<b,c>/d);
+var operators_tilde_slash = f(a<b,c>~/d);
-var[KeywordToken] typeArgs_ampersand[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] &[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_as[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] as[KeywordToken] int[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_asterisk[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] *[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_bar[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] |[SimpleToken] 0[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_caret[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ^[SimpleToken] 0[StringToken];[SimpleToken]
+
var[KeywordToken] typeArgs_closeBrace[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]}[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_closeBracket[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]][SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_closeParen[StringToken] =[SimpleToken] g[StringToken]([BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_colon[StringToken] =[SimpleToken] {[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]:[SimpleToken] null[KeywordToken]}[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_comma[StringToken] =[SimpleToken] [[BeginToken]f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken],[SimpleToken] null[KeywordToken]][SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_equals[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ==[SimpleToken] null[KeywordToken];[SimpleToken]
-var[KeywordToken] typeArgs_is[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] is[KeywordToken] int[StringToken];[SimpleToken]
var[KeywordToken] typeArgs_not_equals[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] !=[SimpleToken] null[KeywordToken];[SimpleToken]
var[KeywordToken] typeArgs_openParen[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_percent[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] %[SimpleToken] 0[StringToken];[SimpleToken]
-
var[KeywordToken] typeArgs_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
var[KeywordToken] typeArgs_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken].[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_plus[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] +[SimpleToken] 0[StringToken];[SimpleToken]
-
-
-
-
-var[KeywordToken] typeArgs_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken];[SimpleToken]
-
-var[KeywordToken] typeArgs_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_period[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_question_question[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ??[SimpleToken] 0[StringToken];[SimpleToken]
var[KeywordToken] typeArgs_semicolon[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken];[SimpleToken]
-var[KeywordToken] typeArgs_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] /[SimpleToken] 1[StringToken];[SimpleToken]
-var[KeywordToken] typeArgs_tilde_slash[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken],[SimpleToken] b[StringToken]>[SimpleToken] ~/[SimpleToken] 1[StringToken];[SimpleToken]
@@ -130,24 +114,40 @@
+var[KeywordToken] operators_ampersand[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]&[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_as[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]as[KeywordToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_asterisk[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]*[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
var[KeywordToken] operators_bang_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+
var[KeywordToken] operators_bang_paren[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]![SimpleToken]([BeginToken]d[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_bar[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]|[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_caret[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]^[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_is[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] is[KeywordToken] int[StringToken])[SimpleToken];[SimpleToken]
+
var[KeywordToken] operators_lessThan[StringToken] =[SimpleToken] f[StringToken]<[BeginToken]a[StringToken]>[SimpleToken]<[BeginToken]b[StringToken]>[SimpleToken];[SimpleToken]
+
+
var[KeywordToken] operators_minus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]-[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+
+
+
var[KeywordToken] operators_openBracket[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
@@ -157,5 +157,19 @@
var[KeywordToken] operators_openBracket_error[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken]][SimpleToken]>[SimpleToken]e[StringToken])[SimpleToken];[SimpleToken]
+
+
var[KeywordToken] operators_openBracket_unambiguous[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken][[BeginToken]d[StringToken],[SimpleToken] e[StringToken]][SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] operators_percent[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]%[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_plus[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]+[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] ?[SimpleToken] null[KeywordToken] :[SimpleToken] null[KeywordToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_methodInvocation_generic[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]foo[StringToken]<[BeginToken]c[StringToken]>[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_period[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?..[SimpleToken]toString[StringToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_period_propertyAccess[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]?.[SimpleToken]hashCode[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_question_question[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken] ??[SimpleToken] d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] operators_tilde_slash[StringToken] =[SimpleToken] f[StringToken]([BeginToken]a[StringToken]<[BeginToken]b[StringToken],[SimpleToken]c[StringToken]>[SimpleToken]~/[SimpleToken]d[StringToken])[SimpleToken];[SimpleToken]
[SimpleToken]
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index ea6bf68..69aec91 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -142,6 +142,7 @@
bsd
bslash
buffered
+buggy
builder`s
bulk
bump
@@ -559,6 +560,7 @@
i2b
ic
id
+ideal
identifies
identifying
ideographic
@@ -1260,6 +1262,7 @@
tflite
th
therein
+they'll
thought
ti
tick
diff --git a/pkg/nnbd_migration/lib/src/decorated_type_operations.dart b/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
index 3f38ca4..a93fa35 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type_operations.dart
@@ -4,6 +4,7 @@
import 'package:_fe_analyzer_shared/src/flow_analysis/flow_analysis.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_system.dart';
import 'package:nnbd_migration/src/decorated_type.dart';
import 'package:nnbd_migration/src/edge_origin.dart';
@@ -86,6 +87,10 @@
}
@override
+ bool isTypeParameterType(DecoratedType type) =>
+ type.type is TypeParameterType;
+
+ @override
DecoratedType promoteToNonNull(DecoratedType type) {
return type.withNode(_graph.never);
}
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index d155843..62cd9a3 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -377,10 +377,14 @@
var previousAssignedVariables = _assignedVariables;
if (_flowAnalysis == null) {
_assignedVariables = AssignedVariables();
+ // Note: we are using flow analysis to help us track true nullabilities;
+ // it's not necessary to replicate old bugs. So we pass `true` for
+ // `respectImplicitlyTypedVarInitializers`.
_flowAnalysis = FlowAnalysis<AstNode, Statement, Expression,
PromotableElement, DecoratedType>(
DecoratedTypeOperations(_typeSystem, _variables, _graph),
- _assignedVariables!);
+ _assignedVariables!,
+ respectImplicitlyTypedVarInitializers: true);
}
try {
_dispatch(node.name);
@@ -2110,10 +2114,14 @@
assert(_assignedVariables == null);
_assignedVariables =
FlowAnalysisHelper.computeAssignedVariables(node, parameters);
+ // Note: we are using flow analysis to help us track true nullabilities;
+ // it's not necessary to replicate old bugs. So we pass `true` for
+ // `respectImplicitlyTypedVarInitializers`.
_flowAnalysis = FlowAnalysis<AstNode, Statement, Expression,
PromotableElement, DecoratedType>(
DecoratedTypeOperations(_typeSystem, _variables, _graph),
- _assignedVariables!);
+ _assignedVariables!,
+ respectImplicitlyTypedVarInitializers: true);
if (parameters != null) {
for (var parameter in parameters.parameters) {
_flowAnalysis!.declare(parameter.declaredElement!, true);
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index cf136cc..5634a76 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -315,9 +315,15 @@
Constant? constantValue;
bool isInt = false;
- final nullable = type is NullableType;
+ // Note: the explicit type `bool` is needed because the checked-in version
+ // of the CFE that we use for bootstrapping doesn't yet have constructor
+ // tearoffs enabled, and the fix for bug
+ // https://github.com/dart-lang/language/issues/1785 only takes effect when
+ // constructor tearoffs are enabled. TODO(paulberry): remove the type after
+ // the bootstrap CFE enables constructor tearoffs.
+ final bool nullable = type is NullableType;
if (nullable) {
- type = (type as NullableType).baseType;
+ type = type.baseType;
}
if (nullable && type == const EmptyType()) {
diff --git a/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart
new file mode 100644
index 0000000..5fd4721
--- /dev/null
+++ b/tests/language/nnbd/flow_analysis/local_boolean_implicitly_typed_new_test.dart
@@ -0,0 +1,202 @@
+// Copyright (c) 2021, 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.
+
+// SharedOptions=--enable-experiment=constructor-tearoffs
+
+import '../../static_type_helper.dart';
+
+// This test checks whether a local boolean variable can be used to perform type
+// promotion, if that variable is implicitly typed.
+//
+// This test confirms that once the "constructor tearoffs" language feature is
+// enabled, initializer expressions on implicitly typed variables are no longer
+// ignored for the purposes of type promotion
+// (i.e. https://github.com/dart-lang/language/issues/1785 is fixed).
+
+parameterUnmodified(int? x) {
+ {
+ late final b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ late var b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+}
+
+parameterModifiedLater(int? x, int? y) {
+ x = y;
+ {
+ late final b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ late var b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+}
+
+localVariableInitialized(int? y) {
+ int? x = y;
+ {
+ late final b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ late var b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+}
+
+localVariableModifiedLater(int? y) {
+ int? x;
+ x = y;
+ {
+ late final b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ late var b = x != null;
+ // We don't promote based on the initializers of late locals anyhow, because
+ // we don't know when they execute.
+ if (b) x.expectStaticType<Exactly<int?>>();
+ }
+ {
+ late var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ final b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+ {
+ var b;
+ b = x != null;
+ if (b) x.expectStaticType<Exactly<int>>();
+ }
+}
+
+main() {
+ parameterUnmodified(null);
+ parameterUnmodified(0);
+ parameterModifiedLater(null, null);
+ parameterModifiedLater(null, 0);
+ localVariableInitialized(null);
+ localVariableInitialized(0);
+ localVariableModifiedLater(null);
+ localVariableModifiedLater(0);
+}
diff --git a/tools/VERSION b/tools/VERSION
index d534593..15b6cef 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 64
+PRERELEASE 65
PRERELEASE_PATCH 0
\ No newline at end of file