Version 2.14.0-224.0.dev
Merge commit 'b3a688a9c692fa769f48472e850a258e6cec152d' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9d9e862..4b4cef9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -87,6 +87,9 @@
* The `dart analyze` command has been extended to support specifying multiple
files or directories to analyze; see also https://github.com/dart-lang/sdk/issues/45352.
+* The `dartanalyzer` command's JSON output mode has been changed to emit the JSON
+ output on stdout instead of stderr.
+
#### Linter
Updated the Linter to `1.6.1`, which includes changes that
diff --git a/DEPS b/DEPS
index 8a1a74c..177e023 100644
--- a/DEPS
+++ b/DEPS
@@ -109,7 +109,7 @@
"dartdoc_rev" : "b733d4952dbd25374d55e28476a5f44bd60ed63f",
"devtools_rev" : "b3bf672474a2bff82f33e1176aa803539baa0d60+1",
"jsshell_tag": "version:88.0",
- "ffi_rev": "f3346299c55669cc0db48afae85b8110088bf8da",
+ "ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
"fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
"file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
"glob_rev": "a62acf590598f458d3198d9f2930c1c9dd4b1379",
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
index 4d51a7b..b2359965 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/identifier_context_impl.dart
@@ -58,9 +58,22 @@
}
// Recovery
- if (looksLikeStartOfNextTopLevelDeclaration(identifier) ||
- isOneOfOrEof(identifier,
- const ['<', '{', 'extends', 'with', 'implements', 'on'])) {
+ const List<String> afterIdentifier = const [
+ '<',
+ '{',
+ 'extends',
+ 'with',
+ 'implements',
+ 'on',
+ '=',
+ ];
+ if (identifier.isEof ||
+ (looksLikeStartOfNextTopLevelDeclaration(identifier) &&
+ (identifier.next == null ||
+ !isOneOfOrEof(identifier.next!, afterIdentifier))) ||
+ (isOneOfOrEof(identifier, afterIdentifier) &&
+ (identifier.next == null ||
+ !isOneOfOrEof(identifier.next!, afterIdentifier)))) {
identifier = parser.insertSyntheticIdentifier(token, this,
message: codes.templateExpectedIdentifier.withArguments(identifier));
} else if (identifier.type.isBuiltIn) {
@@ -548,8 +561,16 @@
}
// Recovery
- return parser.insertSyntheticIdentifier(token, this,
- message: codes.templateExpectedIdentifier.withArguments(identifier));
+ if (!identifier.isKeywordOrIdentifier) {
+ identifier = parser.insertSyntheticIdentifier(token, this,
+ message: codes.templateExpectedIdentifier.withArguments(identifier));
+ } else {
+ // Use the keyword as the identifier.
+ parser.reportRecoverableErrorWithToken(
+ identifier, codes.templateExpectedIdentifierButGotKeyword);
+ }
+
+ return identifier;
}
}
diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/analysis_server/benchmark/integration/main.dart
index 8f0a438..b63675e 100644
--- a/pkg/analysis_server/benchmark/integration/main.dart
+++ b/pkg/analysis_server/benchmark/integration/main.dart
@@ -141,7 +141,7 @@
perfArgs.inputPath = inputArg;
}
- for (String pair in args[MAP_OPTION]) {
+ for (var pair in args[MAP_OPTION]) {
if (pair is String) {
var index = pair.indexOf(',');
if (index != -1 && !pair.contains(',', index + 1)) {
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 8c0af08..6db03d6 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -100,6 +100,9 @@
if (_addIdentifierRegion_class(node)) {
return;
}
+ if (_addIdentifierRegion_extension(node)) {
+ return;
+ }
if (_addIdentifierRegion_constructor(node)) {
return;
}
@@ -223,6 +226,29 @@
return false;
}
+ bool _addIdentifierRegion_extension(SimpleIdentifier node) {
+ var element = node.writeOrReadElement;
+ if (element is! ExtensionElement) {
+ return false;
+ }
+
+ // TODO(dantup): Right now there is no highlight type for extension, so
+ // bail out and do the default thing (which will be to return
+ // IDENTIFIER_DEFAULT). Adding EXTENSION requires coordination with
+ // IntelliJ + bumping protocol version.
+ if (!_computeSemanticTokens) {
+ return false;
+ }
+
+ return _addRegion_node(
+ node,
+ // TODO(dantup): Change this to EXTENSION and add to LSP mapping when
+ // we have it, but for now use CLASS (which is probably what we'll map it
+ // to for LSP semantic tokens anyway).
+ HighlightRegionType.CLASS,
+ );
+ }
+
bool _addIdentifierRegion_field(SimpleIdentifier node) {
var element = node.writeOrReadElement;
if (element is FieldFormalParameterElement) {
diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
index 0b7c262..ab5399b 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/mapping.dart
@@ -97,6 +97,7 @@
HighlightRegionType.ENUM: SemanticTokenTypes.enum_,
HighlightRegionType.ENUM_CONSTANT: SemanticTokenTypes.enumMember,
HighlightRegionType.FUNCTION_TYPE_ALIAS: SemanticTokenTypes.type,
+ HighlightRegionType.IDENTIFIER_DEFAULT: CustomSemanticTokenTypes.source,
HighlightRegionType.INSTANCE_FIELD_DECLARATION: SemanticTokenTypes.variable,
HighlightRegionType.INSTANCE_FIELD_REFERENCE: SemanticTokenTypes.variable,
HighlightRegionType.INSTANCE_GETTER_DECLARATION: SemanticTokenTypes.property,
@@ -137,7 +138,7 @@
HighlightRegionType.TYPE_NAME_DYNAMIC: SemanticTokenTypes.type,
HighlightRegionType.TYPE_PARAMETER: SemanticTokenTypes.typeParameter,
HighlightRegionType.UNRESOLVED_INSTANCE_MEMBER_REFERENCE:
- SemanticTokenTypes.variable,
+ CustomSemanticTokenTypes.source,
HighlightRegionType.VALID_STRING_ESCAPE: SemanticTokenTypes.string,
};
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index 256edee..b6d71a6 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/dart/ast/syntactic_entity.dart';
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
@@ -217,7 +218,6 @@
}
if (entity == null || entity is Declaration) {
if (previousMember is FunctionDeclaration &&
- previousMember.functionExpression is FunctionExpression &&
previousMember.functionExpression.body.isEmpty) {
_addSuggestion(Keyword.ASYNC);
_addSuggestion2(ASYNC_STAR);
@@ -353,12 +353,52 @@
_addSuggestion(Keyword.THIS);
}
final entity = this.entity;
- if (entity is Token && entity.type == TokenType.CLOSE_PAREN) {
- _addSuggestion(Keyword.COVARIANT);
- _addSuggestion(Keyword.DYNAMIC);
- _addSuggestion(Keyword.VOID);
- if (request.featureSet.isEnabled(Feature.non_nullable)) {
- _addSuggestion(Keyword.REQUIRED);
+ if (entity is Token) {
+ FormalParameter? lastParameter() {
+ var parameters = node.parameters;
+ if (parameters.isNotEmpty) {
+ return parameters.last.notDefault;
+ }
+ return null;
+ }
+
+ bool hasCovariant() {
+ var last = lastParameter();
+ return last != null &&
+ (last.covariantKeyword != null ||
+ last.identifier?.name == 'covariant');
+ }
+
+ bool hasRequired() {
+ var last = lastParameter();
+ return last != null &&
+ (last.requiredKeyword != null ||
+ last.identifier?.name == 'required');
+ }
+
+ var tokenType = entity.type;
+ if (tokenType == TokenType.CLOSE_PAREN) {
+ _addSuggestion(Keyword.DYNAMIC);
+ _addSuggestion(Keyword.VOID);
+ if (!hasCovariant()) {
+ _addSuggestion(Keyword.COVARIANT);
+ }
+ } else if (tokenType == TokenType.CLOSE_CURLY_BRACKET) {
+ _addSuggestion(Keyword.DYNAMIC);
+ _addSuggestion(Keyword.VOID);
+ if (!hasCovariant()) {
+ _addSuggestion(Keyword.COVARIANT);
+ if (request.featureSet.isEnabled(Feature.non_nullable) &&
+ !hasRequired()) {
+ _addSuggestion(Keyword.REQUIRED);
+ }
+ }
+ } else if (tokenType == TokenType.CLOSE_SQUARE_BRACKET) {
+ _addSuggestion(Keyword.DYNAMIC);
+ _addSuggestion(Keyword.VOID);
+ if (!hasCovariant()) {
+ _addSuggestion(Keyword.COVARIANT);
+ }
}
} else if (entity is FormalParameter) {
var beginToken = entity.beginToken;
@@ -367,14 +407,18 @@
_addSuggestion(Keyword.COVARIANT);
_addSuggestion(Keyword.DYNAMIC);
_addSuggestion(Keyword.VOID);
- if (request.featureSet.isEnabled(Feature.non_nullable)) {
+ if (entity.isNamed &&
+ !entity.isRequired &&
+ request.featureSet.isEnabled(Feature.non_nullable)) {
_addSuggestion(Keyword.REQUIRED);
}
} else if (entity is FunctionTypedFormalParameter) {
_addSuggestion(Keyword.COVARIANT);
_addSuggestion(Keyword.DYNAMIC);
_addSuggestion(Keyword.VOID);
- if (request.featureSet.isEnabled(Feature.non_nullable)) {
+ if (entity.isNamed &&
+ !entity.isRequired &&
+ request.featureSet.isEnabled(Feature.non_nullable)) {
_addSuggestion(Keyword.REQUIRED);
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index e4b55f8..1e367b0 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -6,7 +6,6 @@
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -119,10 +118,6 @@
!constructorElement.isSynthetic) {
return;
}
- // prepare target
- if (constructorElement.enclosingElement is! ClassElement) {
- return;
- }
// prepare target ClassDeclaration
var targetElement = constructorElement.enclosingElement;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
index 93fd327..7b1fbde 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/ignore_diagnostic.dart
@@ -58,7 +58,8 @@
final prefix = insertDesc.prefix;
final comment = '// $ignoreCommentType: $_code';
final suffix = insertDesc.suffix;
- builder.addSimpleInsertion(lineOffset, '$prefix$indent$comment\n$suffix');
+ builder.addSimpleInsertion(
+ lineOffset, '$prefix$indent$comment$eol$suffix');
});
}
}
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index ed99582..1b5d9a5 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -396,9 +396,15 @@
_Token("'../file.dart'", SemanticTokenTypes.string),
_Token('if', SemanticTokenTypes.keyword,
[CustomSemanticTokenModifiers.control]),
+ _Token('dart', CustomSemanticTokenTypes.source),
+ _Token('library', CustomSemanticTokenTypes.source),
+ _Token('io', CustomSemanticTokenTypes.source),
_Token("'file_io.dart'", SemanticTokenTypes.string),
_Token('if', SemanticTokenTypes.keyword,
[CustomSemanticTokenModifiers.control]),
+ _Token('dart', CustomSemanticTokenTypes.source),
+ _Token('library', CustomSemanticTokenTypes.source),
+ _Token('html', CustomSemanticTokenTypes.source),
_Token("'file_html.dart'", SemanticTokenTypes.string),
_Token('library', SemanticTokenTypes.keyword),
_Token('foo', SemanticTokenTypes.namespace),
@@ -412,6 +418,26 @@
expect(decoded, equals(expected));
}
+ Future<void> test_extension() async {
+ final content = '''
+ extension A on String {}
+ ''';
+
+ final expected = [
+ _Token('extension', SemanticTokenTypes.keyword),
+ _Token('A', SemanticTokenTypes.class_),
+ _Token('on', SemanticTokenTypes.keyword),
+ _Token('String', SemanticTokenTypes.class_)
+ ];
+
+ await initialize();
+ await openFile(mainFileUri, withoutMarkers(content));
+
+ final tokens = await getSemanticTokens(mainFileUri);
+ final decoded = decodeSemanticTokens(content, tokens);
+ expect(decoded, equals(expected));
+ }
+
Future<void> test_fromPlugin() async {
final pluginAnalyzedFilePath = join(projectFolderPath, 'lib', 'foo.foo');
final pluginAnalyzedFileUri = Uri.file(pluginAnalyzedFilePath);
@@ -1002,6 +1028,48 @@
final decoded = decodeSemanticTokens(content, tokens);
expect(decoded, equals(expected));
}
+
+ Future<void> test_unresolvedOrInvalid() async {
+ // Unresolved/invalid names should be marked as "source", which is used to
+ // mark up code the server thinks should be uncolored (without this, a
+ // clients other grammars would show through, losing the benefit from having
+ // resolved the code).
+ final content = '''
+ main() {
+ int a;
+ a.foo().bar.baz();
+
+ dynamic b;
+ b.foo().bar.baz();
+ }
+ ''';
+
+ final expected = [
+ _Token('main', SemanticTokenTypes.function,
+ [SemanticTokenModifiers.declaration, SemanticTokenModifiers.static]),
+ _Token('int', SemanticTokenTypes.class_),
+ _Token('a', SemanticTokenTypes.variable,
+ [SemanticTokenModifiers.declaration]),
+ _Token('a', SemanticTokenTypes.variable),
+ _Token('foo', CustomSemanticTokenTypes.source),
+ _Token('bar', CustomSemanticTokenTypes.source),
+ _Token('baz', CustomSemanticTokenTypes.source),
+ _Token('dynamic', SemanticTokenTypes.type),
+ _Token('b', SemanticTokenTypes.variable,
+ [SemanticTokenModifiers.declaration]),
+ _Token('b', SemanticTokenTypes.variable),
+ _Token('foo', CustomSemanticTokenTypes.source),
+ _Token('bar', CustomSemanticTokenTypes.source),
+ _Token('baz', CustomSemanticTokenTypes.source),
+ ];
+
+ await initialize();
+ await openFile(mainFileUri, withoutMarkers(content));
+
+ final tokens = await getSemanticTokens(mainFileUri);
+ final decoded = decodeSemanticTokens(content, tokens);
+ expect(decoded, equals(expected));
+ }
}
class _Token {
diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart
index 78b1ba8..721ab0f 100644
--- a/pkg/analysis_server/test/lsp/server_abstract.dart
+++ b/pkg/analysis_server/test/lsp/server_abstract.dart
@@ -827,11 +827,7 @@
final path = Uri.parse(edit.textDocument.uri).toFilePath();
final expectedVersion = expectedVersions[path];
- if (edit.textDocument is OptionalVersionedTextDocumentIdentifier) {
- expect(edit.textDocument.version, equals(expectedVersion));
- } else {
- throw 'Document identifier for $path was not versioned (expected version $expectedVersion)';
- }
+ expect(edit.textDocument.version, equals(expectedVersion));
}
/// Validates the document versions for a set of edits match the versions in
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 6792f3e..b8d35f4 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -75,12 +75,8 @@
Keyword.COVARIANT,
Keyword.DYNAMIC,
Keyword.THIS,
- Keyword.DYNAMIC,
Keyword.VOID
];
- if (isEnabled(ExperimentalFeatures.non_nullable)) {
- keywords.add(Keyword.REQUIRED);
- }
return keywords;
}
@@ -175,9 +171,6 @@
List<Keyword> get methodParameter {
var keywords = <Keyword>[Keyword.COVARIANT, Keyword.DYNAMIC, Keyword.VOID];
- if (isEnabled(ExperimentalFeatures.non_nullable)) {
- keywords.add(Keyword.REQUIRED);
- }
return keywords;
}
diff --git a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
index 0bcf127..f8171dc 100644
--- a/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/dart/completion_test.dart
@@ -15,6 +15,7 @@
defineReflectiveTests(ConstructorCompletionTest);
defineReflectiveTests(ExpressionFunctionBodyCompletionTest);
defineReflectiveTests(ExtensionCompletionTest);
+ defineReflectiveTests(FormalParameterCompletionTest);
defineReflectiveTests(GenericTypeAliasCompletionTest);
defineReflectiveTests(PropertyAccessCompletionTest);
defineReflectiveTests(RedirectedConstructorCompletionTest);
@@ -295,6 +296,86 @@
}
@reflectiveTest
+class FormalParameterCompletionTest extends CompletionTestCase {
+ Future<void> test_named_last() async {
+ addTestFile('''
+void f({int? a, ^}) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_named_last_afterCovariant() async {
+ addTestFile('''
+void f({covariant ^}) {}
+''');
+ await getSuggestions();
+ assertHasNoCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasNoCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_named_last_afterRequired() async {
+ addTestFile('''
+void f({required ^}) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasNoCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_named_only() async {
+ addTestFile('''
+void f({^}) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_optionalPositional_last() async {
+ addTestFile('''
+void f([int a, ^]) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasNoCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_optionalPositional_only() async {
+ addTestFile('''
+void f([^]) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasNoCompletion('required');
+ assertHasCompletion('void');
+ }
+
+ Future<void> test_requiredPositional_only() async {
+ addTestFile('''
+void f(^) {}
+''');
+ await getSuggestions();
+ assertHasCompletion('covariant');
+ assertHasCompletion('dynamic');
+ assertHasNoCompletion('required');
+ assertHasCompletion('void');
+ }
+}
+
+@reflectiveTest
class GenericTypeAliasCompletionTest extends CompletionTestCase {
Future<void> test_returnType_void() async {
addTestFile('''
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index fd320f2..0d952a4 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -182,7 +182,7 @@
Future<void> addUnimportedFile(String filePath, String content) async {
addSource(filePath, content);
- var result = await session.getResolvedUnit2(filePath);
+ var result = await session.getResolvedUnit2(convertPath(filePath));
extensionCache.cacheFromResult(result as ResolvedUnitResult);
}
diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart
index d03e08c..a2ca408 100644
--- a/pkg/analyzer/lib/dart/analysis/features.dart
+++ b/pkg/analyzer/lib/dart/analysis/features.dart
@@ -26,6 +26,9 @@
/// Feature information for extension methods.
static final extension_methods = ExperimentalFeatures.extension_methods;
+ /// Feature information for extension types.
+ static final extension_types = ExperimentalFeatures.extension_types;
+
/// Feature information for generic metadata.
static final generic_metadata = ExperimentalFeatures.generic_metadata;
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 5bcacde..af873be 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -190,9 +190,7 @@
for (List<_TypeToConvert> typeGroup in typeGroups.values) {
if (typeGroup.length == 1) {
_TypeToConvert typeToConvert = typeGroup[0];
- if (typeToConvert.type is DartType) {
- arguments[typeToConvert.index] = typeToConvert.displayName;
- }
+ arguments[typeToConvert.index] = typeToConvert.displayName;
} else {
Map<String, Set<Element>> nameToElementMap = {};
for (_TypeToConvert typeToConvert in typeGroup) {
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
index f4555e0..c1dfa14 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart
@@ -432,31 +432,28 @@
root.workspace.createSourceFactory(null, null))
.getOptionsFromFile(optionsFile);
- if (doc is YamlMap) {
- var analyzerOptions = doc.valueAt(AnalyzerOptions.analyzer);
- if (analyzerOptions is YamlMap) {
- var excludeOptions =
- analyzerOptions.valueAt(AnalyzerOptions.exclude);
- if (excludeOptions is YamlList) {
- var pathContext = resourceProvider.pathContext;
+ var analyzerOptions = doc.valueAt(AnalyzerOptions.analyzer);
+ if (analyzerOptions is YamlMap) {
+ var excludeOptions = analyzerOptions.valueAt(AnalyzerOptions.exclude);
+ if (excludeOptions is YamlList) {
+ var pathContext = resourceProvider.pathContext;
- void addGlob(List<String> components) {
- var pattern = posix.joinAll(components);
- patterns.add(Glob(pattern, context: pathContext));
+ void addGlob(List<String> components) {
+ var pattern = posix.joinAll(components);
+ patterns.add(Glob(pattern, context: pathContext));
+ }
+
+ for (String excludedPath in excludeOptions.whereType<String>()) {
+ var excludedComponents = posix.split(excludedPath);
+ if (pathContext.isRelative(excludedPath)) {
+ excludedComponents = [
+ ...pathContext.split(optionsFile.parent2.path),
+ ...excludedComponents,
+ ];
}
-
- for (String excludedPath in excludeOptions.whereType<String>()) {
- var excludedComponents = posix.split(excludedPath);
- if (pathContext.isRelative(excludedPath)) {
- excludedComponents = [
- ...pathContext.split(optionsFile.parent2.path),
- ...excludedComponents,
- ];
- }
- addGlob(excludedComponents);
- if (excludedComponents.last == '**') {
- addGlob(excludedComponents..removeLast());
- }
+ addGlob(excludedComponents);
+ if (excludedComponents.last == '**') {
+ addGlob(excludedComponents..removeLast());
}
}
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index e728899..140a1a7 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -752,7 +752,7 @@
}
Element? element = node.writeOrReadElement;
- if (node is SimpleIdentifier && element is ParameterElement) {
+ if (element is ParameterElement) {
element = declaredParameterElement(node, element);
}
@@ -911,7 +911,7 @@
var seenConstructors = <ConstructorElement?>{};
while (constructor is ConstructorElementImpl && constructor.isSynthetic) {
var enclosing = constructor.enclosingElement;
- if (enclosing is ClassElement && enclosing.isMixinApplication) {
+ if (enclosing.isMixinApplication) {
var superInvocation = constructor.constantInitializers
.whereType<SuperConstructorInvocation>()
.singleOrNull;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 3cb56a5..e10f9be 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -676,7 +676,11 @@
errorListener: errorListener,
featureSet: unit.featureSet,
nameScope: _libraryElement.scope,
- elementWalker: ElementWalker.forCompilationUnit(unitElement),
+ elementWalker: ElementWalker.forCompilationUnit(
+ unitElement,
+ libraryFilePath: _library.path,
+ unitFilePath: file.path,
+ ),
),
);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 6d16a45..3bc2bc1 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -118,10 +118,11 @@
@override
List<AstNode> get sortedCommentAndAnnotations {
- return <AstNode>[]
- ..add(_comment!)
- ..addAll(_metadata)
- ..sort(AstNode.LEXICAL_ORDER);
+ var comment = _comment;
+ return <AstNode>[
+ if (comment != null) comment,
+ ..._metadata,
+ ]..sort(AstNode.LEXICAL_ORDER);
}
/// Return a holder of child entities that subclasses can add to.
@@ -7713,10 +7714,11 @@
@override
List<AstNode> get sortedCommentAndAnnotations {
- return <AstNode>[]
- ..add(_comment!)
- ..addAll(_metadata)
- ..sort(AstNode.LEXICAL_ORDER);
+ var comment = _comment;
+ return <AstNode>[
+ if (comment != null) comment,
+ ..._metadata,
+ ]..sort(AstNode.LEXICAL_ORDER);
}
ChildEntities get _childEntities {
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 68ce3c5..dfad758 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -209,8 +209,7 @@
} else if (constant is ElementAnnotationImpl) {
var constNode = constant.annotationAst;
var element = constant.element;
- if (element is PropertyAccessorElement &&
- element.variable is VariableElement) {
+ if (element is PropertyAccessorElement) {
// The annotation is a reference to a compile-time constant variable.
// Just copy the evaluation result.
VariableElementImpl variableElement =
@@ -335,8 +334,7 @@
} else if (constant is ElementAnnotationImpl) {
Annotation constNode = constant.annotationAst;
var element = constant.element;
- if (element is PropertyAccessorElement &&
- element.variable is VariableElement) {
+ if (element is PropertyAccessorElement) {
// The annotation is a reference to a compile-time constant variable,
// so it depends on the variable.
callback(element.variable.declaration);
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index 2b9d8a0..df0e9e2 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -206,11 +206,7 @@
if (parameterVariance.isCovariant) {
args.add(typeSystem.getLeastUpperBound(args1[i], args2[i]));
} else if (parameterVariance.isContravariant) {
- if (typeSystem is TypeSystemImpl) {
- args.add(typeSystem.getGreatestLowerBound(args1[i], args2[i]));
- } else {
- args.add(typeSystem.getLeastUpperBound(args1[i], args2[i]));
- }
+ args.add(typeSystem.getGreatestLowerBound(args1[i], args2[i]));
} else if (parameterVariance.isInvariant) {
if (!typeSystem.isSubtypeOf(args1[i], args2[i]) ||
!typeSystem.isSubtypeOf(args2[i], args1[i])) {
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 0534495..14038d6 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -2342,7 +2342,7 @@
// this diagnostic:
//
// ```dart
- // const x = 4;
+ // const Object x = 4;
// const y = [!x is int!] ? 0 : 1;
// ```
//
@@ -2362,7 +2362,7 @@
// [constant context][]:
//
// ```dart
- // const x = 4;
+ // const Object x = 4;
// var y = x is int ? 0 : 1;
// ```
static const HintCode SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT = HintCode(
diff --git a/pkg/analyzer/lib/src/error/assignment_verifier.dart b/pkg/analyzer/lib/src/error/assignment_verifier.dart
index 4b64931..a995629 100644
--- a/pkg/analyzer/lib/src/error/assignment_verifier.dart
+++ b/pkg/analyzer/lib/src/error/assignment_verifier.dart
@@ -102,7 +102,7 @@
}
} else if (recovery is MultiplyDefinedElementImpl) {
// Will be reported in ErrorVerifier.
- } else if (node is SimpleIdentifier) {
+ } else {
if (node.isSynthetic) {
return;
}
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index cebd550..ff183f5 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -174,10 +174,8 @@
} else if (node is MethodInvocation &&
displayName == FunctionElement.CALL_METHOD_NAME) {
var invokeType = node.staticInvokeType as InterfaceType;
- if (invokeType is InterfaceType) {
- var invokeClass = invokeType.element;
- displayName = "${invokeClass.name}.${element.displayName}";
- }
+ var invokeClass = invokeType.element;
+ displayName = "${invokeClass.name}.${element.displayName}";
}
var library = element is LibraryElement ? element : element.library;
var message = _deprecatedMessage(element);
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 88a50ee..498b57b 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -143,6 +143,9 @@
/// `true` if constructor tearoffs are enabled
final bool enableConstructorTearoffs;
+ /// `true` if extension types are enabled;
+ final bool enableExtensionTypes;
+
final FeatureSet _featureSet;
AstBuilder(ErrorReporter errorReporter, this.fileUri, this.isFullAst,
@@ -160,6 +163,7 @@
enableVariance = _featureSet.isEnabled(Feature.variance),
enableConstructorTearoffs =
_featureSet.isEnabled(Feature.constructor_tearoffs),
+ enableExtensionTypes = _featureSet.isEnabled(Feature.extension_types),
uri = uri ?? fileUri;
NodeList<ClassMember> get currentDeclarationMembers {
@@ -1189,8 +1193,8 @@
@override
void endExtensionDeclaration(Token extensionKeyword, Token? typeKeyword,
Token onKeyword, Token token) {
- if (typeKeyword != null && !enableConstructorTearoffs) {
- var feature = ExperimentalFeatures.constructor_tearoffs;
+ if (typeKeyword != null && !enableExtensionTypes) {
+ var feature = ExperimentalFeatures.extension_types;
handleRecoverableError(
templateExperimentNotEnabled.withArguments(
feature.enableString,
@@ -3031,9 +3035,7 @@
List<Expression> expressions = <Expression>[];
for (var elem in elements) {
- if (elem is Expression) {
- expressions.add(elem);
- }
+ expressions.add(elem);
}
push(ast.listLiteral(
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index a654bc8..611c2c0 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -10,6 +10,8 @@
class ElementWalker {
/// The element whose child elements are being walked.
final Element element;
+ String? libraryFilePath;
+ String? unitFilePath;
List<PropertyAccessorElement>? _accessors;
int _accessorIndex = 0;
@@ -48,7 +50,8 @@
/// Creates an [ElementWalker] which walks the child elements of a compilation
/// unit element.
- ElementWalker.forCompilationUnit(CompilationUnitElement element)
+ ElementWalker.forCompilationUnit(CompilationUnitElement element,
+ {this.libraryFilePath, this.unitFilePath})
: element = element,
_accessors = element.accessors.where(_isNotSynthetic).toList(),
_classes = element.classes,
@@ -119,7 +122,22 @@
/// Returns the next non-synthetic child of [element] which is a class; throws
/// an [IndexError] if there are no more.
- ClassElementImpl getClass() => _classes![_classIndex++] as ClassElementImpl;
+ ClassElementImpl getClass() {
+ // TODO(scheglov) Remove after fixing.
+ // https://github.com/dart-lang/sdk/issues/46392
+ var classes = _classes;
+ if (classes != null && _classIndex >= classes.length) {
+ throw StateError(
+ '[_classIndex: $_classIndex]'
+ '[classes.length: ${classes.length}]'
+ '[classes: $classes]'
+ '[element.source: ${element.source?.fullName}]'
+ '[libraryFilePath: $libraryFilePath]'
+ '[unitFilePath: $unitFilePath]',
+ );
+ }
+ return _classes![_classIndex++] as ClassElementImpl;
+ }
/// Returns the next non-synthetic child of [element] which is a constructor;
/// throws an [IndexError] if there are no more.
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 69bdf31..cc5fc13 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -190,6 +190,10 @@
prefixElement.getGetter(name.name) ??
prefixElement.getSetter(name.name) ??
prefixElement.getNamedConstructor(name.name);
+ } else if (prefixElement is ExtensionElement) {
+ name.staticElement = prefixElement.getMethod(name.name) ??
+ prefixElement.getGetter(name.name) ??
+ prefixElement.getSetter(name.name);
} else {
// TODO(brianwilkerson) Report this error.
}
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index cf4ecd8..ff28b32 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1500,24 +1500,16 @@
if (expression is! SimpleIdentifier) return;
// Already handled in the assignment resolver.
- if (expression is SimpleIdentifier &&
- expression.parent is AssignmentExpression) {
+ if (expression.parent is AssignmentExpression) {
return;
}
// prepare element
- Element? element;
- AstNode highlightedNode = expression;
- if (expression is Identifier) {
- element = expression.staticElement;
- if (expression is PrefixedIdentifier) {
- var prefixedIdentifier = expression as PrefixedIdentifier;
- highlightedNode = prefixedIdentifier.identifier;
- }
- } else if (expression is PropertyAccess) {
- var propertyAccess = expression as PropertyAccess;
- element = propertyAccess.propertyName.staticElement;
- highlightedNode = propertyAccess.propertyName;
+ var highlightedNode = expression;
+ var element = expression.staticElement;
+ if (expression is PrefixedIdentifier) {
+ var prefixedIdentifier = expression as PrefixedIdentifier;
+ highlightedNode = prefixedIdentifier.identifier;
}
// check if element is assignable
if (element is VariableElement) {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 098b70f..9a9dd13 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -18,6 +18,7 @@
import 'package:analyzer/src/summary2/ast_binary_tag.dart';
import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
import 'package:analyzer/src/summary2/bundle_reader.dart';
+import 'package:analyzer/src/summary2/not_serializable_nodes.dart';
import 'package:analyzer/src/summary2/unlinked_token_type.dart';
import 'package:collection/collection.dart';
@@ -80,7 +81,7 @@
return _readFieldFormalParameter();
case Tag.FormalParameterList:
return _readFormalParameterList();
- case Tag.FunctionExpression:
+ case Tag.FunctionExpressionStub:
return _readFunctionExpression();
case Tag.FunctionExpressionInvocation:
return _readFunctionExpressionInvocation();
@@ -182,24 +183,6 @@
return node;
}
- FunctionBody _functionBodyForFlags(int flags) {
- if (AstBinaryFlags.isNative(flags)) {
- return AstTestFactory.nativeFunctionBody('');
- } else if (AstBinaryFlags.isAbstract(flags)) {
- return AstTestFactory.emptyFunctionBody();
- } else {
- return astFactory.blockFunctionBody(
- AstBinaryFlags.isAsync(flags) ? Tokens.async_() : null,
- AstBinaryFlags.isGenerator(flags) ? Tokens.star() : null,
- astFactory.block(
- Tokens.openCurlyBracket(),
- const <Statement>[],
- Tokens.closeCurlyBracket(),
- ),
- );
- }
- }
-
AdjacentStrings _readAdjacentStrings() {
var components = _readNodeList<StringLiteral>();
var node = astFactory.adjacentStrings(components);
@@ -556,16 +539,7 @@
}
FunctionExpression _readFunctionExpression() {
- var flags = _readByte();
- var typeParameters = _readOptionalNode() as TypeParameterList?;
- var formalParameters = _readOptionalNode() as FormalParameterList?;
- var body = _functionBodyForFlags(flags);
-
- return astFactory.functionExpression(
- typeParameters,
- formalParameters,
- body,
- );
+ return emptyFunctionExpression();
}
FunctionExpressionInvocation _readFunctionExpressionInvocation() {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
index b4e509c..deb6b47 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_tag.dart
@@ -47,7 +47,7 @@
static const int FormalParameterList = 17;
static const int FunctionDeclaration_getter = 57;
static const int FunctionDeclaration_setter = 58;
- static const int FunctionExpression = 19;
+ static const int FunctionExpressionStub = 19;
static const int FunctionExpressionInvocation = 93;
static const int FunctionTypedFormalParameter = 20;
static const int GenericFunctionType = 21;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 45e78a4..e5dca3f 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -294,7 +294,7 @@
@override
void visitFunctionExpression(FunctionExpression node) {
- _writeNotSerializableExpression();
+ _writeByte(Tag.FunctionExpressionStub);
}
@override
diff --git a/pkg/analyzer/lib/src/summary2/detach_nodes.dart b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
index 3f93f01..7f375e4 100644
--- a/pkg/analyzer/lib/src/summary2/detach_nodes.dart
+++ b/pkg/analyzer/lib/src/summary2/detach_nodes.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/element/visitor.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/summary2/not_serializable_nodes.dart';
/// Elements have references to AST nodes, for example initializers of constant
/// variables. These nodes are attached to the whole compilation unit, and
@@ -64,6 +65,10 @@
var initializer = element.constantInitializer;
if (initializer is ExpressionImpl) {
_detachNode(initializer);
+
+ initializer = replaceNotSerializableNodes(initializer);
+ element.constantInitializer = initializer;
+
ConstantContextForExpressionImpl(initializer);
}
}
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 9b1bcc9..1dd1e5f 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -1734,6 +1734,18 @@
}
@override
+ void visitFunctionExpression(FunctionExpression node) {
+ // We store FunctionExpression(s) as empty stubs: `() {}`.
+ // We just need it to have right code range, so we apply 2 offsets.
+ node.parameters?.leftParenthesis.offset = _iterator.take() ?? 0;
+
+ var body = node.body;
+ if (body is BlockFunctionBody) {
+ body.block.rightBracket.offset = _iterator.take() ?? 0;
+ }
+ }
+
+ @override
void visitSimpleFormalParameter(SimpleFormalParameter node) {
super.visitSimpleFormalParameter(node);
@@ -1819,6 +1831,13 @@
}
@override
+ void visitFormalParameterList(FormalParameterList node) {
+ _tokenOrNull(node.leftParenthesis);
+ _tokenOrNull(node.rightParenthesis);
+ super.visitFormalParameterList(node);
+ }
+
+ @override
void visitGenericFunctionType(GenericFunctionType node) {
_tokenOrNull(node.functionKeyword);
super.visitGenericFunctionType(node);
@@ -2004,6 +2023,12 @@
void handleToken(Token token) {
offsets.add(token.offset);
}
+
+ @override
+ void visitFunctionExpression(FunctionExpression node) {
+ offsets.add(node.offset);
+ offsets.add(node.end - 1);
+ }
}
class _SafeListIterator<T> {
diff --git a/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart b/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart
new file mode 100644
index 0000000..95e3adf
--- /dev/null
+++ b/pkg/analyzer/lib/src/summary2/not_serializable_nodes.dart
@@ -0,0 +1,62 @@
+// 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.
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
+import 'package:analyzer/src/dart/ast/ast_factory.dart';
+import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
+
+FunctionExpressionImpl emptyFunctionExpression() {
+ return astFactory.functionExpression(
+ null,
+ astFactory.formalParameterList(
+ Tokens.openParenthesis(),
+ [],
+ null,
+ null,
+ Tokens.closeParenthesis(),
+ ),
+ astFactory.blockFunctionBody(
+ null,
+ null,
+ astFactory.block(
+ Tokens.openCurlyBracket(),
+ [],
+ Tokens.closeCurlyBracket(),
+ ),
+ ),
+ );
+}
+
+/// We cannot serialize [FunctionExpression], but we need to have some node
+/// with the same source range for error reporting. So, we replace them with
+/// empty [FunctionExpression]s that have the same offset and length.
+ExpressionImpl replaceNotSerializableNodes(ExpressionImpl node) {
+ if (node is FunctionExpressionImpl) {
+ return FunctionExpressionReplacementVisitor._replacement(node);
+ }
+ node.accept(FunctionExpressionReplacementVisitor());
+ return node;
+}
+
+class FunctionExpressionReplacementVisitor extends RecursiveAstVisitor<void> {
+ @override
+ void visitFunctionExpression(FunctionExpression node) {
+ NodeReplacer.replace(node, _replacement(node));
+ }
+
+ static FunctionExpressionImpl _replacement(FunctionExpression from) {
+ var to = emptyFunctionExpression();
+ to.parameters?.leftParenthesis.offset = from.offset;
+
+ var toBody = to.body;
+ if (toBody is BlockFunctionBodyImpl) {
+ toBody.block.rightBracket.offset = from.end - 1;
+ }
+
+ return to;
+ }
+}
diff --git a/pkg/analyzer/lib/src/summary2/variance_builder.dart b/pkg/analyzer/lib/src/summary2/variance_builder.dart
index 8543179..c9017ca 100644
--- a/pkg/analyzer/lib/src/summary2/variance_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/variance_builder.dart
@@ -53,13 +53,10 @@
Variance _compute(TypeParameterElement variable, DartType? type) {
if (type is TypeParameterType) {
- var element = type.element;
- if (element is TypeParameterElement) {
- if (element == variable) {
- return Variance.covariant;
- } else {
- return Variance.unrelated;
- }
+ if (type.element == variable) {
+ return Variance.covariant;
+ } else {
+ return Variance.unrelated;
}
} else if (type is NamedTypeBuilder) {
var element = type.element;
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 566e8d7..11c7031e 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -188,6 +188,10 @@
return _node(search, (n) => n is IntegerLiteral);
}
+ IsExpression isExpression(String search) {
+ return _node(search, (n) => n is IsExpression);
+ }
+
Label label(String search) {
return _node(search, (n) => n is Label);
}
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index 5fcfbc6..e7da3d0 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -30,6 +30,7 @@
defineReflectiveTests(MethodDeclarationTest);
defineReflectiveTests(MethodInvocationTest);
defineReflectiveTests(NodeListTest);
+ defineReflectiveTests(NormalFormalParameterTest);
defineReflectiveTests(PreviousTokenTest);
defineReflectiveTests(PropertyAccessTest);
defineReflectiveTests(SimpleIdentifierTest);
@@ -918,6 +919,19 @@
}
@reflectiveTest
+class NormalFormalParameterTest extends ParserTestCase {
+ test_sortedCommentAndAnnotations_noComment() {
+ var result = parseString(content: '''
+void f(int i) {}
+''');
+ var function = result.unit.declarations[0] as FunctionDeclaration;
+ var parameters = function.functionExpression.parameters;
+ var parameter = parameters?.parameters[0] as NormalFormalParameter;
+ expect(parameter.sortedCommentAndAnnotations, isEmpty);
+ }
+}
+
+@reflectiveTest
class PreviousTokenTest {
static final String contents = '''
class A {
@@ -1721,6 +1735,15 @@
decl.documentationComment = comment;
expect(decl.documentationComment, isNotNull);
}
+
+ test_sortedCommentAndAnnotations_noComment() {
+ var result = parseString(content: '''
+int i = 0;
+''');
+ var variables = result.unit.declarations[0] as TopLevelVariableDeclaration;
+ var variable = variables.variables.variables[0];
+ expect(variable.sortedCommentAndAnnotations, isEmpty);
+ }
}
class _AssignmentKind {
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 3b69c9b8..ba86bc2 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -23,6 +23,7 @@
class NonConstantValueInInitializer extends PubPackageResolutionTest {
test_intLiteralInDoubleContext_const_exact() async {
await assertNoErrorsInCode(r'''
+// @dart = 2.9
const double x = 0;
class C {
const C(double y) : assert(y is double), assert(x is double);
@@ -42,6 +43,7 @@
test_isCheckInConstAssert() async {
await assertNoErrorsInCode(r'''
+// @dart = 2.9
class C {
const C() : assert(1 is int);
}
@@ -1376,6 +1378,7 @@
test_genericTypeAlias_castsAndTypeChecks_hasTypeParameters() async {
await assertNoErrorsInCode('''
+// @dart = 2.9
typedef Foo<S> = S Function<T>(T x);
main(Object p) {
@@ -1393,6 +1396,7 @@
test_genericTypeAlias_castsAndTypeChecks_noTypeParameters() async {
await assertNoErrorsInCode('''
+// @dart = 2.9
typedef Foo = T Function<T>(T x);
main(Object p) {
@@ -3084,6 +3088,7 @@
test_typePromotion_if_is_and_subThenSuper() async {
await assertNoErrorsInCode(r'''
+// @dart = 2.9
class A {
var a;
}
diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart
index e4b62f1..385bb7d 100644
--- a/pkg/analyzer/test/generated/resolver_test_case.dart
+++ b/pkg/analyzer/test/generated/resolver_test_case.dart
@@ -60,8 +60,6 @@
if (_knownExceptions == null || !_knownExceptions!.contains(node)) {
_unresolvedNodes.add(node);
}
- } else if (elementAnnotation is! ElementAnnotation) {
- _wrongTypedNodes.add(node);
}
}
diff --git a/pkg/analyzer/test/generated/simple_resolver_test.dart b/pkg/analyzer/test/generated/simple_resolver_test.dart
index 981d29c..6000f44 100644
--- a/pkg/analyzer/test/generated/simple_resolver_test.dart
+++ b/pkg/analyzer/test/generated/simple_resolver_test.dart
@@ -311,6 +311,57 @@
class C {}''');
}
+ test_commentReference_extension_getter() async {
+ await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+ String get b => '';
+}
+''');
+
+ final classA = findNode.classDeclaration('class A');
+ final reference = classA.documentationComment!.references.single;
+
+ expect(
+ reference.identifier.staticElement, findElement.getter('b', of: 'E'));
+ }
+
+ test_commentReference_extension_method() async {
+ await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+ void b() {}
+}
+''');
+
+ final classA = findNode.classDeclaration('class A');
+ final reference = classA.documentationComment!.references.single;
+
+ expect(
+ reference.identifier.staticElement, findElement.method('b', of: 'E'));
+ }
+
+ test_commentReference_extension_setter() async {
+ await resolveTestCode('''
+/// See [E.b]
+class A {}
+
+extension E on A {
+ set b(String x) {}
+}
+''');
+
+ final classA = findNode.classDeclaration('class A');
+ final reference = classA.documentationComment!.references.single;
+
+ expect(
+ reference.identifier.staticElement, findElement.setter('b', of: 'E'));
+ }
+
test_continueTarget_labeled() async {
// Verify that the target of the label is correctly found and is recorded
// as the unlabeled portion of the statement.
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 62bdd51..5853f91 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -3798,72 +3798,42 @@
test_isExpression() async {
await assertNoErrorsInCode(r'''
-void main() {
- var v = 42;
- v is num;
+void f(var a) {
+ a is num;
}
''');
- List<Statement> statements = _getMainStatements(result);
+ var isExpression = findNode.isExpression('a is num');
+ expect(isExpression.notOperator, isNull);
+ expect(isExpression.staticType, typeProvider.boolType);
- // var v = 42;
- VariableElement vElement;
- {
- var statement = statements[0] as VariableDeclarationStatement;
- vElement = statement.variables.variables[0].name.staticElement
- as VariableElement;
- }
+ var target = isExpression.expression as SimpleIdentifier;
+ expect(target.staticElement, findElement.parameter('a'));
+ expect(target.staticType, dynamicType);
- // v is num;
- {
- var statement = statements[1] as ExpressionStatement;
- var isExpression = statement.expression as IsExpression;
- expect(isExpression.notOperator, isNull);
- expect(isExpression.staticType, typeProvider.boolType);
-
- var target = isExpression.expression as SimpleIdentifier;
- expect(target.staticElement, vElement);
- expect(target.staticType, typeProvider.intType);
-
- var numName = isExpression.type as TypeName;
- expect(numName.name.staticElement, typeProvider.numType.element);
- expect(numName.name.staticType, isNull);
- }
+ var numName = isExpression.type as TypeName;
+ expect(numName.name.staticElement, typeProvider.numType.element);
+ expect(numName.name.staticType, isNull);
}
test_isExpression_not() async {
await assertNoErrorsInCode(r'''
-void main() {
- var v = 42;
- v is! num;
+void f(var a) {
+ a is! num;
}
''');
- List<Statement> statements = _getMainStatements(result);
+ var isExpression = findNode.isExpression('a is! num');
+ expect(isExpression.notOperator, isNotNull);
+ expect(isExpression.staticType, typeProvider.boolType);
- // var v = 42;
- VariableElement vElement;
- {
- var statement = statements[0] as VariableDeclarationStatement;
- vElement = statement.variables.variables[0].name.staticElement
- as VariableElement;
- }
+ var target = isExpression.expression as SimpleIdentifier;
+ expect(target.staticElement, findElement.parameter('a'));
+ expect(target.staticType, dynamicType);
- // v is! num;
- {
- var statement = statements[1] as ExpressionStatement;
- var isExpression = statement.expression as IsExpression;
- expect(isExpression.notOperator, isNotNull);
- expect(isExpression.staticType, typeProvider.boolType);
-
- var target = isExpression.expression as SimpleIdentifier;
- expect(target.staticElement, vElement);
- expect(target.staticType, typeProvider.intType);
-
- var numName = isExpression.type as TypeName;
- expect(numName.name.staticElement, typeProvider.numType.element);
- expect(numName.name.staticType, isNull);
- }
+ var numName = isExpression.type as TypeName;
+ expect(numName.name.staticElement, typeProvider.numType.element);
+ expect(numName.name.staticType, isNull);
}
test_label_while() async {
diff --git a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
index 17d8a68..857df32 100644
--- a/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_initialized_with_non_constant_value_test.dart
@@ -40,6 +40,15 @@
]);
}
+ test_functionExpression() async {
+ await assertErrorsInCode('''
+const a = () {};
+''', [
+ error(CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE, 10,
+ 5),
+ ]);
+ }
+
test_missingConstInListLiteral() async {
await assertNoErrorsInCode('''
const List L = [0];
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index b9c4e07..afbe147 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -187,6 +187,8 @@
_writeln('Block');
_withIndent(() {
var properties = _Properties();
+ properties.addToken('leftBracket', node.leftBracket);
+ properties.addToken('rightBracket', node.rightBracket);
properties.addNodeList('statements', node.statements);
_addStatement(properties, node);
_writeProperties(properties);
@@ -578,6 +580,8 @@
_writeln('FormalParameterList');
_withIndent(() {
var properties = _Properties();
+ properties.addToken('leftParenthesis', node.leftParenthesis);
+ properties.addToken('rightParenthesis', node.rightParenthesis);
properties.addNodeList('parameters', node.parameters);
_addAstNode(properties, node);
_writeProperties(properties);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index e33cc31..dc4d4cf 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -6555,6 +6555,68 @@
''');
}
+ test_const_invalid_functionExpression() async {
+ var library = await checkLibrary('''
+const v = () { return 0; };
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ topLevelVariables
+ static const v @6
+ type: int Function()
+ constantInitializer
+ FunctionExpression
+ body: BlockFunctionBody
+ block: Block
+ leftBracket: { @0
+ rightBracket: } @25
+ declaredElement: <null>
+ parameters: FormalParameterList
+ leftParenthesis: ( @10
+ rightParenthesis: ) @0
+ staticType: null
+ accessors
+ synthetic static get v @-1
+ returnType: int Function()
+''');
+ }
+
+ test_const_invalid_functionExpression_nested() async {
+ var library = await checkLibrary('''
+const v = () { return 0; } + 2;
+''');
+ checkElementText(library, r'''
+library
+ definingUnit
+ topLevelVariables
+ static const v @6
+ type: dynamic
+ constantInitializer
+ BinaryExpression
+ leftOperand: FunctionExpression
+ body: BlockFunctionBody
+ block: Block
+ leftBracket: { @0
+ rightBracket: } @25
+ declaredElement: <null>
+ parameters: FormalParameterList
+ leftParenthesis: ( @10
+ rightParenthesis: ) @0
+ staticType: null
+ operator: + @27
+ rightOperand: IntegerLiteral
+ literal: 2 @29
+ staticType: int
+ staticElement: <null>
+ staticInvokeType: null
+ staticType: dynamic
+ accessors
+ synthetic static get v @-1
+ returnType: dynamic
+''');
+ }
+
@FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/44522')
test_const_invalid_intLiteral() async {
var library = await checkLibrary(r'''
@@ -8604,7 +8666,6 @@
''');
}
- /// TODO(scheglov) review location
test_const_methodInvocation() async {
var library = await checkLibrary(r'''
T f<T>(T a) => a;
@@ -12162,6 +12223,8 @@
type: dynamic Function()
functionKeyword: Function @86
parameters: FormalParameterList
+ leftParenthesis: ( @94
+ rightParenthesis: ) @95
type: dynamic Function()
leftBracket: < @85
rightBracket: > @96
@@ -13690,6 +13753,8 @@
type: dynamic Function()
functionKeyword: Function @61
parameters: FormalParameterList
+ leftParenthesis: ( @69
+ rightParenthesis: ) @70
type: dynamic Function()
leftBracket: < @60
rightBracket: > @71
@@ -15669,6 +15734,7 @@
type: int Function(double)
functionKeyword: Function @62
parameters: FormalParameterList
+ leftParenthesis: ( @70
parameters
SimpleFormalParameter
declaredElement: a@78
@@ -15683,6 +15749,7 @@
staticType: null
token: double @71
type: double
+ rightParenthesis: ) @79
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::int
@@ -17279,6 +17346,7 @@
type: int Function(String)
functionKeyword: Function @36
parameters: FormalParameterList
+ leftParenthesis: ( @44
parameters
SimpleFormalParameter
declaredElement: a@52
@@ -17293,6 +17361,7 @@
staticType: null
token: String @45
type: String
+ rightParenthesis: ) @53
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::int
@@ -17353,6 +17422,7 @@
type: int Function(String)
functionKeyword: Function @36
parameters: FormalParameterList
+ leftParenthesis: ( @44
parameters
SimpleFormalParameter
declaredElement: a@52
@@ -17367,6 +17437,7 @@
staticType: null
token: String @45
type: String
+ rightParenthesis: ) @53
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::int
@@ -17436,6 +17507,7 @@
type: String Function({int? a})
functionKeyword: Function @48
parameters: FormalParameterList
+ leftParenthesis: ( @56
parameters
DefaultFormalParameter
declaredElement: a@63
@@ -17457,6 +17529,7 @@
staticType: null
token: int @58
type: int?
+ rightParenthesis: ) @65
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::String
@@ -17521,6 +17594,7 @@
type: String Function([int?])
functionKeyword: Function @48
parameters: FormalParameterList
+ leftParenthesis: ( @56
parameters
DefaultFormalParameter
declaredElement: a@63
@@ -17542,6 +17616,7 @@
staticType: null
token: int @58
type: int?
+ rightParenthesis: ) @65
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::String
@@ -17606,6 +17681,7 @@
type: String Function({required int a})
functionKeyword: Function @48
parameters: FormalParameterList
+ leftParenthesis: ( @56
parameters
DefaultFormalParameter
declaredElement: a@71
@@ -17628,6 +17704,7 @@
staticType: null
token: int @67
type: int
+ rightParenthesis: ) @73
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::String
@@ -17692,6 +17769,7 @@
type: String Function(int)
functionKeyword: Function @48
parameters: FormalParameterList
+ leftParenthesis: ( @56
parameters
SimpleFormalParameter
declaredElement: a@61
@@ -17706,6 +17784,7 @@
staticType: null
token: int @57
type: int
+ rightParenthesis: ) @62
returnType: TypeName
name: SimpleIdentifier
staticElement: dart:core::@class::String
@@ -23834,7 +23913,6 @@
A(@foo int a);
}
''');
- // TODO(scheglov) Enhance to show metadata on formal parameters?
checkElementText(library, r'''
library
definingUnit
@@ -23926,7 +24004,6 @@
void method<@foo T>(@foo int a) {}
}
''');
- // TODO(scheglov) Enhance to show metadata on formal parameters?
checkElementText(library, r'''
library
definingUnit
@@ -23988,7 +24065,6 @@
set setter(@foo int a) {}
}
''');
- // TODO(scheglov) Enhance to show metadata on formal parameters?
checkElementText(library, r'''
library
definingUnit
@@ -24584,7 +24660,6 @@
@foo
void f<@foo T>({@foo int? a = 42}) {}
''');
- // TODO(scheglov) Enhance to show metadata on formal parameters?
checkElementText(library, r'''
library
definingUnit
@@ -24679,7 +24754,6 @@
@foo
set setter(@foo int a) {}
''');
- // TODO(scheglov) Enhance to show metadata on formal parameters?
checkElementText(library, r'''
library
definingUnit
diff --git a/pkg/analyzer/tool/diagnostics/diagnostics.md b/pkg/analyzer/tool/diagnostics/diagnostics.md
index 85c48aa..2201508 100644
--- a/pkg/analyzer/tool/diagnostics/diagnostics.md
+++ b/pkg/analyzer/tool/diagnostics/diagnostics.md
@@ -11144,7 +11144,7 @@
this diagnostic:
{% prettify dart tag=pre+code %}
-const x = 4;
+const Object x = 4;
const y = [!x is int!] ? 0 : 1;
{% endprettify %}
@@ -11164,7 +11164,7 @@
[constant context][]:
{% prettify dart tag=pre+code %}
-const x = 4;
+const Object x = 4;
var y = x is int ? 0 : 1;
{% endprettify %}
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index 523b2f2..9c8c353a 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -186,9 +186,11 @@
// batch flag and source file" error message.
ErrorFormatter formatter;
if (options.jsonFormat) {
- formatter = JsonErrorFormatter(errorSink, options, stats,
+ formatter = JsonErrorFormatter(outSink, options, stats,
severityProcessor: defaultSeverityProcessor);
} else if (options.machineFormat) {
+ // The older machine format emits to stderr (instead of stdout) for legacy
+ // reasons.
formatter = MachineErrorFormatter(errorSink, options, stats,
severityProcessor: defaultSeverityProcessor);
} else {
@@ -368,7 +370,7 @@
formatter.flush();
- if (!options.machineFormat) {
+ if (!options.machineFormat && !options.jsonFormat) {
stats.print(outSink);
}
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 443c711..12e92b5 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1496,7 +1496,7 @@
// file.
var isFirst =
next == (next.parent as CompilationUnit).directives.first;
- var offset = isFirst && next is AnnotatedNode
+ var offset = isFirst
? next.firstTokenAfterCommentAndMetadata.offset
: next.offset;
addInsertion(offset, (EditBuilder builder) {
diff --git a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
index 004132a..f076a8a 100644
--- a/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
+++ b/pkg/compiler/lib/src/js_backend/deferred_holder_expression.dart
@@ -19,7 +19,7 @@
enum DeferredHolderExpressionKind {
globalObjectForStaticState,
globalObjectForConstant,
- globalObjectForLibrary,
+ globalObjectForInterceptors,
globalObjectForClass,
globalObjectForMember,
}
@@ -45,6 +45,11 @@
DeferredHolderExpression._(
this.kind, this.data, this._value, this.sourceInformation);
+ factory DeferredHolderExpression.forInterceptors() {
+ return DeferredHolderExpression(
+ DeferredHolderExpressionKind.globalObjectForInterceptors, null);
+ }
+
factory DeferredHolderExpression.forStaticState() {
return DeferredHolderExpression(
DeferredHolderExpressionKind.globalObjectForStaticState, null);
@@ -55,9 +60,6 @@
var kind = source.readEnum(DeferredHolderExpressionKind.values);
Object data;
switch (kind) {
- case DeferredHolderExpressionKind.globalObjectForLibrary:
- data = source.readLibrary();
- break;
case DeferredHolderExpressionKind.globalObjectForClass:
data = source.readClass();
break;
@@ -67,6 +69,7 @@
case DeferredHolderExpressionKind.globalObjectForConstant:
data = source.readConstant();
break;
+ case DeferredHolderExpressionKind.globalObjectForInterceptors:
case DeferredHolderExpressionKind.globalObjectForStaticState:
// no entity.
break;
@@ -79,9 +82,6 @@
sink.begin(tag);
sink.writeEnum(kind);
switch (kind) {
- case DeferredHolderExpressionKind.globalObjectForLibrary:
- sink.writeLibrary(data);
- break;
case DeferredHolderExpressionKind.globalObjectForClass:
sink.writeClass(data);
break;
@@ -91,6 +91,7 @@
case DeferredHolderExpressionKind.globalObjectForConstant:
sink.writeConstant(data);
break;
+ case DeferredHolderExpressionKind.globalObjectForInterceptors:
case DeferredHolderExpressionKind.globalObjectForStaticState:
// no entity.
break;
@@ -375,7 +376,8 @@
/// Returns the [reservedGlobalObjectNames] for [library].
String globalObjectNameForLibrary(LibraryEntity library) {
- if (library == _commonElements.interceptorsLibrary) return 'J';
+ if (library == _commonElements.interceptorsLibrary)
+ return globalObjectNameForInterceptors();
Uri uri = library.canonicalUri;
if (uri.scheme == 'dart') {
if (uri.path == 'html') return 'W';
@@ -411,6 +413,8 @@
final Holder globalObjectForStaticState =
Holder(globalObjectNameForStaticState());
+ static String globalObjectNameForInterceptors() => 'J';
+
static String globalObjectNameForStaticState() => r'$';
String globalObjectNameForConstants() => 'C';
@@ -458,8 +462,8 @@
/// [DeferredHolderExpressionKind].
String kindToHolderName(DeferredHolderExpressionKind kind, Object data) {
switch (kind) {
- case DeferredHolderExpressionKind.globalObjectForLibrary:
- return globalObjectNameForLibrary(data);
+ case DeferredHolderExpressionKind.globalObjectForInterceptors:
+ return globalObjectNameForInterceptors();
case DeferredHolderExpressionKind.globalObjectForClass:
return globalObjectNameForClass(data);
case DeferredHolderExpressionKind.globalObjectForMember:
@@ -820,6 +824,8 @@
return globalObjectForLibrary(entity.library);
}
+ String globalObjectForInterceptors() => 'J';
+
String globalObjectForStaticState() => r'$';
String globalObjectForConstants() => 'C';
@@ -848,8 +854,8 @@
/// [DeferredHolderExpressionKind].
String kindToHolder(DeferredHolderExpressionKind kind, Object data) {
switch (kind) {
- case DeferredHolderExpressionKind.globalObjectForLibrary:
- return globalObjectForLibrary(data);
+ case DeferredHolderExpressionKind.globalObjectForInterceptors:
+ return globalObjectForInterceptors();
case DeferredHolderExpressionKind.globalObjectForClass:
return globalObjectForClass(data);
case DeferredHolderExpressionKind.globalObjectForMember:
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 5e4afbd..e8b00b7 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -2081,12 +2081,11 @@
return DeferredHolderExpression.forStaticState();
}
- /// Returns a variable use for accessing [library].
+ /// Returns a variable use for accessing interceptors.
///
/// This is one of the [reservedGlobalObjectNames]
- jsAst.Expression readGlobalObjectForLibrary(LibraryEntity library) {
- return DeferredHolderExpression(
- DeferredHolderExpressionKind.globalObjectForLibrary, library);
+ jsAst.Expression readGlobalObjectForInterceptors() {
+ return DeferredHolderExpression.forInterceptors();
}
/// Returns a variable use for accessing the class [element].
diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
index f49bf66..13e4a5e 100644
--- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
@@ -398,8 +398,7 @@
}
jsAst.Name invocationName = _namer.invocationName(selector);
- var globalObject =
- _namer.readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+ var globalObject = _namer.readGlobalObjectForInterceptors();
jsAst.Statement optimizedPath =
_fastPathForOneShotInterceptor(selector, classes);
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 20a3676..56c3746 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -599,7 +599,7 @@
// TODO(sra): The source information should indiciate the field and
// possibly its type but not the initializer.
value.sourceInformation ??= _sourceInformationBuilder.buildSet(node);
- value = _potentiallyAssertNotNull(node, value, type);
+ value = _potentiallyAssertNotNull(field, node, value, type);
if (!_fieldAnalysis.getFieldData(field).isElided) {
add(HFieldSet(_abstractValueDomain, field, thisInstruction, value));
}
@@ -1371,7 +1371,7 @@
return true;
}
- void _potentiallyAddFunctionParameterTypeChecks(
+ void _potentiallyAddFunctionParameterTypeChecks(MemberEntity member,
ir.FunctionNode function, TargetChecks targetChecks) {
// Put the type checks in the first successor of the entry,
// because that is where the type guards will also be inserted.
@@ -1417,7 +1417,8 @@
targetElement, newParameter, type);
}
// TODO(sra): Hoist out of loop.
- newParameter = _potentiallyAssertNotNull(variable, newParameter, type);
+ newParameter =
+ _potentiallyAssertNotNull(member, variable, newParameter, type);
localsHandler.updateLocal(local, newParameter);
}
@@ -1448,12 +1449,21 @@
/// In mixed mode, inserts an assertion of the form `assert(x != null)` for
/// parameters in opt-in libraries that have a static type that cannot be
/// nullable under a strong interpretation.
- HInstruction _potentiallyAssertNotNull(
+ HInstruction _potentiallyAssertNotNull(MemberEntity member,
ir.TreeNode context, HInstruction value, DartType type) {
if (!options.enableNullAssertions) return value;
if (!_isNonNullableByDefault(context)) return value;
if (!dartTypes.isNonNullableIfSound(type)) return value;
+ // `operator==` is usually augmented to handle a `null`-argument before this
+ // test would be inserted. There are a few exceptions (Object,
+ // Interceptor), where the body of the `==` method is designed to handle a
+ // `null` argument. In the usual case the null assertion is unnecessary and
+ // will be optimized away. In the exception cases a null assertion would be
+ // incorrect. Either way we should not do a null-assertion on the parameter
+ // of any `operator==` method.
+ if (member.name == '==') return value;
+
if (options.enableUserAssertions) {
pushCheckNull(value);
push(HNot(pop(), _abstractValueDomain.boolType));
@@ -1668,7 +1678,7 @@
}
if (functionNode != null) {
- _potentiallyAddFunctionParameterTypeChecks(functionNode, checks);
+ _potentiallyAddFunctionParameterTypeChecks(member, functionNode, checks);
}
_insertCoverageCall(member);
}
@@ -6311,7 +6321,7 @@
function, argument, type);
}
checkedOrTrusted =
- _potentiallyAssertNotNull(variable, checkedOrTrusted, type);
+ _potentiallyAssertNotNull(function, variable, checkedOrTrusted, type);
localsHandler.updateLocal(parameter, checkedOrTrusted);
});
}
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 594204c..0abdba8 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -1881,8 +1881,7 @@
assert(node.inputs.length == 1);
_registry.registerSpecializedGetInterceptor(node.interceptedClasses);
js.Name name = _namer.nameForGetInterceptor(node.interceptedClasses);
- js.Expression isolate = _namer
- .readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+ js.Expression isolate = _namer.readGlobalObjectForInterceptors();
use(node.receiver);
List<js.Expression> arguments = <js.Expression>[pop()];
push(js
@@ -1968,8 +1967,7 @@
_metrics.countHInterceptor.add();
_metrics.countHInterceptorOneshot.add();
List<js.Expression> arguments = visitArguments(node.inputs);
- js.Expression isolate =
- _namer.readGlobalObjectForLibrary(_commonElements.interceptorsLibrary);
+ js.Expression isolate = _namer.readGlobalObjectForInterceptors();
Selector selector = node.selector;
Set<ClassEntity> classes =
_interceptorData.getInterceptedClassesOn(selector.name, _closedWorld);
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 0052d2d..a8b8b85 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -262,6 +262,9 @@
'Unrecognized command `$command`, full request was `$request`');
}
} catch (e, s) {
+ var command = request['command'] as String;
+ _processedOptions.ticker
+ .logMs('Expression compiler worker request $command failed: $e:$s');
sendResponse({
'exception': '$e',
'stackTrace': '$s',
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index a3a70e5..b0f3974 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -31,6 +31,8 @@
browser_launcher: ^0.1.9
expect:
path: ../expect
+ http_multi_server:
+ path: ../../third_party/pkg/http_multi_server
js:
path: ../js
modular_test:
@@ -40,6 +42,8 @@
sourcemap_testing:
path: ../sourcemap_testing
stack_trace: any
+ shelf:
+ path: ../../third_party/pkg/shelf
test: any
testing:
path: ../testing
diff --git a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
new file mode 100644
index 0000000..a3483ed
--- /dev/null
+++ b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
@@ -0,0 +1,145 @@
+// 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.
+
+// @dart=2.9
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io' show HttpServer;
+
+import 'package:browser_launcher/browser_launcher.dart';
+import 'package:dev_compiler/src/kernel/expression_compiler_worker.dart';
+import 'package:front_end/src/api_prototype/file_system.dart';
+import 'package:front_end/src/api_prototype/standard_file_system.dart';
+import 'package:http_multi_server/http_multi_server.dart';
+import 'package:shelf/shelf.dart';
+import 'package:shelf/shelf_io.dart';
+import 'package:test/test.dart';
+
+const _existingFile = 'http://localhost/existingFile';
+const _nonExistingFile = 'http://localhost/nonExistingFile';
+
+const _smallFileContents = 'Hello world!';
+
+String _largeFileContents() =>
+ List.filled(10000, _smallFileContents).join('/n');
+
+FutureOr<Response> handler(Request request) {
+ final uri = request.requestedUri.queryParameters['uri'];
+ final headers = {
+ 'content-length': '${utf8.encode(_smallFileContents).length}',
+ ...request.headers,
+ };
+
+ if (request.method == 'HEAD') {
+ // 'exists'
+ return uri == _existingFile
+ ? Response.ok(null, headers: headers)
+ : Response.notFound(uri);
+ }
+ if (request.method == 'GET') {
+ // 'readAsBytes'
+ return uri == _existingFile
+ ? Response.ok(_smallFileContents, headers: headers)
+ : Response.notFound(uri);
+ }
+ return Response.internalServerError();
+}
+
+FutureOr<Response> noisyHandler(Request request) {
+ final uri = request.requestedUri.queryParameters['uri'];
+ final contents = _largeFileContents();
+ final headers = {
+ 'content-length': '${utf8.encode(contents).length}',
+ ...request.headers,
+ };
+
+ if (request.method == 'HEAD' || request.method == 'GET') {
+ // 'exists' or 'readAsBytes'
+ return uri == _existingFile
+ ? Response.ok(contents, headers: headers)
+ : Response.notFound(uri);
+ }
+ return Response.internalServerError();
+}
+
+void main() async {
+ HttpServer server;
+ AssetFileSystem fileSystem;
+ group('AssetFileSystem with a server', () {
+ setUpAll(() async {
+ var hostname = 'localhost';
+ var port = await findUnusedPort();
+
+ server = await HttpMultiServer.bind(hostname, port);
+ fileSystem =
+ AssetFileSystem(StandardFileSystem.instance, hostname, '$port');
+
+ serveRequests(server, handler);
+ });
+
+ tearDownAll(() async {
+ await expectLater(server.close(), completes);
+ });
+
+ test('can tell if file exists', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+ expect(await entity.exists(), true);
+ });
+
+ test('can tell if file does not exist', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+ expect(await entity.exists(), false);
+ });
+
+ test('can read existing file', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+ expect(utf8.decode(await entity.readAsBytes()), _smallFileContents);
+ });
+
+ test('cannot read non-existing file', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+ await expectLater(
+ entity.readAsBytes(), throwsA(isA<FileSystemException>()));
+ });
+ });
+
+ group('AssetFileSystem with a noisy server', () {
+ setUpAll(() async {
+ var hostname = 'localhost';
+ var port = await findUnusedPort();
+
+ server = await HttpMultiServer.bind(hostname, port);
+ fileSystem =
+ AssetFileSystem(StandardFileSystem.instance, hostname, '$port');
+
+ serveRequests(server, noisyHandler);
+ });
+
+ tearDownAll(() async {
+ await expectLater(server.close(), completes);
+ });
+
+ test('can tell if file exists', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+ expect(await entity.exists(), true);
+ });
+
+ test('can tell if file does not exist', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+ expect(await entity.exists(), false);
+ });
+
+ test('can read existing file', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_existingFile));
+ expect(utf8.decode(await entity.readAsBytes()), _largeFileContents());
+ });
+
+ test('cannot read non-existing file', () async {
+ var entity = fileSystem.entityForUri(Uri.parse(_nonExistingFile));
+ await expectLater(
+ entity.readAsBytes(), throwsA(isA<FileSystemException>()));
+ });
+ });
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index 58f6cf1..1c7f034 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -1523,7 +1523,10 @@
if (isSymbol) {
final Constant nameValue = positionals.single;
- if (nameValue is StringConstant && isValidSymbolName(nameValue.value)) {
+ // For libraries with null safety Symbol constructor accepts arbitrary
+ // string as argument.
+ if (nameValue is StringConstant &&
+ (isNonNullableByDefault || isValidSymbolName(nameValue.value))) {
return canonicalize(new SymbolConstant(nameValue.value, null));
}
return createErrorConstant(
@@ -3159,7 +3162,7 @@
}
String name = target.name.text;
- if (target is Procedure && target.isFactory) {
+ if (target.isFactory) {
if (name.isEmpty) {
name = target.enclosingClass!.name;
} else {
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart
new file mode 100644
index 0000000..3920233
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart
@@ -0,0 +1,69 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
new file mode 100644
index 0000000..c371313
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.expect
@@ -0,0 +1,1314 @@
+Problems reported:
+
+parser/error_recovery/issue_46346:1:7: Can't use 'abstract' as a name here.
+class abstract {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:2:7: Can't use 'as' as a name here.
+class as {}
+ ^^
+
+parser/error_recovery/issue_46346:3:7: 'assert' can't be used as an identifier because it's a keyword.
+class assert {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:6:7: 'break' can't be used as an identifier because it's a keyword.
+class break {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:7:7: 'case' can't be used as an identifier because it's a keyword.
+class case {}
+ ^^^^
+
+parser/error_recovery/issue_46346:8:7: 'catch' can't be used as an identifier because it's a keyword.
+class catch {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:9:7: 'class' can't be used as an identifier because it's a keyword.
+class class {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:10:7: 'const' can't be used as an identifier because it's a keyword.
+class const {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:11:7: 'continue' can't be used as an identifier because it's a keyword.
+class continue {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:12:7: Can't use 'covariant' as a name here.
+class covariant {}
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346:13:7: 'default' can't be used as an identifier because it's a keyword.
+class default {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:14:7: Can't use 'deferred' as a name here.
+class deferred {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:15:7: 'do' can't be used as an identifier because it's a keyword.
+class do {}
+ ^^
+
+parser/error_recovery/issue_46346:16:7: Can't use 'dynamic' as a name here.
+class dynamic {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:17:7: 'else' can't be used as an identifier because it's a keyword.
+class else {}
+ ^^^^
+
+parser/error_recovery/issue_46346:18:7: 'enum' can't be used as an identifier because it's a keyword.
+class enum {}
+ ^^^^
+
+parser/error_recovery/issue_46346:19:7: Can't use 'export' as a name here.
+class export {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:20:7: 'extends' can't be used as an identifier because it's a keyword.
+class extends {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:21:7: Can't use 'extension' as a name here.
+class extension {}
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346:22:7: Can't use 'external' as a name here.
+class external {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:23:7: Can't use 'factory' as a name here.
+class factory {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:24:7: 'false' can't be used as an identifier because it's a keyword.
+class false {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:25:7: 'final' can't be used as an identifier because it's a keyword.
+class final {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:26:7: 'finally' can't be used as an identifier because it's a keyword.
+class finally {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:27:7: 'for' can't be used as an identifier because it's a keyword.
+class for {}
+ ^^^
+
+parser/error_recovery/issue_46346:29:7: Can't use 'get' as a name here.
+class get {}
+ ^^^
+
+parser/error_recovery/issue_46346:31:7: 'if' can't be used as an identifier because it's a keyword.
+class if {}
+ ^^
+
+parser/error_recovery/issue_46346:32:7: Can't use 'implements' as a name here.
+class implements {}
+ ^^^^^^^^^^
+
+parser/error_recovery/issue_46346:33:7: Can't use 'import' as a name here.
+class import {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:34:7: 'in' can't be used as an identifier because it's a keyword.
+class in {}
+ ^^
+
+parser/error_recovery/issue_46346:36:7: Can't use 'interface' as a name here.
+class interface {}
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346:37:7: 'is' can't be used as an identifier because it's a keyword.
+class is {}
+ ^^
+
+parser/error_recovery/issue_46346:38:7: Can't use 'late' as a name here.
+class late {}
+ ^^^^
+
+parser/error_recovery/issue_46346:39:7: Can't use 'library' as a name here.
+class library {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:40:7: Can't use 'mixin' as a name here.
+class mixin {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:42:7: 'new' can't be used as an identifier because it's a keyword.
+class new {}
+ ^^^
+
+parser/error_recovery/issue_46346:43:7: 'null' can't be used as an identifier because it's a keyword.
+class null {}
+ ^^^^
+
+parser/error_recovery/issue_46346:46:7: Can't use 'operator' as a name here.
+class operator {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:48:7: Can't use 'part' as a name here.
+class part {}
+ ^^^^
+
+parser/error_recovery/issue_46346:50:7: Can't use 'required' as a name here.
+class required {}
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346:51:7: 'rethrow' can't be used as an identifier because it's a keyword.
+class rethrow {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:52:7: 'return' can't be used as an identifier because it's a keyword.
+class return {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:53:7: Can't use 'set' as a name here.
+class set {}
+ ^^^
+
+parser/error_recovery/issue_46346:56:7: Can't use 'static' as a name here.
+class static {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:57:7: 'super' can't be used as an identifier because it's a keyword.
+class super {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:58:7: 'switch' can't be used as an identifier because it's a keyword.
+class switch {}
+ ^^^^^^
+
+parser/error_recovery/issue_46346:60:7: 'this' can't be used as an identifier because it's a keyword.
+class this {}
+ ^^^^
+
+parser/error_recovery/issue_46346:61:7: 'throw' can't be used as an identifier because it's a keyword.
+class throw {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:62:7: 'true' can't be used as an identifier because it's a keyword.
+class true {}
+ ^^^^
+
+parser/error_recovery/issue_46346:63:7: 'try' can't be used as an identifier because it's a keyword.
+class try {}
+ ^^^
+
+parser/error_recovery/issue_46346:64:7: Can't use 'typedef' as a name here.
+class typedef {}
+ ^^^^^^^
+
+parser/error_recovery/issue_46346:65:7: 'var' can't be used as an identifier because it's a keyword.
+class var {}
+ ^^^
+
+parser/error_recovery/issue_46346:66:7: 'void' can't be used as an identifier because it's a keyword.
+class void {}
+ ^^^^
+
+parser/error_recovery/issue_46346:67:7: 'while' can't be used as an identifier because it's a keyword.
+class while {}
+ ^^^^^
+
+parser/error_recovery/issue_46346:68:7: 'with' can't be used as an identifier because it's a keyword.
+class with {}
+ ^^^^
+
+beginCompilationUnit(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+ handleIdentifier(abstract, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, abstract)
+ handleNoType(abstract)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+ handleIdentifier(as, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, as)
+ handleNoType(as)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ handleIdentifier(assert, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, assert)
+ handleNoType(assert)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(async, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, async)
+ handleNoType(async)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(await, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, await)
+ handleNoType(await)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ handleIdentifier(break, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, break)
+ handleNoType(break)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ handleIdentifier(case, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, case)
+ handleNoType(case)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ handleIdentifier(catch, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, catch)
+ handleNoType(catch)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ handleIdentifier(class, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, class)
+ handleNoType(class)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ handleIdentifier(const, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, const)
+ handleNoType(const)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ handleIdentifier(continue, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, continue)
+ handleNoType(continue)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+ handleIdentifier(covariant, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, covariant)
+ handleNoType(covariant)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ handleIdentifier(default, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, default)
+ handleNoType(default)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+ handleIdentifier(deferred, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, deferred)
+ handleNoType(deferred)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ handleIdentifier(do, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, do)
+ handleNoType(do)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+ handleIdentifier(dynamic, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, dynamic)
+ handleNoType(dynamic)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ handleIdentifier(else, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, else)
+ handleNoType(else)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ handleIdentifier(enum, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, enum)
+ handleNoType(enum)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+ handleIdentifier(export, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, export)
+ handleNoType(export)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ handleIdentifier(extends, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, extends)
+ handleNoType(extends)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+ handleIdentifier(extension, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, extension)
+ handleNoType(extension)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+ handleIdentifier(external, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, external)
+ handleNoType(external)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+ handleIdentifier(factory, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, factory)
+ handleNoType(factory)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ handleIdentifier(false, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, false)
+ handleNoType(false)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ handleIdentifier(final, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, final)
+ handleNoType(final)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ handleIdentifier(finally, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, finally)
+ handleNoType(finally)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ handleIdentifier(for, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, for)
+ handleNoType(for)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(Function, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, Function)
+ handleNoType(Function)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+ handleIdentifier(get, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, get)
+ handleNoType(get)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(hide, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, hide)
+ handleNoType(hide)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ handleIdentifier(if, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, if)
+ handleNoType(if)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+ handleIdentifier(implements, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, implements)
+ handleNoType(implements)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+ handleIdentifier(import, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, import)
+ handleNoType(import)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ handleIdentifier(in, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, in)
+ handleNoType(in)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(inout, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, inout)
+ handleNoType(inout)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+ handleIdentifier(interface, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, interface)
+ handleNoType(interface)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ handleIdentifier(is, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, is)
+ handleNoType(is)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+ handleIdentifier(late, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, late)
+ handleNoType(late)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+ handleIdentifier(library, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, library)
+ handleNoType(library)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+ handleIdentifier(mixin, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, mixin)
+ handleNoType(mixin)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(native, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, native)
+ handleNoType(native)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ handleIdentifier(new, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, new)
+ handleNoType(new)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ handleIdentifier(null, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, null)
+ handleNoType(null)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(of, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, of)
+ handleNoType(of)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(on, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, on)
+ handleNoType(on)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+ handleIdentifier(operator, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, operator)
+ handleNoType(operator)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(out, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, out)
+ handleNoType(out)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+ handleIdentifier(part, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, part)
+ handleNoType(part)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(patch, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, patch)
+ handleNoType(patch)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+ handleIdentifier(required, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, required)
+ handleNoType(required)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ handleIdentifier(rethrow, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, rethrow)
+ handleNoType(rethrow)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ handleIdentifier(return, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, return)
+ handleNoType(return)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+ handleIdentifier(set, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, set)
+ handleNoType(set)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(show, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, show)
+ handleNoType(show)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(source, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, source)
+ handleNoType(source)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+ handleIdentifier(static, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, static)
+ handleNoType(static)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ handleIdentifier(super, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, super)
+ handleNoType(super)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ handleIdentifier(switch, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, switch)
+ handleNoType(switch)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(sync, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, sync)
+ handleNoType(sync)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ handleIdentifier(this, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, this)
+ handleNoType(this)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ handleIdentifier(throw, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, throw)
+ handleNoType(throw)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ handleIdentifier(true, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, true)
+ handleNoType(true)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ handleIdentifier(try, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, try)
+ handleNoType(try)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+ handleIdentifier(typedef, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, typedef)
+ handleNoType(typedef)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ handleIdentifier(var, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, var)
+ handleNoType(var)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ handleIdentifier(void, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, void)
+ handleNoType(void)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ handleIdentifier(while, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, while)
+ handleNoType(while)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ handleIdentifier(with, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, with)
+ handleNoType(with)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(yield, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, yield)
+ handleNoType(yield)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration()
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
new file mode 100644
index 0000000..350e22e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.intertwined.expect
@@ -0,0 +1,2048 @@
+parseUnit(class)
+ skipErrorTokens(class)
+ listener: beginCompilationUnit(class)
+ syntheticPreviousToken(class)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+ listener: handleIdentifier(abstract, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, abstract)
+ parseClass(abstract, class, class, abstract)
+ parseClassHeaderOpt(abstract, class, class)
+ parseClassExtendsOpt(abstract)
+ listener: handleNoType(abstract)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(abstract)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(abstract)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(abstract, DeclarationKind.Class, abstract)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+ listener: handleIdentifier(as, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, as)
+ parseClass(as, class, class, as)
+ parseClassHeaderOpt(as, class, class)
+ parseClassExtendsOpt(as)
+ listener: handleNoType(as)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(as)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(as)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(as, DeclarationKind.Class, as)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ listener: handleIdentifier(assert, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, assert)
+ parseClass(assert, class, class, assert)
+ parseClassHeaderOpt(assert, class, class)
+ parseClassExtendsOpt(assert)
+ listener: handleNoType(assert)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(assert)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(assert)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(assert, DeclarationKind.Class, assert)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(async, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, async)
+ parseClass(async, class, class, async)
+ parseClassHeaderOpt(async, class, class)
+ parseClassExtendsOpt(async)
+ listener: handleNoType(async)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(async)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(async)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(async, DeclarationKind.Class, async)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(await, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, await)
+ parseClass(await, class, class, await)
+ parseClassHeaderOpt(await, class, class)
+ parseClassExtendsOpt(await)
+ listener: handleNoType(await)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(await)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(await)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(await, DeclarationKind.Class, await)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ listener: handleIdentifier(break, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, break)
+ parseClass(break, class, class, break)
+ parseClassHeaderOpt(break, class, class)
+ parseClassExtendsOpt(break)
+ listener: handleNoType(break)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(break)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(break)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(break, DeclarationKind.Class, break)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ listener: handleIdentifier(case, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, case)
+ parseClass(case, class, class, case)
+ parseClassHeaderOpt(case, class, class)
+ parseClassExtendsOpt(case)
+ listener: handleNoType(case)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(case)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(case)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(case, DeclarationKind.Class, case)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ listener: handleIdentifier(catch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, catch)
+ parseClass(catch, class, class, catch)
+ parseClassHeaderOpt(catch, class, class)
+ parseClassExtendsOpt(catch)
+ listener: handleNoType(catch)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(catch)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(catch)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(catch, DeclarationKind.Class, catch)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ listener: handleIdentifier(class, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, class)
+ parseClass(class, class, class, class)
+ parseClassHeaderOpt(class, class, class)
+ parseClassExtendsOpt(class)
+ listener: handleNoType(class)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(class)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(class)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(class, DeclarationKind.Class, class)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ listener: handleIdentifier(const, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, const)
+ parseClass(const, class, class, const)
+ parseClassHeaderOpt(const, class, class)
+ parseClassExtendsOpt(const)
+ listener: handleNoType(const)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(const)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(const)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(const, DeclarationKind.Class, const)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ listener: handleIdentifier(continue, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, continue)
+ parseClass(continue, class, class, continue)
+ parseClassHeaderOpt(continue, class, class)
+ parseClassExtendsOpt(continue)
+ listener: handleNoType(continue)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(continue)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(continue)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(continue, DeclarationKind.Class, continue)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+ listener: handleIdentifier(covariant, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, covariant)
+ parseClass(covariant, class, class, covariant)
+ parseClassHeaderOpt(covariant, class, class)
+ parseClassExtendsOpt(covariant)
+ listener: handleNoType(covariant)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(covariant)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(covariant)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(covariant, DeclarationKind.Class, covariant)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ listener: handleIdentifier(default, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, default)
+ parseClass(default, class, class, default)
+ parseClassHeaderOpt(default, class, class)
+ parseClassExtendsOpt(default)
+ listener: handleNoType(default)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(default)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(default)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(default, DeclarationKind.Class, default)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+ listener: handleIdentifier(deferred, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, deferred)
+ parseClass(deferred, class, class, deferred)
+ parseClassHeaderOpt(deferred, class, class)
+ parseClassExtendsOpt(deferred)
+ listener: handleNoType(deferred)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(deferred)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(deferred)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(deferred, DeclarationKind.Class, deferred)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ listener: handleIdentifier(do, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, do)
+ parseClass(do, class, class, do)
+ parseClassHeaderOpt(do, class, class)
+ parseClassExtendsOpt(do)
+ listener: handleNoType(do)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(do)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(do)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(do, DeclarationKind.Class, do)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+ listener: handleIdentifier(dynamic, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, dynamic)
+ parseClass(dynamic, class, class, dynamic)
+ parseClassHeaderOpt(dynamic, class, class)
+ parseClassExtendsOpt(dynamic)
+ listener: handleNoType(dynamic)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(dynamic)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(dynamic)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(dynamic, DeclarationKind.Class, dynamic)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ listener: handleIdentifier(else, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, else)
+ parseClass(else, class, class, else)
+ parseClassHeaderOpt(else, class, class)
+ parseClassExtendsOpt(else)
+ listener: handleNoType(else)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(else)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(else)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(else, DeclarationKind.Class, else)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ listener: handleIdentifier(enum, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, enum)
+ parseClass(enum, class, class, enum)
+ parseClassHeaderOpt(enum, class, class)
+ parseClassExtendsOpt(enum)
+ listener: handleNoType(enum)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(enum)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(enum)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(enum, DeclarationKind.Class, enum)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+ listener: handleIdentifier(export, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, export)
+ parseClass(export, class, class, export)
+ parseClassHeaderOpt(export, class, class)
+ parseClassExtendsOpt(export)
+ listener: handleNoType(export)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(export)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(export)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(export, DeclarationKind.Class, export)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ listener: handleIdentifier(extends, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, extends)
+ parseClass(extends, class, class, extends)
+ parseClassHeaderOpt(extends, class, class)
+ parseClassExtendsOpt(extends)
+ listener: handleNoType(extends)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(extends)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(extends)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(extends, DeclarationKind.Class, extends)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+ listener: handleIdentifier(extension, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, extension)
+ parseClass(extension, class, class, extension)
+ parseClassHeaderOpt(extension, class, class)
+ parseClassExtendsOpt(extension)
+ listener: handleNoType(extension)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(extension)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(extension)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(extension, DeclarationKind.Class, extension)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+ listener: handleIdentifier(external, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, external)
+ parseClass(external, class, class, external)
+ parseClassHeaderOpt(external, class, class)
+ parseClassExtendsOpt(external)
+ listener: handleNoType(external)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(external)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(external)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(external, DeclarationKind.Class, external)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+ listener: handleIdentifier(factory, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, factory)
+ parseClass(factory, class, class, factory)
+ parseClassHeaderOpt(factory, class, class)
+ parseClassExtendsOpt(factory)
+ listener: handleNoType(factory)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(factory)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(factory)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(factory, DeclarationKind.Class, factory)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ listener: handleIdentifier(false, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, false)
+ parseClass(false, class, class, false)
+ parseClassHeaderOpt(false, class, class)
+ parseClassExtendsOpt(false)
+ listener: handleNoType(false)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(false)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(false)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(false, DeclarationKind.Class, false)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ listener: handleIdentifier(final, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, final)
+ parseClass(final, class, class, final)
+ parseClassHeaderOpt(final, class, class)
+ parseClassExtendsOpt(final)
+ listener: handleNoType(final)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(final)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(final)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(final, DeclarationKind.Class, final)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ listener: handleIdentifier(finally, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, finally)
+ parseClass(finally, class, class, finally)
+ parseClassHeaderOpt(finally, class, class)
+ parseClassExtendsOpt(finally)
+ listener: handleNoType(finally)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(finally)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(finally)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(finally, DeclarationKind.Class, finally)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ listener: handleIdentifier(for, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, for)
+ parseClass(for, class, class, for)
+ parseClassHeaderOpt(for, class, class)
+ parseClassExtendsOpt(for)
+ listener: handleNoType(for)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(for)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(for)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(for, DeclarationKind.Class, for)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(Function, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, Function)
+ parseClass(Function, class, class, Function)
+ parseClassHeaderOpt(Function, class, class)
+ parseClassExtendsOpt(Function)
+ listener: handleNoType(Function)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(Function)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(Function)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(Function, DeclarationKind.Class, Function)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+ listener: handleIdentifier(get, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, get)
+ parseClass(get, class, class, get)
+ parseClassHeaderOpt(get, class, class)
+ parseClassExtendsOpt(get)
+ listener: handleNoType(get)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(get)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(get)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(get, DeclarationKind.Class, get)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(hide, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, hide)
+ parseClass(hide, class, class, hide)
+ parseClassHeaderOpt(hide, class, class)
+ parseClassExtendsOpt(hide)
+ listener: handleNoType(hide)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(hide)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(hide)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(hide, DeclarationKind.Class, hide)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ listener: handleIdentifier(if, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, if)
+ parseClass(if, class, class, if)
+ parseClassHeaderOpt(if, class, class)
+ parseClassExtendsOpt(if)
+ listener: handleNoType(if)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(if)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(if)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(if, DeclarationKind.Class, if)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+ listener: handleIdentifier(implements, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, implements)
+ parseClass(implements, class, class, implements)
+ parseClassHeaderOpt(implements, class, class)
+ parseClassExtendsOpt(implements)
+ listener: handleNoType(implements)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(implements)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(implements)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(implements, DeclarationKind.Class, implements)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+ listener: handleIdentifier(import, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, import)
+ parseClass(import, class, class, import)
+ parseClassHeaderOpt(import, class, class)
+ parseClassExtendsOpt(import)
+ listener: handleNoType(import)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(import)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(import)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(import, DeclarationKind.Class, import)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ listener: handleIdentifier(in, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, in)
+ parseClass(in, class, class, in)
+ parseClassHeaderOpt(in, class, class)
+ parseClassExtendsOpt(in)
+ listener: handleNoType(in)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(in)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(in)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(in, DeclarationKind.Class, in)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(inout, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, inout)
+ parseClass(inout, class, class, inout)
+ parseClassHeaderOpt(inout, class, class)
+ parseClassExtendsOpt(inout)
+ listener: handleNoType(inout)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(inout)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(inout)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(inout, DeclarationKind.Class, inout)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+ listener: handleIdentifier(interface, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, interface)
+ parseClass(interface, class, class, interface)
+ parseClassHeaderOpt(interface, class, class)
+ parseClassExtendsOpt(interface)
+ listener: handleNoType(interface)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(interface)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(interface)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(interface, DeclarationKind.Class, interface)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ listener: handleIdentifier(is, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, is)
+ parseClass(is, class, class, is)
+ parseClassHeaderOpt(is, class, class)
+ parseClassExtendsOpt(is)
+ listener: handleNoType(is)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(is)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(is)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(is, DeclarationKind.Class, is)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+ listener: handleIdentifier(late, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, late)
+ parseClass(late, class, class, late)
+ parseClassHeaderOpt(late, class, class)
+ parseClassExtendsOpt(late)
+ listener: handleNoType(late)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(late)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(late)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(late, DeclarationKind.Class, late)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+ listener: handleIdentifier(library, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, library)
+ parseClass(library, class, class, library)
+ parseClassHeaderOpt(library, class, class)
+ parseClassExtendsOpt(library)
+ listener: handleNoType(library)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(library)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(library)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(library, DeclarationKind.Class, library)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+ listener: handleIdentifier(mixin, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, mixin)
+ parseClass(mixin, class, class, mixin)
+ parseClassHeaderOpt(mixin, class, class)
+ parseClassExtendsOpt(mixin)
+ listener: handleNoType(mixin)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(mixin)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(mixin)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(mixin, DeclarationKind.Class, mixin)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(native, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, native)
+ parseClass(native, class, class, native)
+ parseClassHeaderOpt(native, class, class)
+ parseClassExtendsOpt(native)
+ listener: handleNoType(native)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(native)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(native)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(native, DeclarationKind.Class, native)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ listener: handleIdentifier(new, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, new)
+ parseClass(new, class, class, new)
+ parseClassHeaderOpt(new, class, class)
+ parseClassExtendsOpt(new)
+ listener: handleNoType(new)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(new)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(new)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(new, DeclarationKind.Class, new)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ listener: handleIdentifier(null, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, null)
+ parseClass(null, class, class, null)
+ parseClassHeaderOpt(null, class, class)
+ parseClassExtendsOpt(null)
+ listener: handleNoType(null)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(null)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(null)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(null, DeclarationKind.Class, null)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(of, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, of)
+ parseClass(of, class, class, of)
+ parseClassHeaderOpt(of, class, class)
+ parseClassExtendsOpt(of)
+ listener: handleNoType(of)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(of)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(of)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(of, DeclarationKind.Class, of)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(on, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, on)
+ parseClass(on, class, class, on)
+ parseClassHeaderOpt(on, class, class)
+ parseClassExtendsOpt(on)
+ listener: handleNoType(on)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(on)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(on)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(on, DeclarationKind.Class, on)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+ listener: handleIdentifier(operator, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, operator)
+ parseClass(operator, class, class, operator)
+ parseClassHeaderOpt(operator, class, class)
+ parseClassExtendsOpt(operator)
+ listener: handleNoType(operator)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(operator)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(operator)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(operator, DeclarationKind.Class, operator)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(out, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, out)
+ parseClass(out, class, class, out)
+ parseClassHeaderOpt(out, class, class)
+ parseClassExtendsOpt(out)
+ listener: handleNoType(out)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(out)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(out)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(out, DeclarationKind.Class, out)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+ listener: handleIdentifier(part, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, part)
+ parseClass(part, class, class, part)
+ parseClassHeaderOpt(part, class, class)
+ parseClassExtendsOpt(part)
+ listener: handleNoType(part)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(part)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(part)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(part, DeclarationKind.Class, part)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(patch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, patch)
+ parseClass(patch, class, class, patch)
+ parseClassHeaderOpt(patch, class, class)
+ parseClassExtendsOpt(patch)
+ listener: handleNoType(patch)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(patch)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(patch)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(patch, DeclarationKind.Class, patch)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+ listener: handleIdentifier(required, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, required)
+ parseClass(required, class, class, required)
+ parseClassHeaderOpt(required, class, class)
+ parseClassExtendsOpt(required)
+ listener: handleNoType(required)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(required)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(required)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(required, DeclarationKind.Class, required)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ listener: handleIdentifier(rethrow, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, rethrow)
+ parseClass(rethrow, class, class, rethrow)
+ parseClassHeaderOpt(rethrow, class, class)
+ parseClassExtendsOpt(rethrow)
+ listener: handleNoType(rethrow)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(rethrow)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(rethrow)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(rethrow, DeclarationKind.Class, rethrow)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ listener: handleIdentifier(return, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, return)
+ parseClass(return, class, class, return)
+ parseClassHeaderOpt(return, class, class)
+ parseClassExtendsOpt(return)
+ listener: handleNoType(return)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(return)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(return)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(return, DeclarationKind.Class, return)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+ listener: handleIdentifier(set, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, set)
+ parseClass(set, class, class, set)
+ parseClassHeaderOpt(set, class, class)
+ parseClassExtendsOpt(set)
+ listener: handleNoType(set)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(set)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(set)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(set, DeclarationKind.Class, set)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(show, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, show)
+ parseClass(show, class, class, show)
+ parseClassHeaderOpt(show, class, class)
+ parseClassExtendsOpt(show)
+ listener: handleNoType(show)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(show)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(show)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(show, DeclarationKind.Class, show)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(source, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, source)
+ parseClass(source, class, class, source)
+ parseClassHeaderOpt(source, class, class)
+ parseClassExtendsOpt(source)
+ listener: handleNoType(source)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(source)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(source)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(source, DeclarationKind.Class, source)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+ listener: handleIdentifier(static, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, static)
+ parseClass(static, class, class, static)
+ parseClassHeaderOpt(static, class, class)
+ parseClassExtendsOpt(static)
+ listener: handleNoType(static)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(static)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(static)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(static, DeclarationKind.Class, static)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ listener: handleIdentifier(super, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, super)
+ parseClass(super, class, class, super)
+ parseClassHeaderOpt(super, class, class)
+ parseClassExtendsOpt(super)
+ listener: handleNoType(super)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(super)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(super)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(super, DeclarationKind.Class, super)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ listener: handleIdentifier(switch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, switch)
+ parseClass(switch, class, class, switch)
+ parseClassHeaderOpt(switch, class, class)
+ parseClassExtendsOpt(switch)
+ listener: handleNoType(switch)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(switch)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(switch)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(switch, DeclarationKind.Class, switch)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(sync, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, sync)
+ parseClass(sync, class, class, sync)
+ parseClassHeaderOpt(sync, class, class)
+ parseClassExtendsOpt(sync)
+ listener: handleNoType(sync)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(sync)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(sync)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(sync, DeclarationKind.Class, sync)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ listener: handleIdentifier(this, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, this)
+ parseClass(this, class, class, this)
+ parseClassHeaderOpt(this, class, class)
+ parseClassExtendsOpt(this)
+ listener: handleNoType(this)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(this)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(this)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(this, DeclarationKind.Class, this)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ listener: handleIdentifier(throw, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, throw)
+ parseClass(throw, class, class, throw)
+ parseClassHeaderOpt(throw, class, class)
+ parseClassExtendsOpt(throw)
+ listener: handleNoType(throw)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(throw)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(throw)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(throw, DeclarationKind.Class, throw)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ listener: handleIdentifier(true, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, true)
+ parseClass(true, class, class, true)
+ parseClassHeaderOpt(true, class, class)
+ parseClassExtendsOpt(true)
+ listener: handleNoType(true)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(true)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(true)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(true, DeclarationKind.Class, true)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ listener: handleIdentifier(try, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, try)
+ parseClass(try, class, class, try)
+ parseClassHeaderOpt(try, class, class)
+ parseClassExtendsOpt(try)
+ listener: handleNoType(try)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(try)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(try)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(try, DeclarationKind.Class, try)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+ listener: handleIdentifier(typedef, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, typedef)
+ parseClass(typedef, class, class, typedef)
+ parseClassHeaderOpt(typedef, class, class)
+ parseClassExtendsOpt(typedef)
+ listener: handleNoType(typedef)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(typedef)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(typedef)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(typedef, DeclarationKind.Class, typedef)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ listener: handleIdentifier(var, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, var)
+ parseClass(var, class, class, var)
+ parseClassHeaderOpt(var, class, class)
+ parseClassExtendsOpt(var)
+ listener: handleNoType(var)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(var)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(var)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(var, DeclarationKind.Class, var)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ listener: handleIdentifier(void, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, void)
+ parseClass(void, class, class, void)
+ parseClassHeaderOpt(void, class, class)
+ parseClassExtendsOpt(void)
+ listener: handleNoType(void)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(void)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(void)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(void, DeclarationKind.Class, void)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ listener: handleIdentifier(while, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, while)
+ parseClass(while, class, class, while)
+ parseClassHeaderOpt(while, class, class)
+ parseClassExtendsOpt(while)
+ listener: handleNoType(while)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(while)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(while)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(while, DeclarationKind.Class, while)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ listener: handleIdentifier(with, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, with)
+ parseClass(with, class, class, with)
+ parseClassHeaderOpt(with, class, class)
+ parseClassExtendsOpt(with)
+ listener: handleNoType(with)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(with)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(with)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(with, DeclarationKind.Class, with)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(}, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(}, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(yield, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, yield)
+ parseClass(yield, class, class, yield)
+ parseClassHeaderOpt(yield, class, class)
+ parseClassExtendsOpt(yield)
+ listener: handleNoType(yield)
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt(yield)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt(yield)
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(yield, DeclarationKind.Class, yield)
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(class)
+ listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect
new file mode 100644
index 0000000..54c447e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.parser.expect
@@ -0,0 +1,141 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
+
+
+class[KeywordToken] abstract[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] as[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] assert[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] async[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] break[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] case[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] catch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] class[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] const[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] continue[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] default[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] do[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] else[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] enum[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] export[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extends[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extension[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] external[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] factory[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] false[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] final[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] finally[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] for[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] Function[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] get[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] hide[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] if[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] implements[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] import[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] in[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] inout[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] interface[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] is[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] late[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] library[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] native[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] new[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] null[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] of[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] on[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] operator[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] out[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] part[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] patch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] required[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] return[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] set[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] show[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] source[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] static[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] super[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] switch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] sync[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] this[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] throw[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] true[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] try[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] var[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] void[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] while[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] with[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] yield[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect
new file mode 100644
index 0000000..54c447e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346.dart.scanner.expect
@@ -0,0 +1,141 @@
+class abstract {}
+class as {}
+class assert {}
+class async {}
+class await {}
+class break {}
+class case {}
+class catch {}
+class class {}
+class const {}
+class continue {}
+class covariant {}
+class default {}
+class deferred {}
+class do {}
+class dynamic {}
+class else {}
+class enum {}
+class export {}
+class extends {}
+class extension {}
+class external {}
+class factory {}
+class false {}
+class final {}
+class finally {}
+class for {}
+class Function {}
+class get {}
+class hide {}
+class if {}
+class implements {}
+class import {}
+class in {}
+class inout {}
+class interface {}
+class is {}
+class late {}
+class library {}
+class mixin {}
+class native {}
+class new {}
+class null {}
+class of {}
+class on {}
+class operator {}
+class out {}
+class part {}
+class patch {}
+class required {}
+class rethrow {}
+class return {}
+class set {}
+class show {}
+class source {}
+class static {}
+class super {}
+class switch {}
+class sync {}
+class this {}
+class throw {}
+class true {}
+class try {}
+class typedef {}
+class var {}
+class void {}
+class while {}
+class with {}
+class yield {}
+
+
+class[KeywordToken] abstract[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] as[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] assert[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] async[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] await[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] break[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] case[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] catch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] class[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] const[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] continue[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] default[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] do[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] else[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] enum[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] export[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extends[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] extension[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] external[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] factory[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] false[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] final[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] finally[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] for[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] Function[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] get[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] hide[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] if[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] implements[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] import[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] in[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] inout[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] interface[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] is[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] late[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] library[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] native[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] new[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] null[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] of[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] on[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] operator[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] out[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] part[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] patch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] required[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] return[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] set[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] show[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] source[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] static[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] super[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] switch[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] sync[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] this[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] throw[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] true[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] try[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] var[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] void[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] while[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] with[KeywordToken] {[BeginToken]}[SimpleToken]
+class[KeywordToken] yield[KeywordToken] {[BeginToken]}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart
new file mode 100644
index 0000000..b70c6c3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart
@@ -0,0 +1,69 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
new file mode 100644
index 0000000..caa8b1a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.expect
@@ -0,0 +1,1452 @@
+Problems reported:
+
+parser/error_recovery/issue_46346_prime_1:1:7: Can't use 'abstract' as a name here.
+class abstract = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:2:7: Can't use 'as' as a name here.
+class as = A with B;
+ ^^
+
+parser/error_recovery/issue_46346_prime_1:3:7: 'assert' can't be used as an identifier because it's a keyword.
+class assert = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:6:7: 'break' can't be used as an identifier because it's a keyword.
+class break = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:7:7: 'case' can't be used as an identifier because it's a keyword.
+class case = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:8:7: 'catch' can't be used as an identifier because it's a keyword.
+class catch = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:9:7: 'class' can't be used as an identifier because it's a keyword.
+class class = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:10:7: 'const' can't be used as an identifier because it's a keyword.
+class const = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:11:7: 'continue' can't be used as an identifier because it's a keyword.
+class continue = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:12:7: Can't use 'covariant' as a name here.
+class covariant = A with B;
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:13:7: 'default' can't be used as an identifier because it's a keyword.
+class default = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:14:7: Can't use 'deferred' as a name here.
+class deferred = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:15:7: 'do' can't be used as an identifier because it's a keyword.
+class do = A with B;
+ ^^
+
+parser/error_recovery/issue_46346_prime_1:16:7: Can't use 'dynamic' as a name here.
+class dynamic = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:17:7: 'else' can't be used as an identifier because it's a keyword.
+class else = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:18:7: 'enum' can't be used as an identifier because it's a keyword.
+class enum = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:19:7: Can't use 'export' as a name here.
+class export = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:20:7: 'extends' can't be used as an identifier because it's a keyword.
+class extends = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:21:7: Can't use 'extension' as a name here.
+class extension = A with B;
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:22:7: Can't use 'external' as a name here.
+class external = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:23:7: Can't use 'factory' as a name here.
+class factory = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:24:7: 'false' can't be used as an identifier because it's a keyword.
+class false = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:25:7: 'final' can't be used as an identifier because it's a keyword.
+class final = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:26:7: 'finally' can't be used as an identifier because it's a keyword.
+class finally = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:27:7: 'for' can't be used as an identifier because it's a keyword.
+class for = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:29:7: Can't use 'get' as a name here.
+class get = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:31:7: 'if' can't be used as an identifier because it's a keyword.
+class if = A with B;
+ ^^
+
+parser/error_recovery/issue_46346_prime_1:32:7: Can't use 'implements' as a name here.
+class implements = A with B;
+ ^^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:33:7: Can't use 'import' as a name here.
+class import = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:34:7: 'in' can't be used as an identifier because it's a keyword.
+class in = A with B;
+ ^^
+
+parser/error_recovery/issue_46346_prime_1:36:7: Can't use 'interface' as a name here.
+class interface = A with B;
+ ^^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:37:7: 'is' can't be used as an identifier because it's a keyword.
+class is = A with B;
+ ^^
+
+parser/error_recovery/issue_46346_prime_1:38:7: Can't use 'late' as a name here.
+class late = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:39:7: Can't use 'library' as a name here.
+class library = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:40:7: Can't use 'mixin' as a name here.
+class mixin = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:42:7: 'new' can't be used as an identifier because it's a keyword.
+class new = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:43:7: 'null' can't be used as an identifier because it's a keyword.
+class null = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:46:7: Can't use 'operator' as a name here.
+class operator = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:48:7: Can't use 'part' as a name here.
+class part = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:50:7: Can't use 'required' as a name here.
+class required = A with B;
+ ^^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:51:7: 'rethrow' can't be used as an identifier because it's a keyword.
+class rethrow = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:52:7: 'return' can't be used as an identifier because it's a keyword.
+class return = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:53:7: Can't use 'set' as a name here.
+class set = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:56:7: Can't use 'static' as a name here.
+class static = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:57:7: 'super' can't be used as an identifier because it's a keyword.
+class super = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:58:7: 'switch' can't be used as an identifier because it's a keyword.
+class switch = A with B;
+ ^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:60:7: 'this' can't be used as an identifier because it's a keyword.
+class this = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:61:7: 'throw' can't be used as an identifier because it's a keyword.
+class throw = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:62:7: 'true' can't be used as an identifier because it's a keyword.
+class true = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:63:7: 'try' can't be used as an identifier because it's a keyword.
+class try = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:64:7: Can't use 'typedef' as a name here.
+class typedef = A with B;
+ ^^^^^^^
+
+parser/error_recovery/issue_46346_prime_1:65:7: 'var' can't be used as an identifier because it's a keyword.
+class var = A with B;
+ ^^^
+
+parser/error_recovery/issue_46346_prime_1:66:7: 'void' can't be used as an identifier because it's a keyword.
+class void = A with B;
+ ^^^^
+
+parser/error_recovery/issue_46346_prime_1:67:7: 'while' can't be used as an identifier because it's a keyword.
+class while = A with B;
+ ^^^^^
+
+parser/error_recovery/issue_46346_prime_1:68:7: 'with' can't be used as an identifier because it's a keyword.
+class with = A with B;
+ ^^^^
+
+beginCompilationUnit(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+ handleIdentifier(abstract, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, abstract)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+ handleIdentifier(as, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, as)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ handleIdentifier(assert, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, assert)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(async, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, async)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(await, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, await)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ handleIdentifier(break, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, break)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ handleIdentifier(case, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, case)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ handleIdentifier(catch, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, catch)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ handleIdentifier(class, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, class)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ handleIdentifier(const, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, const)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ handleIdentifier(continue, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, continue)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+ handleIdentifier(covariant, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, covariant)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ handleIdentifier(default, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, default)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+ handleIdentifier(deferred, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, deferred)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ handleIdentifier(do, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, do)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+ handleIdentifier(dynamic, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, dynamic)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ handleIdentifier(else, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, else)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ handleIdentifier(enum, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, enum)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+ handleIdentifier(export, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, export)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ handleIdentifier(extends, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, extends)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+ handleIdentifier(extension, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, extension)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+ handleIdentifier(external, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, external)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+ handleIdentifier(factory, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, factory)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ handleIdentifier(false, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, false)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ handleIdentifier(final, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, final)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ handleIdentifier(finally, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, finally)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ handleIdentifier(for, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, for)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(Function, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, Function)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+ handleIdentifier(get, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, get)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(hide, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, hide)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ handleIdentifier(if, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, if)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+ handleIdentifier(implements, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, implements)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+ handleIdentifier(import, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, import)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ handleIdentifier(in, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, in)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(inout, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, inout)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+ handleIdentifier(interface, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, interface)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ handleIdentifier(is, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, is)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+ handleIdentifier(late, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, late)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+ handleIdentifier(library, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, library)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+ handleIdentifier(mixin, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, mixin)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(native, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, native)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ handleIdentifier(new, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, new)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ handleIdentifier(null, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, null)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(of, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, of)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(on, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, on)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+ handleIdentifier(operator, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, operator)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(out, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, out)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+ handleIdentifier(part, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, part)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(patch, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, patch)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+ handleIdentifier(required, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, required)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ handleIdentifier(rethrow, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, rethrow)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ handleIdentifier(return, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, return)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+ handleIdentifier(set, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, set)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(show, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, show)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(source, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, source)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+ handleIdentifier(static, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, static)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ handleIdentifier(super, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, super)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ handleIdentifier(switch, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, switch)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(sync, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, sync)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ handleIdentifier(this, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, this)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ handleIdentifier(throw, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, throw)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ handleIdentifier(true, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, true)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ handleIdentifier(try, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, try)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+ handleIdentifier(typedef, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, typedef)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ handleIdentifier(var, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, var)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ handleIdentifier(void, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, void)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ handleIdentifier(while, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, while)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ handleIdentifier(with, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, with)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(yield, classOrMixinDeclaration)
+ handleNoTypeVariables(=)
+ beginNamedMixinApplication(class, null, yield)
+ handleIdentifier(A, typeReference)
+ handleNoTypeArguments(with)
+ handleType(A, null)
+ beginTypeList(B)
+ handleIdentifier(B, typeReference)
+ handleNoTypeArguments(;)
+ handleType(B, null)
+ endTypeList(1)
+ handleNamedMixinApplicationWithClause(with)
+ endNamedMixinApplication(class, class, =, null, ;)
+ endTopLevelDeclaration()
+endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
new file mode 100644
index 0000000..d0f33a6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.intertwined.expect
@@ -0,0 +1,1979 @@
+parseUnit(class)
+ skipErrorTokens(class)
+ listener: beginCompilationUnit(class)
+ syntheticPreviousToken(class)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(abstract, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'abstract' as a name here., null, {lexeme: abstract}], abstract, abstract)
+ listener: handleIdentifier(abstract, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, abstract)
+ parseNamedMixinApplication(abstract, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(as, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'as' as a name here., null, {lexeme: as}], as, as)
+ listener: handleIdentifier(as, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, as)
+ parseNamedMixinApplication(as, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ listener: handleIdentifier(assert, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, assert)
+ parseNamedMixinApplication(assert, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(async, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, async)
+ parseNamedMixinApplication(async, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(await, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, await)
+ parseNamedMixinApplication(await, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ listener: handleIdentifier(break, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, break)
+ parseNamedMixinApplication(break, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ listener: handleIdentifier(case, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, case)
+ parseNamedMixinApplication(case, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ listener: handleIdentifier(catch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, catch)
+ parseNamedMixinApplication(catch, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ listener: handleIdentifier(class, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, class)
+ parseNamedMixinApplication(class, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ listener: handleIdentifier(const, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, const)
+ parseNamedMixinApplication(const, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ listener: handleIdentifier(continue, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, continue)
+ parseNamedMixinApplication(continue, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(covariant, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'covariant' as a name here., null, {lexeme: covariant}], covariant, covariant)
+ listener: handleIdentifier(covariant, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, covariant)
+ parseNamedMixinApplication(covariant, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ listener: handleIdentifier(default, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, default)
+ parseNamedMixinApplication(default, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(deferred, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'deferred' as a name here., null, {lexeme: deferred}], deferred, deferred)
+ listener: handleIdentifier(deferred, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, deferred)
+ parseNamedMixinApplication(deferred, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ listener: handleIdentifier(do, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, do)
+ parseNamedMixinApplication(do, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(dynamic, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'dynamic' as a name here., null, {lexeme: dynamic}], dynamic, dynamic)
+ listener: handleIdentifier(dynamic, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, dynamic)
+ parseNamedMixinApplication(dynamic, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ listener: handleIdentifier(else, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, else)
+ parseNamedMixinApplication(else, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ listener: handleIdentifier(enum, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, enum)
+ parseNamedMixinApplication(enum, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(export, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'export' as a name here., null, {lexeme: export}], export, export)
+ listener: handleIdentifier(export, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, export)
+ parseNamedMixinApplication(export, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ listener: handleIdentifier(extends, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, extends)
+ parseNamedMixinApplication(extends, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(extension, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'extension' as a name here., null, {lexeme: extension}], extension, extension)
+ listener: handleIdentifier(extension, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, extension)
+ parseNamedMixinApplication(extension, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(external, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'external' as a name here., null, {lexeme: external}], external, external)
+ listener: handleIdentifier(external, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, external)
+ parseNamedMixinApplication(external, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(factory, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'factory' as a name here., null, {lexeme: factory}], factory, factory)
+ listener: handleIdentifier(factory, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, factory)
+ parseNamedMixinApplication(factory, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ listener: handleIdentifier(false, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, false)
+ parseNamedMixinApplication(false, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ listener: handleIdentifier(final, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, final)
+ parseNamedMixinApplication(final, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ listener: handleIdentifier(finally, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, finally)
+ parseNamedMixinApplication(finally, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ listener: handleIdentifier(for, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, for)
+ parseNamedMixinApplication(for, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(Function, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, Function)
+ parseNamedMixinApplication(Function, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(get, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'get' as a name here., null, {lexeme: get}], get, get)
+ listener: handleIdentifier(get, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, get)
+ parseNamedMixinApplication(get, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(hide, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, hide)
+ parseNamedMixinApplication(hide, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ listener: handleIdentifier(if, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, if)
+ parseNamedMixinApplication(if, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(implements, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'implements' as a name here., null, {lexeme: implements}], implements, implements)
+ listener: handleIdentifier(implements, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, implements)
+ parseNamedMixinApplication(implements, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(import, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'import' as a name here., null, {lexeme: import}], import, import)
+ listener: handleIdentifier(import, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, import)
+ parseNamedMixinApplication(import, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ listener: handleIdentifier(in, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, in)
+ parseNamedMixinApplication(in, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(inout, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, inout)
+ parseNamedMixinApplication(inout, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(interface, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'interface' as a name here., null, {lexeme: interface}], interface, interface)
+ listener: handleIdentifier(interface, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, interface)
+ parseNamedMixinApplication(interface, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ listener: handleIdentifier(is, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, is)
+ parseNamedMixinApplication(is, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(late, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'late' as a name here., null, {lexeme: late}], late, late)
+ listener: handleIdentifier(late, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, late)
+ parseNamedMixinApplication(late, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(library, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'library' as a name here., null, {lexeme: library}], library, library)
+ listener: handleIdentifier(library, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, library)
+ parseNamedMixinApplication(library, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(mixin, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'mixin' as a name here., null, {lexeme: mixin}], mixin, mixin)
+ listener: handleIdentifier(mixin, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, mixin)
+ parseNamedMixinApplication(mixin, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(native, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, native)
+ parseNamedMixinApplication(native, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ listener: handleIdentifier(new, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, new)
+ parseNamedMixinApplication(new, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ listener: handleIdentifier(null, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, null)
+ parseNamedMixinApplication(null, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(of, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, of)
+ parseNamedMixinApplication(of, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(on, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, on)
+ parseNamedMixinApplication(on, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(operator, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'operator' as a name here., null, {lexeme: operator}], operator, operator)
+ listener: handleIdentifier(operator, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, operator)
+ parseNamedMixinApplication(operator, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(out, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, out)
+ parseNamedMixinApplication(out, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(part, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'part' as a name here., null, {lexeme: part}], part, part)
+ listener: handleIdentifier(part, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, part)
+ parseNamedMixinApplication(part, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(patch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, patch)
+ parseNamedMixinApplication(patch, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(required, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'required' as a name here., null, {lexeme: required}], required, required)
+ listener: handleIdentifier(required, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, required)
+ parseNamedMixinApplication(required, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ listener: handleIdentifier(rethrow, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, rethrow)
+ parseNamedMixinApplication(rethrow, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ listener: handleIdentifier(return, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, return)
+ parseNamedMixinApplication(return, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(set, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'set' as a name here., null, {lexeme: set}], set, set)
+ listener: handleIdentifier(set, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, set)
+ parseNamedMixinApplication(set, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(show, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, show)
+ parseNamedMixinApplication(show, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(source, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, source)
+ parseNamedMixinApplication(source, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(static, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'static' as a name here., null, {lexeme: static}], static, static)
+ listener: handleIdentifier(static, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, static)
+ parseNamedMixinApplication(static, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ listener: handleIdentifier(super, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, super)
+ parseNamedMixinApplication(super, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ listener: handleIdentifier(switch, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, switch)
+ parseNamedMixinApplication(switch, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(sync, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, sync)
+ parseNamedMixinApplication(sync, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ listener: handleIdentifier(this, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, this)
+ parseNamedMixinApplication(this, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ listener: handleIdentifier(throw, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, throw)
+ parseNamedMixinApplication(throw, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ listener: handleIdentifier(true, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, true)
+ parseNamedMixinApplication(true, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ listener: handleIdentifier(try, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, try)
+ parseNamedMixinApplication(try, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(typedef, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[BuiltInIdentifierInDeclaration, Can't use 'typedef' as a name here., null, {lexeme: typedef}], typedef, typedef)
+ listener: handleIdentifier(typedef, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, typedef)
+ parseNamedMixinApplication(typedef, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ listener: handleIdentifier(var, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, var)
+ parseNamedMixinApplication(var, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ listener: handleIdentifier(void, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, void)
+ parseNamedMixinApplication(void, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ listener: handleIdentifier(while, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, while)
+ parseNamedMixinApplication(while, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ listener: handleIdentifier(with, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, with)
+ parseNamedMixinApplication(with, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration(class)
+ parseTopLevelDeclarationImpl(;, Instance of 'DirectiveContext')
+ parseMetadataStar(;)
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(;, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(;, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(yield, classOrMixinDeclaration)
+ listener: handleNoTypeVariables(=)
+ listener: beginNamedMixinApplication(class, null, yield)
+ parseNamedMixinApplication(yield, class, class)
+ listener: handleIdentifier(A, typeReference)
+ listener: handleNoTypeArguments(with)
+ listener: handleType(A, null)
+ parseMixinApplicationRest(A)
+ parseTypeList(with)
+ listener: beginTypeList(B)
+ listener: handleIdentifier(B, typeReference)
+ listener: handleNoTypeArguments(;)
+ listener: handleType(B, null)
+ listener: endTypeList(1)
+ listener: handleNamedMixinApplicationWithClause(with)
+ ensureSemicolon(B)
+ listener: endNamedMixinApplication(class, class, =, null, ;)
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(class)
+ listener: endCompilationUnit(69, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect
new file mode 100644
index 0000000..049b7d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.parser.expect
@@ -0,0 +1,141 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
+
+
+class[KeywordToken] abstract[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] as[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] assert[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] async[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] await[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] break[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] case[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] catch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] class[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] continue[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] default[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] do[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] else[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] enum[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] export[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extends[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extension[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] external[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] factory[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] false[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] final[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] finally[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] for[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] Function[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] get[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] hide[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] if[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] implements[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] import[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] in[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] inout[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] interface[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] is[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] late[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] library[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] native[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] new[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] null[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] of[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] on[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] operator[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] out[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] part[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] patch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] required[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] return[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] set[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] show[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] source[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] static[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] super[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] switch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] sync[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] this[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] throw[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] true[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] try[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] var[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] void[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] while[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] with[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] yield[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect
new file mode 100644
index 0000000..049b7d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_1.dart.scanner.expect
@@ -0,0 +1,141 @@
+class abstract = A with B;
+class as = A with B;
+class assert = A with B;
+class async = A with B;
+class await = A with B;
+class break = A with B;
+class case = A with B;
+class catch = A with B;
+class class = A with B;
+class const = A with B;
+class continue = A with B;
+class covariant = A with B;
+class default = A with B;
+class deferred = A with B;
+class do = A with B;
+class dynamic = A with B;
+class else = A with B;
+class enum = A with B;
+class export = A with B;
+class extends = A with B;
+class extension = A with B;
+class external = A with B;
+class factory = A with B;
+class false = A with B;
+class final = A with B;
+class finally = A with B;
+class for = A with B;
+class Function = A with B;
+class get = A with B;
+class hide = A with B;
+class if = A with B;
+class implements = A with B;
+class import = A with B;
+class in = A with B;
+class inout = A with B;
+class interface = A with B;
+class is = A with B;
+class late = A with B;
+class library = A with B;
+class mixin = A with B;
+class native = A with B;
+class new = A with B;
+class null = A with B;
+class of = A with B;
+class on = A with B;
+class operator = A with B;
+class out = A with B;
+class part = A with B;
+class patch = A with B;
+class required = A with B;
+class rethrow = A with B;
+class return = A with B;
+class set = A with B;
+class show = A with B;
+class source = A with B;
+class static = A with B;
+class super = A with B;
+class switch = A with B;
+class sync = A with B;
+class this = A with B;
+class throw = A with B;
+class true = A with B;
+class try = A with B;
+class typedef = A with B;
+class var = A with B;
+class void = A with B;
+class while = A with B;
+class with = A with B;
+class yield = A with B;
+
+
+class[KeywordToken] abstract[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] as[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] assert[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] async[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] await[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] break[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] case[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] catch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] class[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] const[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] continue[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] covariant[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] default[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] deferred[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] do[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] dynamic[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] else[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] enum[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] export[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extends[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] extension[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] external[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] factory[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] false[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] final[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] finally[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] for[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] Function[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] get[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] hide[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] if[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] implements[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] import[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] in[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] inout[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] interface[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] is[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] late[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] library[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] mixin[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] native[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] new[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] null[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] of[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] on[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] operator[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] out[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] part[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] patch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] required[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] rethrow[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] return[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] set[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] show[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] source[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] static[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] super[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] switch[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] sync[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] this[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] throw[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] true[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] try[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] typedef[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] var[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] void[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] while[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] with[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+class[KeywordToken] yield[KeywordToken] =[SimpleToken] A[StringToken] with[KeywordToken] B[StringToken];[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart
new file mode 100644
index 0000000..1e88aff
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart
@@ -0,0 +1 @@
+class
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
new file mode 100644
index 0000000..86afa58
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.expect
@@ -0,0 +1,40 @@
+Problems reported:
+
+parser/error_recovery/issue_46346_prime_2:1:6: Expected an identifier, but got ''.
+class
+ ^...
+
+WARNING: Reporting at eof --- see below for details.
+
+parser/error_recovery/issue_46346_prime_2:1:6: A class declaration must have a body, even if it is empty.
+class
+ ^...
+
+WARNING: Reporting at eof --- see below for details.
+
+beginCompilationUnit(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrNamedMixinApplicationPrelude(class)
+ handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+ // WARNING: Reporting at eof for .
+ handleIdentifier(, classOrMixinDeclaration)
+ handleNoTypeVariables()
+ beginClassDeclaration(class, null, )
+ handleNoType()
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleClassHeader(class, class, null)
+ handleNoType()
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleClassOrMixinImplements(null, 0)
+ handleRecoverClassHeader()
+ handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], , )
+ // WARNING: Reporting at eof for .
+ beginClassOrMixinBody(DeclarationKind.Class, {)
+ endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
new file mode 100644
index 0000000..766bdc3
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.intertwined.expect
@@ -0,0 +1,60 @@
+parseUnit(class)
+ skipErrorTokens(class)
+ listener: beginCompilationUnit(class)
+ syntheticPreviousToken(class)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(, class, Instance of 'DirectiveContext')
+ parseClassDeclarationModifiers(, class)
+ parseClassOrNamedMixinApplication(null, class)
+ listener: beginClassOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ insertSyntheticIdentifier(class, classOrMixinDeclaration, message: Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], messageOnToken: null)
+ reportRecoverableError(, Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }])
+ listener: handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ''., Try inserting an identifier before ''., {lexeme: }], , )
+ listener: // WARNING: Reporting at eof for .
+ rewriter()
+ listener: handleIdentifier(, classOrMixinDeclaration)
+ listener: handleNoTypeVariables()
+ listener: beginClassDeclaration(class, null, )
+ parseClass(, class, class, )
+ parseClassHeaderOpt(, class, class)
+ parseClassExtendsOpt()
+ listener: handleNoType()
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt()
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt()
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassHeaderRecovery(, class, class)
+ parseClassHeaderOpt(, class, class)
+ parseClassExtendsOpt()
+ parseWithClauseOpt()
+ parseClassOrMixinImplementsOpt()
+ skipUnexpectedTokenOpt(, [extends, with, implements, {])
+ parseClassExtendsOpt()
+ listener: handleNoType()
+ listener: handleClassExtends(null, 1)
+ parseWithClauseOpt()
+ listener: handleClassNoWithClause()
+ parseClassOrMixinImplementsOpt()
+ listener: handleClassOrMixinImplements(null, 0)
+ listener: handleRecoverClassHeader()
+ ensureBlock(, null, class declaration)
+ reportRecoverableError(, Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}])
+ listener: handleRecoverableError(Message[ExpectedClassOrMixinBody, A class declaration must have a body, even if it is empty., Try adding an empty body., {string: class declaration}], , )
+ listener: // WARNING: Reporting at eof for .
+ insertBlock()
+ rewriter()
+ rewriter()
+ parseClassOrMixinOrExtensionBody(, DeclarationKind.Class, )
+ listener: beginClassOrMixinBody(DeclarationKind.Class, {)
+ notEofOrValue(}, })
+ listener: endClassOrMixinBody(DeclarationKind.Class, 0, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(class)
+ listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect
new file mode 100644
index 0000000..6294f83
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.parser.expect
@@ -0,0 +1,5 @@
+NOTICE: Stream was rewritten by parser!
+
+class{}
+
+class[KeywordToken][SyntheticStringToken]{[SyntheticBeginToken]}[SyntheticToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect
new file mode 100644
index 0000000..dedca4c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/issue_46346_prime_2.dart.scanner.expect
@@ -0,0 +1,3 @@
+class
+
+class[KeywordToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart b/pkg/front_end/parser_testcases/error_recovery/symbols.dart
new file mode 100644
index 0000000..000061f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart
@@ -0,0 +1,101 @@
+main() {
+ #void;
+ #void.foo;
+ #foo.void;
+ #assert;
+ #break;
+ #case;
+ #catch;
+ #class;
+ #const;
+ #continue;
+ #default;
+ #do;
+ #else;
+ #enum;
+ #extends;
+ #false;
+ #final;
+ #finally;
+ #for;
+ #if;
+ #in;
+ #is;
+ #new;
+ #null;
+ #rethrow;
+ #return;
+ #super;
+ #switch;
+ #this;
+ #throw;
+ #true;
+ #try;
+ #var;
+ #while;
+ #with;
+ #foo.assert;
+ #foo.break;
+ #foo.case;
+ #foo.catch;
+ #foo.class;
+ #foo.const;
+ #foo.continue;
+ #foo.default;
+ #foo.do;
+ #foo.else;
+ #foo.enum;
+ #foo.extends;
+ #foo.false;
+ #foo.final;
+ #foo.finally;
+ #foo.for;
+ #foo.if;
+ #foo.in;
+ #foo.is;
+ #foo.new;
+ #foo.null;
+ #foo.rethrow;
+ #foo.return;
+ #foo.super;
+ #foo.switch;
+ #foo.this;
+ #foo.throw;
+ #foo.true;
+ #foo.try;
+ #foo.var;
+ #foo.while;
+ #foo.with;
+ #assert.foo;
+ #break.foo;
+ #case.foo;
+ #catch.foo;
+ #class.foo;
+ #const.foo;
+ #continue.foo;
+ #default.foo;
+ #do.foo;
+ #else.foo;
+ #enum.foo;
+ #extends.foo;
+ #false.foo;
+ #final.foo;
+ #finally.foo;
+ #for.foo;
+ #if.foo;
+ #in.foo;
+ #is.foo;
+ #new.foo;
+ #null.foo;
+ #rethrow.foo;
+ #return.foo;
+ #super.foo;
+ #switch.foo;
+ #this.foo;
+ #throw.foo;
+ #true.foo;
+ #try.foo;
+ #var.foo;
+ #while.foo;
+ #with.foo;
+}
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
new file mode 100644
index 0000000..0e96030
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.expect
@@ -0,0 +1,969 @@
+Problems reported:
+
+parser/error_recovery/symbols:4:8: 'void' can't be used as an identifier because it's a keyword.
+ #foo.void;
+ ^^^^
+
+parser/error_recovery/symbols:5:4: 'assert' can't be used as an identifier because it's a keyword.
+ #assert;
+ ^^^^^^
+
+parser/error_recovery/symbols:6:4: 'break' can't be used as an identifier because it's a keyword.
+ #break;
+ ^^^^^
+
+parser/error_recovery/symbols:7:4: 'case' can't be used as an identifier because it's a keyword.
+ #case;
+ ^^^^
+
+parser/error_recovery/symbols:8:4: 'catch' can't be used as an identifier because it's a keyword.
+ #catch;
+ ^^^^^
+
+parser/error_recovery/symbols:9:4: 'class' can't be used as an identifier because it's a keyword.
+ #class;
+ ^^^^^
+
+parser/error_recovery/symbols:10:4: 'const' can't be used as an identifier because it's a keyword.
+ #const;
+ ^^^^^
+
+parser/error_recovery/symbols:11:4: 'continue' can't be used as an identifier because it's a keyword.
+ #continue;
+ ^^^^^^^^
+
+parser/error_recovery/symbols:12:4: 'default' can't be used as an identifier because it's a keyword.
+ #default;
+ ^^^^^^^
+
+parser/error_recovery/symbols:13:4: 'do' can't be used as an identifier because it's a keyword.
+ #do;
+ ^^
+
+parser/error_recovery/symbols:14:4: 'else' can't be used as an identifier because it's a keyword.
+ #else;
+ ^^^^
+
+parser/error_recovery/symbols:15:4: 'enum' can't be used as an identifier because it's a keyword.
+ #enum;
+ ^^^^
+
+parser/error_recovery/symbols:16:4: 'extends' can't be used as an identifier because it's a keyword.
+ #extends;
+ ^^^^^^^
+
+parser/error_recovery/symbols:17:4: 'false' can't be used as an identifier because it's a keyword.
+ #false;
+ ^^^^^
+
+parser/error_recovery/symbols:18:4: 'final' can't be used as an identifier because it's a keyword.
+ #final;
+ ^^^^^
+
+parser/error_recovery/symbols:19:4: 'finally' can't be used as an identifier because it's a keyword.
+ #finally;
+ ^^^^^^^
+
+parser/error_recovery/symbols:20:4: 'for' can't be used as an identifier because it's a keyword.
+ #for;
+ ^^^
+
+parser/error_recovery/symbols:21:4: 'if' can't be used as an identifier because it's a keyword.
+ #if;
+ ^^
+
+parser/error_recovery/symbols:22:4: 'in' can't be used as an identifier because it's a keyword.
+ #in;
+ ^^
+
+parser/error_recovery/symbols:23:4: 'is' can't be used as an identifier because it's a keyword.
+ #is;
+ ^^
+
+parser/error_recovery/symbols:24:4: 'new' can't be used as an identifier because it's a keyword.
+ #new;
+ ^^^
+
+parser/error_recovery/symbols:25:4: 'null' can't be used as an identifier because it's a keyword.
+ #null;
+ ^^^^
+
+parser/error_recovery/symbols:26:4: 'rethrow' can't be used as an identifier because it's a keyword.
+ #rethrow;
+ ^^^^^^^
+
+parser/error_recovery/symbols:27:4: 'return' can't be used as an identifier because it's a keyword.
+ #return;
+ ^^^^^^
+
+parser/error_recovery/symbols:28:4: 'super' can't be used as an identifier because it's a keyword.
+ #super;
+ ^^^^^
+
+parser/error_recovery/symbols:29:4: 'switch' can't be used as an identifier because it's a keyword.
+ #switch;
+ ^^^^^^
+
+parser/error_recovery/symbols:30:4: 'this' can't be used as an identifier because it's a keyword.
+ #this;
+ ^^^^
+
+parser/error_recovery/symbols:31:4: 'throw' can't be used as an identifier because it's a keyword.
+ #throw;
+ ^^^^^
+
+parser/error_recovery/symbols:32:4: 'true' can't be used as an identifier because it's a keyword.
+ #true;
+ ^^^^
+
+parser/error_recovery/symbols:33:4: 'try' can't be used as an identifier because it's a keyword.
+ #try;
+ ^^^
+
+parser/error_recovery/symbols:34:4: 'var' can't be used as an identifier because it's a keyword.
+ #var;
+ ^^^
+
+parser/error_recovery/symbols:35:4: 'while' can't be used as an identifier because it's a keyword.
+ #while;
+ ^^^^^
+
+parser/error_recovery/symbols:36:4: 'with' can't be used as an identifier because it's a keyword.
+ #with;
+ ^^^^
+
+parser/error_recovery/symbols:37:8: 'assert' can't be used as an identifier because it's a keyword.
+ #foo.assert;
+ ^^^^^^
+
+parser/error_recovery/symbols:38:8: 'break' can't be used as an identifier because it's a keyword.
+ #foo.break;
+ ^^^^^
+
+parser/error_recovery/symbols:39:8: 'case' can't be used as an identifier because it's a keyword.
+ #foo.case;
+ ^^^^
+
+parser/error_recovery/symbols:40:8: 'catch' can't be used as an identifier because it's a keyword.
+ #foo.catch;
+ ^^^^^
+
+parser/error_recovery/symbols:41:8: 'class' can't be used as an identifier because it's a keyword.
+ #foo.class;
+ ^^^^^
+
+parser/error_recovery/symbols:42:8: 'const' can't be used as an identifier because it's a keyword.
+ #foo.const;
+ ^^^^^
+
+parser/error_recovery/symbols:43:8: 'continue' can't be used as an identifier because it's a keyword.
+ #foo.continue;
+ ^^^^^^^^
+
+parser/error_recovery/symbols:44:8: 'default' can't be used as an identifier because it's a keyword.
+ #foo.default;
+ ^^^^^^^
+
+parser/error_recovery/symbols:45:8: 'do' can't be used as an identifier because it's a keyword.
+ #foo.do;
+ ^^
+
+parser/error_recovery/symbols:46:8: 'else' can't be used as an identifier because it's a keyword.
+ #foo.else;
+ ^^^^
+
+parser/error_recovery/symbols:47:8: 'enum' can't be used as an identifier because it's a keyword.
+ #foo.enum;
+ ^^^^
+
+parser/error_recovery/symbols:48:8: 'extends' can't be used as an identifier because it's a keyword.
+ #foo.extends;
+ ^^^^^^^
+
+parser/error_recovery/symbols:49:8: 'false' can't be used as an identifier because it's a keyword.
+ #foo.false;
+ ^^^^^
+
+parser/error_recovery/symbols:50:8: 'final' can't be used as an identifier because it's a keyword.
+ #foo.final;
+ ^^^^^
+
+parser/error_recovery/symbols:51:8: 'finally' can't be used as an identifier because it's a keyword.
+ #foo.finally;
+ ^^^^^^^
+
+parser/error_recovery/symbols:52:8: 'for' can't be used as an identifier because it's a keyword.
+ #foo.for;
+ ^^^
+
+parser/error_recovery/symbols:53:8: 'if' can't be used as an identifier because it's a keyword.
+ #foo.if;
+ ^^
+
+parser/error_recovery/symbols:54:8: 'in' can't be used as an identifier because it's a keyword.
+ #foo.in;
+ ^^
+
+parser/error_recovery/symbols:55:8: 'is' can't be used as an identifier because it's a keyword.
+ #foo.is;
+ ^^
+
+parser/error_recovery/symbols:56:8: 'new' can't be used as an identifier because it's a keyword.
+ #foo.new;
+ ^^^
+
+parser/error_recovery/symbols:57:8: 'null' can't be used as an identifier because it's a keyword.
+ #foo.null;
+ ^^^^
+
+parser/error_recovery/symbols:58:8: 'rethrow' can't be used as an identifier because it's a keyword.
+ #foo.rethrow;
+ ^^^^^^^
+
+parser/error_recovery/symbols:59:8: 'return' can't be used as an identifier because it's a keyword.
+ #foo.return;
+ ^^^^^^
+
+parser/error_recovery/symbols:60:8: 'super' can't be used as an identifier because it's a keyword.
+ #foo.super;
+ ^^^^^
+
+parser/error_recovery/symbols:61:8: 'switch' can't be used as an identifier because it's a keyword.
+ #foo.switch;
+ ^^^^^^
+
+parser/error_recovery/symbols:62:8: 'this' can't be used as an identifier because it's a keyword.
+ #foo.this;
+ ^^^^
+
+parser/error_recovery/symbols:63:8: 'throw' can't be used as an identifier because it's a keyword.
+ #foo.throw;
+ ^^^^^
+
+parser/error_recovery/symbols:64:8: 'true' can't be used as an identifier because it's a keyword.
+ #foo.true;
+ ^^^^
+
+parser/error_recovery/symbols:65:8: 'try' can't be used as an identifier because it's a keyword.
+ #foo.try;
+ ^^^
+
+parser/error_recovery/symbols:66:8: 'var' can't be used as an identifier because it's a keyword.
+ #foo.var;
+ ^^^
+
+parser/error_recovery/symbols:67:8: 'while' can't be used as an identifier because it's a keyword.
+ #foo.while;
+ ^^^^^
+
+parser/error_recovery/symbols:68:8: 'with' can't be used as an identifier because it's a keyword.
+ #foo.with;
+ ^^^^
+
+parser/error_recovery/symbols:69:4: 'assert' can't be used as an identifier because it's a keyword.
+ #assert.foo;
+ ^^^^^^
+
+parser/error_recovery/symbols:70:4: 'break' can't be used as an identifier because it's a keyword.
+ #break.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:71:4: 'case' can't be used as an identifier because it's a keyword.
+ #case.foo;
+ ^^^^
+
+parser/error_recovery/symbols:72:4: 'catch' can't be used as an identifier because it's a keyword.
+ #catch.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:73:4: 'class' can't be used as an identifier because it's a keyword.
+ #class.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:74:4: 'const' can't be used as an identifier because it's a keyword.
+ #const.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:75:4: 'continue' can't be used as an identifier because it's a keyword.
+ #continue.foo;
+ ^^^^^^^^
+
+parser/error_recovery/symbols:76:4: 'default' can't be used as an identifier because it's a keyword.
+ #default.foo;
+ ^^^^^^^
+
+parser/error_recovery/symbols:77:4: 'do' can't be used as an identifier because it's a keyword.
+ #do.foo;
+ ^^
+
+parser/error_recovery/symbols:78:4: 'else' can't be used as an identifier because it's a keyword.
+ #else.foo;
+ ^^^^
+
+parser/error_recovery/symbols:79:4: 'enum' can't be used as an identifier because it's a keyword.
+ #enum.foo;
+ ^^^^
+
+parser/error_recovery/symbols:80:4: 'extends' can't be used as an identifier because it's a keyword.
+ #extends.foo;
+ ^^^^^^^
+
+parser/error_recovery/symbols:81:4: 'false' can't be used as an identifier because it's a keyword.
+ #false.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:82:4: 'final' can't be used as an identifier because it's a keyword.
+ #final.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:83:4: 'finally' can't be used as an identifier because it's a keyword.
+ #finally.foo;
+ ^^^^^^^
+
+parser/error_recovery/symbols:84:4: 'for' can't be used as an identifier because it's a keyword.
+ #for.foo;
+ ^^^
+
+parser/error_recovery/symbols:85:4: 'if' can't be used as an identifier because it's a keyword.
+ #if.foo;
+ ^^
+
+parser/error_recovery/symbols:86:4: 'in' can't be used as an identifier because it's a keyword.
+ #in.foo;
+ ^^
+
+parser/error_recovery/symbols:87:4: 'is' can't be used as an identifier because it's a keyword.
+ #is.foo;
+ ^^
+
+parser/error_recovery/symbols:88:4: 'new' can't be used as an identifier because it's a keyword.
+ #new.foo;
+ ^^^
+
+parser/error_recovery/symbols:89:4: 'null' can't be used as an identifier because it's a keyword.
+ #null.foo;
+ ^^^^
+
+parser/error_recovery/symbols:90:4: 'rethrow' can't be used as an identifier because it's a keyword.
+ #rethrow.foo;
+ ^^^^^^^
+
+parser/error_recovery/symbols:91:4: 'return' can't be used as an identifier because it's a keyword.
+ #return.foo;
+ ^^^^^^
+
+parser/error_recovery/symbols:92:4: 'super' can't be used as an identifier because it's a keyword.
+ #super.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:93:4: 'switch' can't be used as an identifier because it's a keyword.
+ #switch.foo;
+ ^^^^^^
+
+parser/error_recovery/symbols:94:4: 'this' can't be used as an identifier because it's a keyword.
+ #this.foo;
+ ^^^^
+
+parser/error_recovery/symbols:95:4: 'throw' can't be used as an identifier because it's a keyword.
+ #throw.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:96:4: 'true' can't be used as an identifier because it's a keyword.
+ #true.foo;
+ ^^^^
+
+parser/error_recovery/symbols:97:4: 'try' can't be used as an identifier because it's a keyword.
+ #try.foo;
+ ^^^
+
+parser/error_recovery/symbols:98:4: 'var' can't be used as an identifier because it's a keyword.
+ #var.foo;
+ ^^^
+
+parser/error_recovery/symbols:99:4: 'while' can't be used as an identifier because it's a keyword.
+ #while.foo;
+ ^^^^^
+
+parser/error_recovery/symbols:100:4: 'with' can't be used as an identifier because it's a keyword.
+ #with.foo;
+ ^^^^
+
+beginCompilationUnit(main)
+ beginMetadataStar(main)
+ endMetadataStar(0)
+ beginTopLevelMember(main)
+ beginTopLevelMethod(, null)
+ handleNoType()
+ handleIdentifier(main, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginLiteralSymbol(#)
+ handleSymbolVoid(void)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleSymbolVoid(void)
+ endLiteralSymbol(#, 1)
+ handleIdentifier(foo, expressionContinuation)
+ handleNoTypeArguments(;)
+ handleNoArguments(;)
+ handleSend(foo, ;)
+ handleEndingBinaryExpression(.)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ handleIdentifier(void, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ handleIdentifier(assert, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ handleIdentifier(break, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ handleIdentifier(case, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ handleIdentifier(catch, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ handleIdentifier(class, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ handleIdentifier(const, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ handleIdentifier(continue, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ handleIdentifier(default, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ handleIdentifier(do, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ handleIdentifier(else, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ handleIdentifier(enum, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ handleIdentifier(extends, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ handleIdentifier(false, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ handleIdentifier(final, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ handleIdentifier(finally, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ handleIdentifier(for, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ handleIdentifier(if, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ handleIdentifier(in, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ handleIdentifier(is, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ handleIdentifier(new, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ handleIdentifier(null, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ handleIdentifier(rethrow, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ handleIdentifier(return, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ handleIdentifier(super, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ handleIdentifier(switch, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ handleIdentifier(this, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ handleIdentifier(throw, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ handleIdentifier(true, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ handleIdentifier(try, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ handleIdentifier(var, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ handleIdentifier(while, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ handleIdentifier(with, literalSymbol)
+ endLiteralSymbol(#, 1)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ handleIdentifier(assert, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ handleIdentifier(break, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ handleIdentifier(case, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ handleIdentifier(catch, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ handleIdentifier(class, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ handleIdentifier(const, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ handleIdentifier(continue, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ handleIdentifier(default, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ handleIdentifier(do, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ handleIdentifier(else, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ handleIdentifier(enum, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ handleIdentifier(extends, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ handleIdentifier(false, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ handleIdentifier(final, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ handleIdentifier(finally, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ handleIdentifier(for, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ handleIdentifier(if, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ handleIdentifier(in, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ handleIdentifier(is, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ handleIdentifier(new, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ handleIdentifier(null, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ handleIdentifier(rethrow, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ handleIdentifier(return, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ handleIdentifier(super, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ handleIdentifier(switch, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ handleIdentifier(this, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ handleIdentifier(throw, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ handleIdentifier(true, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ handleIdentifier(try, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ handleIdentifier(var, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ handleIdentifier(while, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleIdentifier(foo, literalSymbol)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ handleIdentifier(with, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ handleIdentifier(assert, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ handleIdentifier(break, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ handleIdentifier(case, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ handleIdentifier(catch, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ handleIdentifier(class, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ handleIdentifier(const, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ handleIdentifier(continue, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ handleIdentifier(default, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ handleIdentifier(do, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ handleIdentifier(else, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ handleIdentifier(enum, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ handleIdentifier(extends, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ handleIdentifier(false, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ handleIdentifier(final, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ handleIdentifier(finally, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ handleIdentifier(for, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ handleIdentifier(if, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ handleIdentifier(in, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ handleIdentifier(is, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ handleIdentifier(new, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ handleIdentifier(null, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ handleIdentifier(rethrow, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ handleIdentifier(return, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ handleIdentifier(super, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ handleIdentifier(switch, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ handleIdentifier(this, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ handleIdentifier(throw, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ handleIdentifier(true, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ handleIdentifier(try, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ handleIdentifier(var, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ handleIdentifier(while, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ beginLiteralSymbol(#)
+ handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ handleIdentifier(with, literalSymbol)
+ handleIdentifier(foo, literalSymbolContinuation)
+ endLiteralSymbol(#, 2)
+ handleExpressionStatement(;)
+ endBlockFunctionBody(99, {, })
+ endTopLevelMethod(main, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
new file mode 100644
index 0000000..8db03b1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.intertwined.expect
@@ -0,0 +1,2149 @@
+parseUnit(main)
+ skipErrorTokens(main)
+ listener: beginCompilationUnit(main)
+ syntheticPreviousToken(main)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(main)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl()
+ listener: beginTopLevelMember(main)
+ isReservedKeyword(()
+ parseTopLevelMethod(, null, , Instance of 'NoType', null, main, false)
+ listener: beginTopLevelMethod(, null)
+ listener: handleNoType()
+ ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(main, topLevelFunctionDeclaration)
+ parseMethodTypeVar(main)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(main, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, #)
+ parseStatement({)
+ parseStatementX({)
+ parseExpressionStatementOrDeclaration({, false)
+ parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement({)
+ parseExpression({)
+ parsePrecedenceExpression({, 1, true)
+ parseUnaryExpression({, true)
+ parsePrimary({, expression)
+ parseLiteralSymbol({)
+ listener: beginLiteralSymbol(#)
+ listener: handleSymbolVoid(void)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(void)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ listener: handleSymbolVoid(void)
+ listener: endLiteralSymbol(#, 1)
+ parsePrimary(., expressionContinuation)
+ parseSendOrFunctionLiteral(., expressionContinuation)
+ parseSend(., expressionContinuation)
+ isNextIdentifier(.)
+ ensureIdentifier(., expressionContinuation)
+ listener: handleIdentifier(foo, expressionContinuation)
+ listener: handleNoTypeArguments(;)
+ parseArgumentsOpt(foo)
+ listener: handleNoArguments(;)
+ listener: handleSend(foo, ;)
+ listener: handleEndingBinaryExpression(.)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(void, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'void' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: void}], void, void)
+ listener: handleIdentifier(void, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(void)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ listener: handleIdentifier(assert, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(assert)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ listener: handleIdentifier(break, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(break)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ listener: handleIdentifier(case, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(case)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ listener: handleIdentifier(catch, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(catch)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ listener: handleIdentifier(class, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(class)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ listener: handleIdentifier(const, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(const)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ listener: handleIdentifier(continue, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(continue)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ listener: handleIdentifier(default, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(default)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ listener: handleIdentifier(do, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(do)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ listener: handleIdentifier(else, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(else)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ listener: handleIdentifier(enum, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(enum)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ listener: handleIdentifier(extends, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(extends)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ listener: handleIdentifier(false, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(false)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ listener: handleIdentifier(final, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(final)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ listener: handleIdentifier(finally, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(finally)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ listener: handleIdentifier(for, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(for)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ listener: handleIdentifier(if, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(if)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ listener: handleIdentifier(in, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(in)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ listener: handleIdentifier(is, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(is)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ listener: handleIdentifier(new, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(new)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ listener: handleIdentifier(null, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(null)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ listener: handleIdentifier(rethrow, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(rethrow)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ listener: handleIdentifier(return, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(return)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ listener: handleIdentifier(super, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(super)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ listener: handleIdentifier(switch, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(switch)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ listener: handleIdentifier(this, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(this)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ listener: handleIdentifier(throw, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(throw)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ listener: handleIdentifier(true, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(true)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ listener: handleIdentifier(try, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(try)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ listener: handleIdentifier(var, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(var)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ listener: handleIdentifier(while, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(while)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ listener: handleIdentifier(with, literalSymbol)
+ listener: endLiteralSymbol(#, 1)
+ ensureSemicolon(with)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ listener: handleIdentifier(assert, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(assert)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ listener: handleIdentifier(break, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(break)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ listener: handleIdentifier(case, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(case)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ listener: handleIdentifier(catch, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(catch)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ listener: handleIdentifier(class, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(class)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ listener: handleIdentifier(const, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(const)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ listener: handleIdentifier(continue, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(continue)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ listener: handleIdentifier(default, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(default)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ listener: handleIdentifier(do, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(do)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ listener: handleIdentifier(else, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(else)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ listener: handleIdentifier(enum, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(enum)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ listener: handleIdentifier(extends, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(extends)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ listener: handleIdentifier(false, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(false)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ listener: handleIdentifier(final, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(final)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ listener: handleIdentifier(finally, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(finally)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ listener: handleIdentifier(for, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(for)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ listener: handleIdentifier(if, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(if)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ listener: handleIdentifier(in, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(in)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ listener: handleIdentifier(is, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(is)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ listener: handleIdentifier(new, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(new)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ listener: handleIdentifier(null, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(null)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ listener: handleIdentifier(rethrow, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(rethrow)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ listener: handleIdentifier(return, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(return)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ listener: handleIdentifier(super, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(super)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ listener: handleIdentifier(switch, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(switch)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ listener: handleIdentifier(this, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(this)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ listener: handleIdentifier(throw, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(throw)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ listener: handleIdentifier(true, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(true)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ listener: handleIdentifier(try, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(try)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ listener: handleIdentifier(var, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(var)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ listener: handleIdentifier(while, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(while)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ listener: handleIdentifier(foo, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ listener: handleIdentifier(with, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(with)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(assert, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'assert' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: assert}], assert, assert)
+ listener: handleIdentifier(assert, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(break, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'break' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: break}], break, break)
+ listener: handleIdentifier(break, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(case, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'case' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: case}], case, case)
+ listener: handleIdentifier(case, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(catch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'catch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: catch}], catch, catch)
+ listener: handleIdentifier(catch, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(class, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'class' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: class}], class, class)
+ listener: handleIdentifier(class, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(const, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'const' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: const}], const, const)
+ listener: handleIdentifier(const, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(continue, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'continue' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: continue}], continue, continue)
+ listener: handleIdentifier(continue, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(default, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'default' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: default}], default, default)
+ listener: handleIdentifier(default, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(do, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'do' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: do}], do, do)
+ listener: handleIdentifier(do, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(else, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'else' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: else}], else, else)
+ listener: handleIdentifier(else, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(enum, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'enum' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: enum}], enum, enum)
+ listener: handleIdentifier(enum, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(extends, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'extends' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: extends}], extends, extends)
+ listener: handleIdentifier(extends, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(false, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'false' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: false}], false, false)
+ listener: handleIdentifier(false, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(final, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'final' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: final}], final, final)
+ listener: handleIdentifier(final, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(finally, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'finally' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: finally}], finally, finally)
+ listener: handleIdentifier(finally, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(for, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'for' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: for}], for, for)
+ listener: handleIdentifier(for, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(if, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'if' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: if}], if, if)
+ listener: handleIdentifier(if, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(in, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'in' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: in}], in, in)
+ listener: handleIdentifier(in, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(is, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'is' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: is}], is, is)
+ listener: handleIdentifier(is, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(new, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'new' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: new}], new, new)
+ listener: handleIdentifier(new, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(null, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'null' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: null}], null, null)
+ listener: handleIdentifier(null, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(rethrow, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'rethrow' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: rethrow}], rethrow, rethrow)
+ listener: handleIdentifier(rethrow, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(return, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'return' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: return}], return, return)
+ listener: handleIdentifier(return, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(super, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'super' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: super}], super, super)
+ listener: handleIdentifier(super, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(switch, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'switch' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: switch}], switch, switch)
+ listener: handleIdentifier(switch, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(this, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'this' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: this}], this, this)
+ listener: handleIdentifier(this, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(throw, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'throw' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: throw}], throw, throw)
+ listener: handleIdentifier(throw, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(true, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'true' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: true}], true, true)
+ listener: handleIdentifier(true, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(try, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'try' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: try}], try, try)
+ listener: handleIdentifier(try, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(var, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'var' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: var}], var, var)
+ listener: handleIdentifier(var, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(while, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'while' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: while}], while, while)
+ listener: handleIdentifier(while, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, #)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclaration(;, false)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(#)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseLiteralSymbol(;)
+ listener: beginLiteralSymbol(#)
+ ensureIdentifier(#, literalSymbol)
+ reportRecoverableErrorWithToken(with, Instance of 'Template<(Token) => Message>')
+ listener: handleRecoverableError(Message[ExpectedIdentifierButGotKeyword, 'with' can't be used as an identifier because it's a keyword., Try renaming this to be an identifier that isn't a keyword., {lexeme: with}], with, with)
+ listener: handleIdentifier(with, literalSymbol)
+ ensureIdentifier(., literalSymbolContinuation)
+ listener: handleIdentifier(foo, literalSymbolContinuation)
+ listener: endLiteralSymbol(#, 2)
+ ensureSemicolon(foo)
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(99, {, })
+ listener: endTopLevelMethod(main, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(main)
+ listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect
new file mode 100644
index 0000000..4db15cc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.parser.expect
@@ -0,0 +1,205 @@
+main() {
+#void;
+#void.foo;
+#foo.void;
+#assert;
+#break;
+#case;
+#catch;
+#class;
+#const;
+#continue;
+#default;
+#do;
+#else;
+#enum;
+#extends;
+#false;
+#final;
+#finally;
+#for;
+#if;
+#in;
+#is;
+#new;
+#null;
+#rethrow;
+#return;
+#super;
+#switch;
+#this;
+#throw;
+#true;
+#try;
+#var;
+#while;
+#with;
+#foo.assert;
+#foo.break;
+#foo.case;
+#foo.catch;
+#foo.class;
+#foo.const;
+#foo.continue;
+#foo.default;
+#foo.do;
+#foo.else;
+#foo.enum;
+#foo.extends;
+#foo.false;
+#foo.final;
+#foo.finally;
+#foo.for;
+#foo.if;
+#foo.in;
+#foo.is;
+#foo.new;
+#foo.null;
+#foo.rethrow;
+#foo.return;
+#foo.super;
+#foo.switch;
+#foo.this;
+#foo.throw;
+#foo.true;
+#foo.try;
+#foo.var;
+#foo.while;
+#foo.with;
+#assert.foo;
+#break.foo;
+#case.foo;
+#catch.foo;
+#class.foo;
+#const.foo;
+#continue.foo;
+#default.foo;
+#do.foo;
+#else.foo;
+#enum.foo;
+#extends.foo;
+#false.foo;
+#final.foo;
+#finally.foo;
+#for.foo;
+#if.foo;
+#in.foo;
+#is.foo;
+#new.foo;
+#null.foo;
+#rethrow.foo;
+#return.foo;
+#super.foo;
+#switch.foo;
+#this.foo;
+#throw.foo;
+#true.foo;
+#try.foo;
+#var.foo;
+#while.foo;
+#with.foo;
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+#[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]void[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect
new file mode 100644
index 0000000..4db15cc
--- /dev/null
+++ b/pkg/front_end/parser_testcases/error_recovery/symbols.dart.scanner.expect
@@ -0,0 +1,205 @@
+main() {
+#void;
+#void.foo;
+#foo.void;
+#assert;
+#break;
+#case;
+#catch;
+#class;
+#const;
+#continue;
+#default;
+#do;
+#else;
+#enum;
+#extends;
+#false;
+#final;
+#finally;
+#for;
+#if;
+#in;
+#is;
+#new;
+#null;
+#rethrow;
+#return;
+#super;
+#switch;
+#this;
+#throw;
+#true;
+#try;
+#var;
+#while;
+#with;
+#foo.assert;
+#foo.break;
+#foo.case;
+#foo.catch;
+#foo.class;
+#foo.const;
+#foo.continue;
+#foo.default;
+#foo.do;
+#foo.else;
+#foo.enum;
+#foo.extends;
+#foo.false;
+#foo.final;
+#foo.finally;
+#foo.for;
+#foo.if;
+#foo.in;
+#foo.is;
+#foo.new;
+#foo.null;
+#foo.rethrow;
+#foo.return;
+#foo.super;
+#foo.switch;
+#foo.this;
+#foo.throw;
+#foo.true;
+#foo.try;
+#foo.var;
+#foo.while;
+#foo.with;
+#assert.foo;
+#break.foo;
+#case.foo;
+#catch.foo;
+#class.foo;
+#const.foo;
+#continue.foo;
+#default.foo;
+#do.foo;
+#else.foo;
+#enum.foo;
+#extends.foo;
+#false.foo;
+#final.foo;
+#finally.foo;
+#for.foo;
+#if.foo;
+#in.foo;
+#is.foo;
+#new.foo;
+#null.foo;
+#rethrow.foo;
+#return.foo;
+#super.foo;
+#switch.foo;
+#this.foo;
+#throw.foo;
+#true.foo;
+#try.foo;
+#var.foo;
+#while.foo;
+#with.foo;
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+#[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]void[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]void[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]assert[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]break[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]case[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]catch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]class[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]const[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]continue[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]default[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]do[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]else[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]enum[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]extends[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]false[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]final[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]finally[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]for[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]if[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]in[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]is[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]new[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]null[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]rethrow[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]return[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]super[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]switch[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]this[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]throw[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]true[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]try[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]var[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]while[KeywordToken];[SimpleToken]
+#[SimpleToken]foo[StringToken].[SimpleToken]with[KeywordToken];[SimpleToken]
+#[SimpleToken]assert[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]break[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]case[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]catch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]class[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]const[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]continue[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]default[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]do[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]else[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]enum[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]extends[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]false[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]final[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]finally[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]for[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]if[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]in[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]is[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]new[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]null[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]rethrow[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]return[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]super[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]switch[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]this[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]throw[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]true[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]try[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]var[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]while[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+#[SimpleToken]with[KeywordToken].[SimpleToken]foo[StringToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart
new file mode 100644
index 0000000..5d082fb
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart
@@ -0,0 +1,23 @@
+// 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.
+
+class A {
+ A.new();
+ factory A.redirectingFactory() = A.new;
+ factory A.redirectingFactoryChild() = B.new;
+ factory A.redirectingTwice() = A.redirectingFactory;
+}
+
+class B extends A {}
+
+test() {
+ A Function() f1 = A.redirectingFactory;
+ A Function() f2 = A.redirectingFactoryChild;
+ A Function() f3 = A.redirectingTwice;
+ A x1 = f1();
+ B x2 = f2() as B;
+ A x3 f3();
+}
+
+main() => test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
new file mode 100644
index 0000000..93e586a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+// A Function() f1 = A.redirectingFactory;
+// ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+// A Function() f2 = A.redirectingFactoryChild;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+// A Function() f3 = A.redirectingTwice;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+// A x3 f3();
+// ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+ static factory redirectingTwice() → self::A
+ let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+static method test() → dynamic {
+ () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+ A Function() f1 = A.redirectingFactory;
+ ^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+ A Function() f2 = A.redirectingFactoryChild;
+ ^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+ A Function() f3 = A.redirectingTwice;
+ ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ self::A x1 = f1(){() → self::A};
+ self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+ self::A x3;
+ f3(){() → self::A};
+}
+static method main() → dynamic
+ return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
new file mode 100644
index 0000000..dbc8412
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.strong.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+// A Function() f1 = A.redirectingFactory;
+// ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+// A Function() f2 = A.redirectingFactoryChild;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+// A Function() f3 = A.redirectingTwice;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+// A x3 f3();
+// ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ static factory redirectingFactory() → self::A
+ let Never #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let core::String* #redirecting_factory = "B.new" in invalid-expression;
+ static factory redirectingTwice() → self::A
+ let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+static method test() → dynamic {
+ () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+ A Function() f1 = A.redirectingFactory;
+ ^^^^^^^^^^^^^^^^^^";
+ () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+ A Function() f2 = A.redirectingFactoryChild;
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+ A Function() f3 = A.redirectingTwice;
+ ^^^^^^^^^^^^^^^^";
+ self::A x1 = f1(){() → self::A};
+ self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+ self::A x3;
+ f3(){() → self::A};
+}
+static method main() → dynamic
+ return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
new file mode 100644
index 0000000..1e775a7
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.textual_outline.expect
@@ -0,0 +1,9 @@
+class A {
+ A.new();
+ factory A.redirectingFactory() = A.new;
+ factory A.redirectingFactoryChild() = B.new;
+ factory A.redirectingTwice() = A.redirectingFactory;
+}
+class B extends A {}
+test() {}
+main() => test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
new file mode 100644
index 0000000..93e586a
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+// A Function() f1 = A.redirectingFactory;
+// ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+// A Function() f2 = A.redirectingFactoryChild;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+// A Function() f3 = A.redirectingTwice;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+// A x3 f3();
+// ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+ static factory redirectingTwice() → self::A
+ let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+static method test() → dynamic {
+ () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+ A Function() f1 = A.redirectingFactory;
+ ^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+ A Function() f2 = A.redirectingFactoryChild;
+ ^^^^^^^^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+ A Function() f3 = A.redirectingTwice;
+ ^^^^^^^^^^^^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ self::A x1 = f1(){() → self::A};
+ self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+ self::A x3;
+ f3(){() → self::A};
+}
+static method main() → dynamic
+ return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
new file mode 100644
index 0000000..a8e0129
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.outline.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+ constructor new() → self::A
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+ static factory redirectingTwice() → self::A
+ let dynamic #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ ;
+}
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
new file mode 100644
index 0000000..dbc8412
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart.weak.transformed.expect
@@ -0,0 +1,80 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+// A Function() f1 = A.redirectingFactory;
+// ^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+// A Function() f2 = A.redirectingFactoryChild;
+// ^^^^^^^^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+// A Function() f3 = A.redirectingTwice;
+// ^^^^^^^^^^^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:20:5: Error: Expected ';' after this.
+// A x3 f3();
+// ^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild, self::A::redirectingTwice]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ static factory redirectingFactory() → self::A
+ let Never #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let core::String* #redirecting_factory = "B.new" in invalid-expression;
+ static factory redirectingTwice() → self::A
+ let () → self::A #redirecting_factory = self::A::redirectingFactory in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+static method test() → dynamic {
+ () → self::A f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:15:23: Error: Getter not found: 'redirectingFactory'.
+ A Function() f1 = A.redirectingFactory;
+ ^^^^^^^^^^^^^^^^^^";
+ () → self::A f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:16:23: Error: Getter not found: 'redirectingFactoryChild'.
+ A Function() f2 = A.redirectingFactoryChild;
+ ^^^^^^^^^^^^^^^^^^^^^^^";
+ () → self::A f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/redirecting_constructors.dart:17:23: Error: Getter not found: 'redirectingTwice'.
+ A Function() f3 = A.redirectingTwice;
+ ^^^^^^^^^^^^^^^^";
+ self::A x1 = f1(){() → self::A};
+ self::B x2 = f2(){() → self::A} as{ForNonNullableByDefault} self::B;
+ self::A x3;
+ f3(){() → self::A};
+}
+static method main() → dynamic
+ return self::test();
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart
new file mode 100644
index 0000000..681aeae
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart
@@ -0,0 +1,47 @@
+// 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.
+
+class A {
+ A.new();
+ factory A.redirectingFactory() = A.new;
+ factory A.redirectingFactoryChild() = B.new;
+ A.redirecting() : this.new();
+}
+
+class B extends A {}
+
+class C {
+ final int x;
+ const C.new(this.x);
+}
+
+class D extend C {
+ D(int x) : super.new(x * 2);
+}
+
+test() {
+ D.new(1);
+ const C.new(1);
+ new C.new(1);
+
+ var f1 = A.new;
+ var f2 = B.new;
+ var f3 = C.new;
+ var f4 = D.new;
+ f1();
+ f2();
+ f3(1);
+ f4(1);
+
+ A Function() g1 = A.new;
+ B Function() g2 = B.new;
+ C Function(int x) g3 = C.new;
+ D Function(int x) g4 = D.new;
+ g1();
+ g2();
+ g3(1);
+ g4(1);
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
new file mode 100644
index 0000000..c5f6007
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.redirecting() : this.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(this.x);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+// ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D(int x) : super.new(x * 2);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+// D(int x) : super.new(x * 2);
+// ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// new C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ constructor redirecting() → self::A
+ : this self::A::new()
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+class C extends core::Object /*hasConstConstructor*/ {
+ final field core::int x;
+ const constructor new(core::int x) → self::C
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D extends core::Object {
+ constructor •(core::int x) → self::D
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+ D(int x) : super.new(x * 2);
+ ^^^^^"
+ ;
+}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+ D.new(1);
+ ^^^";
+ #C2;
+ new self::C::new(1);
+ dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+ var f1 = A.new;
+ ^^^";
+ dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+ var f2 = B.new;
+ ^^^";
+ dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+ var f3 = C.new;
+ ^^^";
+ dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+ var f4 = D.new;
+ ^^^";
+ f1{dynamic}.call();
+ f2{dynamic}.call();
+ f3{dynamic}.call(1);
+ f4{dynamic}.call(1);
+ () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+ A Function() g1 = A.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+ B Function() g2 = B.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::B;
+ (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+ C Function(int x) g3 = C.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::C;
+ (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+ D Function(int x) g4 = D.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::D;
+ g1(){() → self::A};
+ g2(){() → self::B};
+ g3(1){(core::int) → self::C};
+ g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..7323740
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.strong.transformed.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.redirecting() : this.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(this.x);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+// ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D(int x) : super.new(x * 2);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+// D(int x) : super.new(x * 2);
+// ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// new C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ constructor redirecting() → self::A
+ : this self::A::new()
+ ;
+ static factory redirectingFactory() → self::A
+ let Never #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let core::String* #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+class C extends core::Object /*hasConstConstructor*/ {
+ final field core::int x;
+ const constructor new(core::int x) → self::C
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D extends core::Object {
+ constructor •(core::int x) → self::D
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+ D(int x) : super.new(x * 2);
+ ^^^^^"
+ ;
+}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+ D.new(1);
+ ^^^";
+ #C2;
+ new self::C::new(1);
+ dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+ var f1 = A.new;
+ ^^^";
+ dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+ var f2 = B.new;
+ ^^^";
+ dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+ var f3 = C.new;
+ ^^^";
+ dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+ var f4 = D.new;
+ ^^^";
+ f1{dynamic}.call();
+ f2{dynamic}.call();
+ f3{dynamic}.call(1);
+ f4{dynamic}.call(1);
+ () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+ A Function() g1 = A.new;
+ ^^^";
+ () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+ B Function() g2 = B.new;
+ ^^^";
+ (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+ C Function(int x) g3 = C.new;
+ ^^^";
+ (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+ D Function(int x) g4 = D.new;
+ ^^^";
+ g1(){() → self::A};
+ g2(){() → self::B};
+ g3(1){(core::int) → self::C};
+ g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..d70331c
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class A {
+ A.new();
+ factory A.redirectingFactory() = A.new;
+ factory A.redirectingFactoryChild() = B.new;
+ A.redirecting() : this.new();
+}
+class B extends A {}
+class C {
+ final int x;
+ const C.new(this.x);
+}
+class D extend C {
+ D(int x) : super.new(x * 2);
+}
+test() {}
+main() {}
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
new file mode 100644
index 0000000..c5f6007
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.redirecting() : this.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(this.x);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+// ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D(int x) : super.new(x * 2);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+// D(int x) : super.new(x * 2);
+// ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// new C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ constructor redirecting() → self::A
+ : this self::A::new()
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+class C extends core::Object /*hasConstConstructor*/ {
+ final field core::int x;
+ const constructor new(core::int x) → self::C
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D extends core::Object {
+ constructor •(core::int x) → self::D
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+ D(int x) : super.new(x * 2);
+ ^^^^^"
+ ;
+}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+ D.new(1);
+ ^^^";
+ #C2;
+ new self::C::new(1);
+ dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+ var f1 = A.new;
+ ^^^";
+ dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+ var f2 = B.new;
+ ^^^";
+ dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+ var f3 = C.new;
+ ^^^";
+ dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+ var f4 = D.new;
+ ^^^";
+ f1{dynamic}.call();
+ f2{dynamic}.call();
+ f3{dynamic}.call(1);
+ f4{dynamic}.call(1);
+ () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+ A Function() g1 = A.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::A;
+ () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+ B Function() g2 = B.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} () → self::B;
+ (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+ C Function(int x) g3 = C.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::C;
+ (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+ D Function(int x) g4 = D.new;
+ ^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int) → self::D;
+ g1(){() → self::A};
+ g2(){() → self::B};
+ g3(1){(core::int) → self::C};
+ g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..286b949
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.outline.expect
@@ -0,0 +1,74 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.redirecting() : this.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(this.x);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+// ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D(int x) : super.new(x * 2);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+ constructor new() → self::A
+ ;
+ constructor redirecting() → self::A
+ ;
+ static factory redirectingFactory() → self::A
+ let dynamic #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let dynamic #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ ;
+}
+class C extends core::Object /*hasConstConstructor*/ {
+ final field core::int x;
+ const constructor new(core::int x) → self::C
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D extends core::Object {
+ constructor •(core::int x) → self::D
+ ;
+}
+static method test() → dynamic
+ ;
+static method main() → dynamic
+ ;
diff --git a/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..7323740
--- /dev/null
+++ b/pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart.weak.transformed.expect
@@ -0,0 +1,226 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:6:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:7:38: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactory() = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:43: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// factory A.redirectingFactoryChild() = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:9:26: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A.redirecting() : this.new();
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:16:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(this.x);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:19:9: Error: Expected 'extends' instead of this.
+// class D extend C {
+// ^^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:20: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D(int x) : super.new(x * 2);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:8:41: Error: Redirection constructor target not found: 'B.new'
+// factory A.redirectingFactoryChild() = B.new;
+// ^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+// D(int x) : super.new(x * 2);
+// ^^^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+// D.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:25:11: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// const C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:26:9: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// new C.new(1);
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+// var f1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+// var f2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+// var f3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+// var f4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+// A Function() g1 = A.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+// B Function() g2 = B.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+// C Function(int x) g3 = C.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: This requires the 'constructor-tearoffs' language feature to be enabled.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+// D Function(int x) g4 = D.new;
+// ^^^
+//
+// pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:12:7: Error: The superclass, 'A', has no unnamed constructor that takes no arguments.
+// class B extends A {}
+// ^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+ static final field dynamic _redirecting# = <dynamic>[self::A::redirectingFactory, self::A::redirectingFactoryChild]/*isLegacy*/;
+ constructor new() → self::A
+ : super core::Object::•()
+ ;
+ constructor redirecting() → self::A
+ : this self::A::new()
+ ;
+ static factory redirectingFactory() → self::A
+ let Never #redirecting_factory = self::A::new in invalid-expression;
+ static factory redirectingFactoryChild() → self::A
+ let core::String* #redirecting_factory = "B.new" in invalid-expression;
+}
+class B extends self::A {
+ synthetic constructor •() → self::B
+ : invalid-initializer
+ ;
+}
+class C extends core::Object /*hasConstConstructor*/ {
+ final field core::int x;
+ const constructor new(core::int x) → self::C
+ : self::C::x = x, super core::Object::•()
+ ;
+}
+class D extends core::Object {
+ constructor •(core::int x) → self::D
+ : final dynamic #t1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:20:14: Error: Superclass has no constructor named 'Object.new'.
+ D(int x) : super.new(x * 2);
+ ^^^^^"
+ ;
+}
+static method test() → dynamic {
+ invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:24:5: Error: Method not found: 'D.new'.
+ D.new(1);
+ ^^^";
+ #C2;
+ new self::C::new(1);
+ dynamic f1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:28:14: Error: Getter not found: 'new'.
+ var f1 = A.new;
+ ^^^";
+ dynamic f2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:29:14: Error: Getter not found: 'new'.
+ var f2 = B.new;
+ ^^^";
+ dynamic f3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:30:14: Error: Getter not found: 'new'.
+ var f3 = C.new;
+ ^^^";
+ dynamic f4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:31:14: Error: Getter not found: 'new'.
+ var f4 = D.new;
+ ^^^";
+ f1{dynamic}.call();
+ f2{dynamic}.call();
+ f3{dynamic}.call(1);
+ f4{dynamic}.call(1);
+ () → self::A g1 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:37:23: Error: Getter not found: 'new'.
+ A Function() g1 = A.new;
+ ^^^";
+ () → self::B g2 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:38:23: Error: Getter not found: 'new'.
+ B Function() g2 = B.new;
+ ^^^";
+ (core::int) → self::C g3 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:39:28: Error: Getter not found: 'new'.
+ C Function(int x) g3 = C.new;
+ ^^^";
+ (core::int) → self::D g4 = invalid-expression "pkg/front_end/testcases/constructor_tearoffs/unnamed_constructor.dart:40:28: Error: Getter not found: 'new'.
+ D Function(int x) g4 = D.new;
+ ^^^";
+ g1(){() → self::A};
+ g2(){() → self::B};
+ g3(1){(core::int) → self::C};
+ g4(1){(core::int) → self::D};
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = self::C {x:#C1}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///unnamed_constructor.dart:
+- C.new (from org-dartlang-testcase:///unnamed_constructor.dart:16:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
index 3144a2d..9b677e7 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.expect
@@ -46,16 +46,6 @@
// const fromDeferredLib = lib.x;
// ^
//
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:44: Error: Constant evaluation error:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:51: Context: The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '"42"'.
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:14: Context: While analyzing:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@@ -159,37 +149,37 @@
static const field core::bool isMapOfMapOfInt1 = #C8;
static const field core::bool isMapOfMapOfInt2 = #C8;
static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
-static const field core::Symbol symbolWithInvalidName = invalid-expression "The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '\"42\"'.";
-static const field self::Class<self::B>? c0 = #C33;
+static const field core::Symbol symbolWithInvalidName = #C32;
+static const field self::Class<self::B>? c0 = #C34;
static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^";
-static const field self::Subclass<self::B>? c2 = #C34;
-static const field self::Class<self::A>? c3 = #C35;
-static const field self::Class<self::B>? c4 = #C36;
-static const field self::Subclass<self::A>? c5 = #C37;
-static const field self::Subclass<self::B>? c6 = #C38;
-static const field core::Type f = #C39;
-static field self::ConstClassWithF constClassWithF1 = #C41;
-static const field self::ConstClassWithF constClassWithF2 = #C41;
-static const field core::bool unevaluatedBool = #C42;
-static const field core::bool notUnevaluatedBool = #C43;
-static const field core::bool? unevaluatedBoolOrNull = #C44;
-static const field core::bool unevaluatedBoolNotNull = #C45;
+static const field self::Subclass<self::B>? c2 = #C35;
+static const field self::Class<self::A>? c3 = #C36;
+static const field self::Class<self::B>? c4 = #C37;
+static const field self::Subclass<self::A>? c5 = #C38;
+static const field self::Subclass<self::B>? c6 = #C39;
+static const field core::Type f = #C40;
+static field self::ConstClassWithF constClassWithF1 = #C42;
+static const field self::ConstClassWithF constClassWithF2 = #C42;
+static const field core::bool unevaluatedBool = #C43;
+static const field core::bool notUnevaluatedBool = #C44;
+static const field core::bool? unevaluatedBoolOrNull = #C45;
+static const field core::bool unevaluatedBoolNotNull = #C46;
static method procedure(core::int i, {core::int named = #C9}) → core::int
return i;
static method main() → dynamic {
- core::print(#C33);
+ core::print(#C34);
core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^");
- core::print(#C34);
core::print(#C35);
core::print(#C36);
core::print(#C37);
core::print(#C38);
+ core::print(#C39);
core::print(#C20);
core::print((#C20).{self::Foo::saved}{core::bool});
core::print((#C20).{self::Foo::value}{core::int});
@@ -233,20 +223,21 @@
#C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
#C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
#C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
- #C32 = "x"
- #C33 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C34 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C35 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
- #C36 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C37 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
- #C38 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C39 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
- #C40 = tearoff self::procedure
- #C41 = self::ConstClassWithF {foo:#C40}
- #C42 = eval const core::bool::fromEnvironment(#C1)
- #C43 = eval !const core::bool::fromEnvironment(#C1)
- #C44 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
- #C45 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
+ #C32 = #42
+ #C33 = "x"
+ #C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+ #C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+ #C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
+ #C41 = tearoff self::procedure
+ #C42 = self::ConstClassWithF {foo:#C41}
+ #C43 = eval const core::bool::fromEnvironment(#C1)
+ #C44 = eval !const core::bool::fromEnvironment(#C1)
+ #C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
+ #C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
}
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
index 247eb18..f9aaa93 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.outline.expect
@@ -200,6 +200,7 @@
Evaluated: IsExpression @ org-dartlang-testcase:///various.dart:73:46 -> BoolConstant(true)
Evaluated with empty environment: ConstructorInvocation @ org-dartlang-testcase:///various.dart:76:11 -> SymbolConstant(#)
Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:76:25 -> StringConstant("")
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:77:44 -> SymbolConstant(#42)
Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:107:17 -> BoolConstant(false)
Evaluated: ConstructorInvocation @ org-dartlang-testcase:///various.dart:107:71 -> InstanceConstant(const C{})
Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:108:17 -> BoolConstant(false)
@@ -227,4 +228,4 @@
Evaluated with empty environment: FactoryConstructorInvocationJudgment @ org-dartlang-testcase:///various.dart:130:10 -> BoolConstant(false)
Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:130:35 -> BoolConstant(false)
Evaluated with empty environment: StaticGet @ org-dartlang-testcase:///various.dart:131:37 -> NullConstant(null)
-Extra constant evaluation: evaluated: 112, effectively constant: 68
+Extra constant evaluation: evaluated: 112, effectively constant: 69
diff --git a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
index bb6d767..b2b5426 100644
--- a/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart.weak.transformed.expect
@@ -46,16 +46,6 @@
// const fromDeferredLib = lib.x;
// ^
//
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:44: Error: Constant evaluation error:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:51: Context: The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '"42"'.
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-// pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:77:14: Context: While analyzing:
-// const Symbol symbolWithInvalidName = const Symbol("42");
-// ^
-//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@@ -159,40 +149,40 @@
static const field core::bool isMapOfMapOfInt1 = #C8;
static const field core::bool isMapOfMapOfInt2 = #C8;
static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
-static const field core::Symbol symbolWithInvalidName = invalid-expression "The symbol name must be a valid public Dart member name, public constructor name, or library name, optionally qualified, but was '\"42\"'.";
-static const field self::Class<self::B>? c0 = #C33;
+static const field core::Symbol symbolWithInvalidName = #C32;
+static const field self::Class<self::B>? c0 = #C34;
static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^";
-static const field self::Subclass<self::B>? c2 = #C34;
-static const field self::Class<self::A>? c3 = #C35;
-static const field self::Class<self::B>? c4 = #C36;
-static const field self::Subclass<self::A>? c5 = #C37;
-static const field self::Subclass<self::B>? c6 = #C38;
-static const field core::Type f = #C39;
-static field self::ConstClassWithF constClassWithF1 = #C41;
-static const field self::ConstClassWithF constClassWithF2 = #C41;
-static const field core::bool unevaluatedBool = #C42;
-static const field core::bool notUnevaluatedBool = #C43;
-static const field core::bool? unevaluatedBoolOrNull = #C44;
-static const field core::bool unevaluatedBoolNotNull = #C45;
+static const field self::Subclass<self::B>? c2 = #C35;
+static const field self::Class<self::A>? c3 = #C36;
+static const field self::Class<self::B>? c4 = #C37;
+static const field self::Subclass<self::A>? c5 = #C38;
+static const field self::Subclass<self::B>? c6 = #C39;
+static const field core::Type f = #C40;
+static field self::ConstClassWithF constClassWithF1 = #C42;
+static const field self::ConstClassWithF constClassWithF2 = #C42;
+static const field core::bool unevaluatedBool = #C43;
+static const field core::bool notUnevaluatedBool = #C44;
+static const field core::bool? unevaluatedBoolOrNull = #C45;
+static const field core::bool unevaluatedBoolNotNull = #C46;
static method procedure(core::int i, {core::int named = #C9}) → core::int
return i;
static method main() → dynamic {
- core::print(#C46);
+ core::print(#C47);
core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^");
- core::print(#C47);
core::print(#C48);
core::print(#C49);
core::print(#C50);
core::print(#C51);
core::print(#C52);
- core::print((#C52).{self::Foo::saved}{core::bool});
- core::print((#C52).{self::Foo::value}{core::int});
+ core::print(#C53);
+ core::print((#C53).{self::Foo::saved}{core::bool});
+ core::print((#C53).{self::Foo::value}{core::int});
}
library /*isNonNullableByDefault*/;
@@ -233,27 +223,28 @@
#C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
#C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
#C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
- #C32 = "x"
- #C33 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C34 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C35 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
- #C36 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C37 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
- #C38 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C39 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
- #C40 = tearoff self::procedure
- #C41 = self::ConstClassWithF {foo:#C40}
- #C42 = eval const core::bool::fromEnvironment(#C1)
- #C43 = eval !const core::bool::fromEnvironment(#C1)
- #C44 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
- #C45 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
- #C46 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C47 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
- #C48 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
- #C49 = eval const core::bool::fromEnvironment(#C32) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C50 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
- #C51 = eval const core::bool::fromEnvironment(#C32) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
- #C52 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
+ #C32 = #42
+ #C33 = "x"
+ #C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+ #C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+ #C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
+ #C41 = tearoff self::procedure
+ #C42 = self::ConstClassWithF {foo:#C41}
+ #C43 = eval const core::bool::fromEnvironment(#C1)
+ #C44 = eval !const core::bool::fromEnvironment(#C1)
+ #C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
+ #C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
+ #C47 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C48 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
+ #C49 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
+ #C50 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C51 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
+ #C52 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
+ #C53 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
}
Extra constant evaluation status:
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
index 40fc5da..be9d427 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.expect
@@ -2,20 +2,11 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected an identifier, but got 'final'.
-// Try inserting an identifier before 'final'.
+// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
// #final;
// ^^^^^
//
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected ';' after this.
-// #final;
-// ^^^^^
-//
-// pkg/front_end/testcases/general/issue42610.dart:6:9: Error: Expected an identifier, but got ';'.
-// Try inserting an identifier before ';'.
-// #final;
-// ^
-//
// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
// Try adding an initializer ('= expression') to the declaration.
// final x;
@@ -37,6 +28,29 @@
// ^
//
import self as self;
+import "dart:core" as core;
-static method test() → void {}
+static method test() → void {
+ #C1;
+ final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ final x;
+ ^";
+ const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ const y;
+ ^";
+ final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ final int z;
+ ^" as{TypeError,ForDynamic} core::int*;
+ const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ const int w;
+ ^";
+}
static method main() → void {}
+
+constants {
+ #C1 = #final
+}
diff --git a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
index 40fc5da..78cba42 100644
--- a/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/issue42610.dart.weak.transformed.expect
@@ -2,20 +2,11 @@
//
// Problems in library:
//
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected an identifier, but got 'final'.
-// Try inserting an identifier before 'final'.
+// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: 'final' can't be used as an identifier because it's a keyword.
+// Try renaming this to be an identifier that isn't a keyword.
// #final;
// ^^^^^
//
-// pkg/front_end/testcases/general/issue42610.dart:6:4: Error: Expected ';' after this.
-// #final;
-// ^^^^^
-//
-// pkg/front_end/testcases/general/issue42610.dart:6:9: Error: Expected an identifier, but got ';'.
-// Try inserting an identifier before ';'.
-// #final;
-// ^
-//
// pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
// Try adding an initializer ('= expression') to the declaration.
// final x;
@@ -37,6 +28,29 @@
// ^
//
import self as self;
+import "dart:core" as core;
-static method test() → void {}
+static method test() → void {
+ #C1;
+ final dynamic x = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:7:9: Error: The final variable 'x' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ final x;
+ ^";
+ const dynamic y = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:8:9: Error: The const variable 'y' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ const y;
+ ^";
+ final core::int* z = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:9:13: Error: The final variable 'z' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ final int z;
+ ^";
+ const core::int* w = invalid-expression "pkg/front_end/testcases/general/issue42610.dart:10:13: Error: The const variable 'w' must be initialized.
+Try adding an initializer ('= expression') to the declaration.
+ const int w;
+ ^";
+}
static method main() → void {}
+
+constants {
+ #C1 = #final
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index f3bdfc8..cfb0715 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -8,6 +8,7 @@
dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
+constructor_tearoffs/redirecting_constructors: RuntimeError
extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 6d4e214..24201ec 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -6,6 +6,7 @@
# the round trip for Kernel textual serialization where the initial binary
# Kernel files are produced by compiling Dart code via Fasta.
+constructor_tearoffs/redirecting_constructors: RuntimeError
extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 31ef5f3..5dd912a 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -28,6 +28,8 @@
constructor_tearoffs/instantiation: FormatterCrash
constructor_tearoffs/nongeneric_tearoff_with_context: FormatterCrash
constructor_tearoffs/nongeneric_tearoff_without_context: FormatterCrash
+constructor_tearoffs/redirecting_constructors: FormatterCrash
+constructor_tearoffs/unnamed_constructor: FormatterCrash
dart2js/late_fields: FormatterCrash
dart2js/late_statics: FormatterCrash
extensions/extension_constructor: FormatterCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 751db7e..3c2c427 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -11,6 +11,7 @@
regress/utf_16_le_content.crash: SemiFuzzCrash
dart2js/late_statics: SemiFuzzFailure # dartbug.com/45854
+constructor_tearoffs/redirecting_constructors: RuntimeError
extension_types/extension_on_nullable: ExpectationFileMismatchSerialized # Expected.
extension_types/issue45775: ExpectationFileMismatchSerialized # Expected.
extension_types/simple: ExpectationFileMismatchSerialized # Expected.
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index e1a99a8..f66182a 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1216,8 +1216,7 @@
for (Member mixinMember in _buildDeclaredMembers(
mixedInClassNode, mixedInInfo,
setters: setters)) {
- if (mixinMember is! Procedure ||
- (mixinMember is Procedure && !mixinMember.isSynthetic)) {
+ if (mixinMember is! Procedure || !mixinMember.isSynthetic) {
memberMap[mixinMember.name] = mixinMember;
}
}
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 3ae06c1..c98e62c 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -220,8 +220,6 @@
final Set<PromotableElement> _lateHintedLocals = {};
- final Set<PromotableElement> _requiredHintedParameters = {};
-
final Map<Token, HintComment> _nullCheckHints = {};
/// Helper that assists us in transforming Iterable methods to their "OrNull"
@@ -801,22 +799,31 @@
DecoratedType visitDefaultFormalParameter(DefaultFormalParameter node) {
_dispatch(node.parameter);
var defaultValue = node.defaultValue;
+ var declaredElement = node.declaredElement;
if (defaultValue == null) {
- if (node.declaredElement.hasRequired) {
+ if (declaredElement.hasRequired) {
// Nothing to do; the implicit default value of `null` will never be
// reached.
} else if (_variables.getRequiredHint(source, node) != null) {
// Nothing to do; assume the implicit default value of `null` will never
// be reached.
- _requiredHintedParameters.add(node.declaredElement);
} else {
- _graph.makeNullable(
- getOrComputeElementType(node, node.declaredElement).node,
- OptionalFormalParameterOrigin(source, node));
+ var enclosingElement = declaredElement.enclosingElement;
+ if (enclosingElement is ConstructorElement &&
+ enclosingElement.isFactory &&
+ enclosingElement.redirectedConstructor != null) {
+ // Redirecting factory constructors inherit their parameters' default
+ // values from the constructors they redirect to, so the lack of a
+ // default value doesn't mean the parameter has to be nullable.
+ } else {
+ _graph.makeNullable(
+ getOrComputeElementType(node, declaredElement).node,
+ OptionalFormalParameterOrigin(source, node));
+ }
}
} else {
_handleAssignment(defaultValue,
- destinationType: getOrComputeElementType(node, node.declaredElement),
+ destinationType: getOrComputeElementType(node, declaredElement),
fromDefaultValue: true);
}
return null;
@@ -1647,7 +1654,6 @@
if (!node.inDeclarationContext() &&
node.inGetterContext() &&
!_lateHintedLocals.contains(staticElement) &&
- !_requiredHintedParameters.contains(staticElement) &&
!_flowAnalysis.isAssigned(staticElement)) {
_graph.makeNullable(type.node, UninitializedReadOrigin(source, node));
}
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index bc70677..633732f 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -185,8 +185,9 @@
EditPlanner(this.lineInfo, this.sourceText, {this.removeViaComments = false});
/// Creates a new edit plan that consists of executing [innerPlan], and then
- /// converting the late [hint] into an explicit `late`.
- NodeProducingEditPlan acceptLateHint(
+ /// converting the [hint] (which precedes the node) into text that is not
+ /// commented out.
+ NodeProducingEditPlan acceptPrefixHint(
NodeProducingEditPlan innerPlan, HintComment hint,
{AtomicEditInfo info}) {
var affixPlan = innerPlan is _CommentAffixPlan
@@ -200,8 +201,9 @@
}
/// Creates a new edit plan that consists of executing [innerPlan], and then
- /// converting the nullability [hint] into an explicit `?` or `!`.
- NodeProducingEditPlan acceptNullabilityOrNullCheckHint(
+ /// converting the [hint] (which follows the node) into text that is not
+ /// commented out.
+ NodeProducingEditPlan acceptSuffixHint(
NodeProducingEditPlan innerPlan, HintComment hint,
{AtomicEditInfo info}) {
var affixPlan = innerPlan is _CommentAffixPlan
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 60e779d..2df2b83 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -746,6 +746,10 @@
/// contained in the edit.
AtomicEditInfo addRequiredKeywordInfo;
+ /// If [addRequiredKeyword] is `true`, and there is a `/*required*/` hint,
+ /// the hint comment that should be converted into a simple `required` string.
+ HintComment requiredHint;
+
/// If non-null, indicates a `@required` annotation which should be removed
/// from this node.
Annotation annotationToRemove;
@@ -762,8 +766,13 @@
@override
EditPlan _apply(DefaultFormalParameter node, FixAggregator aggregator) {
- var innerPlan = aggregator.innerPlanForNode(node);
- if (!addRequiredKeyword) return innerPlan;
+ if (!addRequiredKeyword) return aggregator.innerPlanForNode(node);
+
+ if (requiredHint != null) {
+ var innerPlan = aggregator.innerPlanForNode(node);
+ return aggregator.planner.acceptPrefixHint(innerPlan, requiredHint,
+ info: addRequiredKeywordInfo);
+ }
var offset = node.firstTokenAfterCommentAndMetadata.offset;
return aggregator.planner.passThrough(node, innerPlans: [
@@ -1205,8 +1214,7 @@
if (_makeNullable) {
var hint = _nullabilityHint;
if (hint != null) {
- return aggregator.planner.acceptNullabilityOrNullCheckHint(
- innerPlan, hint,
+ return aggregator.planner.acceptSuffixHint(innerPlan, hint,
info: AtomicEditInfo(
NullabilityFixDescription.makeTypeNullableDueToHint(typeName),
fixReasons,
@@ -1302,7 +1310,7 @@
var description = lateHint.kind == HintCommentKind.late_
? NullabilityFixDescription.addLateDueToHint
: NullabilityFixDescription.addLateFinalDueToHint;
- plan = aggregator.planner.acceptLateHint(plan, lateHint,
+ plan = aggregator.planner.acceptPrefixHint(plan, lateHint,
info: AtomicEditInfo(description, {}, hintComment: lateHint));
}
return plan;
@@ -1348,8 +1356,7 @@
NodeProducingEditPlan applyExpression(FixAggregator aggregator,
NodeProducingEditPlan innerPlan, AtomicEditInfo info) {
if (hint != null) {
- return aggregator.planner
- .acceptNullabilityOrNullCheckHint(innerPlan, hint, info: info);
+ return aggregator.planner.acceptSuffixHint(innerPlan, hint, info: info);
} else {
return aggregator.planner
.addUnaryPostfix(innerPlan, TokenType.BANG, info: info);
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index add21a0..6a7731b 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -426,7 +426,7 @@
node,
() => node.elements,
() => _collectionElements[node] ??=
- _transformCollectionElements(node.elements, node.typeArguments));
+ _transformCollectionElements(node.elements));
@override
List<CollectionElement> getSetOrMapElements(SetOrMapLiteral node) =>
@@ -434,7 +434,7 @@
node,
() => node.elements,
() => _collectionElements[node] ??=
- _transformCollectionElements(node.elements, node.typeArguments));
+ _transformCollectionElements(node.elements));
@override
DartType getTypeParameterBound(TypeParameterElementImpl element) {
@@ -808,7 +808,7 @@
}
List<CollectionElement> _transformCollectionElements(
- NodeList<CollectionElement> elements, TypeArgumentList typeArguments) {
+ NodeList<CollectionElement> elements) {
return elements
.map(_transformCollectionElement)
.where((e) => e != null)
@@ -1113,17 +1113,27 @@
void visitDefaultFormalParameter(DefaultFormalParameter node) {
var element = node.declaredElement;
if (node.defaultValue == null) {
+ var requiredHint =
+ _fixBuilder._variables.getRequiredHint(_fixBuilder.source, node);
var nullabilityNode =
_fixBuilder._variables.decoratedElementType(element).node;
if (!nullabilityNode.isNullable) {
- if (element.isNamed) {
- _addRequiredKeyword(node, nullabilityNode);
+ var enclosingElement = element.enclosingElement;
+ if (enclosingElement is ConstructorElement &&
+ enclosingElement.isFactory &&
+ enclosingElement.redirectedConstructor != null) {
+ // Redirecting factory constructors inherit their parameters' default
+ // values from the constructors they redirect to, so the lack of a
+ // default value doesn't mean the parameter has to be nullable.
+ } else if (element.isNamed) {
+ _addRequiredKeyword(node, nullabilityNode, requiredHint);
} else {
_fixBuilder._addProblem(
node, const NonNullableUnnamedOptionalParameter());
}
- } else if (element.metadata.any((m) => m.isRequired)) {
- _addRequiredKeyword(node, nullabilityNode);
+ } else if (requiredHint != null ||
+ element.metadata.any((m) => m.isRequired)) {
+ _addRequiredKeyword(node, nullabilityNode, requiredHint);
}
}
super.visitDefaultFormalParameter(node);
@@ -1199,8 +1209,8 @@
super.visitTypeName(node);
}
- void _addRequiredKeyword(
- DefaultFormalParameter parameter, NullabilityNode node) {
+ void _addRequiredKeyword(DefaultFormalParameter parameter,
+ NullabilityNode node, HintComment requiredHint) {
// Change an existing `@required` annotation into a `required` keyword if
// possible.
final element = parameter.declaredElement;
@@ -1226,7 +1236,8 @@
var nodeChange = (_fixBuilder._getChange(parameter)
as NodeChangeForDefaultFormalParameter)
..addRequiredKeyword = true
- ..addRequiredKeywordInfo = info;
+ ..addRequiredKeywordInfo = info
+ ..requiredHint = requiredHint;
var requiredAnnotation = metadata?.firstWhere(
(annotation) => annotation.elementAnnotation.isRequired,
orElse: () => null);
diff --git a/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart b/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
index 07398ba..6099a8f 100644
--- a/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/instrumentation_information.dart
@@ -20,20 +20,12 @@
/// The node used for type sources that are never `null`.
NullabilityNodeInfo never;
- /// A map associating [NodeInformation] with [NullabilityNodeInfo] objects.
- Map<NullabilityNodeInfo, NodeInformation> nodeInformation = {};
-
/// The instrumentation information that is specific to a single source.
final Map<Source, SourceInformation> sourceInformation = {};
/// Initialize a newly created holder of instrumentation information.
InstrumentationInformation();
- /// Return information about the given [node].
- NodeInformation nodeInfoFor(NullabilityNodeInfo node) {
- return nodeInformation[node];
- }
-
/// Return the type annotation associated with the [node] or `null` if the
/// node represents an implicit type.
TypeAnnotation typeAnnotationForNode(NullabilityNodeInfo node) {
diff --git a/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart b/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
index c72f61c..c6927da 100644
--- a/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
+++ b/pkg/nnbd_migration/lib/src/front_end/instrumentation_listener.dart
@@ -4,7 +4,6 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
-import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:nnbd_migration/instrumentation.dart';
import 'package:nnbd_migration/src/edit_plan.dart';
@@ -32,21 +31,20 @@
@override
void explicitTypeNullability(
Source source, TypeAnnotation typeAnnotation, NullabilityNodeInfo node) {
- data.nodeInformation[node] =
- NodeInformation(_filePathForSource(source), typeAnnotation, null);
_sourceInfo(source).explicitTypeNullability[typeAnnotation] = node;
}
@override
- void externalDecoratedType(Element element, DecoratedTypeInfo decoratedType) {
- _storeNodeInformation(decoratedType, element.source, null, element);
- }
+ void externalDecoratedType(
+ Element element, DecoratedTypeInfo decoratedType) {}
@override
void externalDecoratedTypeParameterBound(
- TypeParameterElement typeParameter, DecoratedTypeInfo decoratedType) {
- _storeNodeInformation(
- decoratedType, typeParameter.source, null, typeParameter);
+ TypeParameterElement typeParameter, DecoratedTypeInfo decoratedType) {}
+
+ @override
+ void finished() {
+ migrationSummary?.write();
}
@override
@@ -62,23 +60,15 @@
@override
void implicitReturnType(
- Source source, AstNode node, DecoratedTypeInfo decoratedReturnType) {
- _storeNodeInformation(decoratedReturnType, source, node, null);
- }
+ Source source, AstNode node, DecoratedTypeInfo decoratedReturnType) {}
@override
void implicitType(
- Source source, AstNode node, DecoratedTypeInfo decoratedType) {
- _storeNodeInformation(decoratedType, source, node, null);
- }
+ Source source, AstNode node, DecoratedTypeInfo decoratedType) {}
@override
void implicitTypeArguments(
- Source source, AstNode node, Iterable<DecoratedTypeInfo> types) {
- for (var type in types) {
- _storeNodeInformation(type, source, node, null);
- }
- }
+ Source source, AstNode node, Iterable<DecoratedTypeInfo> types) {}
@override
void prepareForUpdate() {
@@ -87,52 +77,8 @@
}
}
- String _filePathForSource(Source source) {
- return source.fullName;
- }
-
/// Return the source information associated with the given [source], creating
/// it if there has been no previous information for that source.
SourceInformation _sourceInfo(Source source) =>
data.sourceInformation.putIfAbsent(source, () => SourceInformation());
-
- // TODO(srawlins): This code is completely untested.
- void _storeNodeInformation(DecoratedTypeInfo decoratedType, Source source,
- AstNode astNode, Element element) {
- // Make sure source info exists for the given source.
- _sourceInfo(source);
- data.nodeInformation[decoratedType.node] =
- NodeInformation(_filePathForSource(source), astNode, element);
- var dartType = decoratedType.type;
- if (dartType is InterfaceType) {
- for (var i = 0; i < dartType.typeArguments.length; i++) {
- _storeNodeInformation(
- decoratedType.typeArgument(i), source, astNode, element);
- }
- } else if (dartType is FunctionType) {
- _storeNodeInformation(
- decoratedType.returnType,
- source,
- astNode,
- element,
- );
- var i = 0;
- for (var parameter in dartType.parameters) {
- if (parameter.isNamed) {
- var name = parameter.name;
- _storeNodeInformation(
- decoratedType.namedParameter(name), source, astNode, element);
- } else {
- _storeNodeInformation(
- decoratedType.positionalParameter(i), source, astNode, element);
- i++;
- }
- }
- }
- }
-
- @override
- void finished() {
- migrationSummary?.write();
- }
}
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 19248f9..cd978d6 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -124,6 +124,32 @@
/// Mixin containing test cases for the provisional API.
mixin _ProvisionalApiTestCases on _ProvisionalApiTestBase {
+ Future<void> test_accept_required_hint() async {
+ var content = '''
+f({/*required*/ int i}) {}
+''';
+ var expected = '''
+f({required int i}) {}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
+ Future<void> test_accept_required_hint_nullable() async {
+ var content = '''
+f({/*required*/ int i}) {}
+g() {
+ f(i: null);
+}
+''';
+ var expected = '''
+f({required int? i}) {}
+g() {
+ f(i: null);
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
Future<void> test_add_explicit_parameter_type() async {
var content = '''
abstract class C {
@@ -1070,6 +1096,86 @@
await _checkSingleFileChanges(content, expected);
}
+ Future<void> test_constructor_optional_param_factory() async {
+ var content = '''
+class C {
+ factory C([int x]) => C._();
+ C._([int x = 0]);
+}
+''';
+ var expected = '''
+class C {
+ factory C([int? x]) => C._();
+ C._([int x = 0]);
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
+ Future<void>
+ test_constructor_optional_param_factory_redirecting_named() async {
+ var content = '''
+class C {
+ factory C({int x}) = C._;
+ C._({int x = 0});
+}
+''';
+ var expected = '''
+class C {
+ factory C({int x}) = C._;
+ C._({int x = 0});
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
+ Future<void>
+ test_constructor_optional_param_factory_redirecting_unnamed() async {
+ var content = '''
+class C {
+ factory C([int x]) = C._;
+ C._([int x = 0]);
+}
+''';
+ var expected = '''
+class C {
+ factory C([int x]) = C._;
+ C._([int x = 0]);
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
+ Future<void> test_constructor_optional_param_normal() async {
+ var content = '''
+class C {
+ C([int x]);
+}
+''';
+ var expected = '''
+class C {
+ C([int? x]);
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
+ Future<void> test_constructor_optional_param_redirecting() async {
+ var content = '''
+class C {
+ C([int x]) : this._();
+ C._([int x = 0]);
+}
+''';
+ var expected = '''
+class C {
+ C([int? x]) : this._();
+ C._([int x = 0]);
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
Future<void> test_constructorDeclaration_factory_non_null_return() async {
var content = '''
class C {
diff --git a/pkg/nnbd_migration/test/edit_plan_test.dart b/pkg/nnbd_migration/test/edit_plan_test.dart
index 078318e..d7881a2 100644
--- a/pkg/nnbd_migration/test/edit_plan_test.dart
+++ b/pkg/nnbd_migration/test/edit_plan_test.dart
@@ -64,7 +64,7 @@
await analyze(code);
var hint = getPrefixHint(findNode.simple('int').token);
var changes = checkPlan(
- planner.acceptLateHint(
+ planner.acceptPrefixHint(
planner.passThrough(findNode.simple('int')), hint),
'late int x = 0;');
expect(changes.keys, unorderedEquals([0, 7]));
@@ -77,7 +77,7 @@
await analyze(code);
var hint = getPrefixHint(findNode.simple('int').token);
checkPlan(
- planner.acceptLateHint(
+ planner.acceptPrefixHint(
planner.passThrough(findNode.simple('int')), hint),
'late int x = 0;');
}
@@ -87,7 +87,7 @@
await analyze(code);
var hint = getPrefixHint(findNode.simple('int').token);
checkPlan(
- planner.acceptLateHint(
+ planner.acceptPrefixHint(
planner.passThrough(findNode.simple('int')), hint),
'@deprecated late int x = 0;');
}
@@ -103,7 +103,7 @@
var parameter = findNode.fieldFormalParameter('void this.f(int i)');
var typeName = planner.passThrough(parameter);
checkPlan(
- planner.acceptNullabilityOrNullCheckHint(
+ planner.acceptSuffixHint(
typeName, getPostfixHint(parameter.parameters.rightParenthesis)),
'''
class C {
@@ -118,7 +118,7 @@
var parameter = findNode.functionTypedFormalParameter('void g(int i)');
var typeName = planner.passThrough(parameter);
checkPlan(
- planner.acceptNullabilityOrNullCheckHint(
+ planner.acceptSuffixHint(
typeName, getPostfixHint(parameter.parameters.rightParenthesis)),
'f(void g(int i)?) {}');
}
@@ -128,9 +128,7 @@
await analyze(code);
var intRef = findNode.simple('int');
var typeName = planner.passThrough(intRef);
- checkPlan(
- planner.acceptNullabilityOrNullCheckHint(
- typeName, getPostfixHint(intRef.token)),
+ checkPlan(planner.acceptSuffixHint(typeName, getPostfixHint(intRef.token)),
'int? x = 0;');
}
@@ -141,7 +139,7 @@
checkPlan(
planner.extract(
xRef.parent.parent,
- planner.acceptNullabilityOrNullCheckHint(
+ planner.acceptSuffixHint(
planner.passThrough(xRef), getPostfixHint(xRef.token))),
'f(x) => x!;');
}
diff --git a/pkg/test_runner/lib/src/command_output.dart b/pkg/test_runner/lib/src/command_output.dart
index ae762aa..579b10e 100644
--- a/pkg/test_runner/lib/src/command_output.dart
+++ b/pkg/test_runner/lib/src/command_output.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
+
// We need to use the 'io' prefix here, otherwise io.exitCode will shadow
// CommandOutput.exitCode in subclasses of CommandOutput.
import 'dart:io' as io;
@@ -459,11 +460,11 @@
/// A parsed analyzer error diagnostic.
class AnalyzerError implements Comparable<AnalyzerError> {
- /// Parses all errors from analyzer [stderr] output.
- static List<AnalyzerError> parseStderr(String stderr) {
+ /// Parses all errors from analyzer [stdout] output.
+ static List<AnalyzerError> parseStdout(String stdout) {
var result = <AnalyzerError>[];
- var jsonData = json.decode(stderr) as Map<String, dynamic>;
+ var jsonData = json.decode(stdout) as Map<String, dynamic>;
var version = jsonData['version'];
if (version != 1) {
DebugLogger.error('Unexpected analyzer JSON data version: $version');
@@ -543,8 +544,11 @@
}
class AnalysisCommandOutput extends CommandOutput with _StaticErrorOutput {
- static void parseErrors(String stderr, List<StaticError> errors,
- [List<StaticError> warnings]) {
+ static void parseErrors(
+ String stdout,
+ List<StaticError> errors, [
+ List<StaticError> warnings,
+ ]) {
StaticError convert(AnalyzerError error) {
var staticError = StaticError(ErrorSource.analyzer, error.errorCode,
line: error.line, column: error.column, length: error.length);
@@ -570,7 +574,7 @@
// Parse as Analyzer errors and then convert them to the StaticError objects
// the static error tests expect.
- for (var diagnostic in AnalyzerError.parseStderr(stderr)) {
+ for (var diagnostic in AnalyzerError.parseStdout(stdout)) {
if (diagnostic.severity == 'ERROR') {
errors.add(convert(diagnostic));
} else if (diagnostic.severity == 'WARNING' && warnings != null) {
@@ -579,18 +583,18 @@
}
}
- /// If the stderr of analyzer could not be parsed as valid JSON, this will
- /// be the stderr as a string instead. Otherwise it will be null.
- String get invalidJsonStderr {
+ /// If the stdout of analyzer could not be parsed as valid JSON, this will be
+ /// the stdout as a string instead. Otherwise it will be null.
+ String get invalidJsonStdout {
if (!_parsedErrors) {
_parseErrors();
_parsedErrors = true;
}
- return _invalidJsonStderr;
+ return _invalidJsonStdout;
}
- String _invalidJsonStderr;
+ String _invalidJsonStdout;
AnalysisCommandOutput(
Command command,
@@ -614,7 +618,7 @@
if (hasNonUtf8) return Expectation.nonUtf8Error;
if (truncatedOutput) return Expectation.truncatedOutput;
- if (invalidJsonStderr != null) return Expectation.fail;
+ if (invalidJsonStdout != null) return Expectation.fail;
// If it's a static error test, validate the exact errors.
if (testCase.testFile.isStaticErrorTest) {
@@ -661,7 +665,7 @@
if (hasNonUtf8) return Expectation.nonUtf8Error;
if (truncatedOutput) return Expectation.truncatedOutput;
- if (invalidJsonStderr != null) return Expectation.fail;
+ if (invalidJsonStdout != null) return Expectation.fail;
// If it's a static error test, validate the exact errors.
if (testCase.testFile.isStaticErrorTest) {
@@ -679,9 +683,9 @@
@override
void describe(TestCase testCase, Progress progress, OutputWriter output) {
- if (invalidJsonStderr != null) {
- output.subsection("invalid JSON on analyzer stderr");
- output.write(invalidJsonStderr);
+ if (invalidJsonStdout != null) {
+ output.subsection("invalid analyzer json");
+ output.write(invalidJsonStdout);
return;
}
@@ -692,7 +696,7 @@
} else {
// Parse and sort the errors.
var errorsByFile = <String, List<AnalyzerError>>{};
- for (var error in AnalyzerError.parseStderr(decodeUtf8(stderr))) {
+ for (var error in AnalyzerError.parseStdout(decodeUtf8(stdout))) {
errorsByFile.putIfAbsent(error.file, () => []).add(error);
}
@@ -720,20 +724,20 @@
}
}
- /// Parses the JSON output of analyzer.
+ /// Parses the JSON output of the analyzer.
@override
void _parseErrors() {
- var stderrString = decodeUtf8(stderr);
+ var stdoutString = decodeUtf8(stdout);
try {
var errors = <StaticError>[];
var warnings = <StaticError>[];
- parseErrors(stderrString, errors, warnings);
+ parseErrors(stdoutString, errors, warnings);
errors.forEach(addError);
warnings.forEach(addWarning);
} on FormatException {
// It wasn't JSON. This can happen if analyzer instead prints:
// "No dart files found at: ..."
- _invalidJsonStderr = stderrString;
+ _invalidJsonStdout = stdoutString;
}
}
}
@@ -1293,6 +1297,7 @@
}
Expectation result(TestCase testCase) => _result;
+
Expectation realResult(TestCase testCase) => _result;
bool get canRunDependendCommands => _result == Expectation.pass;
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index 9758107..053dcbd 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -244,7 +244,7 @@
var errors = <StaticError>[];
var warnings = <StaticError>[];
- AnalysisCommandOutput.parseErrors(result.stderr as String, errors, warnings);
+ AnalysisCommandOutput.parseErrors(result.stdout as String, errors, warnings);
return [...errors, ...warnings];
}
diff --git a/pkg/vm/lib/http_filesystem.dart b/pkg/vm/lib/http_filesystem.dart
index 6d249e3..cd8e42a 100644
--- a/pkg/vm/lib/http_filesystem.dart
+++ b/pkg/vm/lib/http_filesystem.dart
@@ -29,6 +29,7 @@
return connectAndRun((io.HttpClient httpClient) async {
io.HttpClientRequest request = await httpClient.headUrl(uri);
io.HttpClientResponse response = await request.close();
+ await response.drain();
return response.statusCode == io.HttpStatus.ok;
});
}
@@ -42,6 +43,7 @@
io.HttpClientRequest request = await httpClient.getUrl(uri);
io.HttpClientResponse response = await request.close();
if (response.statusCode != io.HttpStatus.ok) {
+ await response.drain();
throw new FileSystemException(uri, response.toString());
}
List<List<int>> list = await response.toList();
@@ -57,13 +59,13 @@
return String.fromCharCodes(await readAsBytes());
}
- T connectAndRun<T>(T body(io.HttpClient httpClient)) {
+ Future<T> connectAndRun<T>(Future<T> body(io.HttpClient httpClient)) async {
io.HttpClient httpClient;
try {
httpClient = new io.HttpClient();
// Set timeout to be shorter than anticipated OS default
httpClient.connectionTimeout = const Duration(seconds: 5);
- return body(httpClient);
+ return await body(httpClient);
} on Exception catch (e) {
throw new FileSystemException(uri, e.toString());
} finally {
diff --git a/pkg/vm_service/example/sample_isolates.dart b/pkg/vm_service/example/sample_isolates.dart
index e57fd09..98eb667 100644
--- a/pkg/vm_service/example/sample_isolates.dart
+++ b/pkg/vm_service/example/sample_isolates.dart
@@ -4,7 +4,7 @@
import 'dart:isolate';
-main(List<String> args) async {
+void main(List<String> args) async {
var arr = newArray(5);
var arr2 = newArray(417);
var hash1 = newHash(5);
@@ -30,7 +30,7 @@
Isolate.spawn(isolateEntry, val);
}
-isolateEntry(message) async {
+Future isolateEntry(message) async {
print('starting $message');
await Future.delayed(Duration(seconds: message));
print('ending $message');
diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java b/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
index 207cdc5..cf058e0 100644
--- a/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
+++ b/pkg/vm_service/java/src/org/dartlang/vm/service/VmServiceBase.java
@@ -572,6 +572,10 @@
}
}
+ protected String removeNewLines(String str) {
+ return str.replaceAll("\r\n", " ").replaceAll("\n", " ");
+ }
+
void processResponse(JsonObject json) {
JsonElement idElem = json.get(ID);
if (idElem == null) {
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 209f06e..983d0f7 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -2899,7 +2899,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Breakpoint && id == other.id;
+ bool operator ==(Object other) => other is Breakpoint && id == other.id;
String toString() => '[Breakpoint ' //
'id: ${id}, breakpointNumber: ${breakpointNumber}, enabled: ${enabled}, ' //
@@ -2955,7 +2955,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is ClassRef && id == other.id;
+ bool operator ==(Object other) => other is ClassRef && id == other.id;
String toString() =>
'[ClassRef id: ${id}, name: ${name}, library: ${library}]';
@@ -3098,7 +3098,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Class && id == other.id;
+ bool operator ==(Object other) => other is Class && id == other.id;
String toString() => '[Class]';
}
@@ -3235,7 +3235,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is CodeRef && id == other.id;
+ bool operator ==(Object other) => other is CodeRef && id == other.id;
String toString() => '[CodeRef id: ${id}, name: ${name}, kind: ${kind}]';
}
@@ -3280,7 +3280,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Code && id == other.id;
+ bool operator ==(Object other) => other is Code && id == other.id;
String toString() => '[Code id: ${id}, name: ${name}, kind: ${kind}]';
}
@@ -3318,7 +3318,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is ContextRef && id == other.id;
+ bool operator ==(Object other) => other is ContextRef && id == other.id;
String toString() => '[ContextRef id: ${id}, length: ${length}]';
}
@@ -3375,7 +3375,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Context && id == other.id;
+ bool operator ==(Object other) => other is Context && id == other.id;
String toString() =>
'[Context id: ${id}, length: ${length}, variables: ${variables}]';
@@ -3631,7 +3631,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is ErrorRef && id == other.id;
+ bool operator ==(Object other) => other is ErrorRef && id == other.id;
String toString() =>
'[ErrorRef id: ${id}, kind: ${kind}, message: ${message}]';
@@ -3696,7 +3696,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Error && id == other.id;
+ bool operator ==(Object other) => other is Error && id == other.id;
String toString() => '[Error id: ${id}, kind: ${kind}, message: ${message}]';
}
@@ -4082,7 +4082,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is FieldRef && id == other.id;
+ bool operator ==(Object other) => other is FieldRef && id == other.id;
String toString() => '[FieldRef ' //
'id: ${id}, name: ${name}, owner: ${owner}, declaredType: ${declaredType}, ' //
@@ -4177,7 +4177,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Field && id == other.id;
+ bool operator ==(Object other) => other is Field && id == other.id;
String toString() => '[Field ' //
'id: ${id}, name: ${name}, owner: ${owner}, declaredType: ${declaredType}, ' //
@@ -4396,7 +4396,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is FuncRef && id == other.id;
+ bool operator ==(Object other) => other is FuncRef && id == other.id;
String toString() => '[FuncRef ' //
'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
@@ -4473,7 +4473,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Func && id == other.id;
+ bool operator ==(Object other) => other is Func && id == other.id;
String toString() => '[Func ' //
'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
@@ -4686,7 +4686,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is InstanceRef && id == other.id;
+ bool operator ==(Object other) => other is InstanceRef && id == other.id;
String toString() => '[InstanceRef ' //
'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -5120,7 +5120,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Instance && id == other.id;
+ bool operator ==(Object other) => other is Instance && id == other.id;
String toString() => '[Instance ' //
'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -5177,7 +5177,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is IsolateRef && id == other.id;
+ bool operator ==(Object other) => other is IsolateRef && id == other.id;
String toString() => '[IsolateRef ' //
'id: ${id}, number: ${number}, name: ${name}, isSystemIsolate: ${isSystemIsolate}]';
@@ -5329,7 +5329,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Isolate && id == other.id;
+ bool operator ==(Object other) => other is Isolate && id == other.id;
String toString() => '[Isolate]';
}
@@ -5419,7 +5419,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is IsolateGroupRef && id == other.id;
+ bool operator ==(Object other) => other is IsolateGroupRef && id == other.id;
String toString() => '[IsolateGroupRef ' //
'id: ${id}, number: ${number}, name: ${name}, isSystemIsolateGroup: ${isSystemIsolateGroup}]';
@@ -5483,7 +5483,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is IsolateGroup && id == other.id;
+ bool operator ==(Object other) => other is IsolateGroup && id == other.id;
String toString() => '[IsolateGroup ' //
'id: ${id}, number: ${number}, name: ${name}, isSystemIsolateGroup: ${isSystemIsolateGroup}, ' //
@@ -5651,7 +5651,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is LibraryRef && id == other.id;
+ bool operator ==(Object other) => other is LibraryRef && id == other.id;
String toString() => '[LibraryRef id: ${id}, name: ${name}, uri: ${uri}]';
}
@@ -5743,7 +5743,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Library && id == other.id;
+ bool operator ==(Object other) => other is Library && id == other.id;
String toString() => '[Library]';
}
@@ -6125,7 +6125,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is NullValRef && id == other.id;
+ bool operator ==(Object other) => other is NullValRef && id == other.id;
String toString() => '[NullValRef ' //
'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -6177,7 +6177,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is NullVal && id == other.id;
+ bool operator ==(Object other) => other is NullVal && id == other.id;
String toString() => '[NullVal ' //
'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
@@ -6225,7 +6225,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is ObjRef && id == other.id;
+ bool operator ==(Object other) => other is ObjRef && id == other.id;
String toString() => '[ObjRef id: ${id}]';
}
@@ -6301,7 +6301,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Obj && id == other.id;
+ bool operator ==(Object other) => other is Obj && id == other.id;
String toString() => '[Obj id: ${id}]';
}
@@ -6792,7 +6792,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is ScriptRef && id == other.id;
+ bool operator ==(Object other) => other is ScriptRef && id == other.id;
String toString() => '[ScriptRef id: ${id}, uri: ${uri}]';
}
@@ -6927,7 +6927,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is Script && id == other.id;
+ bool operator ==(Object other) => other is Script && id == other.id;
String toString() => '[Script id: ${id}, uri: ${uri}, library: ${library}]';
}
@@ -7474,7 +7474,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is TypeArgumentsRef && id == other.id;
+ bool operator ==(Object other) => other is TypeArgumentsRef && id == other.id;
String toString() => '[TypeArgumentsRef id: ${id}, name: ${name}]';
}
@@ -7525,7 +7525,7 @@
int get hashCode => id.hashCode;
- operator ==(other) => other is TypeArguments && id == other.id;
+ bool operator ==(Object other) => other is TypeArguments && id == other.id;
String toString() =>
'[TypeArguments id: ${id}, name: ${name}, types: ${types}]';
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index 0f9897f..2cf8fd8 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -1731,7 +1731,7 @@
gen.writeln();
gen.writeStatement(
- 'operator==(other) => other is ${name} && id == other.id;');
+ 'bool operator ==(Object other) => other is ${name} && id == other.id;');
gen.writeln();
}
diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart
index 321b125..b9ef51f 100644
--- a/pkg/vm_service/tool/generate.dart
+++ b/pkg/vm_service/tool/generate.dart
@@ -16,7 +16,7 @@
/// Parse the 'service.md' into a model and generate both Dart and Java
/// libraries.
-main(List<String> args) async {
+void main(List<String> args) async {
String appDirPath = dirname(Platform.script.toFilePath());
// Parse service.md into a model.
@@ -36,7 +36,7 @@
await _generateAsserts(appDirPath, nodes);
}
-_generateDart(String appDirPath, List<Node> nodes) async {
+Future _generateDart(String appDirPath, List<Node> nodes) async {
var outDirPath = normalize(join(appDirPath, '..', 'lib/src'));
var outDir = Directory(outDirPath);
if (!outDir.existsSync()) outDir.createSync(recursive: true);
@@ -64,7 +64,7 @@
print('Wrote Dart to ${outputFile.path}.');
}
-_generateJava(String appDirPath, List<Node> nodes) async {
+Future _generateJava(String appDirPath, List<Node> nodes) async {
var srcDirPath = normalize(join(appDirPath, '..', 'java', 'src'));
var generator = java.JavaGenerator(srcDirPath);
java.api = java.Api();
@@ -93,7 +93,7 @@
print('Wrote Java to $srcDirPath.');
}
-_generateAsserts(String appDirPath, List<Node> nodes) async {
+Future _generateAsserts(String appDirPath, List<Node> nodes) async {
var outDirPath = normalize(join(appDirPath, '..', 'example'));
var outDir = Directory(outDirPath);
if (!outDir.existsSync()) outDir.createSync(recursive: true);
diff --git a/pkg/vm_service/tool/java/generate_java.dart b/pkg/vm_service/tool/java/generate_java.dart
index e70b0a0..9ef243d 100644
--- a/pkg/vm_service/tool/java/generate_java.dart
+++ b/pkg/vm_service/tool/java/generate_java.dart
@@ -549,14 +549,6 @@
}
void generateVmServiceMethod(TypeWriter writer, {includeOptional = false}) {
- // TODO(danrubel) move this to the Consumer's javadoc
-// String javadoc = docs == null ? '' : docs;
-// if (returnType.isMultipleReturns) {
-// javadoc += '\n\nThe return value can be one of '
-// '${joinLast(returnType.types.map((t) => '[${t}]'), ', ', ' or ')}.';
-// javadoc = javadoc.trim();
-// }
-
// Update method docs
var javadoc = StringBuffer(docs == null ? '' : docs!);
bool firstParamDoc = true;
@@ -594,18 +586,23 @@
writer.addLine('final JsonObject params = new JsonObject();');
for (MethodArg arg in args) {
if (!includeOptional && arg.optional) continue;
- var name = arg.name;
- String op = arg.optional ? 'if (${name} != null) ' : '';
+ var argName = arg.name;
+ String op = arg.optional ? 'if (${argName} != null) ' : '';
if (arg.isEnumType) {
- writer.addLine('${op}params.addProperty("$name", $name.name());');
+ writer
+ .addLine('${op}params.addProperty("$argName", $argName.name());');
} else if (arg.type.name == 'Map') {
writer.addLine(
- '${op}params.add("$name", convertMapToJsonObject($name));');
+ '${op}params.add("$argName", convertMapToJsonObject($argName));');
} else if (arg.type.arrayDepth > 0) {
writer.addLine(
- '${op}params.add("$name", convertIterableToJsonArray($name));');
+ '${op}params.add("$argName", convertIterableToJsonArray($argName));');
+ } else if (name.startsWith('evaluate') && argName == 'expression') {
+ // Special case the eval expression parameters.
+ writer.addLine(
+ '${op}params.addProperty("$argName", removeNewLines($argName));');
} else {
- writer.addLine('${op}params.addProperty("$name", $name);');
+ writer.addLine('${op}params.addProperty("$argName", $argName);');
}
}
writer.addLine('request("$name", params, consumer);');
@@ -626,7 +623,7 @@
MethodArg(this.parent, this.type, this.name);
- get asJavaMethodArg {
+ JavaMethodArg get asJavaMethodArg {
if (optional && type.ref == 'int') {
return JavaMethodArg(name, 'Integer');
}
@@ -768,7 +765,7 @@
bool get isSimple => simpleTypes.contains(name);
- get jsonTypeName {
+ String? get jsonTypeName {
if (name == 'ClassObj') return 'Class';
if (name == 'ErrorObj') return 'Error';
return name;
diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
index b3bc9a9..3567d21 100644
--- a/runtime/bin/process_win.cc
+++ b/runtime/bin/process_win.cc
@@ -96,7 +96,7 @@
MutexLocker locker(mutex_);
HANDLE wait_handle = INVALID_HANDLE_VALUE;
BOOL success = RegisterWaitForSingleObject(
- &wait_handle, handle, &ExitCodeCallback, reinterpret_cast<void*>(pid),
+ &wait_handle, handle, &ExitCodeCallback, reinterpret_cast<PVOID>(pid),
INFINITE, WT_EXECUTEONLYONCE);
if (!success) {
FATAL("Failed to register exit code wait operation.");
@@ -151,7 +151,7 @@
if (timed_out) {
return;
}
- DWORD pid = reinterpret_cast<DWORD>(data);
+ DWORD pid = reinterpret_cast<UINT_PTR>(data);
HANDLE handle;
HANDLE wait_handle;
HANDLE exit_pipe;
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index e15ff53..922ad2b 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -283,15 +283,18 @@
GET_NON_NULL_NATIVE_ARGUMENT(Instance, obj, arguments->NativeArgAt(1));
Object& validated_result = Object::Handle(zone);
- Object& msg_obj = Object::Handle(zone, obj.ptr());
+ const Object& msg_obj = Object::Handle(zone, obj.ptr());
validated_result = ValidateMessageObject(zone, isolate, msg_obj);
+ // msg_array = [<message>, <object-in-message-to-rehash>]
+ const Array& msg_array = Array::Handle(zone, Array::New(2));
+ msg_array.SetAt(0, msg_obj);
if (validated_result.IsUnhandledException()) {
Exceptions::PropagateError(Error::Cast(validated_result));
UNREACHABLE();
}
PersistentHandle* handle =
isolate->group()->api_state()->AllocatePersistentHandle();
- handle->set_ptr(msg_obj);
+ handle->set_ptr(msg_array);
isolate->bequeath(std::unique_ptr<Bequest>(new Bequest(handle, port.Id())));
// TODO(aam): Ensure there are no dart api calls after this point as we want
// to ensure that validated message won't get tampered with.
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm.cc b/runtime/vm/compiler/asm_intrinsifier_arm.cc
index 134a71d..f41c51d 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm.cc
@@ -1272,19 +1272,15 @@
// Compares cid1 and cid2 to see if they're syntactically equivalent. If this
// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
static void EquivalentClassIds(Assembler* assembler,
Label* normal_ir_body,
Label* equal,
Label* not_equal,
Register cid1,
Register cid2,
- Register scratch,
- bool testing_instance_cids) {
- Label different_cids, equal_cids_but_generic, not_integer,
- not_integer_or_string;
+ Register scratch) {
+ Label different_cids, not_integer, not_integer_or_string;
// Check if left hand side is a closure. Closures are handled in the runtime.
__ CompareImmediate(cid1, kClosureCid);
@@ -1300,13 +1296,10 @@
// Check if there are no type arguments. In this case we can return true.
// Otherwise fall through into the runtime to handle comparison.
__ LoadClassById(scratch, cid1);
- __ ldr(
- scratch,
- FieldAddress(
- scratch,
- target::Class::host_type_arguments_field_offset_in_words_offset()));
- __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
- __ b(&equal_cids_but_generic, NE);
+ __ ldrh(scratch,
+ FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+ __ CompareImmediate(scratch, 0);
+ __ b(normal_ir_body, NE);
__ b(equal);
// Class ids are different. Check if we are comparing two string types (with
@@ -1325,50 +1318,35 @@
__ Bind(¬_integer);
// Check if both are String types.
- JumpIfNotString(assembler, cid1, scratch,
- testing_instance_cids ? ¬_integer_or_string : not_equal);
+ JumpIfNotString(assembler, cid1, scratch, ¬_integer_or_string);
// First type is String. Check if the second is a string too.
JumpIfString(assembler, cid2, scratch, equal);
// String types are only equivalent to other String types.
__ b(not_equal);
- if (testing_instance_cids) {
- __ Bind(¬_integer_or_string);
- // Check if the first type is a Type. If it is not then types are not
- // equivalent because they have different class ids and they are not String
- // or integer or Type.
- JumpIfNotType(assembler, cid1, scratch, not_equal);
+ __ Bind(¬_integer_or_string);
+ // Check if the first type is a Type. If it is not then types are not
+ // equivalent because they have different class ids and they are not String
+ // or integer or Type.
+ JumpIfNotType(assembler, cid1, scratch, not_equal);
- // First type is a Type. Check if the second is a Type too.
- JumpIfType(assembler, cid2, scratch, equal);
- // Type types are only equivalent to other Type types.
- __ b(not_equal);
- }
-
- // The caller must compare the type arguments.
- __ Bind(&equal_cids_but_generic);
+ // First type is a Type. Check if the second is a Type too.
+ JumpIfType(assembler, cid2, scratch, equal);
+ // Type types are only equivalent to other Type types.
+ __ b(not_equal);
}
void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
Label* normal_ir_body) {
- __ ldm(IA, SP, (1 << R1 | 1 << R2));
- __ LoadClassIdMayBeSmi(R1, R1);
- __ LoadClassIdMayBeSmi(R2, R2);
+ __ ldr(R0, Address(SP, 0 * target::kWordSize));
+ __ LoadClassIdMayBeSmi(R1, R0);
+
+ __ ldr(R0, Address(SP, 1 * target::kWordSize));
+ __ LoadClassIdMayBeSmi(R2, R0);
Label equal, not_equal;
- EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, R1, R2, R0,
- /* testing_instance_cids = */ true);
-
- // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
- __ ldm(IA, SP, (1 << R1 | 1 << R2));
- __ AddImmediate(R1, -kHeapObjectTag);
- __ ldr(R1, Address(R1, R0, LSL, target::kWordSizeLog2));
- __ AddImmediate(R2, -kHeapObjectTag);
- __ ldr(R2, Address(R2, R0, LSL, target::kWordSizeLog2));
- __ cmp(R1, Operand(R2));
- __ b(¬_equal, NE);
- // Fall through to equal case if type arguments are equal.
+ EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, R1, R2, R0);
__ Bind(&equal);
__ LoadObject(R0, CastHandle<Object>(TrueObject()));
@@ -1418,16 +1396,8 @@
__ SmiUntag(R3);
__ ldr(R4, FieldAddress(R2, target::Type::type_class_id_offset()));
__ SmiUntag(R4);
- // We are not testing instance cids, but type class cids of Type instances.
EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, ¬_equal, R3, R4,
- R0, /* testing_instance_cids = */ false);
-
- // Compare type arguments in Type instances.
- __ ldr(R3, FieldAddress(R1, target::Type::arguments_offset()));
- __ ldr(R4, FieldAddress(R2, target::Type::arguments_offset()));
- __ cmp(R3, Operand(R4));
- __ b(normal_ir_body, NE);
- // Fall through to check nullability if type arguments are equal.
+ R0);
// Check nullability.
__ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_arm64.cc b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
index 04718ce..5749365 100644
--- a/runtime/vm/compiler/asm_intrinsifier_arm64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_arm64.cc
@@ -1418,19 +1418,15 @@
// Compares cid1 and cid2 to see if they're syntactically equivalent. If this
// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
static void EquivalentClassIds(Assembler* assembler,
Label* normal_ir_body,
Label* equal,
Label* not_equal,
Register cid1,
Register cid2,
- Register scratch,
- bool testing_instance_cids) {
- Label different_cids, equal_cids_but_generic, not_integer,
- not_integer_or_string;
+ Register scratch) {
+ Label different_cids, not_integer, not_integer_or_string;
// Check if left hand side is a closure. Closures are handled in the runtime.
__ CompareImmediate(cid1, kClosureCid);
@@ -1447,12 +1443,10 @@
// Otherwise fall through into the runtime to handle comparison.
__ LoadClassById(scratch, cid1);
__ ldr(scratch,
- FieldAddress(
- scratch,
- target::Class::host_type_arguments_field_offset_in_words_offset()),
- kFourBytes);
- __ CompareImmediate(scratch, target::Class::kNoTypeArguments);
- __ b(&equal_cids_but_generic, NE);
+ FieldAddress(scratch, target::Class::num_type_arguments_offset(),
+ kTwoBytes),
+ kTwoBytes);
+ __ cbnz(normal_ir_body, scratch);
__ b(equal);
// Class ids are different. Check if we are comparing two string types (with
@@ -1471,50 +1465,35 @@
__ Bind(¬_integer);
// Check if both are String types.
- JumpIfNotString(assembler, cid1, scratch,
- testing_instance_cids ? ¬_integer_or_string : not_equal);
+ JumpIfNotString(assembler, cid1, scratch, ¬_integer_or_string);
// First type is String. Check if the second is a string too.
JumpIfString(assembler, cid2, scratch, equal);
// String types are only equivalent to other String types.
__ b(not_equal);
- if (testing_instance_cids) {
- __ Bind(¬_integer_or_string);
- // Check if the first type is a Type. If it is not then types are not
- // equivalent because they have different class ids and they are not String
- // or integer or Type.
- JumpIfNotType(assembler, cid1, scratch, not_equal);
+ __ Bind(¬_integer_or_string);
+ // Check if the first type is a Type. If it is not then types are not
+ // equivalent because they have different class ids and they are not String
+ // or integer or Type.
+ JumpIfNotType(assembler, cid1, scratch, not_equal);
- // First type is a Type. Check if the second is a Type too.
- JumpIfType(assembler, cid2, scratch, equal);
- // Type types are only equivalent to other Type types.
- __ b(not_equal);
- }
-
- // The caller must compare the type arguments.
- __ Bind(&equal_cids_but_generic);
+ // First type is a Type. Check if the second is a Type too.
+ JumpIfType(assembler, cid2, scratch, equal);
+ // Type types are only equivalent to other Type types.
+ __ b(not_equal);
}
void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
Label* normal_ir_body) {
- __ ldp(R0, R1, Address(SP, 0 * target::kWordSize, Address::PairOffset));
- __ LoadClassIdMayBeSmi(R2, R1);
+ __ ldr(R0, Address(SP, 0 * target::kWordSize));
__ LoadClassIdMayBeSmi(R1, R0);
- Label equal, not_equal;
- EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, R1, R2, R0,
- /* testing_instance_cids = */ true);
+ __ ldr(R0, Address(SP, 1 * target::kWordSize));
+ __ LoadClassIdMayBeSmi(R2, R0);
- // Compare type arguments, host_type_arguments_field_offset_in_words in R0.
- __ ldp(R1, R2, Address(SP, 0 * target::kWordSize, Address::PairOffset));
- __ AddImmediate(R1, -kHeapObjectTag);
- __ ldr(R1, Address(R1, R0, UXTX, Address::Scaled));
- __ AddImmediate(R2, -kHeapObjectTag);
- __ ldr(R2, Address(R2, R0, UXTX, Address::Scaled));
- __ CompareObjectRegisters(R1, R2);
- __ b(¬_equal, NE);
- // Fall through to equal case if type arguments are equal.
+ Label equal, not_equal;
+ EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, R1, R2, R0);
__ Bind(&equal);
__ LoadObject(R0, CastHandle<Object>(TrueObject()));
@@ -1570,16 +1549,8 @@
__ LoadCompressedSmi(R4,
FieldAddress(R2, target::Type::type_class_id_offset()));
__ SmiUntag(R4);
- // We are not testing instance cids, but type class cids of Type instances.
EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, ¬_equal, R3, R4,
- R0, /* testing_instance_cids = */ false);
-
- // Compare type arguments in Type instances.
- __ LoadCompressed(R3, FieldAddress(R1, target::Type::arguments_offset()));
- __ LoadCompressed(R4, FieldAddress(R2, target::Type::arguments_offset()));
- __ CompareObjectRegisters(R3, R4);
- __ b(normal_ir_body, NE);
- // Fall through to check nullability if type arguments are equal.
+ R0);
// Check nullability.
__ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_ia32.cc b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
index f1cf3ac..5909eab 100644
--- a/runtime/vm/compiler/asm_intrinsifier_ia32.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_ia32.cc
@@ -1358,19 +1358,15 @@
// Compares cid1 and cid2 to see if they're syntactically equivalent. If this
// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
static void EquivalentClassIds(Assembler* assembler,
Label* normal_ir_body,
Label* equal,
Label* not_equal,
Register cid1,
Register cid2,
- Register scratch,
- bool testing_instance_cids) {
- Label different_cids, equal_cids_but_generic, not_integer,
- not_integer_or_string;
+ Register scratch) {
+ Label different_cids, not_integer, not_integer_or_string;
// Check if left hand side is a closure. Closures are handled in the runtime.
__ cmpl(cid1, Immediate(kClosureCid));
@@ -1386,13 +1382,10 @@
// Check if there are no type arguments. In this case we can return true.
// Otherwise fall through into the runtime to handle comparison.
__ LoadClassById(scratch, cid1);
- __ movl(
- scratch,
- FieldAddress(
- scratch,
- target::Class::host_type_arguments_field_offset_in_words_offset()));
- __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
- __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+ __ movzxw(scratch,
+ FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+ __ cmpl(scratch, Immediate(0));
+ __ j(NOT_EQUAL, normal_ir_body);
__ jmp(equal);
// Class ids are different. Check if we are comparing two string types (with
@@ -1412,29 +1405,23 @@
__ Bind(¬_integer);
// Check if both are String types.
- JumpIfNotString(assembler, cid1,
- testing_instance_cids ? ¬_integer_or_string : not_equal);
+ JumpIfNotString(assembler, cid1, ¬_integer_or_string);
// First type is a String. Check if the second is a String too.
JumpIfString(assembler, cid2, equal);
// String types are only equivalent to other String types.
__ jmp(not_equal);
- if (testing_instance_cids) {
- __ Bind(¬_integer_or_string);
- // Check if the first type is a Type. If it is not then types are not
- // equivalent because they have different class ids and they are not String
- // or integer or Type.
- JumpIfNotType(assembler, cid1, not_equal);
+ __ Bind(¬_integer_or_string);
+ // Check if the first type is a Type. If it is not then types are not
+ // equivalent because they have different class ids and they are not String
+ // or integer or Type.
+ JumpIfNotType(assembler, cid1, not_equal);
- // First type is a Type. Check if the second is a Type too.
- JumpIfType(assembler, cid2, equal);
- // Type types are only equivalent to other Type types.
- __ jmp(not_equal);
- }
-
- // The caller must compare the type arguments.
- __ Bind(&equal_cids_but_generic);
+ // First type is a Type. Check if the second is a Type too.
+ JumpIfType(assembler, cid2, equal);
+ // Type types are only equivalent to other Type types.
+ __ jmp(not_equal);
}
void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1447,16 +1434,7 @@
Label equal, not_equal;
EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, EDI, EBX,
- EAX, /* testing_instance_cids = */ true);
-
- // Compare type arguments, host_type_arguments_field_offset_in_words in EAX.
- __ movl(EDI, Address(ESP, +1 * target::kWordSize));
- __ movl(EBX, Address(ESP, +2 * target::kWordSize));
- __ movl(EDI, FieldAddress(EDI, EAX, TIMES_4, 0));
- __ movl(EBX, FieldAddress(EBX, EAX, TIMES_4, 0));
- __ cmpl(EDI, EBX);
- __ j(NOT_EQUAL, ¬_equal, Assembler::kNearJump);
- // Fall through to equal case if type arguments are equal.
+ EAX);
__ Bind(&equal);
__ LoadObject(EAX, CastHandle<Object>(TrueObject()));
@@ -1511,16 +1489,8 @@
__ SmiUntag(ECX);
__ movl(EDX, FieldAddress(EBX, target::Type::type_class_id_offset()));
__ SmiUntag(EDX);
- // We are not testing instance cids, but type class cids of Type instances.
EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, ¬_equal, ECX,
- EDX, EAX, /* testing_instance_cids = */ false);
-
- // Compare type arguments in Type instances.
- __ movl(ECX, FieldAddress(EDI, target::Type::arguments_offset()));
- __ movl(EDX, FieldAddress(EBX, target::Type::arguments_offset()));
- __ cmpl(ECX, EDX);
- __ j(NOT_EQUAL, normal_ir_body, Assembler::kNearJump);
- // Fall through to check nullability if type arguments are equal.
+ EDX, EAX);
// Check nullability.
__ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/asm_intrinsifier_x64.cc b/runtime/vm/compiler/asm_intrinsifier_x64.cc
index d13388a..f691931 100644
--- a/runtime/vm/compiler/asm_intrinsifier_x64.cc
+++ b/runtime/vm/compiler/asm_intrinsifier_x64.cc
@@ -1262,19 +1262,15 @@
// Compares cid1 and cid2 to see if they're syntactically equivalent. If this
// can be determined by this fast path, it jumps to either equal or not_equal,
-// if equal but belonging to a generic class, it falls through with the scratch
-// register containing host_type_arguments_field_offset_in_words,
-// otherwise it jumps to normal_ir_body. May clobber scratch.
+// otherwise it jumps to normal_ir_body. May clobber cid1, cid2, and scratch.
static void EquivalentClassIds(Assembler* assembler,
Label* normal_ir_body,
Label* equal,
Label* not_equal,
Register cid1,
Register cid2,
- Register scratch,
- bool testing_instance_cids) {
- Label different_cids, equal_cids_but_generic, not_integer,
- not_integer_or_string;
+ Register scratch) {
+ Label different_cids, not_integer, not_integer_or_string;
// Check if left hand side is a closure. Closures are handled in the runtime.
__ cmpq(cid1, Immediate(kClosureCid));
@@ -1290,13 +1286,10 @@
// Check if there are no type arguments. In this case we can return true.
// Otherwise fall through into the runtime to handle comparison.
__ LoadClassById(scratch, cid1);
- __ movl(
- scratch,
- FieldAddress(
- scratch,
- target::Class::host_type_arguments_field_offset_in_words_offset()));
- __ cmpl(scratch, Immediate(target::Class::kNoTypeArguments));
- __ j(NOT_EQUAL, &equal_cids_but_generic, Assembler::kNearJump);
+ __ movzxw(scratch,
+ FieldAddress(scratch, target::Class::num_type_arguments_offset()));
+ __ cmpq(scratch, Immediate(0));
+ __ j(NOT_EQUAL, normal_ir_body);
__ jmp(equal);
// Class ids are different. Check if we are comparing two string types (with
@@ -1316,29 +1309,23 @@
__ Bind(¬_integer);
// Check if both are String types.
- JumpIfNotString(assembler, cid1,
- testing_instance_cids ? ¬_integer_or_string : not_equal);
+ JumpIfNotString(assembler, cid1, ¬_integer_or_string);
// First type is a String. Check if the second is a String too.
JumpIfString(assembler, cid2, equal);
// String types are only equivalent to other String types.
__ jmp(not_equal);
- if (testing_instance_cids) {
- __ Bind(¬_integer_or_string);
- // Check if the first type is a Type. If it is not then types are not
- // equivalent because they have different class ids and they are not String
- // or integer or Type.
- JumpIfNotType(assembler, cid1, not_equal);
+ __ Bind(¬_integer_or_string);
+ // Check if the first type is a Type. If it is not then types are not
+ // equivalent because they have different class ids and they are not String
+ // or integer or Type.
+ JumpIfNotType(assembler, cid1, not_equal);
- // First type is a Type. Check if the second is a Type too.
- JumpIfType(assembler, cid2, equal);
- // Type types are only equivalent to other Type types.
- __ jmp(not_equal);
- }
-
- // The caller must compare the type arguments.
- __ Bind(&equal_cids_but_generic);
+ // First type is a Type. Check if the second is a Type too.
+ JumpIfType(assembler, cid2, equal);
+ // Type types are only equivalent to other Type types.
+ __ jmp(not_equal);
}
void AsmIntrinsifier::ObjectHaveSameRuntimeType(Assembler* assembler,
@@ -1351,16 +1338,7 @@
Label equal, not_equal;
EquivalentClassIds(assembler, normal_ir_body, &equal, ¬_equal, RCX, RDX,
- RAX, /* testing_instance_cids = */ true);
-
- // Compare type arguments, host_type_arguments_field_offset_in_words in RAX.
- __ movq(RCX, Address(RSP, +1 * target::kWordSize));
- __ movq(RDX, Address(RSP, +2 * target::kWordSize));
- __ movq(RCX, FieldAddress(RCX, RAX, TIMES_8, 0));
- __ movq(RDX, FieldAddress(RDX, RAX, TIMES_8, 0));
- __ cmpq(RCX, RDX);
- __ j(NOT_EQUAL, ¬_equal, Assembler::kNearJump);
- // Fall through to equal case if type arguments are equal.
+ RAX);
__ Bind(&equal);
__ LoadObject(RAX, CastHandle<Object>(TrueObject()));
@@ -1421,16 +1399,8 @@
__ LoadCompressedSmi(RSI,
FieldAddress(RDX, target::Type::type_class_id_offset()));
__ SmiUntag(RSI);
- // We are not testing instance cids, but type class cids of Type instances.
EquivalentClassIds(assembler, normal_ir_body, &equiv_cids, ¬_equal, RDI,
- RSI, RAX, /* testing_instance_cids = */ false);
-
- // Compare type arguments in Type instances.
- __ LoadCompressed(RDI, FieldAddress(RCX, target::Type::arguments_offset()));
- __ LoadCompressed(RSI, FieldAddress(RDX, target::Type::arguments_offset()));
- __ cmpq(RDI, RSI);
- __ j(NOT_EQUAL, normal_ir_body, Assembler::kNearJump);
- // Fall through to check nullability if type arguments are equal.
+ RSI, RAX);
// Check nullability.
__ Bind(&equiv_cids);
diff --git a/runtime/vm/compiler/backend/code_statistics.cc b/runtime/vm/compiler/backend/code_statistics.cc
index f18339c..3a0621b 100644
--- a/runtime/vm/compiler/backend/code_statistics.cc
+++ b/runtime/vm/compiler/backend/code_statistics.cc
@@ -175,7 +175,6 @@
}
void CodeStatistics::AppendTo(CombinedCodeStatistics* stat) {
- intptr_t sum = 0;
bool returns_constant = true;
bool returns_const_with_load_field_ = true;
@@ -183,7 +182,6 @@
intptr_t bytes = entries_[i].bytes;
stat->entries_[i].count += entries_[i].count;
if (bytes > 0) {
- sum += bytes;
stat->entries_[i].bytes += bytes;
if (i != CombinedCodeStatistics::kTagParallelMove &&
i != CombinedCodeStatistics::kTagReturn &&
diff --git a/runtime/vm/constants_arm.h b/runtime/vm/constants_arm.h
index 8130b72..620199b 100644
--- a/runtime/vm/constants_arm.h
+++ b/runtime/vm/constants_arm.h
@@ -1113,6 +1113,10 @@
return !(r == lr);
}
+inline Register ConcreteRegister(LinkRegister) {
+ return LR;
+}
+
#undef LR
#define LINK_REGISTER (LinkRegister())
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index 0b5b142..ab868b4 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -845,4 +845,24 @@
return result.ptr();
}
+ObjectPtr DartLibraryCalls::RehashObjects(
+ Thread* thread,
+ const Object& array_or_growable_array) {
+ ASSERT(array_or_growable_array.IsArray() ||
+ array_or_growable_array.IsGrowableObjectArray());
+
+ auto zone = thread->zone();
+ const Library& collections_lib =
+ Library::Handle(zone, Library::CollectionLibrary());
+ const Function& rehashing_function = Function::Handle(
+ zone,
+ collections_lib.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
+ ASSERT(!rehashing_function.IsNull());
+
+ const Array& arguments = Array::Handle(zone, Array::New(1));
+ arguments.SetAt(0, array_or_growable_array);
+
+ return DartEntry::InvokeFunction(rehashing_function, arguments);
+}
+
} // namespace dart
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 13d10fa..5f868bd 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -303,6 +303,10 @@
// _startMicrotaskLoop from dart:async.
// Returns null on success, an ErrorPtr on failure.
static ObjectPtr EnsureScheduleImmediate();
+
+ // Runs the `_rehashObjects()` function.
+ static ObjectPtr RehashObjects(Thread* thread,
+ const Object& array_or_growable_array);
};
} // namespace dart
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 0f18a47..8f0ed32 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1331,8 +1331,7 @@
TypeParameters& type_params = TypeParameters::Handle();
Function& current = Function::Handle(function().ptr());
intptr_t mapping_offset = num_vars;
- for (intptr_t i = 0; !current.IsNull(); i += current.NumTypeParameters(),
- current = current.parent_function()) {
+ for (; !current.IsNull(); current = current.parent_function()) {
type_params = current.type_parameters();
if (type_params.IsNull()) continue;
intptr_t size = current.NumTypeParameters();
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index ab90490..0db0a6d 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -9,6 +9,7 @@
#include "vm/dwarf.h"
#include "vm/hash_map.h"
#include "vm/image_snapshot.h"
+#include "vm/stack_frame.h"
#include "vm/thread.h"
#include "vm/zone_text_buffer.h"
@@ -564,6 +565,11 @@
ASSERT(index < text_.length());
return text_.buffer() + index;
}
+
+ static const intptr_t kNotIndexed = CStringIntMapKeyValueTrait::kNoValue;
+
+ // Returns the index of |str| if it is present in the string table
+ // and |kNotIndexed| otherwise.
intptr_t Lookup(const char* str) const {
return text_indices_.LookupValue(str);
}
@@ -1208,6 +1214,126 @@
return nullptr;
}
+void Elf::FinalizeEhFrame() {
+#if defined(DART_PRECOMPILER) && \
+ (defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64))
+ // Multiplier which will be used to scale operands of DW_CFA_offset and
+ // DW_CFA_val_offset.
+ const intptr_t kDataAlignment = kWordSize;
+
+ const uint8_t DW_CFA_offset = 0x80;
+ const uint8_t DW_CFA_val_offset = 0x14;
+ const uint8_t DW_CFA_def_cfa = 0x0c;
+
+ // Relocation from .eh_frame into bytes within some previously emitted
+ // section.
+ struct Reloc {
+ intptr_t target_memory_offset;
+ intptr_t source_offset;
+ };
+
+ GrowableArray<Reloc> relocs(2);
+ ZoneWriteStream stream(zone(), kInitialDwarfBufferSize);
+ DwarfElfStream dwarf_stream(zone_, &stream, /*symtab=*/nullptr);
+
+ // Emits length prefixed CIE or FDE, returns starting offset.
+ auto emit_record = [&](auto&& body) -> intptr_t {
+ const intptr_t start = stream.Position();
+ stream.WriteFixed<uint32_t>(0);
+ body();
+ stream.Align(kWordSize);
+ const intptr_t end = stream.Position();
+ stream.SetPosition(start);
+ // Write length not counting the length field itself.
+ stream.WriteFixed(static_cast<uint32_t>(end - start - 4));
+ stream.SetPosition(end);
+ return start;
+ };
+
+ // Emit pcrel|sdata4 reference to the target memory offset.
+ auto add_pcrel_ref = [&](intptr_t target_memory_offset) {
+ relocs.Add({target_memory_offset, stream.Position()});
+ dwarf_stream.u4(0);
+ };
+
+ // Emit CIE.
+ const intptr_t cie_position = emit_record([&]() {
+ dwarf_stream.u4(0); // CIE
+ dwarf_stream.u1(1); // Version (must be 1 or 3)
+ // Augmentation String
+ dwarf_stream.string("zR"); // NOLINT
+ dwarf_stream.uleb128(1); // Code alignment (must be 1).
+ dwarf_stream.sleb128(kDataAlignment); // Data alignment
+ dwarf_stream.u1(
+ ConcreteRegister(LINK_REGISTER)); // Return address register
+ dwarf_stream.uleb128(1); // Augmentation size
+ dwarf_stream.u1(0x1b); // FDE encoding: DW_EH_PE_pcrel | DW_EH_PE_sdata4
+ // CFA is FP+0
+ dwarf_stream.u1(DW_CFA_def_cfa);
+ dwarf_stream.uleb128(FP);
+ dwarf_stream.uleb128(0);
+ });
+
+ // Emit an FDE covering each .text section.
+ const auto text_name = shstrtab_->Lookup(".text");
+ ASSERT(text_name != StringTable::kNotIndexed);
+ for (auto section : sections_) {
+ if (section->name() == text_name) {
+ RELEASE_ASSERT(section->memory_offset_is_set());
+ emit_record([&]() {
+ // Offset to CIE. Note that unlike pcrel this offset is encoded
+ // backwards: it will be subtracted from the current position.
+ dwarf_stream.u4(stream.Position() - cie_position);
+ add_pcrel_ref(section->memory_offset()); // Start address.
+ dwarf_stream.u4(section->MemorySize()); // Size.
+ dwarf_stream.u1(0); // Augmentation Data length.
+
+ // FP at FP+kSavedCallerPcSlotFromFp*kWordSize
+ COMPILE_ASSERT(kSavedCallerFpSlotFromFp >= 0);
+ dwarf_stream.u1(DW_CFA_offset | FP);
+ dwarf_stream.uleb128(kSavedCallerFpSlotFromFp);
+
+ // LR at FP+kSavedCallerPcSlotFromFp*kWordSize
+ COMPILE_ASSERT(kSavedCallerPcSlotFromFp >= 0);
+ dwarf_stream.u1(DW_CFA_offset | ConcreteRegister(LINK_REGISTER));
+ dwarf_stream.uleb128(kSavedCallerPcSlotFromFp);
+
+ // SP is FP+kCallerSpSlotFromFp*kWordSize
+ COMPILE_ASSERT(kCallerSpSlotFromFp >= 0);
+ dwarf_stream.u1(DW_CFA_val_offset);
+#if defined(TARGET_ARCH_ARM64)
+ dwarf_stream.uleb128(ConcreteRegister(CSP));
+#elif defined(TARGET_ARCH_ARM)
+ dwarf_stream.uleb128(SP);
+#else
+#error "Unsupported .eh_frame architecture"
+#endif
+ dwarf_stream.uleb128(kCallerSpSlotFromFp);
+ });
+ }
+ }
+
+ dwarf_stream.u4(0); // end of section
+
+ // Add section and then relocate its contents.
+ auto const eh_frame = new (zone_) BitsContainer(
+ type_, false, false, stream.bytes_written(), stream.buffer());
+ AddSection(eh_frame, ".eh_frame");
+
+ // Relocate contents now that we have memory_offset assigned.
+ for (auto& reloc : relocs) {
+ const intptr_t pcrel_offset =
+ reloc.target_memory_offset -
+ (eh_frame->memory_offset() + reloc.source_offset);
+ // Note: IsInt<int32_t>(32, ...) does not work correctly.
+ RELEASE_ASSERT(kBitsPerWord == 32 || Utils::IsInt(32, pcrel_offset));
+ *reinterpret_cast<int32_t*>(stream.buffer() + reloc.source_offset) =
+ static_cast<int32_t>(pcrel_offset);
+ }
+#endif // defined(DART_PRECOMPILER) && \
+ // (defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64))
+}
+
void Elf::FinalizeDwarfSections() {
if (dwarf_ == nullptr) return;
#if defined(DART_PRECOMPILER)
@@ -1277,6 +1403,7 @@
}
AddSection(shstrtab_, ".shstrtab");
FinalizeDwarfSections();
+ FinalizeEhFrame();
// At this point, all non-programmatically calculated sections and segments
// have been added. Add any programatically calculated sections and segments
diff --git a/runtime/vm/elf.h b/runtime/vm/elf.h
index 9c7cbf5..91c8202b 100644
--- a/runtime/vm/elf.h
+++ b/runtime/vm/elf.h
@@ -109,6 +109,8 @@
void FinalizeProgramTable();
void ComputeFileOffsets();
+ void FinalizeEhFrame();
+
void WriteHeader(ElfWriteStream* stream);
void WriteSectionTable(ElfWriteStream* stream);
void WriteProgramTable(ElfWriteStream* stream);
diff --git a/runtime/vm/heap/compactor.cc b/runtime/vm/heap/compactor.cc
index 462a9d2..a4bd219 100644
--- a/runtime/vm/heap/compactor.cc
+++ b/runtime/vm/heap/compactor.cc
@@ -473,7 +473,6 @@
// 1. Compute bitvector of surviving allocation units in the block.
intptr_t block_live_size = 0;
- intptr_t block_dead_size = 0;
uword current = first_object;
while (current < block_end) {
ObjectPtr obj = UntaggedObject::FromAddr(current);
@@ -483,8 +482,6 @@
ASSERT(static_cast<intptr_t>(forwarding_block->Lookup(current)) ==
block_live_size);
block_live_size += size;
- } else {
- block_dead_size += size;
}
current += size;
}
diff --git a/runtime/vm/heap/freelist.cc b/runtime/vm/heap/freelist.cc
index edc9534..881e595 100644
--- a/runtime/vm/heap/freelist.cc
+++ b/runtime/vm/heap/freelist.cc
@@ -220,16 +220,12 @@
}
void FreeList::PrintSmall() const {
- int small_sizes = 0;
- int small_objects = 0;
intptr_t small_bytes = 0;
for (int i = 0; i < kNumLists; ++i) {
if (free_lists_[i] == NULL) {
continue;
}
- small_sizes += 1;
intptr_t list_length = LengthLocked(i);
- small_objects += list_length;
intptr_t list_bytes = list_length * i * kObjectAlignment;
small_bytes += list_bytes;
OS::PrintErr(
@@ -265,20 +261,16 @@
};
void FreeList::PrintLarge() const {
- int large_sizes = 0;
- int large_objects = 0;
intptr_t large_bytes = 0;
MallocDirectChainedHashMap<NumbersKeyValueTrait<IntptrPair> > map;
FreeListElement* node;
for (node = free_lists_[kNumLists]; node != NULL; node = node->next()) {
IntptrPair* pair = map.Lookup(node->HeapSize());
if (pair == NULL) {
- large_sizes += 1;
map.Insert(IntptrPair(node->HeapSize(), 1));
} else {
pair->set_second(pair->second() + 1);
}
- large_objects += 1;
}
MallocDirectChainedHashMap<NumbersKeyValueTrait<IntptrPair> >::Iterator it =
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index 3c174a1..ee48775 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -521,24 +521,23 @@
}
};
-class MergeIsolatesHeapsHandler : public MessageHandler {
+class SendAndExitMessagesHandler : public MessageHandler {
public:
- explicit MergeIsolatesHeapsHandler(Isolate* owner)
+ explicit SendAndExitMessagesHandler(Isolate* owner)
: msg_(Utils::CreateCStringUniquePtr(nullptr)), owner_(owner) {}
const char* name() const { return "merge-isolates-heaps-handler"; }
- ~MergeIsolatesHeapsHandler() { PortMap::ClosePorts(this); }
+ ~SendAndExitMessagesHandler() { PortMap::ClosePorts(this); }
MessageStatus HandleMessage(std::unique_ptr<Message> message) {
// Parse the message.
Object& response_obj = Object::Handle();
if (message->IsRaw()) {
response_obj = message->raw_obj();
- } else if (message->IsBequest()) {
- Bequest* bequest = message->bequest();
- PersistentHandle* handle = bequest->handle();
- // Object in the receiving isolate's heap.
+ } else if (message->IsPersistentHandle()) {
+ PersistentHandle* handle = message->persistent_handle();
+ // Object is in the receiving isolate's heap.
EXPECT(isolate()->group()->heap()->Contains(
UntaggedObject::ToAddr(handle->ptr())));
response_obj = handle->ptr();
@@ -582,7 +581,7 @@
Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
EXPECT_EQ(parent, Dart_CurrentIsolate());
{
- MergeIsolatesHeapsHandler handler(Isolate::Current());
+ SendAndExitMessagesHandler handler(Isolate::Current());
Dart_Port port_id = PortMap::CreatePort(&handler);
EXPECT_EQ(PortMap::GetIsolate(port_id), Isolate::Current());
Dart_ExitIsolate();
@@ -616,7 +615,7 @@
const char* TEST_MESSAGE = "hello, world";
Dart_Isolate parent = TestCase::CreateTestIsolate("parent");
EXPECT_EQ(parent, Dart_CurrentIsolate());
- MergeIsolatesHeapsHandler handler(Isolate::Current());
+ SendAndExitMessagesHandler handler(Isolate::Current());
Dart_Port port_id = PortMap::CreatePort(&handler);
EXPECT_EQ(PortMap::GetIsolate(port_id), Isolate::Current());
Dart_ExitIsolate();
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index eaffe44..8318801 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -1282,8 +1282,10 @@
assembly_stream_->WriteString(
".cfi_offset rip, 8\n"); // saved pc is *(CFA+8)
// saved sp is CFA+16
- // Should be ".cfi_value_offset rsp, 16", but requires gcc newer than late
- // 2016 and not supported by Android's libunwind.
+ // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+ // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+ // because DW_CFA_val_offset uses scaled operand and we don't know what
+ // data alignment factor will be choosen by the assembler when emitting CIE.
// DW_CFA_expression 0x10
// uleb128 register (rsp) 7 (DWARF register number)
// uleb128 size of operation 2
@@ -1300,19 +1302,36 @@
assembly_stream_->WriteString(
".cfi_offset x30, 8\n"); // saved pc is *(CFA+8)
// saved sp is CFA+16
- // Should be ".cfi_value_offset sp, 16", but requires gcc newer than late
- // 2016 and not supported by Android's libunwind.
+ // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+ // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+ // because DW_CFA_val_offset uses scaled operand and we don't know what
+ // data alignment factor will be choosen by the assembler when emitting CIE.
+#if defined(TARGET_OS_ANDROID)
+ // On Android libunwindstack has a bug (b/191113792): it does not push
+ // CFA value to the expression stack before evaluating expression given
+ // to DW_CFA_expression. We have to workaround this bug by manually pushing
+ // CFA (R11) to the stack using DW_OP_breg29 0.
+ // DW_CFA_expression 0x10
+ // uleb128 register (x31) 31
+ // uleb128 size of operation 4
+ // DW_OP_breg11 0x8d (0x70 + 29)
+ // sleb128 offset 0
+ // DW_OP_plus_uconst 0x23
+ // uleb128 addend 16
+ assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x8d, 0, 0x23, 16\n");
+#else
// DW_CFA_expression 0x10
// uleb128 register (x31) 31
// uleb128 size of operation 2
// DW_OP_plus_uconst 0x23
// uleb128 addend 16
assembly_stream_->WriteString(".cfi_escape 0x10, 31, 2, 0x23, 16\n");
+#endif
#elif defined(TARGET_ARCH_ARM)
#if defined(TARGET_OS_MACOS) || defined(TARGET_OS_MACOS_IOS)
COMPILE_ASSERT(FP == R7);
- assembly_stream_->WriteString(".cfi_def_cfa r7, 0\n"); // CFA is fp+j0
+ assembly_stream_->WriteString(".cfi_def_cfa r7, 0\n"); // CFA is fp+0
assembly_stream_->WriteString(".cfi_offset r7, 0\n"); // saved fp is *(CFA+0)
#else
COMPILE_ASSERT(FP == R11);
@@ -1322,14 +1341,31 @@
#endif
assembly_stream_->WriteString(".cfi_offset lr, 4\n"); // saved pc is *(CFA+4)
// saved sp is CFA+8
- // Should be ".cfi_value_offset sp, 8", but requires gcc newer than late
- // 2016 and not supported by Android's libunwind.
+ // Would prefer to use ".cfi_value_offset sp, 16", but this requires gcc
+ // newer than late 2016. Can't emit .cfi_value_offset using .cfi_scape
+ // because DW_CFA_val_offset uses scaled operand and we don't know what
+ // data alignment factor will be choosen by the assembler when emitting CIE.
+#if defined(TARGET_OS_ANDROID)
+ // On Android libunwindstack has a bug (b/191113792): it does not push
+ // CFA value to the expression stack before evaluating expression given
+ // to DW_CFA_expression. We have to workaround this bug by manually pushing
+ // CFA (R11) to the stack using DW_OP_breg11 0.
+ // DW_CFA_expression 0x10
+ // uleb128 register (sp) 13
+ // uleb128 size of operation 4
+ // DW_OP_breg11 0x7b (0x70 + 11)
+ // sleb128 offset 0
+ // DW_OP_plus_uconst 0x23
+ // uleb128 addend 8
+ assembly_stream_->WriteString(".cfi_escape 0x10, 31, 4, 0x7b, 0, 0x23, 16\n");
+#else
// DW_CFA_expression 0x10
// uleb128 register (sp) 13
// uleb128 size of operation 2
// DW_OP_plus_uconst 0x23
// uleb128 addend 8
assembly_stream_->WriteString(".cfi_escape 0x10, 13, 2, 0x23, 8\n");
+#endif
// libunwind on ARM may use .ARM.exidx instead of .debug_frame
#if !defined(TARGET_OS_MACOS) && !defined(TARGET_OS_MACOS_IOS)
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 234a43a..cb00d29 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -881,6 +881,10 @@
}
Bequest::~Bequest() {
+ if (handle_ == nullptr) {
+ return;
+ }
+
IsolateGroup* isolate_group = IsolateGroup::Current();
CHECK_ISOLATE_GROUP(isolate_group);
NoSafepointScope no_safepoint_scope;
@@ -1345,11 +1349,19 @@
msg_obj = message->raw_obj();
// We should only be sending RawObjects that can be converted to CObjects.
ASSERT(ApiObjectConverter::CanConvert(msg_obj.ptr()));
- } else if (message->IsBequest()) {
- Bequest* bequest = message->bequest();
- PersistentHandle* handle = bequest->handle();
- const Object& obj = Object::Handle(zone, handle->ptr());
- msg_obj = obj.ptr();
+ } else if (message->IsPersistentHandle()) {
+ // msg_array = [<message>, <object-in-message-to-rehash>]
+ const auto& msg_array = Array::Handle(
+ zone, Array::RawCast(message->persistent_handle()->ptr()));
+ msg_obj = msg_array.At(0);
+ if (msg_array.At(1) != Object::null()) {
+ const auto& objects_to_rehash = Object::Handle(zone, msg_array.At(1));
+ const auto& result = Object::Handle(
+ zone, DartLibraryCalls::RehashObjects(thread, objects_to_rehash));
+ if (result.ptr() != Object::null()) {
+ msg_obj = result.ptr();
+ }
+ }
} else {
MessageSnapshotReader reader(message.get(), thread);
msg_obj = reader.ReadObject();
@@ -2505,8 +2517,10 @@
// This ensures that exit message comes last.
if (bequest_.get() != nullptr) {
auto beneficiary = bequest_->beneficiary();
- PortMap::PostMessage(Message::New(beneficiary, bequest_.release(),
- Message::kNormalPriority));
+ auto handle = bequest_->TakeHandle();
+ PortMap::PostMessage(
+ Message::New(beneficiary, handle, Message::kNormalPriority));
+ bequest_.reset();
}
LowLevelShutdown();
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 69dc7bc..c17a81d 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -956,6 +956,11 @@
~Bequest();
PersistentHandle* handle() { return handle_; }
+ PersistentHandle* TakeHandle() {
+ auto handle = handle_;
+ handle_ = nullptr;
+ return handle;
+ }
Dart_Port beneficiary() { return beneficiary_; }
private:
diff --git a/runtime/vm/message.cc b/runtime/vm/message.cc
index e533e32..e4430e6 100644
--- a/runtime/vm/message.cc
+++ b/runtime/vm/message.cc
@@ -6,6 +6,7 @@
#include <utility>
+#include "vm/dart_api_state.h"
#include "vm/dart_entry.h"
#include "vm/json_stream.h"
#include "vm/object.h"
@@ -21,8 +22,7 @@
MessageFinalizableData* finalizable_data,
Priority priority,
Dart_Port delivery_failure_port)
- : next_(NULL),
- dest_port_(dest_port),
+ : dest_port_(dest_port),
delivery_failure_port_(delivery_failure_port),
payload_(snapshot),
snapshot_length_(snapshot_length),
@@ -37,12 +37,9 @@
ObjectPtr raw_obj,
Priority priority,
Dart_Port delivery_failure_port)
- : next_(NULL),
- dest_port_(dest_port),
+ : dest_port_(dest_port),
delivery_failure_port_(delivery_failure_port),
payload_(raw_obj),
- snapshot_length_(0),
- finalizable_data_(NULL),
priority_(priority) {
ASSERT(!raw_obj->IsHeapObject() || raw_obj->untag()->InVMIsolateHeap());
ASSERT((priority == kNormalPriority) ||
@@ -51,19 +48,17 @@
}
Message::Message(Dart_Port dest_port,
- Bequest* bequest,
+ PersistentHandle* handle,
Priority priority,
Dart_Port delivery_failure_port)
- : next_(nullptr),
- dest_port_(dest_port),
+ : dest_port_(dest_port),
delivery_failure_port_(delivery_failure_port),
- payload_(bequest),
- snapshot_length_(-1),
- finalizable_data_(nullptr),
+ payload_(handle),
+ snapshot_length_(kPersistentHandleSnapshotLen),
priority_(priority) {
ASSERT((priority == kNormalPriority) ||
(delivery_failure_port == kIllegalPort));
- ASSERT(IsBequest());
+ ASSERT(IsPersistentHandle());
}
Message::~Message() {
@@ -72,8 +67,10 @@
free(payload_.snapshot_);
}
delete finalizable_data_;
- if (IsBequest()) {
- delete (payload_.bequest_);
+ if (IsPersistentHandle()) {
+ auto isolate_group = IsolateGroup::Current();
+ isolate_group->api_state()->FreePersistentHandle(
+ payload_.persistent_handle_);
}
}
diff --git a/runtime/vm/message.h b/runtime/vm/message.h
index f6f0b02..bbdf5f9 100644
--- a/runtime/vm/message.h
+++ b/runtime/vm/message.h
@@ -19,7 +19,6 @@
namespace dart {
-class Bequest;
class JSONStream;
class PersistentHandle;
class OldPage;
@@ -68,7 +67,7 @@
Dart_Port delivery_failure_port = kIllegalPort);
Message(Dart_Port dest_port,
- Bequest* bequest,
+ PersistentHandle* handle,
Priority priority,
Dart_Port delivery_failure_port = kIllegalPort);
@@ -101,9 +100,9 @@
ASSERT(IsRaw());
return payload_.raw_obj_;
}
- Bequest* bequest() const {
- ASSERT(IsBequest());
- return payload_.bequest_;
+ PersistentHandle* persistent_handle() const {
+ ASSERT(IsPersistentHandle());
+ return payload_.persistent_handle_;
}
Priority priority() const { return priority_; }
@@ -111,11 +110,14 @@
// of at the top of the message loop. Control messages from dart:isolate or
// vm-service requests.
bool IsOOB() const { return priority_ == Message::kOOBPriority; }
- bool IsSnapshot() const { return !IsRaw() && !IsBequest(); }
+ bool IsSnapshot() const { return !IsRaw() && !IsPersistentHandle(); }
// A message whose object is an immortal object from the vm-isolate's heap.
bool IsRaw() const { return snapshot_length_ == 0; }
- // A message sent from sendAndExit.
- bool IsBequest() const { return snapshot_length_ == -1; }
+ // A message sent from SendPort.send or SendPort.sendAndExit where sender and
+ // receiver are in the same isolate group.
+ bool IsPersistentHandle() const {
+ return snapshot_length_ == kPersistentHandleSnapshotLen;
+ }
bool RedirectToDeliveryFailurePort();
@@ -130,22 +132,25 @@
static const char* PriorityAsString(Priority priority);
private:
+ static intptr_t const kPersistentHandleSnapshotLen = -1;
+
friend class MessageQueue;
- Message* next_;
+ Message* next_ = nullptr;
Dart_Port dest_port_;
Dart_Port delivery_failure_port_;
union Payload {
Payload(uint8_t* snapshot) : snapshot_(snapshot) {}
Payload(ObjectPtr raw_obj) : raw_obj_(raw_obj) {}
- Payload(Bequest* bequest) : bequest_(bequest) {}
+ Payload(PersistentHandle* persistent_handle)
+ : persistent_handle_(persistent_handle) {}
uint8_t* snapshot_;
ObjectPtr raw_obj_;
- Bequest* bequest_;
+ PersistentHandle* persistent_handle_;
} payload_;
- intptr_t snapshot_length_;
- MessageFinalizableData* finalizable_data_;
+ intptr_t snapshot_length_ = 0;
+ MessageFinalizableData* finalizable_data_ = nullptr;
Priority priority_;
DISALLOW_COPY_AND_ASSIGN(Message);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 2979b4c..07f8188 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -313,7 +313,6 @@
printer.Clear();
intptr_t start = 0;
- intptr_t final_len = 0;
intptr_t len = sum_segment_len;
bool is_setter = false;
if (is_extension) {
@@ -323,7 +322,6 @@
intptr_t slen = i + 1;
intptr_t plen = slen - start;
AppendSubString(&printer, unmangled_name, start, plen);
- final_len = plen;
unmangled_name += slen;
len -= slen;
break;
@@ -379,13 +377,11 @@
intptr_t end = ((dot_pos + 1) == len) ? dot_pos : len;
intptr_t substr_len = end - start;
- final_len += substr_len;
AppendSubString(&printer, unmangled_name, start, substr_len);
if (is_setter) {
const char* equals = Symbols::Equals().ToCString();
const intptr_t equals_len = strlen(equals);
AppendSubString(&printer, equals, 0, equals_len);
- final_len += equals_len;
}
return printer.buffer();
@@ -7090,7 +7086,11 @@
}
uword Function::Hash() const {
- return String::HashRawSymbol(name());
+ const uword hash = String::HashRawSymbol(name());
+ if (untag()->owner()->IsClass()) {
+ return hash ^ Class::RawCast(untag()->owner())->untag()->id();
+ }
+ return hash;
}
bool Function::HasBreakpoint() const {
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 1d5cfa6..3620f18 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -110,33 +110,36 @@
object##Ptr ptr() const { return static_cast<object##Ptr>(ptr_); } \
bool Is##object() const { return true; } \
DART_NOINLINE static object& Handle() { \
- return HandleImpl(Thread::Current()->zone(), object::null()); \
+ return static_cast<object&>( \
+ HandleImpl(Thread::Current()->zone(), object::null(), kClassId)); \
} \
DART_NOINLINE static object& Handle(Zone* zone) { \
- return HandleImpl(zone, object::null()); \
+ return static_cast<object&>(HandleImpl(zone, object::null(), kClassId)); \
} \
DART_NOINLINE static object& Handle(object##Ptr ptr) { \
- return HandleImpl(Thread::Current()->zone(), ptr); \
+ return static_cast<object&>( \
+ HandleImpl(Thread::Current()->zone(), ptr, kClassId)); \
} \
DART_NOINLINE static object& Handle(Zone* zone, object##Ptr ptr) { \
- return HandleImpl(zone, ptr); \
+ return static_cast<object&>(HandleImpl(zone, ptr, kClassId)); \
} \
DART_NOINLINE static object& ZoneHandle() { \
- return ZoneHandleImpl(Thread::Current()->zone(), object::null()); \
+ return static_cast<object&>( \
+ ZoneHandleImpl(Thread::Current()->zone(), object::null(), kClassId)); \
} \
DART_NOINLINE static object& ZoneHandle(Zone* zone) { \
- return ZoneHandleImpl(zone, object::null()); \
+ return static_cast<object&>( \
+ ZoneHandleImpl(zone, object::null(), kClassId)); \
} \
DART_NOINLINE static object& ZoneHandle(object##Ptr ptr) { \
- return ZoneHandleImpl(Thread::Current()->zone(), ptr); \
+ return static_cast<object&>( \
+ ZoneHandleImpl(Thread::Current()->zone(), ptr, kClassId)); \
} \
DART_NOINLINE static object& ZoneHandle(Zone* zone, object##Ptr ptr) { \
- return ZoneHandleImpl(zone, ptr); \
+ return static_cast<object&>(ZoneHandleImpl(zone, ptr, kClassId)); \
} \
- DART_NOINLINE static object* ReadOnlyHandle() { \
- object* obj = reinterpret_cast<object*>(Dart::AllocateReadOnlyHandle()); \
- initializeHandle(obj, object::null()); \
- return obj; \
+ static object* ReadOnlyHandle() { \
+ return static_cast<object*>(ReadOnlyHandleImpl(kClassId)); \
} \
DART_NOINLINE static object& CheckedHandle(Zone* zone, ObjectPtr ptr) { \
object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(zone)); \
@@ -178,26 +181,9 @@
static const ClassId kClassId = k##object##Cid; \
\
private: /* NOLINT */ \
- static object& HandleImpl(Zone* zone, object##Ptr ptr) { \
- object* obj = reinterpret_cast<object*>(VMHandles::AllocateHandle(zone)); \
- initializeHandle(obj, ptr); \
- return *obj; \
- } \
- static object& ZoneHandleImpl(Zone* zone, object##Ptr ptr) { \
- object* obj = \
- reinterpret_cast<object*>(VMHandles::AllocateZoneHandle(zone)); \
- initializeHandle(obj, ptr); \
- return *obj; \
- } \
/* Initialize the handle based on the ptr in the presence of null. */ \
static void initializeHandle(object* obj, ObjectPtr ptr) { \
- if (ptr != Object::null()) { \
- obj->SetPtr(ptr); \
- } else { \
- obj->ptr_ = Object::null(); \
- object fake_object; \
- obj->set_vtable(fake_object.vtable()); \
- } \
+ obj->SetPtr(ptr, kClassId); \
} \
/* Disallow allocation, copy constructors and override super assignment. */ \
public: /* NOLINT */ \
@@ -237,8 +223,10 @@
#define OBJECT_IMPLEMENTATION(object, super) \
public: /* NOLINT */ \
- void operator=(object##Ptr value) { initializeHandle(this, value); } \
- void operator^=(ObjectPtr value) { \
+ DART_NOINLINE void operator=(object##Ptr value) { \
+ initializeHandle(this, value); \
+ } \
+ DART_NOINLINE void operator^=(ObjectPtr value) { \
initializeHandle(this, value); \
ASSERT(IsNull() || Is##object()); \
} \
@@ -637,8 +625,28 @@
uword raw_value() const { return static_cast<uword>(ptr()); }
- inline void SetPtr(ObjectPtr value);
+ inline void SetPtr(ObjectPtr value, intptr_t default_cid);
void CheckHandle() const;
+ DART_NOINLINE static Object& HandleImpl(Zone* zone,
+ ObjectPtr ptr,
+ intptr_t default_cid) {
+ Object* obj = reinterpret_cast<Object*>(VMHandles::AllocateHandle(zone));
+ obj->SetPtr(ptr, default_cid);
+ return *obj;
+ }
+ DART_NOINLINE static Object& ZoneHandleImpl(Zone* zone,
+ ObjectPtr ptr,
+ intptr_t default_cid) {
+ Object* obj =
+ reinterpret_cast<Object*>(VMHandles::AllocateZoneHandle(zone));
+ obj->SetPtr(ptr, default_cid);
+ return *obj;
+ }
+ DART_NOINLINE static Object* ReadOnlyHandleImpl(intptr_t cid) {
+ Object* obj = reinterpret_cast<Object*>(Dart::AllocateReadOnlyHandle());
+ obj->SetPtr(Object::null(), cid);
+ return obj;
+ }
cpp_vtable vtable() const { return bit_copy<cpp_vtable>(*this); }
void set_vtable(cpp_vtable value) { *vtable_address() = value; }
@@ -779,13 +787,7 @@
/* Initialize the handle based on the ptr in the presence of null. */
static void initializeHandle(Object* obj, ObjectPtr ptr) {
- if (ptr != Object::null()) {
- obj->SetPtr(ptr);
- } else {
- obj->ptr_ = Object::null();
- Object fake_object;
- obj->set_vtable(fake_object.vtable());
- }
+ obj->SetPtr(ptr, kObjectCid);
}
cpp_vtable* vtable_address() const {
@@ -11611,19 +11613,20 @@
}
DART_FORCE_INLINE
-void Object::SetPtr(ObjectPtr value) {
- NoSafepointScope no_safepoint_scope;
+void Object::SetPtr(ObjectPtr value, intptr_t default_cid) {
ptr_ = value;
intptr_t cid = value->GetClassIdMayBeSmi();
// Free-list elements cannot be wrapped in a handle.
ASSERT(cid != kFreeListElement);
ASSERT(cid != kForwardingCorpse);
- if (cid >= kNumPredefinedCids) {
+ if (cid == kNullCid) {
+ cid = default_cid;
+ } else if (cid >= kNumPredefinedCids) {
cid = kInstanceCid;
}
set_vtable(builtin_vtables_[cid]);
#if defined(DEBUG)
- if (FLAG_verify_handles && ptr_->IsHeapObject()) {
+ if (FLAG_verify_handles && ptr_->IsHeapObject() && (ptr_ != Object::null())) {
Heap* isolate_heap = IsolateGroup::Current()->heap();
// TODO(rmacnak): Remove after rewriting StackFrame::VisitObjectPointers
// to not use handles.
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index b25b2bb..7c75e83 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1015,6 +1015,8 @@
kTypeFinalized,
};
+ classid_t id() const { return id_; }
+
private:
RAW_HEAP_OBJECT_IMPLEMENTATION(Class);
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 4d9a35f..f18f6ab 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -375,17 +375,7 @@
ObjectPtr SnapshotReader::RunDelayedRehashingOfMaps() {
if (!objects_to_rehash_.IsNull()) {
- const Library& collections_lib =
- Library::Handle(zone_, Library::CollectionLibrary());
- const Function& rehashing_function = Function::Handle(
- zone_,
- collections_lib.LookupFunctionAllowPrivate(Symbols::_rehashObjects()));
- ASSERT(!rehashing_function.IsNull());
-
- const Array& arguments = Array::Handle(zone_, Array::New(1));
- arguments.SetAt(0, objects_to_rehash_);
-
- return DartEntry::InvokeFunction(rehashing_function, arguments);
+ return DartLibraryCalls::RehashObjects(thread(), objects_to_rehash_);
}
return Object::null();
}
diff --git a/samples/ffi/resource_management/arena.dart b/samples/ffi/resource_management/arena.dart
deleted file mode 100644
index 8d30382..0000000
--- a/samples/ffi/resource_management/arena.dart
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2019, 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.
-//
-// Explicit arena used for managing resources.
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-
-/// An [Allocator] which frees all allocations at the same time.
-///
-/// The arena allows you to allocate heap memory, but ignores calls to [free].
-/// Instead you call [releaseAll] to release all the allocations at the same
-/// time.
-///
-/// Also allows other resources to be associated with the arena, through the
-/// [using] method, to have a release function called for them when the arena is
-/// released.
-///
-/// An [Allocator] can be provided to do the actual allocation and freeing.
-/// Defaults to using [calloc].
-class Arena implements Allocator {
- /// The [Allocator] used for allocation and freeing.
- final Allocator _wrappedAllocator;
-
- /// Native memory under management by this [Arena].
- final List<Pointer<NativeType>> _managedMemoryPointers = [];
-
- /// Callbacks for releasing native resources under management by this [Arena].
- final List<void Function()> _managedResourceReleaseCallbacks = [];
-
- bool _inUse = true;
-
- /// Creates a arena of allocations.
- ///
- /// The [allocator] is used to do the actual allocation and freeing of
- /// memory. It defaults to using [calloc].
- Arena([Allocator allocator = calloc]) : _wrappedAllocator = allocator;
-
- /// Allocates memory and includes it in the arena.
- ///
- /// Uses the allocator provided to the [Arena] constructor to do the
- /// allocation.
- ///
- /// Throws an [ArgumentError] if the number of bytes or alignment cannot be
- /// satisfied.
- @override
- Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) {
- _ensureInUse();
- final p = _wrappedAllocator.allocate<T>(byteCount, alignment: alignment);
- _managedMemoryPointers.add(p);
- return p;
- }
-
- /// Registers [resource] in this arena.
- ///
- /// Executes [releaseCallback] on [releaseAll].
- ///
- /// Returns [resource] again, to allow for easily inserting
- /// `arena.using(resource, ...)` where the resource is allocated.
- T using<T>(T resource, void Function(T) releaseCallback) {
- _ensureInUse();
- releaseCallback = Zone.current.bindUnaryCallback(releaseCallback);
- _managedResourceReleaseCallbacks.add(() => releaseCallback(resource));
- return resource;
- }
-
- /// Registers [releaseResourceCallback] to be executed on [releaseAll].
- void onReleaseAll(void Function() releaseResourceCallback) {
- _managedResourceReleaseCallbacks.add(releaseResourceCallback);
- }
-
- /// Releases all resources that this [Arena] manages.
- ///
- /// If [reuse] is `true`, the arena can be used again after resources
- /// have been released. If not, the default, then the [allocate]
- /// and [using] methods must not be called after a call to `releaseAll`.
- ///
- /// If any of the callbacks throw, [releaseAll] is interrupted, and should
- /// be started again.
- void releaseAll({bool reuse = false}) {
- if (!reuse) {
- _inUse = false;
- }
- // The code below is deliberately wirtten to allow allocations to happen
- // during `releaseAll(reuse:true)`. The arena will still be guaranteed
- // empty when the `releaseAll` call returns.
- while (_managedResourceReleaseCallbacks.isNotEmpty) {
- _managedResourceReleaseCallbacks.removeLast()();
- }
- for (final p in _managedMemoryPointers) {
- _wrappedAllocator.free(p);
- }
- _managedMemoryPointers.clear();
- }
-
- /// Does nothing, invoke [releaseAll] instead.
- @override
- void free(Pointer<NativeType> pointer) {}
-
- void _ensureInUse() {
- if (!_inUse) {
- throw StateError(
- 'Arena no longer in use, `releaseAll(reuse: false)` was called.');
- }
- }
-}
-
-/// Runs [computation] with a new [Arena], and releases all allocations at the
-/// end.
-///
-/// If the return value of [computation] is a [Future], all allocations are
-/// released when the future completes.
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_
-/// cleaned up.
-R using<R>(R Function(Arena) computation,
- [Allocator wrappedAllocator = calloc]) {
- final arena = Arena(wrappedAllocator);
- bool isAsync = false;
- try {
- final result = computation(arena);
- if (result is Future) {
- isAsync = true;
- return (result.whenComplete(arena.releaseAll) as R);
- }
- return result;
- } finally {
- if (!isAsync) {
- arena.releaseAll();
- }
- }
-}
-
-/// Creates a zoned [Arena] to manage native resources.
-///
-/// The arena is availabe through [zoneArena].
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_ cleaned up.
-R withZoneArena<R>(R Function() computation,
- [Allocator wrappedAllocator = calloc]) {
- final arena = Arena(wrappedAllocator);
- var arenaHolder = [arena];
- bool isAsync = false;
- try {
- return runZoned(() {
- final result = computation();
- if (result is Future) {
- isAsync = true;
- result.whenComplete(arena.releaseAll);
- }
- return result;
- }, zoneValues: {#_arena: arenaHolder});
- } finally {
- if (!isAsync) {
- arena.releaseAll();
- arenaHolder.clear();
- }
- }
-}
-
-/// A zone-specific [Arena].
-///
-/// Asynchronous computations can share a [Arena]. Use [withZoneArena] to create
-/// a new zone with a fresh [Arena], and that arena will then be released
-/// automatically when the function passed to [withZoneArena] completes.
-/// All code inside that zone can use `zoneArena` to access the arena.
-///
-/// The current arena must not be accessed by code which is not running inside
-/// a zone created by [withZoneArena].
-Arena get zoneArena {
- final List<Arena>? arenaHolder = Zone.current[#_arena];
- if (arenaHolder == null) {
- throw StateError('Not inside a zone created by `useArena`');
- }
- if (arenaHolder.isNotEmpty) {
- return arenaHolder.single;
- }
- throw StateError('Arena has already been cleared with releaseAll.');
-}
diff --git a/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart b/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
index 52ec773..1640554a 100644
--- a/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
+++ b/samples/ffi/resource_management/arena_isolate_shutdown_sample.dart
@@ -9,8 +9,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import '../dylib_utils.dart';
void main() {
diff --git a/samples/ffi/resource_management/arena_sample.dart b/samples/ffi/resource_management/arena_sample.dart
index a12b553..8436c15 100644
--- a/samples/ffi/resource_management/arena_sample.dart
+++ b/samples/ffi/resource_management/arena_sample.dart
@@ -8,8 +8,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import 'utf8_helpers.dart';
import '../dylib_utils.dart';
diff --git a/samples/ffi/resource_management/arena_test.dart b/samples/ffi/resource_management/arena_test.dart
deleted file mode 100644
index 18ffaa9..0000000
--- a/samples/ffi/resource_management/arena_test.dart
+++ /dev/null
@@ -1,208 +0,0 @@
-// 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.
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-import 'package:test/test.dart';
-
-// TODO(dacoharkes): After merging into `package:ffi`, roll package in DEPS
-// and remove arena.dart.
-import 'arena.dart';
-
-void main() async {
- test('sync', () async {
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- using((Arena arena) {
- arena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- });
- expect(freed, [1234]);
- });
-
- test('async', () async {
- /// Calling [using] waits with releasing its resources until after
- /// [Future]s complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- Future<int> myFutureInt = using((Arena arena) {
- return Future.microtask(() {
- arena.using(1234, freeInt);
- return 1;
- });
- });
-
- expect(freed.isEmpty, true);
- await myFutureInt;
- expect(freed, [1234]);
- });
-
- test('throw', () {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- // Resources are freed also when abnormal control flow occurs.
- var didThrow = false;
- try {
- using((Arena arena) {
- arena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- throw Exception('Exception 1');
- });
- } on Exception {
- expect(freed.single, 1234);
- didThrow = true;
- }
- expect(didThrow, true);
- });
-
- test(
- 'allocate',
- () {
- final countingAllocator = CountingAllocator();
- // To ensure resources are freed, wrap them in a [using] call.
- using((Arena arena) {
- final p = arena<Int64>(2);
- p[1] = p[0];
- }, countingAllocator);
- expect(countingAllocator.freeCount, 1);
- },
- );
-
- test('allocate throw', () {
- // Resources are freed also when abnormal control flow occurs.
- bool didThrow = false;
- final countingAllocator = CountingAllocator();
- try {
- using((Arena arena) {
- final p = arena<Int64>(2);
- p[0] = 25;
- throw Exception('Exception 2');
- }, countingAllocator);
- } on Exception {
- expect(countingAllocator.freeCount, 1);
- didThrow = true;
- }
- expect(didThrow, true);
- });
-
- test('toNativeUtf8', () {
- final countingAllocator = CountingAllocator();
- using((Arena arena) {
- final p = 'Hello world!'.toNativeUtf8(allocator: arena);
- expect(p.toDartString(), 'Hello world!');
- }, countingAllocator);
- expect(countingAllocator.freeCount, 1);
- });
-
- test('zone', () async {
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- withZoneArena(() {
- zoneArena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- });
- expect(freed.length, 1);
- expect(freed.single, 1234);
- });
-
- test('zone async', () async {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- Future<int> myFutureInt = withZoneArena(() {
- return Future.microtask(() {
- zoneArena.using(1234, freeInt);
- return 1;
- });
- });
-
- expect(freed.isEmpty, true);
- await myFutureInt;
- expect(freed.length, 1);
- expect(freed.single, 1234);
- });
-
- test('zone throw', () {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- // Resources are freed also when abnormal control flow occurs.
- bool didThrow = false;
- try {
- withZoneArena(() {
- zoneArena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- throw Exception('Exception 3');
- });
- } on Exception {
- expect(freed.single, 1234);
- didThrow = true;
- }
- expect(didThrow, true);
- expect(freed.single, 1234);
- });
-
- test('allocate during releaseAll', () {
- final countingAllocator = CountingAllocator();
- final arena = Arena(countingAllocator);
-
- arena.using(arena<Uint8>(), (Pointer discard) {
- arena<Uint8>();
- });
-
- expect(countingAllocator.allocationCount, 1);
- expect(countingAllocator.freeCount, 0);
-
- arena.releaseAll(reuse: true);
-
- expect(countingAllocator.allocationCount, 2);
- expect(countingAllocator.freeCount, 2);
- });
-}
-
-/// Keeps track of the number of allocates and frees for testing purposes.
-class CountingAllocator implements Allocator {
- final Allocator wrappedAllocator;
-
- int allocationCount = 0;
- int freeCount = 0;
-
- CountingAllocator([this.wrappedAllocator = calloc]);
-
- @override
- Pointer<T> allocate<T extends NativeType>(int byteCount, {int? alignment}) {
- allocationCount++;
- return wrappedAllocator.allocate(byteCount, alignment: alignment);
- }
-
- @override
- void free(Pointer<NativeType> pointer) {
- freeCount++;
- return wrappedAllocator.free(pointer);
- }
-}
diff --git a/samples/ffi/resource_management/arena_zoned_sample.dart b/samples/ffi/resource_management/arena_zoned_sample.dart
index bb1defa..a26cc75 100644
--- a/samples/ffi/resource_management/arena_zoned_sample.dart
+++ b/samples/ffi/resource_management/arena_zoned_sample.dart
@@ -7,8 +7,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import 'utf8_helpers.dart';
import '../dylib_utils.dart';
diff --git a/samples/ffi/sqlite/lib/src/ffi/arena.dart b/samples/ffi/sqlite/lib/src/ffi/arena.dart
deleted file mode 100644
index 290c2fe..0000000
--- a/samples/ffi/sqlite/lib/src/ffi/arena.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2019, 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.
-
-import "dart:async";
-import "dart:ffi";
-
-import 'package:ffi/ffi.dart';
-
-/// [Arena] manages allocated C memory.
-///
-/// Arenas are zoned.
-class Arena {
- Arena();
-
- List<Pointer<Void>> _allocations = [];
-
- /// Bound the lifetime of [ptr] to this [Arena].
- T scoped<T extends Pointer>(T ptr) {
- _allocations.add(ptr.cast());
- return ptr;
- }
-
- /// Frees all memory pointed to by [Pointer]s in this arena.
- void finalize() {
- for (final ptr in _allocations) {
- calloc.free(ptr);
- }
- }
-
- /// The last [Arena] in the zone.
- factory Arena.current() {
- return Zone.current[#_currentArena];
- }
-}
-
-/// Bound the lifetime of [ptr] to the current [Arena].
-T scoped<T extends Pointer>(T ptr) => Arena.current().scoped(ptr);
-
-class RethrownError {
- dynamic original;
- StackTrace originalStackTrace;
- RethrownError(this.original, this.originalStackTrace);
- toString() => """RethrownError(${original})
-${originalStackTrace}""";
-}
-
-/// Runs the [body] in an [Arena] freeing all memory which is [scoped] during
-/// execution of [body] at the end of the execution.
-R runArena<R>(R Function(Arena) body) {
- Arena arena = Arena();
- try {
- return runZoned(() => body(arena),
- zoneValues: {#_currentArena: arena},
- onError: (error, st) => throw RethrownError(error, st));
- } finally {
- arena.finalize();
- }
-}
diff --git a/samples_2/ffi/resource_management/arena.dart b/samples_2/ffi/resource_management/arena.dart
deleted file mode 100644
index 4916c3a..0000000
--- a/samples_2/ffi/resource_management/arena.dart
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright (c) 2019, 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.
-//
-// Explicit arena used for managing resources.
-
-// @dart = 2.9
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-
-/// An [Allocator] which frees all allocations at the same time.
-///
-/// The arena allows you to allocate heap memory, but ignores calls to [free].
-/// Instead you call [releaseAll] to release all the allocations at the same
-/// time.
-///
-/// Also allows other resources to be associated with the arena, through the
-/// [using] method, to have a release function called for them when the arena is
-/// released.
-///
-/// An [Allocator] can be provided to do the actual allocation and freeing.
-/// Defaults to using [calloc].
-class Arena implements Allocator {
- /// The [Allocator] used for allocation and freeing.
- final Allocator _wrappedAllocator;
-
- /// Native memory under management by this [Arena].
- final List<Pointer<NativeType>> _managedMemoryPointers = [];
-
- /// Callbacks for releasing native resources under management by this [Arena].
- final List<void Function()> _managedResourceReleaseCallbacks = [];
-
- bool _inUse = true;
-
- /// Creates a arena of allocations.
- ///
- /// The [allocator] is used to do the actual allocation and freeing of
- /// memory. It defaults to using [calloc].
- Arena([Allocator allocator = calloc]) : _wrappedAllocator = allocator;
-
- /// Allocates memory and includes it in the arena.
- ///
- /// Uses the allocator provided to the [Arena] constructor to do the
- /// allocation.
- ///
- /// Throws an [ArgumentError] if the number of bytes or alignment cannot be
- /// satisfied.
- @override
- Pointer<T> allocate<T extends NativeType>(int byteCount, {int alignment}) {
- _ensureInUse();
- final p = _wrappedAllocator.allocate<T>(byteCount, alignment: alignment);
- _managedMemoryPointers.add(p);
- return p;
- }
-
- /// Registers [resource] in this arena.
- ///
- /// Executes [releaseCallback] on [releaseAll].
- ///
- /// Returns [resource] again, to allow for easily inserting
- /// `arena.using(resource, ...)` where the resource is allocated.
- T using<T>(T resource, void Function(T) releaseCallback) {
- _ensureInUse();
- releaseCallback = Zone.current.bindUnaryCallback(releaseCallback);
- _managedResourceReleaseCallbacks.add(() => releaseCallback(resource));
- return resource;
- }
-
- /// Registers [releaseResourceCallback] to be executed on [releaseAll].
- void onReleaseAll(void Function() releaseResourceCallback) {
- _managedResourceReleaseCallbacks.add(releaseResourceCallback);
- }
-
- /// Releases all resources that this [Arena] manages.
- ///
- /// If [reuse] is `true`, the arena can be used again after resources
- /// have been released. If not, the default, then the [allocate]
- /// and [using] methods must not be called after a call to `releaseAll`.
- ///
- /// If any of the callbacks throw, [releaseAll] is interrupted, and should
- /// be started again.
- void releaseAll({bool reuse = false}) {
- if (!reuse) {
- _inUse = false;
- }
- // The code below is deliberately wirtten to allow allocations to happen
- // during `releaseAll(reuse:true)`. The arena will still be guaranteed
- // empty when the `releaseAll` call returns.
- while (_managedResourceReleaseCallbacks.isNotEmpty) {
- _managedResourceReleaseCallbacks.removeLast()();
- }
- for (final p in _managedMemoryPointers) {
- _wrappedAllocator.free(p);
- }
- _managedMemoryPointers.clear();
- }
-
- /// Does nothing, invoke [releaseAll] instead.
- @override
- void free(Pointer<NativeType> pointer) {}
-
- void _ensureInUse() {
- if (!_inUse) {
- throw StateError(
- 'Arena no longer in use, `releaseAll(reuse: false)` was called.');
- }
- }
-}
-
-/// Runs [computation] with a new [Arena], and releases all allocations at the
-/// end.
-///
-/// If the return value of [computation] is a [Future], all allocations are
-/// released when the future completes.
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_
-/// cleaned up.
-R using<R>(R Function(Arena) computation,
- [Allocator wrappedAllocator = calloc]) {
- final arena = Arena(wrappedAllocator);
- bool isAsync = false;
- try {
- final result = computation(arena);
- if (result is Future) {
- isAsync = true;
- return (result.whenComplete(arena.releaseAll) as R);
- }
- return result;
- } finally {
- if (!isAsync) {
- arena.releaseAll();
- }
- }
-}
-
-/// Creates a zoned [Arena] to manage native resources.
-///
-/// The arena is availabe through [zoneArena].
-///
-/// If the isolate is shut down, through `Isolate.kill()`, resources are _not_ cleaned up.
-R withZoneArena<R>(R Function() computation,
- [Allocator wrappedAllocator = calloc]) {
- final arena = Arena(wrappedAllocator);
- var arenaHolder = [arena];
- bool isAsync = false;
- try {
- return runZoned(() {
- final result = computation();
- if (result is Future) {
- isAsync = true;
- result.whenComplete(arena.releaseAll);
- }
- return result;
- }, zoneValues: {#_arena: arenaHolder});
- } finally {
- if (!isAsync) {
- arena.releaseAll();
- arenaHolder.clear();
- }
- }
-}
-
-/// A zone-specific [Arena].
-///
-/// Asynchronous computations can share a [Arena]. Use [withZoneArena] to create
-/// a new zone with a fresh [Arena], and that arena will then be released
-/// automatically when the function passed to [withZoneArena] completes.
-/// All code inside that zone can use `zoneArena` to access the arena.
-///
-/// The current arena must not be accessed by code which is not running inside
-/// a zone created by [withZoneArena].
-Arena get zoneArena {
- final List<Arena> arenaHolder = Zone.current[#_arena];
- if (arenaHolder == null) {
- throw StateError('Not inside a zone created by `useArena`');
- }
- if (arenaHolder.isNotEmpty) {
- return arenaHolder.single;
- }
- throw StateError('Arena has already been cleared with releaseAll.');
-}
diff --git a/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart b/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
index 8d1e5c7..89dbd01 100644
--- a/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
+++ b/samples_2/ffi/resource_management/arena_isolate_shutdown_sample.dart
@@ -11,8 +11,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import '../dylib_utils.dart';
void main() {
diff --git a/samples_2/ffi/resource_management/arena_sample.dart b/samples_2/ffi/resource_management/arena_sample.dart
index d8cbe80..d45719b 100644
--- a/samples_2/ffi/resource_management/arena_sample.dart
+++ b/samples_2/ffi/resource_management/arena_sample.dart
@@ -9,8 +9,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import 'utf8_helpers.dart';
import '../dylib_utils.dart';
diff --git a/samples_2/ffi/resource_management/arena_test.dart b/samples_2/ffi/resource_management/arena_test.dart
deleted file mode 100644
index 699d94b..0000000
--- a/samples_2/ffi/resource_management/arena_test.dart
+++ /dev/null
@@ -1,210 +0,0 @@
-// 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.
-//
-// @dart = 2.9
-
-import 'dart:async';
-import 'dart:ffi';
-
-import 'package:ffi/ffi.dart';
-import 'package:test/test.dart';
-
-// TODO(dacoharkes): After merging into `package:ffi`, roll package in DEPS
-// and remove arena.dart.
-import 'arena.dart';
-
-void main() async {
- test('sync', () async {
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- using((Arena arena) {
- arena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- });
- expect(freed, [1234]);
- });
-
- test('async', () async {
- /// Calling [using] waits with releasing its resources until after
- /// [Future]s complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- Future<int> myFutureInt = using((Arena arena) {
- return Future.microtask(() {
- arena.using(1234, freeInt);
- return 1;
- });
- });
-
- expect(freed.isEmpty, true);
- await myFutureInt;
- expect(freed, [1234]);
- });
-
- test('throw', () {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- // Resources are freed also when abnormal control flow occurs.
- var didThrow = false;
- try {
- using((Arena arena) {
- arena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- throw Exception('Exception 1');
- });
- } on Exception {
- expect(freed.single, 1234);
- didThrow = true;
- }
- expect(didThrow, true);
- });
-
- test(
- 'allocate',
- () {
- final countingAllocator = CountingAllocator();
- // To ensure resources are freed, wrap them in a [using] call.
- using((Arena arena) {
- final p = arena<Int64>(2);
- p[1] = p[0];
- }, countingAllocator);
- expect(countingAllocator.freeCount, 1);
- },
- );
-
- test('allocate throw', () {
- // Resources are freed also when abnormal control flow occurs.
- bool didThrow = false;
- final countingAllocator = CountingAllocator();
- try {
- using((Arena arena) {
- final p = arena<Int64>(2);
- p[0] = 25;
- throw Exception('Exception 2');
- }, countingAllocator);
- } on Exception {
- expect(countingAllocator.freeCount, 1);
- didThrow = true;
- }
- expect(didThrow, true);
- });
-
- test('toNativeUtf8', () {
- final countingAllocator = CountingAllocator();
- using((Arena arena) {
- final p = 'Hello world!'.toNativeUtf8(allocator: arena);
- expect(p.toDartString(), 'Hello world!');
- }, countingAllocator);
- expect(countingAllocator.freeCount, 1);
- });
-
- test('zone', () async {
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- withZoneArena(() {
- zoneArena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- });
- expect(freed.length, 1);
- expect(freed.single, 1234);
- });
-
- test('zone async', () async {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- Future<int> myFutureInt = withZoneArena(() {
- return Future.microtask(() {
- zoneArena.using(1234, freeInt);
- return 1;
- });
- });
-
- expect(freed.isEmpty, true);
- await myFutureInt;
- expect(freed.length, 1);
- expect(freed.single, 1234);
- });
-
- test('zone throw', () {
- /// [using] waits with releasing its resources until after [Future]s
- /// complete.
- List<int> freed = [];
- void freeInt(int i) {
- freed.add(i);
- }
-
- // Resources are freed also when abnormal control flow occurs.
- bool didThrow = false;
- try {
- withZoneArena(() {
- zoneArena.using(1234, freeInt);
- expect(freed.isEmpty, true);
- throw Exception('Exception 3');
- });
- } on Exception {
- expect(freed.single, 1234);
- didThrow = true;
- }
- expect(didThrow, true);
- expect(freed.single, 1234);
- });
-
- test('allocate during releaseAll', () {
- final countingAllocator = CountingAllocator();
- final arena = Arena(countingAllocator);
-
- arena.using(arena<Uint8>(), (Pointer discard) {
- arena<Uint8>();
- });
-
- expect(countingAllocator.allocationCount, 1);
- expect(countingAllocator.freeCount, 0);
-
- arena.releaseAll(reuse: true);
-
- expect(countingAllocator.allocationCount, 2);
- expect(countingAllocator.freeCount, 2);
- });
-}
-
-/// Keeps track of the number of allocates and frees for testing purposes.
-class CountingAllocator implements Allocator {
- final Allocator wrappedAllocator;
-
- int allocationCount = 0;
- int freeCount = 0;
-
- CountingAllocator([this.wrappedAllocator = calloc]);
-
- @override
- Pointer<T> allocate<T extends NativeType>(int byteCount, {int alignment}) {
- allocationCount++;
- return wrappedAllocator.allocate(byteCount, alignment: alignment);
- }
-
- @override
- void free(Pointer<NativeType> pointer) {
- freeCount++;
- return wrappedAllocator.free(pointer);
- }
-}
diff --git a/samples_2/ffi/resource_management/arena_zoned_sample.dart b/samples_2/ffi/resource_management/arena_zoned_sample.dart
index a22e279..54839bd 100644
--- a/samples_2/ffi/resource_management/arena_zoned_sample.dart
+++ b/samples_2/ffi/resource_management/arena_zoned_sample.dart
@@ -9,8 +9,8 @@
import 'dart:ffi';
import 'package:expect/expect.dart';
+import 'package:ffi/ffi.dart';
-import 'arena.dart';
import 'utf8_helpers.dart';
import '../dylib_utils.dart';
diff --git a/samples_2/ffi/sqlite/lib/src/ffi/arena.dart b/samples_2/ffi/sqlite/lib/src/ffi/arena.dart
deleted file mode 100644
index 56b6fea..0000000
--- a/samples_2/ffi/sqlite/lib/src/ffi/arena.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright (c) 2019, 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.
-
-// @dart = 2.9
-
-import "dart:async";
-import "dart:ffi";
-
-import 'package:ffi/ffi.dart';
-
-/// [Arena] manages allocated C memory.
-///
-/// Arenas are zoned.
-class Arena {
- Arena();
-
- List<Pointer<Void>> _allocations = [];
-
- /// Bound the lifetime of [ptr] to this [Arena].
- T scoped<T extends Pointer>(T ptr) {
- _allocations.add(ptr.cast());
- return ptr;
- }
-
- /// Frees all memory pointed to by [Pointer]s in this arena.
- void finalize() {
- for (final ptr in _allocations) {
- calloc.free(ptr);
- }
- }
-
- /// The last [Arena] in the zone.
- factory Arena.current() {
- return Zone.current[#_currentArena];
- }
-}
-
-/// Bound the lifetime of [ptr] to the current [Arena].
-T scoped<T extends Pointer>(T ptr) => Arena.current().scoped(ptr);
-
-class RethrownError {
- dynamic original;
- StackTrace originalStackTrace;
- RethrownError(this.original, this.originalStackTrace);
- toString() => """RethrownError(${original})
-${originalStackTrace}""";
-}
-
-/// Runs the [body] in an [Arena] freeing all memory which is [scoped] during
-/// execution of [body] at the end of the execution.
-R runArena<R>(R Function(Arena) body) {
- Arena arena = Arena();
- try {
- return runZoned(() => body(arena),
- zoneValues: {#_currentArena: arena},
- onError: (error, st) => throw RethrownError(error, st));
- } finally {
- arena.finalize();
- }
-}
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index b491dd6..7ff2354 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -238,7 +238,10 @@
final int tmpUsed = _usedData;
_usedData = 0;
for (int i = 0; i < tmpUsed; i += 2) {
- this[_data[i]] = _data[i + 1];
+ final key = _data[i];
+ if (!_HashBase._isDeleted(_data, key)) {
+ this[key] = _data[i + 1];
+ }
}
}
diff --git a/tests/language/identifier/built_in_illegal_test.dart b/tests/language/identifier/built_in_illegal_test.dart
index 12be975..0fd6336 100644
--- a/tests/language/identifier/built_in_illegal_test.dart
+++ b/tests/language/identifier/built_in_illegal_test.dart
@@ -18,24 +18,8 @@
// [cfe] Can't use 'dynamic' as a name here.
class export { }
// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'export'.
-// [error line 19, column 14, length 0]
-// [cfe] Expected ';' after this.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'export' as a name here.
class external { }
// ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -46,132 +30,47 @@
// [cfe] Can't use 'factory' as a name here.
class get { }
// ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [cfe] A function declaration needs an explicit list of parameters.
-// ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'get'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'get' as a name here.
class interface { }
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'interface' as a name here.
class implements { }
// ^^^^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'implements'.
-// [error line 61, column 18, length 0]
-// [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-// [cfe] Expected a type, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TYPE_NAME
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'implements' as a name here.
class import { }
// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'import'.
-// [error line 70, column 14, length 0]
-// [cfe] Expected ';' after this.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'import' as a name here.
class mixin { }
// ^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'mixin'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'mixin' as a name here.
class library { }
// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.LIBRARY_DIRECTIVE_NOT_FIRST
-// [cfe] Expected an identifier, but got 'library'.
-// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] The library directive must appear before all other directives.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected ';' after this.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'library' as a name here.
class operator { }
// ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'operator' as a name here.
class part { }
// ^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] Directives must appear before any declarations.
-// ^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'part'.
-// [error line 123, column 12, length 0]
-// [cfe] Expected ';' after this.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] Expected a String, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [cfe] Expected a declaration, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'part' as a name here.
class set { }
// ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [cfe] A function declaration needs an explicit list of parameters.
-// ^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'set'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'set' as a name here.
class static { }
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'static' as a name here.
class typedef { }
// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [cfe] A class declaration must have a body, even if it is empty.
-// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'typedef'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [cfe] A typedef needs an explicit list of parameters.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_TYPEDEF_PARAMETERS
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'typedef' as a name here.
main() {}
diff --git a/tests/language/vm/regression_38412.dart b/tests/language/vm/regression_38412_test.dart
similarity index 100%
rename from tests/language/vm/regression_38412.dart
rename to tests/language/vm/regression_38412_test.dart
diff --git a/tests/language/vm/regression_38436.dart b/tests/language/vm/regression_38436.dart
deleted file mode 100644
index ea5fafd..0000000
--- a/tests/language/vm/regression_38436.dart
+++ /dev/null
@@ -1,2362 +0,0 @@
-// Copyright (c) 2019, 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.
-
-// VMOptions=--optimization_counter_threshold=1
-
-import "package:expect/expect.dart";
-
-// Found by DartFuzzing: would sometimes crash on OSR
-// https://github.com/dart-lang/sdk/issues/38436
-
-import 'dart:async';
-import 'dart:cli';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:core';
-import 'dart:io';
-import 'dart:isolate';
-import 'dart:math';
-import 'dart:typed_data';
-
-String var0 = '';
-bool var1 = true;
-int var2 = -30;
-double var3 = 0.895077679110543;
-String var4 = '';
-List<int> var5 = [55, -70];
-Set<int> var6 = {
- 1024,
- for (int loc0 in [
- 79,
- ...[23],
- ...[90, -89, -24],
- -90,
- 11,
- -19,
- -91
- ])
- -55,
- 67,
- -80,
- for (int loc0 = 0; loc0 < 29; loc0++) 20,
- for (int loc0 = 0; loc0 < 24; loc0++) ...{23, -41},
- ...{
- -75,
- 128,
- 9223372034707292159,
- -56,
- -59,
- for (int loc0 in {
- -67,
- for (int loc1 in [-27, -59, 31, 32, -66, -87]) -9223372036854775680,
- 85,
- -45,
- if (false) 70,
- 13,
- 43,
- 48
- })
- if (true) 63,
- ...{-90, -24, -9223372036854743041, -9223372032559808383, 86},
- -25
- }
-};
-Map<int, String> var7 = {
- 6: '',
- ...{56: 'B\u2665pwO', 73: 'ZJDi\u{1f600}m'},
- ...{73: ')', 14: '93Q'},
- 98: 'xA0jQL',
- 21: ')\u2665TOy',
- for (int loc0 = 0; loc0 < 82; loc0++) 34: 'Q3\u2665#61',
- ...{70: 'XXRXl3O', 56: '\u2665lda2Zy', 38: 'Dr#mtz', 6: 'nx'},
- 27: '('
-};
-
-Set<int> foo0() {
- var3 += ((((var0 + var7[var5[88]])).isEmpty ? true : var1)
- ? (var1 ? (var3 ?? var3) : var3)
- : (var1 ? 0.24414824314186978 : var3));
- var1 ??= true;
- return {(var2--), Duration.secondsPerHour, var5[var2]};
-}
-
-Map<int, String> foo1(List<int> par1, bool par2) {
- throw ((-(var3)) * (-(0.943305664017911)));
-}
-
-List<int> foo2(Set<int> par1, List<int> par2, Map<int, String> par3) {
- switch (-49) {
- case 4149672951:
- {
- for (int loc0 in foo0()) {
- var6 = var6;
- try {
- for (int loc1 = 0; loc1 < 70; loc1++) {
- switch (((var1
- ? ((var1 ? var1 : true) ? Float32x4.xzzw : (--var2))
- : (4295032831 % (loc1 + 93))))
- .floor()) {
- case 3294548737:
- {
- var5[Int32x4.xxwy] ^=
- (loc0 * ('!').compareTo(((!(true)) ? var4 : 'S')));
- }
- break;
- case 3294548738:
- {
- var0 = var4;
- loc0 <<= Int32x4.zwxz;
- }
- break;
- }
- {
- int loc2 = 0;
- do {
- var1 = ('Ncb\u2665P9K').isEmpty;
- var1 ??= (!(true));
- } while (++loc2 < 91);
- }
- }
- par3 ??= {
- 44: ((false
- ? false
- : ((true
- ? var7
- : {
- 17: par3[(var5[-73] - -20)],
- 80: var7[
- ((++loc0) ~/ ((!(false)) ? 47 : var2))],
- 30: '8Qvz3',
- 36: '',
- 10: (('@B!0bW6' + var4)).toLowerCase(),
- 89: var7[-9223372036854775296],
- 4: ') '
- }) !=
- var7))
- ? ((var1 || (!(var1))) ? var7[Float32x4.wxzw] : var7[-7])
- : '8h'),
- for (int loc1 in [
- (false
- ? ((([
- var2,
- -39,
- -74,
- Float32x4.zzxy,
- (~(var5[(67 + -86)])),
- -53
- ] +
- [(var2++), var5[par2[(--loc0)]]]) !=
- [
- var5[var5[var5[(loc0++)]]],
- loc0,
- loc0,
- -55,
- -69,
- loc0
- ])
- ? (loc0--)
- : loc0)
- : var2),
- (75 ^ 93),
- (false ? var5[Float32x4.xzyw] : (loc0++)),
- ...[
- for (int loc2 in {
- -22,
- (loc0 ^ 2),
- var5[(-((par2[-79] * 86)))],
- (++loc0),
- ((par2[var5[-45]] ?? 55) >> (true ? Int32x4.wyww : -45)),
- (~((++var2))),
- par2[var2]
- })
- (loc0--),
- if ((var7[(false ? (-(loc0)) : 19)]).endsWith(var4))
- (++var2)
- else
- (var1 ? loc0 : 39),
- (((var2++) & var2) & -26),
- if (false) (var1 ? Float32x4.wzzw : var5[129]),
- for (int loc2 in {
- (loc0--),
- (true ? loc0 : loc0),
- var2,
- var5[(0.4452451921266031).floor()],
- (~(-4294967196)),
- (loc0--),
- (--var2)
- })
- (var1 ? -30 : (loc0++)),
- (~((var1 ? 51 : var2))),
- (((var3 ?? pi) < 0.9098824013356337)
- ? ((true ? 57 : -48) << (--var2))
- : par2[-59])
- ]
- ])
- 84: var4,
- 57: var4
- };
- } catch (exception, stackTrace) {
- /**
- ** Multi-line
- ** documentation comment.
- */
- for (int loc1 = 0; loc1 < 89; loc1++) {
- switch ((var2--)) {
- case 3807258589:
- {
- print(({
- (-34 ^
- ((false || var1)
- ? 24
- : (-(((-((var1
- ? par2[(-(71))]
- : 9223372032559808768))) +
- (~(loc1))))))),
- (~((true ? loc0 : (false ? -75 : 33)))),
- Float32x4.zxwz,
- (false ? (15 * -83) : (var2--)),
- ((var7 !=
- ((true ? var1 : false)
- ? var7
- : {
- 99: (true ? 'TobD' : var0),
- 59: (var4 ?? var4),
- 13: var4,
- 58: Uri.encodeFull(var4),
- 99: var7[loc1]
- }))
- ? loc1
- : (var1
- ? ((72 >> -15) ~/ (loc0--))
- : -9223372030412324864)),
- 32
- } ??
- par1));
- }
- break;
- case 3807258592:
- {
- var1 ??= true;
- try {
- var7 = {9: (var1 ? 'ON' : 'f\u{1f600}b')};
- par2 = (true
- ? var5
- : [
- DateTime.january,
- (40 - (~(var2))),
- (var1 ? (--loc0) : 23),
- var5[(--var2)]
- ]);
- } catch (exception, stackTrace) {
- var3 /= 0.9998663372091022;
- } finally {
- par2 ??= ((var1
- ? false
- : (((par1 ??
- {
- -68,
- 86,
- -33,
- var5[(-9223372034707292159 - 90)],
- (24 - (++var2)),
- (-(var2)),
- (loc1 * Int32x4.wyxx)
- }))
- .difference({
- (var1 ? Float32x4.yzyw : (loc1 % loc0)),
- 6,
- 22,
- 91,
- loc0,
- (true ? loc1 : loc1)
- }) ==
- foo0()))
- ? par2
- : [
- (var2--),
- (-((++loc0))),
- ((-(var5[-52])) ~/
- (true ? Int32x4.wyyy : (loc0--))),
- (var3).toInt()
- ]);
- var5[99] += (~(Float32x4.ywxw));
- }
- }
- break;
- }
- var5 = (par2 ??
- [
- ...[72],
- for (int loc2 in {Float32x4.xxwz, loc1})
- ((loc0--) ~/ (var2++)),
- par2[(++var2)],
- (-((--var2))),
- (var2++),
- -56,
- (~((~(loc0)))),
- for (int loc2 in {
- (-((~(17)))),
- Float32x4.zzzw,
- Float32x4.zyyz,
- (var2--),
- (Int32x4.wzwz % 78),
- loc0
- })
- Int32x4.xzzy
- ]);
- }
- {
- int loc1 = 0;
- do {
- loc0 &= (-(4295000065));
- } while (++loc1 < 94);
- }
- } finally {
- var3 -= 0.020483900923215503;
- try {
- return [
- ...[
- (loc0--),
- for (int loc1 in {Float32x4.yxyz})
- if (var1) (~(-35)) else loc0,
- (++loc0),
- for (int loc1 = 0; loc1 < 43; loc1++)
- (var5[var5[par2[var5[-9223372032559808384]]]] &
- Int32x4.yzxy),
- for (int loc1 = 0; loc1 < 98; loc1++) (-((~(Int32x4.xwwy)))),
- Float32x4.yzzz
- ],
- (-(Int32x4.xzxz))
- ];
- } catch (exception, stackTrace) {
- for (int loc1
- in (((((!((((0.13101852551635873 == 0.4825498460563603)
- ? var7
- : var7) !=
- var7)))
- ? 1
- : par2[var2]))
- .isEven
- ? {
- (var2++),
- (-48 | -54),
- (~(par2[loc0])),
- par2[var5[Int32x4.zyzz]],
- -2,
- (true ? (~((-(((!(false)) ? -11 : var2))))) : 73),
- if ((0.15992181539430828).isInfinite) (++var2)
- }
- : (false ? {-6} : {((++loc0) % 27), 92})) ??
- Set.identity())) {
- var6 ??= foo0();
- }
- var5[(~(((true ? -10 : Float32x4.zzwy) -
- Duration.millisecondsPerSecond)))] = (~((var2--)));
- }
- }
- }
- par3.forEach((loc0, loc1) {
- // Single-line comment.
- var6 = (var6 ?? foo0());
- par1 = {
- if (('X2yPgV').endsWith('b'))
- Float32x4.yxxy
- else if (true)
- Int32x4.xzyw
- else
- for (int loc2 = 0; loc2 < 9; loc2++) (++loc0),
- (4294967551 ?? (-((loc0--)))),
- (-69 ~/
- ((!(false))
- ? ((((par2[Int32x4.zwzw]).isEven
- ? (var3).truncateToDouble()
- : 0.14035347150303745))
- .isInfinite
- ? Int32x4.yzxx
- : par2[loc0])
- : (var2++))),
- ((loc0++) - ((++var2) >> (~(par2[(var2--)]))))
- };
- });
- }
- break;
- case 4149672955:
- {
- par2[((var2 ^ (~((--var2)))) | -98)] *= -62;
- {
- int loc0 = 0;
- do {
- var0 = par3[(var5[4294967808] >> Float32x4.wwyx)];
- } while (++loc0 < 46);
- }
- }
- break;
- }
- var1 ??= (!((var3).isNaN));
- return (var1
- ? par2
- : Uri.parseIPv6Address(
- (var1 ? '' : '26DgiI'), (ZLibOption.maxMemLevel % 65), 68));
-}
-
-class X0 {
- bool fld0_0 = true;
- Set<int> fld0_1 = {
- 31,
- if (true) ...{
- -93,
- -4294967041,
- -4294934527,
- if (false) 92,
- if (true) 69
- } else
- 85,
- ...{
- ...{73, 27},
- for (int loc0 in {
- for (int loc1 = 0; loc1 < 56; loc1++) -36,
- -23,
- -99,
- 20,
- 16,
- 11,
- if (false) -24,
- if (true) 14
- })
- if (false) 69,
- -9223372032559808513,
- -9223372036854775553,
- -9223372036854774784,
- -22
- },
- 81,
- ...{16, if (false) 67 else -30, if (true) 21 else -61, -84},
- -69
- };
-
- List<int> foo0_0(Map<int, String> par1) {
- if ((var1 ? ((!(fld0_0)) ? true : false) : true)) {
- return ((var4).trim()).codeUnits;
- } else {
- for (int loc0 in var6) {
- fld0_0 ??= var1;
- for (int loc1 = 0; loc1 < 57; loc1++) {
- {
- Map<int, String> loc2 = Map.identity();
- par1 ??= Map.unmodifiable(Map.unmodifiable(Map.unmodifiable((true
- ? loc2
- : ((true
- ? loc2
- : foo1(
- [var5[-60], loc0, var5[-48], -80, var5[var5[37]]],
- var1)) ??
- {
- 60: var0,
- 93: ((false ? var0 : '') + 'r\u{1f600}2B#p')
- })))));
- var4 = ' ';
- }
- try {
- var5 = foo2(
- ({loc0, 37, Float32x4.wwyw} ?? var6),
- ((fld0_0
- ? [
- for (int loc2 = 0; loc2 < 1; loc2++)
- (~(Float32x4.zyzz)),
- (~((true
- ? (Float32x4.yyzw >> (48 - (-((var2--)))))
- : (~(loc0))))),
- ((var4 ==
- String.fromEnvironment(
- (var1 ? 'l9FM' : par1[var5[loc0]])))
- ? (++loc0)
- : 4),
- ...[
- (~((var5[-9223372032559808448] - (++var2)))),
- ...[
- for (int loc2 in [
- ((-12 <= 55) ? 9223372032559841280 : loc0),
- var5[var5[(~(var5[var5[loc1]]))]],
- (var1 ? 67 : -74)
- ])
- (var5[var2]).sign,
- var5[-65],
- if (fld0_0)
- var5[(var5[var5[-90]] ~/ 22)]
- else
- (-9223372036854775679 + var5[16]),
- 76,
- 7
- ],
- (++var2),
- -9223372034707292160,
- (var2--),
- var5[(var2--)]
- ],
- loc1,
- Float32x4.ywxz,
- ((++loc0) + (--loc0)),
- for (int loc2 in [
- for (int loc3 = 0; loc3 < 4; loc3++) loc1,
- ...[
- Float32x4.zxwy,
- Float32x4.xzwx,
- var2,
- (++var2),
- Int32x4.xzyy,
- (var5[loc1] | (true ? -97 : -93)),
- Float32x4.xwyz,
- ((true || var1)
- ? (~((--loc0)))
- : (~((var5[18] % (-55 + loc0)))))
- ],
- (~((++loc0))),
- -85,
- (~((var2++))),
- (true
- ? ZLibOption.maxMemLevel
- : var5[var5[var5[var5[var2]]]]),
- ((true
- ? ((!((false
- ? (true ? fld0_0 : (!(false)))
- : fld0_0)))
- ? fld0_0
- : (({
- 96: var4,
- 60: '(0yBGn\u{1f600}',
- 57: var4,
- 73: var7[-43],
- 38: var0
- })
- .isNotEmpty ||
- ({
- 67: var4,
- 14: 'M\u{1f600}1HNbP',
- 6: 's',
- 85: 'uyq',
- 95: var7[(-(Int32x4.wwxw))],
- 33: ''
- })
- .isNotEmpty))
- : false)
- ? var2
- : (++var2))
- ]) ...[-27]
- ]
- : [
- for (int loc2 = 0; loc2 < 87; loc2++)
- (-47 * (~((((--var2) ^ loc0) ?? 78)))),
- (-(((({
- 14: (var3).toStringAsExponential(
- (false ? var5[-62] : 33)),
- 16: '',
- 71: var4,
- 78: (([var5[(-(91))]] == var5) ? var4 : var0),
- 9: par1[loc1],
- 51: '-8ht',
- 26: ('(2l3\u2665h' ?? var0),
- 79: var4
- })
- .isNotEmpty
- ? var5[(var2 % loc0)]
- : var2) %
- ((!(NetworkInterface.listSupported))
- ? -22
- : ((var1
- ? ([
- ZLibOption.STRATEGY_DEFAULT,
- 21,
- loc1,
- loc1,
- loc0,
- 5,
- loc0,
- 98
- ] ==
- Uri.parseIPv4Address(
- var7[loc1]))
- : var1)
- ? (~((-20 %
- (var5).removeAt(Float32x4.wyxw))))
- : var5[var5[82]]))))),
- (-(Float32x4.wwwz)),
- Int32x4.wxxz,
- ...[
- (loc0++),
- ...[
- (--loc0),
- -2,
- ZLibOption.DEFAULT_WINDOW_BITS,
- -42,
- for (int loc2 = 0; loc2 < 2; loc2++) (-(-22)),
- (~(-81))
- ],
- (--var2)
- ],
- (++var2),
- ((!(false)) ? (--var2) : (((~(34)) >> 48) << 79)),
- loc1
- ]) +
- foo2(
- foo0(),
- ([
- (((~(var5[(-(var5[(87 % var5[(++var2)])]))])) ??
- -11) ~/
- (var2++)),
- ((((!(var1)) && true) ? loc1 : 98) <<
- ((!((true != (var4 == par1[var5[(~(-83))]]))))
- ? -44
- : var5[88])),
- Float32x4.yyyz,
- -44,
- Int32x4.xzyx,
- (++loc0)
- ] ??
- [
- ((foo1([((!(var1)) ? 24 : 81), -93], true))
- .isEmpty
- ? 52
- : (~(Int32x4.zyww))),
- Int32x4.xxwz,
- (-(-11)),
- (loc0--),
- ((!(bool.fromEnvironment('U\u2665')))
- ? (loc0++)
- : (++var2))
- ]),
- {
- 70: var7[7],
- 18: '\u2665(#&c\u{1f600}-',
- 58: 'KuNr',
- 96: '\u{1f600}2\u2665YY',
- 94: var0,
- 28: 'l-'
- })),
- par1);
- {
- double loc2 = double.infinity;
- /*
- * Multi-line
- * comment.
- */
- return ('a!wNh!').codeUnits;
- }
- } catch (exception, stackTrace) {
- continue;
- } finally {
- fld0_0 = (!(fld0_0));
- var5 ??= ((Uri.parseIPv4Address('H') ??
- (foo2({
- loc1,
- ([
- if (((true ? loc0 : (loc0++)) <
- ((!(var1)) ? -90 : Int32x4.yyzx)))
- (~(var2))
- else
- for (int loc2 in {
- if (SecurityContext.alpnSupported)
- var2
- else
- Int32x4.wzzy,
- -9223372036754112763,
- (-((var1
- ? var5[62]
- : (-(Float32x4.wzwz))))),
- (~(Float32x4.yxzy))
- })
- ((((true && (false ? fld0_0 : var1))
- ? fld0_0
- : false)
- ? true
- : (fld0_0 && var1))
- ? (true ? (~(loc1)) : var5[-16])
- : loc0),
- for (int loc2 = 0; loc2 < 1; loc2++)
- ((false && var1) ? Float32x4.yzyy : 50)
- ][var2] *
- [
- ...[
- (((-10 >> Int32x4.wxzw) *
- ((0.42979687169554437 >=
- 0.17848133910264385)
- ? -4
- : var5[-15])) |
- var5[(loc0++)]),
- ...[
- (('@jcNl\u2665P')
- .compareTo(var7[(loc0--)]) &
- (~((~(loc0))))),
- if ((!(((!(true)) && true)))) 2,
- loc1,
- ((var5[(loc0--)] | -38) & (loc0++)),
- var2,
- (~(-22)),
- if (false) loc0 else 80,
- (--loc0)
- ],
- ...[15],
- ((~((~(-5)))) ^ Int32x4.xxxz),
- 79,
- for (int loc2 in [
- (fld0_0 ? -0 : (loc0++)),
- -49,
- for (int loc3 in [
- -16,
- (var2--),
- 35,
- ((14 * -68) ~/ Int32x4.wwyy)
- ])
- var5[(fld0_0 ? 28 : (-41 ?? 19))],
- loc0,
- (var3).round(),
- if ((!((!((!(false))))))) loc1,
- (loc0++),
- Int32x4.wyww
- ])
- ((--var2) * var5[(6 & var5[(~(-53))])]),
- (loc0++),
- Float32x4.xwxx
- ],
- Int32x4.ywyw,
- (-(ZLibOption.strategyFixed)),
- (80 % (loc0--)),
- var5[Int32x4.zxww]
- ][var5[50]]),
- (false ? -71 : 39),
- (var5[-61]).toSigned(loc0),
- -50,
- 4294967296
- }, [
- (16 *
- (~(((var1 ? ZLibOption.STRATEGY_FIXED : -66) *
- 4)))),
- Float32x4.wwwx
- ], {
- 63: var0,
- 52: (fld0_0 ? 'uG\u2665V@4' : '62'),
- 98: var7[var5[-83]],
- 70: (false
- ? 'bSg'
- : base64UrlEncode(([
- (~(var2)),
- -52,
- 68,
- [
- 10,
- loc1,
- 92,
- 53,
- Int32x4.zzyw,
- (true ? 12 : 19),
- (~(var5[(++var2)]))
- ][-64],
- (++loc0),
- (loc0 << -26)
- ] +
- [
- var5[(--loc0)],
- (((var1 ? var5[var5[(var2--)]] : loc1) +
- (--var2)) <<
- Int32x4.wyyx)
- ]))),
- 16: 'YsD\u2665\u2665K',
- 0: var0,
- 93: var7[(-(var5[-43]))]
- }) ??
- var5)) ??
- [
- if (fld0_0) -90,
- (--var2),
- ...[
- for (int loc2 in [
- (false ? (~(-9)) : -4294901760),
- (-(-7)),
- -51,
- (var1 ? -75 : [Float32x4.wwxw, Int32x4.zxyx][-7]),
- Float32x4.xyww,
- Int32x4.wwzx,
- (loc0++),
- (NetworkInterface.listSupported
- ? [1000][Float32x4.zzyx]
- : -71)
- ])
- -27,
- Float32x4.wyzy,
- (++var2)
- ]
- ]);
- }
- }
- }
- throw Map.unmodifiable(foo1(
- (MapBase.mapToString(foo1((false ? [var2] : var5), false))).codeUnits,
- true));
- }
- }
-
- void run() {}
-}
-
-class X1 extends X0 {
- double fld1_0 = 0.47694301047645304;
- bool fld1_1 = true;
-
- Map<int, String> foo1_0(
- Map<int, String> par1, Map<int, String> par2, double par3) {
- // Single-line comment.
- for (int loc0 = 0; loc0 < 91; loc0++) {
- par2.forEach((loc1, loc2) {
- {
- bool loc3 = (fld1_1 || ('U\u2665').isEmpty);
- var3 /= 0.8504341352135224;
- }
- });
- {
- int loc1 = 66;
- while (--loc1 > 0) {
- if (((!((true || fld1_1))) == true)) {
- var0 ??= par2[var5[(~((false ? ((!(var1)) ? -95 : var2) : -37)))]];
- /**
- ** Multi-line
- ** documentation comment.
- */
- return Map.unmodifiable({
- 55: var4,
- 73: 'c#',
- 17: (fld1_1
- ? '7\u{1f600}e'
- : ((!(var1)) ? '8E7AK2e' : 'Fm\u{1f600} F')),
- 40: 'mb(\u{1f600}\u2665l',
- 36: Uri.decodeFull((true ? par2[-32769] : var7[Float32x4.zyxz])),
- 51: ((false &&
- (((var1 ? true : true) || false)
- ? (var7[(var2--)]).isEmpty
- : true))
- ? (fld1_1
- ? (fld1_1 ? (var1).toString() : 'r9M')
- : ((true ? (0.2863696758528199 != par3) : false)
- ? (fld1_1 ? par1[Int32x4.zwyz] : var4)
- : var4))
- : var4),
- 8: '6G',
- 62: '+z@Gp'
- });
- } else {
- var5[Int32x4.zzyy] ??= (-(var5[((!(false)) ? loc1 : -34)]));
- {
- int loc2 = (-(7));
- var3 /= (true
- ? (-(((-9223372032459145467).isEven
- ? fld1_0
- : (-((-(0.7008573255099826)))))))
- : par3);
- }
- }
- for (int loc2 in foo2(var6, var5, {
- if (false) 11: par1[((var4).isEmpty ? 55 : -61)],
- 12: 'f5j2v\u{1f600}',
- 52: (((foo1(
- (((var1
- ? {var5[-66], var2, 88, 12, 6, -96}
- : (var1
- ? {-25, 84, (var2--), var5[83]}
- : {-36, var5[51], var2})) !=
- {var5[(++var2)]})
- ? [-2147483648, 46, loc0, var5[loc0], -21]
- : foo2(
- {var5[var5[loc0]]},
- (true
- ? var5
- : [
- -30,
- var5[(-(-42))],
- var2,
- Float32x4.zywx,
- loc1,
- 63,
- -25,
- -28
- ]),
- {30: 'j\u2665U', 98: var4})),
- false))
- .isNotEmpty
- ? (false ? fld1_0 : 0.3202297128057393)
- : 0.1301025669674245))
- .toStringAsFixed(((fld1_1 ? 79 : -88) + Int32x4.xyzw)),
- 88: (false ? var7[(var2++)] : (var4 ?? '')),
- 31: (var1
- ? (var1 ? par2[-87] : (true ? par2[-14] : var4))
- : ((fld1_1 != true) ? '3nd9t&' : var4)),
- 22: ('(Czi' + '-Y')
- })) {
- var7[(loc2--)] = 's';
- }
- }
- }
- }
- return par1;
- }
-
- String foo1_1(int par1) => var0;
- Set<int> foo1_2(String par1) {
- for (int loc0 = 0; loc0 < 58; loc0++) {
- switch ((~(13))) {
- case 746492976:
- {
- switch (Duration.millisecondsPerDay) {
- case 3635015902:
- {
- var7[var5[(var5[var2] * (-(var5[Float32x4.yxxz])))]] ??=
- (var7[-79] + '(O@');
- var7[loc0] ??= String.fromCharCode(var5[(true
- ? (var5[((var1 ? true : (false ? fld1_1 : var1))
- ? var5[Float32x4.wyyz]
- : 73)] ~/
- (-(84)))
- : -15)]);
- }
- break;
- case 3635015905:
- {
- var1 = (var1
- ? (foo1_0(
- (((!(false)) || fld1_1) ? var7 : var7),
- foo1_0(
- {74: '\u2665e', 10: 'tw8jc0R'},
- foo1_0(
- var7,
- foo1_0(
- ({
- 17: var7[Int32x4.zyxy],
- 82: var7[64],
- 27: 'VEtj',
- 90: Uri.encodeQueryComponent(
- foo1_1(var2)),
- 68: 'wew0\u{1f600}'
- } ??
- foo1_0(var7, var7, var3)),
- ({
- 65: 'mBeBfUj',
- 81: var4,
- 35: (var7[-43] + 'l'),
- 68: var4
- } ??
- {
- 33: ('N\u{1f600}xaY+' ?? par1),
- 44: var7[var5[var2]],
- 83: var4,
- 86: 'k'
- }),
- asin(0.4245871535895427)),
- (-(0.2913717674787144))),
- 0.9439800024935644),
- (-((true
- ? ((var1 ? false : var1)
- ? 0.09441225978923817
- : 0.42622157485045953)
- : (-(0.29370792038584836)))))))
- .isNotEmpty
- : (false && true));
- var3 += (-(fld1_0));
- }
- break;
- }
- }
- break;
- case 746492979:
- {
- var4 = var0;
- for (int loc1 = 0; loc1 < 88; loc1++) {
- var2 += 32;
- }
- }
- break;
- }
- }
- {
- int loc0 = 0;
- do {
- return foo0();
- } while (++loc0 < 57);
- }
- return foo0();
- }
-
- String foo1_3() {
- if ((0.42144855521066793).isNegative) {
- print((false ? (-(fld1_0)) : (-((-((-(0.26854952952179667))))))));
- switch (30) {
- case 3830102525:
- {
- try {
- var7.forEach((loc0, loc1) {
- var1 = (!(true));
- var6 = (foo1_2(var7[99]) ?? var6);
- });
- var6 ??= var6;
- } catch (exception, stackTrace) {
- var4 ??= ListBase.listToString([
- (Duration.microsecondsPerSecond + -82),
- (true
- ? var5[(var2 ~/ (false ? (~((var1 ? 46 : var2))) : var2))]
- : (-9223372034707292161 >> var5[var5[-86]])),
- Float32x4.wxyx
- ]);
- } finally {
- /**
- ** Multi-line
- ** documentation comment.
- */
- fld1_1 = (var5[var5[var2]]).isOdd;
- }
- /*
- * Multi-line
- * comment.
- */
- if ((SetBase.setToString((fld1_1
- ? {12, (fld1_1 ? (-(-22)) : (-(4395630341)))}
- : var6)))
- .isNotEmpty) {
- try {
- {
- int loc0 = 86;
- while (--loc0 > 0) {
- {
- int loc1 = 0;
- do {
- var0 = var7[(-(((--var2) &
- ((var1 ? (fld1_0).isNaN : true)
- ? (-16 | -20)
- : ((0.7513819161190503).isNaN ? 45 : loc1)))))];
-
- /// Single-line documentation comment.
- var5[(true ? loc0 : Float32x4.zxzx)] %= loc0;
- } while (++loc1 < 17);
- }
- for (int loc1 = 0; loc1 < 25; loc1++) {
- var5[Float32x4.zywy] <<= Int32x4.ywwx;
- }
- }
- }
- } catch (exception, stackTrace) {
- var7 = Map.from(foo1_0({
- 81: (foo1_1(((++var2) * (-(var5[21])))) +
- (var7[8] + (var7[var5[53]] ?? var0))),
- for (int loc0 in [
- (true ? 58 : Float32x4.wyww),
- var5[(fld1_1 ? 46 : var2)]
- ])
- 63: var7[(false
- ? var5[((24 >> -9223372036854710272) & var2)]
- : var5[(80 << var5[-31])])],
- 67: var0,
- 1: '3mlOA',
- 30: ('OQbG').substring((var2--), (--var2)),
- 93: ((var7[74] ?? var7[(++var2)])).toLowerCase(),
- ...{
- 85: foo1_1(-21),
- if ((!((!(false))))) 86: var0,
- 49: '62+v',
- 59: foo1_1((--var2)),
- for (int loc0 in [
- -10,
- -65,
- (var2++),
- (var2++),
- ((({
- ((var7[60] == var7[-30])
- ? var5[(-((var2++)))]
- : (var2--))
- } ==
- {var5[var2], -40, -81, (var2++), 93, 26})
- ? 38
- : (var1 ? var5[97] : -82)) *
- (--var2)),
- (~((true ? 5 : Float32x4.yxyy))),
- (var2++),
- ((++var2) << ((var2 % Int32x4.yxxw) >> (++var2)))
- ])
- 54: (var0 + 'ANyqN'),
- 94: (var1 ? '0T\u2665#w' : (var0).toUpperCase()),
- 68: '@n',
- 67: base64UrlEncode(((0.07857744084458451).isInfinite
- ? ([
- var2,
- var5[70],
- -32,
- Float32x4.yxwz,
- 31,
- (~(var2)),
- (var2 ?? (-70 + 57)),
- -91
- ] +
- [
- var2,
- var5[((!(var1))
- ? var5[(var2 ~/ Float32x4.zwyw)]
- : var5[var5[(var5[(~(var2))] % var2)]])],
- (var2 | (false ? (-(var2)) : var5[80])),
- (var2--),
- DateTime.daysPerWeek,
- (var2 ~/ var2)
- ])
- : (var1 ? var5 : [(var2++)])))
- },
- if (false)
- if (false)
- 26: (Uri.encodeComponent(foo1_1(var2)) + var7[var5[var2]])
- else ...{
- 4: (double.negativeInfinity).toStringAsFixed(var2),
- 46: Uri.decodeQueryComponent('bst3jz'),
- 5: ((true
- ? (true ? '(-f' : var7[(-(Int32x4.yzxz))])
- : var7[(var5[(fld1_1 ? (var2--) : var2)] >>
- (-((false ? 8589934591 : 33))))]) ??
- '4ov'),
- 37: var7[var5[100663045]],
- 13: '2B'
- }
- }, {
- 71: 'Hxbq',
- 22: ('\u{1f600}Jtj').substring(
- (-36 | var5[(~((var2++)))]), 9223372032559874048)
- }, 0.3710694748818374));
- fld1_0 ??= 0.010604823956237519;
- } finally {
- for (int loc0 = 0; loc0 < 84; loc0++) {
- var5[Float32x4.xwwz] <<=
- ((((fld1_1 ? false : ('e\u{1f600}O+Vc').isNotEmpty) &&
- (!(fld1_1)))
- ? (-73 | var5[Int32x4.yzwx])
- : Uint16List.bytesPerElement) ~/
- var2);
- }
- }
- }
- }
- break;
- case 3830102528:
- {
- fld1_1 ??= true;
- throw (-((-17).ceilToDouble()));
- }
- break;
- }
- }
- return var0;
- }
-
- void run() {
- super.run();
- {
- int loc0 = 61;
- while (--loc0 > 0) {
- {
- int loc1 = 77;
- while (--loc1 > 0) {
- {
- int loc2 = 0;
- do {
- break;
- } while (++loc2 < 84);
- }
- }
- }
- if (((var1 || fld1_1) && (!((!((!((!((!(true)))))))))))) {
- switch (Int32x4.yyzx) {
- case 900727295:
- {
- /// Single-line documentation comment.
- fld1_1 ??= (!(true));
- for (int loc1 in ((var5 ??
- Uri.parseIPv6Address(
- foo1_3(), var5[(loc0 + var5[4096])], -34)) ??
- var5)) {
- var7[(38 << (false ? (~(-58)) : Float32x4.yyxy))] =
- Uri.decodeFull(foo1_3());
- var5 ??= var5;
- }
- }
- break;
- case 900727304:
- {
- fld1_1 =
- (SecurityContext.alpnSupported ? (var3).isFinite : var1);
- fld1_0 += 0.3154406798513474;
- }
- break;
- }
- var2 ^= var2;
- } else {
- if (((-(var3)) <= (-(fld1_0)))) {
- var6 = foo1_2('0vsDWF9');
- } else {
- var6 ??= ((fld1_0 <= 0.16230005903410238)
- ? ((!((0.5144029832155854 > (0.8199455895430549 / var3))))
- ? foo1_2('ken')
- : var6)
- : (fld1_1 ? {56, 6442450945, 2} : {34}));
- }
- var5[Float32x4.zwzw] += (true ? var2 : (~(Float32x4.wyyx)));
- }
- }
- }
- }
-}
-
-class X2 extends X0 with X1 {
- Set<int> fld2_0 = {for (int loc0 = 0; loc0 < 60; loc0++) -56, 29};
-
- bool foo2_0(int par1) => var1;
- bool foo2_1(bool par1) {
- for (int loc0 in var6) {
- var2 ~/= ((((((fld2_0 ?? (true ? var6 : var6)) ?? fld2_0))
- .union({(~(-21)), 10}) !=
- {(var5[90] ~/ (-(-90)))})
- ? par1
- : (var7[(~(82))]).isNotEmpty)
- ? ((~(loc0)) *
- ((true ? (-4294966272 ?? -21) : var2) +
- Duration.millisecondsPerMinute))
- : (-9223372032559807488 ~/ 4294968296));
- }
- if (('DeAm#f' ==
- ((Uri.encodeQueryComponent((0.3687340601979223).toString()) ??
- var7[-23]) ??
- foo1_3()))) {
- throw (([Float32x4.wyyz, -9223372036854743039])
- .sublist((--var2), (--var2)) +
- ((true ? var1 : (!(false)))
- ? foo2(
- foo1_2('JLXt'),
- [
- var5[Int32x4.zxzx],
- Int32x4.xxwy,
- (var2++),
- Float32x4.yzxx,
- (var2++),
- -15
- ],
- foo1_0(var7, var7, 0.7904389283184639))
- : (var1
- ? [Float32x4.yzyz, Int32x4.wxxy, var2, (~(var5[-47]))]
- : var5)));
- } else {
- var7[var2] ??= ((({
- ...{
- for (int loc0 = 0; loc0 < 19; loc0++)
- 36: (var7[var2] ?? (par1 ? ('ccb9z' + 'iM') : var0)),
- 3: ('1sG' + var0),
- for (int loc0 in {
- (-(var5[var2])),
- if (var1) Int32x4.zxxx,
- -4294967168,
- -61,
- (~((par1 ? (~(-70)) : (var2--)))),
- (-(7)),
- -96,
- Uint32List.bytesPerElement
- })
- 85: var4
- },
- if (foo2_0(-91)) 38: (var3).toString() else 30: 'uI\u2665\u{1f600}',
- 72: '@'
- }[(par1 ? 14 : var2)])
- .trim())
- .substring((36 ~/ var5[(++var2)]), var5[((-(25)) * -53)]) ??
- foo1_3());
- /*
- * Multi-line
- * comment.
- */
- {
- int loc0 = 0;
- do {
- {
- String loc1 = 'jG7t';
- /**
- ** Multi-line
- ** documentation comment.
- */
- {
- int loc2 = 57;
- while (--loc2 > 0) {
- print((var6 ??
- (foo1_2(var0)).union(foo1_2(('n' + var7[(++var2)])))));
- }
- }
- }
- } while (++loc0 < 69);
- }
- }
- return (!(((!((par1 && false)))
- ? (true && foo2_0(-9223372036854771712))
- : (!(par1)))));
- }
-
- double foo2_2(Map<int, String> par1, int par2) {
- switch (var2) {
- case 3816231196:
- {
- throw (-(Int32x4.xxwx));
- }
- break;
- case 3816231204:
- {
- var7.forEach((loc0, loc1) {
- switch ((-43 ^ (-(Float32x4.wwxx)))) {
- case 2839002105:
- {
- var0 ??= (SetBase.setToString(((var1 ? var1 : (true || var1))
- ? fld2_0
- : {
- Int32x4.yyzw,
- Int32x4.yyxy,
- (2 >> Int32x4.ywzx),
- (var1
- ? ((foo2_1(var1) ? 17 : loc0) ~/
- (-(var5[var2])))
- : par2),
- Float32x4.zwwx,
- par2,
- Int32x4.wzzz,
- Int32x4.zyzw
- })) ??
- (loc1 +
- var7[((true
- ? (var1 &&
- bool.fromEnvironment(var7[(var2--)]))
- : foo2_1(false))
- ? 35
- : (-(66)))]));
- for (int loc2 = 0; loc2 < 23; loc2++) {
- switch ((-73 ^ (Int32x4.xyzz >> Float32x4.yzzz))) {
- case 1710454916:
- {
- var3 = 0.3372913861348876;
- print(((-(var3)) * var3));
- }
- break;
- case 1710454922:
- {
- var4 ??= ((false
- ? (var1
- ? var1
- : (fld2_0 ==
- {
- (false ? -27 : (-(92))),
- loc2,
- var5[loc2],
- (var1
- ? Float32x4.yywy
- : (false ? -74 : 2)),
- ((-(-50)) ^ 32),
- (var2++)
- }))
- : var1)
- ? base64UrlEncode([
- for (int loc3 in {
- (-(par2)),
- loc0,
- (-((par2++))),
- Float32x4.yyyx
- })
- (par2--),
- (-((-(var5[var5[var5[-41]]])))),
- if (({
- loc2,
- Duration.microsecondsPerSecond,
- (([
- (par2++),
- (-90 ^ -5),
- var5[(~(0))],
- loc2
- ] !=
- var5)
- ? -9223372032559808512
- : (par2++))
- } ==
- {
- (var1 ? (-((loc2 % loc2))) : loc2),
- -94,
- -62
- }))
- (++var2),
- loc2,
- for (int loc3 in {
- 55,
- (~(var5[var5[(++par2)]])),
- ((var1
- ? (-((++var2)))
- : var5[(true ? var5[68] : 10)]) -
- par2),
- (-(Float32x4.wzxx))
- })
- (Int32x4.yxzy | var5[-1]),
- (foo2_1(false) ? (-(32)) : loc0),
- (--par2),
- if ((!(false))) (var1 ? var5[loc0] : 30)
- ])
- : ('b1TKp3' ??
- (var4 +
- var7[(~(var5[
- ((var1 ? var2 : loc2) - 72)]))])));
- }
- break;
- }
- fld2_0 = ((!((false
- ? false
- : (false ? (!((var7[-28] != ''))) : var1))))
- ? (((var1
- ? (true ? Set.identity() : var6)
- : {
- -63,
- Int32x4.xxyx,
- var5[((var1
- ? (var5[-9223372032559808496] >>
- 59)
- : Int32x4.wxxy) ~/
- var5[var5[-48]])],
- (par2 ?? par2),
- 44,
- var5[(var1 ? -26 : (-(par2)))]
- }) ??
- ({
- loc2,
- var2,
- ZLibOption.defaultMemLevel,
- (true ? Int32x4.wyzz : 40),
- (false ? loc2 : var5[42]),
- -16
- } ??
- var6)))
- .union({loc0, (var2++), (-1 * (~(var2)))})
- : (bool.fromEnvironment((var3)
- .toStringAsFixed(Uint64List.bytesPerElement))
- ? fld2_0
- : {
- (par2++),
- (var1 ? loc2 : (++var2)),
- ((false || false) ? Int32x4.xyyz : (++par2)),
- var5[-98],
- Float32x4.zwwy,
- var5[var5[62]],
- (~(Float32x4.ywww))
- }));
- }
- }
- break;
- case 2839002106:
- {
- for (int loc2 = 0; loc2 < 13; loc2++) {
- {
- int loc3 = 0;
- do {
- switch ((loc3 | -76)) {
- case 2164097105:
- {
- var4 ??= (var1).toString();
- var5 = ((!(((true || var1) !=
- (false ? var1 : (!(foo2_1(var1)))))))
- ? foo2(
- ((var6).union(foo1_2(loc1))).toSet(),
- [
- -67,
- if (((var1
- ? 59
- : (-((false ? -97 : par2)))) !=
- (false
- ? ((var1 || var1)
- ? (-((par2++)))
- : 4)
- : (--var2)))) ...[
- ((92 ~/ Int32x4.yzwx) << 70),
- Float32x4.xxyz,
- Int8List.bytesPerElement
- ] else
- 69
- ],
- var7)
- : foo2(foo0(), Uri.parseIPv4Address(var0),
- var7));
- }
- break;
- case 2164097111:
- {
- var4 ??= var7[Float32x4.zxzw];
- }
- break;
- }
- } while (++loc3 < 96);
- }
- fld2_0 = var6;
- }
- }
- break;
- }
- });
- for (int loc0 in (foo2_1((var5 !=
- (false
- ? [par2]
- : foo2(
- var6,
- [20],
- ({
- 21: var0,
- 68: foo1_3(),
- 24: ('1MF' + '8s\u2665yx+ ')
- } ??
- {
- 9: var7[var2],
- 48: 'mB(wW\u{1f600}',
- 74: 'ojEw\u{1f600}\u{1f600}',
- 80: '\u26655E-hj\u{1f600}',
- 10: (false ? 'W7i5\u2665YX' : '! Ed9&'),
- 88: (false ? var0 : 'N0D9(H\u{1f600}'),
- 5: 'QZ'
- })))))
- ? foo1_2('XP')
- : {
- if ((foo2_1(var1)
- ? (foo2_1((fld2_0).add(-9223372036854774784)) || var1)
- : var1))
- (~(Float32x4.zyww)),
- Float32x4.xwyw,
- ((((var1 ? true : var1) ? 0.3447071353935154 : var3) >=
- 0.5995056331958718)
- ? ZLibOption.MAX_LEVEL
- : 16),
- 9223372032559841279,
- Int32x4.zwyy
- })) {
- for (int loc1 = 0; loc1 < 19; loc1++) {
- var1 = (!(bool.fromEnvironment(MapBase.mapToString({
- 1: '4',
- 56: var0,
- 85: var0,
- 51: var7[-4],
- 42: ((!((!(false)))) ? par1[72] : MapBase.mapToString(var7))
- }))));
- }
- }
- }
- break;
- }
- print((((var1 ? 'kP' : (var1 ? 'irjF' : var7[var5[90]])) ??
- ((!(false)) ? 'vWa\u{1f600}' : var0)) +
- 'xzpK'));
- return var3;
- }
-
- void run() {
- super.run();
- {
- int loc0 = (~(-24));
- var0 ??= ((false
- ? foo2_1((true
- ? (var1 && (var2).isOdd)
- : (('dTYR' ?? 'G\u{1f600}P14\u{1f600}a')).isEmpty))
- : ((var1 && true) || (!(var1))))
- ? (var4 ?? 'I')
- : 'QO');
- }
- }
-}
-
-class X3 extends X1 {
- Map<int, String> fld3_0 = {
- if (true) if (false) 45: 'ynEn\u2665nG' else 70: 'c\u{1f600}mN4\u2665a',
- if (true) 30: '6\u2665P!Pbi',
- 81: 't',
- 82: '17fx#!',
- 92: 'H',
- if (true) 69: ')Ls'
- };
- Set<int> fld3_1 = {27};
- int fld3_2 = 34;
-
- String foo1_1(int par1) {
- throw (ListBase.listToString(foo2({
- -4294967169,
- par1
- }, [
- -97,
- (var5[(var1 ? var5[87] : Int32x4.yxxy)] * Int32x4.yyxx),
- var2,
- (false ? 10 : var5[var5[(par1++)]])
- ], var7)) ??
- 'o');
- }
-
- bool foo3_0(double par1) {
- {
- Set<int> loc0 = (true ? fld3_1 : var6);
- {
- Set<int> loc1 = (false
- ? foo0()
- : {
- for (int loc2 in [var2, (-(Float32x4.xzzw))])
- if (false) Float32x4.wxyz else (++fld3_2),
- ((var1
- ? 5
- : var5[(((var5[(true ? fld3_2 : fld3_2)] ~/ 48) | 56) %
- var5[-4])]) ??
- (var2++))
- });
- for (int loc2 = 0; loc2 < 90; loc2++) {
- {
- int loc3 = 95;
- while (--loc3 > 0) {
- return (((0.7073184699576396).isNaN
- ? var7
- : (Map.of(Map.from(var7)) ??
- Map.unmodifiable(Map.identity()))))
- .isEmpty;
- }
- }
- try {
- var1 = (((12 >= Int32x4.ywxx) ? true : true)
- ? false
- : (((var1 ? fld3_0[Int32x4.wyxy] : '') ?? var7[Float32x4.xwwx]))
- .isEmpty);
- var2 |= ((fld3_2++) ?? (fld3_2--));
- } catch (exception, stackTrace) {
- var5 ??= var5;
- } finally {
- var4 = 'A';
- break;
- }
- }
- {
- double loc2 = (-(exp((acos(0.06129144867031855) ?? var3))));
- fld3_0 = (((({Int32x4.ywxw, 6442450943}).union(foo0()))
- .add((++fld3_2))
- ? false
- : false)
- ? foo1_0(
- (foo1([var5[var2], var5[75], 42], false) ?? var7), var7, loc2)
- : (var1
- ? {
- for (int loc3 = 0; loc3 < 48; loc3++) 78: 'dWek8',
- 40: fld3_0[(var5[-81] & Int32x4.xzyw)],
- 73: (' )G\u2665-d(').substring(
- (NetworkInterface.listSupported
- ? (~(((++var2) ?? (fld3_2 * fld3_2))))
- : var5[-75]),
- fld3_2),
- 74: ('k9O\u2665').trimLeft(),
- 88: var7[(++var2)],
- for (int loc3 = 0; loc3 < 27; loc3++)
- 60: ((false || var1) ? var7[46] : var0),
- 99: ((var3).isNaN
- ? (Uri.decodeComponent(foo1_3()) + var4)
- : var7[-77]),
- 92: (true
- ? ('').padLeft(82, '')
- : ('' ?? var7[(false ? 94 : 58)]))
- }
- : var7));
-
- /// Single-line documentation comment.
- fld3_1 ??= ((loc1 ?? foo1_2(fld3_0[(var2--)])) ?? foo1_2(foo1_3()));
- }
- }
- }
- return (var1 ? (!(var1)) : var1);
- }
-
- String foo3_1(int par1, String par2, String par3) {
- switch (var2) {
- case 3768780679:
- {
- {
- int loc0 = (++par1);
- var0 ??= ListBase.listToString(var5);
- if (true) {
- var5 = [
- Float32x4.xyxz,
- (var1
- ? ((!(false)) ? Float32x4.xyyw : (++fld3_2))
- : var5[fld3_2]),
- par1,
- (~(Float32x4.zxwy)),
- if ((foo3_0(var3)
- ? ([
- (++fld3_2),
- ...[
- ...[
- var5[(true ? Float32x4.xxzx : (--fld3_2))],
- 54,
- (-((((foo3_0(var3)
- ? (!(false))
- : ((var1 ? (~(-63)) : var5[-40]))
- .isOdd)
- ? ((0.8329420640871532 != var3) && var1)
- : var1)
- ? 43
- : (Float32x4.zxxy - Float32x4.zxxw)))),
- Int32x4.zzwx
- ],
- ...[
- (var5[-48] * (fld3_2++)),
- Int32x4.wyyw,
- (~(-76)),
- ((par1).isEven ? (--par1) : -13),
- Float32x4.wxyx
- ],
- for (int loc1 in [
- (++fld3_2),
- -15,
- (SecurityContext.alpnSupported
- ? Int32x4.yxyw
- : Float32x4.yxxw),
- if (true) var5[(var1 ? -32768 : par1)],
- ((--var2) ^ (++fld3_2))
- ])
- (fld3_2--),
- 93,
- (~((-(ZLibOption.minMemLevel)))),
- ((Float32x4.zyzx >> -14) & Float32x4.yxxw)
- ],
- (var1
- ? (++par1)
- : ((var3).isInfinite ? Float32x4.zwww : -84)),
- var2
- ] ==
- [
- 9223372032559808639,
- -85,
- Float32x4.wzyy,
- loc0,
- [
- ((-(36)) <<
- ((var1
- ? var1
- : ({
- 45: 'ay',
- 7: par3,
- 69: Uri.decodeFull(
- (foo1_3() + 'LX+'))
- })
- .isEmpty)
- ? (~((13 | 64)))
- : (-(var2)))),
- (par1--),
- ((~((true ? (var2--) : -31))) >> 9),
- (-((35 % (~(var5[var5[39]]))))),
- 4395630341,
- Int32x4.zxxy,
- if ((var1
- ? foo3_0(var3)
- : (0.6201792653929837).isInfinite)) ...[
- Int32x4.wxxx,
- (fld3_2 * (--fld3_2)),
- var5[((~(var5[var5[var5[(-(-23))]]])) +
- (~(-4294966296)))],
- loc0,
- for (int loc1 in [var5[Float32x4.yzww]]) 17,
- (~(var5[(++par1)])),
- -58,
- ((!(('').isEmpty))
- ? ((-(Float32x4.ywwx)) * (++par1))
- : Int32x4.yxyz)
- ]
- ][((var1 ? var1 : var1) ? var5[0] : par1)],
- ((~(70)) +
- (par1 + (-77 | ZLibOption.MAX_WINDOW_BITS))),
- (-(Int32x4.zywy)),
- (~(Float32x4.zywz))
- ])
- : (var1 ? true : true)))
- fld3_2
- ];
- }
- }
- var3 *= ((var3 + 0.6761038672016147) ?? (-(double.minPositive)));
- }
- break;
- case 3768780685:
- {
- {
- int loc0 = 67;
- while (--loc0 > 0) {
- {
- Map<int, String> loc1 = foo1(
- Uri.parseIPv4Address(('E Hu\u{1f600}' + '\u2665l&#!')),
- (!(false)));
- var3 ??= var3;
- }
- var5 = (var5 +
- ((({
- 79: (foo1_3() ?? 'eD'),
- 73: (var1 ? par2 : ' xdXgW'),
- 4: 'pUc(q',
- 15: 'K\u{1f600}hmdZ\u2665',
- 95: (var1 ? var4 : (var1 ? fld3_0[-45] : foo1_3()))
- })
- .isNotEmpty
- ? ((var1 ? var1 : (var1 ? var1 : foo3_0(var3))) ||
- foo3_0(var3))
- : (!(((false || true) ? var1 : false))))
- ? [
- (~((-61 ??
- (~((-(var5[(var1 ? fld3_2 : var5[34])]))))))),
- (var5[13] ^ (var1 ? 35 : -76)),
- (-(((~(-47)) ~/ (--par1))))
- ]
- : foo2({
- -36,
- ((0.3910802543332075).isNegative
- ? (~((var2++)))
- : (var2 &
- (var1
- ? [
- -67,
- (fld3_2++),
- if ((!((!((var1
- ? true
- : (!(false))))))))
- (false
- ? (~(Float32x4.wyyy))
- : (var1
- ? (1 ^ (-(16)))
- : var5[94])),
- fld3_2,
- var2,
- 67
- ][-12]
- : Float32x4.wwxw))),
- 26,
- [
- (var1
- ? (--fld3_2)
- : (((!(var1))
- ? (~((foo3_0(0.9959805940480148)
- ? (33 ~/ loc0)
- : Float32x4.xywx)))
- : (15 % var5[var5[-47]])) <<
- -86)),
- (-((~(RawSocketOption.levelIPv6))))
- ][var5[var5[(ZLibOption.maxMemLevel ^ -3)]]],
- -29
- }, [
- (var1 ? Float32x4.wxxw : (--par1)),
- ...[
- 52,
- (-((true ? -12 : 44))),
- var5[((var5[34] * 30) >> 4294967360)],
- ((--var2) <<
- (true
- ? var5[(-4 ~/ Int32x4.yyww)]
- : (bool.fromEnvironment(var7[fld3_2])
- ? (~((false ? loc0 : var5[(++par1)])))
- : ((!(false))
- ? (var5[var5[loc0]] ^ Int32x4.wxzz)
- : par1)))),
- (((false ? var0 : '') !=
- (true
- ? MapBase.mapToString(({
- 7: 'WTT7\u{1f600}e3',
- 22: '',
- 36: (var1
- ? 'F'
- : (var1 ? fld3_0[var2] : '')),
- 37: 'l@a',
- 85: (var1 ? '' : par3),
- 82: 'eb',
- 37: '11',
- 41: var7[94]
- } ??
- var7))
- : (var1 ? var4 : par2)))
- ? (~(var5[-71]))
- : 9),
- 32,
- if (bool.fromEnvironment(
- fld3_0[var5[ZLibOption.MIN_MEM_LEVEL]]))
- var5[(--par1)],
- (par1--)
- ],
- for (int loc1 in {
- for (int loc2 in [
- ((!((Map.unmodifiable({
- 86: var4,
- 31: var0,
- 85: (par3 + ''),
- 91: (var1
- ? fld3_0[4]
- : '!M\u{1f600}!vOw'),
- 45: '7T',
- 19: 'fha+',
- 38: (false ? '' : fld3_0[70])
- }) !=
- {
- 92: '@4',
- 41: var7[loc0],
- 24: (foo3_0(0.06591134699771606)
- ? '\u2665)\u2665NnO+'
- : 'JM3Hn\u{1f600}'),
- 26: 'aQ51Yz',
- 64: var7[
- (-((var5[18] & (36).bitLength)))]
- })))
- ? (89 ^
- (((44 - par1) * -9223372034707292160) &
- var5[128]))
- : -46),
- (fld3_2++),
- ((([
- -89,
- var2,
- (fld3_2++),
- var5[-4294967264],
- -25,
- var2,
- var5[((!(var1))
- ? (var1 ? -3 : -81)
- : var5[loc0])],
- (var1
- ? par1
- : ((~((fld3_2++))) >>
- (-((-(-64))))))
- ] ??
- foo2(var6, [
- 4295032831
- ], {
- 53: foo1_3(),
- 94: var7[13],
- 82: var7[-60],
- 30: fld3_0[-9223372032559742976],
- 98: foo1_3()
- })) !=
- var5)
- ? (--par1)
- : loc0),
- 56,
- if (((var5[21]).isOdd ? true : false))
- ((++par1) -
- (var1 ? var5[DateTime.january] : (par1--)))
- else
- fld3_2,
- if ((!(var1))) 74,
- (par1 ^ var5[26])
- ])
- (~(var2)),
- for (int loc2 in {
- 6442450944,
- Float32x4.ywyw,
- -9223372032559804416,
- (~(var5[var5[26]])),
- Float32x4.xyxy,
- (--fld3_2),
- var5[98]
- })
- if (false) -26,
- (~((-((-((-48 - -9223372036854775680))))))),
- ...{
- (-((var2--))),
- if (true) -100663046 else var5[(~(par1))]
- },
- (~((~((fld3_2++))))),
- ...{
- ((List.filled(0, 26) ==
- [
- (-(-52)),
- -29,
- (--fld3_2),
- (0.22302566014161784).floor(),
- (par1 % -56)
- ])
- ? (var1
- ? (var2++)
- : ((!((!(true))))
- ? ((var1 || foo3_0(var3)) ? 76 : par1)
- : (-(-13))))
- : ((foo1_0((var1 ? fld3_0 : var7), var7,
- var3))
- .isEmpty
- ? 97
- : (var1 ? var2 : -9223372036854774784))),
- (-(Float32x4.zyzw)),
- (--var2)
- }
- })
- ((var3 < (-(var3))) ? -9223372032559808000 : -71),
- -100663046,
- if ((var1
- ? bool.fromEnvironment('vV0')
- : (Map.from({
- 78: '',
- 49: '\u{1f600}\u{1f600}4Mz',
- 70: fld3_0[par1],
- 95: '\u{1f600}2tIYqE',
- 43: (true ? 'baf-\u2665' : var4),
- 30: var7[(-((-68 % ZLibOption.defaultLevel)))]
- }))
- .isNotEmpty))
- -13
- else
- (var1 ? (-((-(var5[56])))) : (var2--)),
- (~((~((-((var2++)))))))
- ], {
- 88: ('bV\u{1f600}iqO').toLowerCase(),
- 42: '(hZ4S',
- 37: var7[-79],
- 36: var0
- })));
- }
- }
- {
- int loc0 = 0;
- do {
- try {
- print(foo2(
- fld3_1,
- (fld3_0[var5[-12]]).codeUnits,
- (({
- 36: var4,
- 30: '0\u{1f600}EYWqr',
- 66: 'S',
- 3: '+J3Gj',
- 71: '\u{1f600}-q',
- 13: 'V3QN',
- 34: ''
- } ??
- {
- 54: fld3_0[(var2--)],
- 74: (foo3_0(
- ((-(var3)) * (0.8613045491468889 + var3)))
- ? var7[78]
- : (((var1 ? (47).isEven : var1) ? true : true)
- ? (var4 ?? 'UzK')
- : 'fH1smd')),
- 12: '\u2665',
- 18: 'V'
- }) ??
- var7)));
- } catch (exception, stackTrace) {
- fld3_1 = foo0();
- for (int loc1 = 0; loc1 < 29; loc1++) {
- if (var1) {
- {
- int loc2 = 0;
- do {
- var5 = (foo3_0(var3)
- ? [
- ((--par1) ^ (~(93))),
- if ((var3).isFinite)
- for (int loc3 in [
- -5,
- Int32x4.zxyy,
- (true
- ? var5[var5[(var1 ? -23 : var5[68])]]
- : -99),
- ((!(var1))
- ? ((false
- ? var1
- : foo3_0(0.3133865362301862))
- ? Float64List.bytesPerElement
- : [
- Float32x4.yxzx,
- if (var1)
- (false ? 40 : 85)
- else
- ((String.fromCharCode((foo3_0(
- 0.414460580942719)
- ? var5[-14]
- : var2)) ==
- 'mII\u{1f600}zkM')
- ? var5[(~(-51))]
- : ((var1
- ? (!(var1))
- : var1)
- ? var5[0]
- : (-(var2))))
- ][5])
- : fld3_2),
- (par1++),
- -72,
- Int32x4.zzxy
- ])
- Int32x4.zyww
- else
- Int32x4.wxyz
- ]
- : [
- ...[
- if ((false ? false : var1)) (-(52)),
- (++par1),
- (par1--),
- (-((-([
- (((var0 + fld3_0[(++var2)])).isNotEmpty
- ? Float32x4.yzxw
- : var5[35])
- ][loc0])))),
- (~(-17))
- ],
- 38,
- ...[
- (var1 ? (par1++) : -10),
- if (true) -62 else var2,
- if ((!((var3).isFinite)))
- Int32x4.xxzz
- else
- -45
- ],
- if ((true || false)) (-(-93)),
- (--fld3_2),
- ([
- (fld3_2--),
- if ((base64UrlEncode(var5) == 'RY'))
- (++fld3_2)
- else
- -9223372032559808383,
- Float32x4.zyxy,
- loc0,
- -55,
- if (('O \u{1f600}e\u2665').isNotEmpty)
- if (var1)
- (--var2)
- else
- for (int loc3 in {
- loc0,
- (~((--var2))),
- (-(-35)),
- Float32x4.xxyw,
- 65,
- -4,
- -4194304251,
- -54
- })
- (((0.671280258888436 ==
- (0.16535430333243706 *
- 0.18316039550464436)) ||
- var1)
- ? var5[12]
- : (~((--var2))))
- else if (false)
- if (var1) (-(Int32x4.zzwx)) else loc2
- else
- Int32x4.yzyw
- ][loc1] *
- (--par1)),
- (-71 * 38)
- ]);
- } while (++loc2 < 89);
- }
- } else {
- {
- int loc2 = 0;
- do {
- fld3_0 ??= ((((Map.unmodifiable(var7)).isEmpty ||
- (!(({
- 11: 'v+MHeiB',
- 48: var7[(true
- ? ((var2--) ?? fld3_2)
- : var5[(fld3_2--)])],
- 52: '(('
- })
- .isEmpty)))
- ? fld3_0
- : {
- 39: foo1_3(),
- 21: 'IXzJ+',
- 76: 'K2C#',
- 16: ('\u{1f600}Gh' + '#i'),
- 62: foo1_3(),
- 19: foo1_3(),
- 32: par3,
- for (int loc3 in [
- (par1--),
- -66,
- -96,
- -35,
- Float32x4.zzyz
- ])
- 72: 'y vxi'
- }) ??
- {13: par2});
- switch (4096) {
- case 3159134388:
- {
- /// Single-line documentation comment.
- {
- int loc3 = 0;
- do {
- fld3_0 ??= foo1(
- var5,
- ((((true ? par2 : var7[var5[loc1]]))
- .isNotEmpty
- ? 9
- : -55) !=
- var5[-36]));
- fld3_1 = foo0();
- } while (++loc3 < 79);
- }
- }
- break;
- case 3159134393:
- {
- throw Int32x4.zxxw;
- }
- break;
- }
- } while (++loc2 < 77);
- }
- }
- }
- }
- } while (++loc0 < 98);
- }
- }
- break;
- }
- /*
- * Multi-line
- * comment.
- */
- return ((0.7728524536008519).isNaN ? 'BjzeSsJ' : foo1_3());
- }
-
- void run() {
- super.run();
- var5 ??= var5;
- print({4294968296});
- }
-}
-
-main() {
- int count = 0;
- try {
- foo0();
- } catch (e, st) {
- count++;
- }
- try {
- foo1((' MQz').codeUnits, var1);
- } catch (e, st) {
- count++;
- }
- try {
- foo2(
- (var6).toSet(),
- (var1
- ? [-9223372036854775681, -66, 9223372032559874047, -3, 74]
- : var5),
- Map.identity());
- } catch (e, st) {
- count++;
- }
- try {
- X0().foo0_0(var7);
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_0(
- (false
- ? {
- 7: 'QMNg',
- 12: 'wzc5-Iq',
- 63: '29an-z',
- 86: 'sF5',
- 59: '\u2665L',
- 43: 'k',
- 62: 'NvF\u{1f600}k',
- 84: 'ZW 1-o'
- }
- : var7),
- {
- 28: '@smXqKl',
- 66: 'oL',
- if (false) 74: 'B' else 81: 'X',
- if (false) 18: 'j' else 25: 'N',
- 44: '\u{1f600}lrx8m',
- 20: 'hC',
- 73: 'q',
- 63: '\u{1f600}nE'
- },
- 0.18875619647922648);
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_1((-((++var2))));
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_2((var1
- ? (false
- ? (true ? var7[((!(var1)) ? var5[Int32x4.xxyx] : 3)] : var4)
- : Uri.encodeComponent(('yd' ?? (var0).padLeft(1, 'Q'))))
- : var7[-2147483649]));
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_3();
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_0(Int32x4.xyyw);
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_1((!(((!(var1)) && (!((var1 ? false : var1)))))));
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_2(var7, ((-(var5[(--var2)])) << 98));
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo3_0(0.37767598562234317);
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo3_1(
- -6, var0, (Uri.decodeComponent('yQg') + ((var4 ?? var4) + var0)));
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo1_0(
- Map.unmodifiable({77: 'hG'}),
- ((false
- ? {
- 88: 'Sv-EbnG',
- 73: 'G',
- 46: 'O#',
- 16: 'm1nf(',
- 91: 'F',
- 11: 'Q+O@K',
- 70: '3q\u2665BJ'
- }
- : Map.identity()) ??
- {
- 68: 'r',
- 56: 'IH&',
- 31: '9cqu',
- 49: '8ug',
- 84: 'mR2VyC',
- 41: 'gk&(asy'
- }),
- (var3 * sin(var3)));
- } catch (e, st) {
- count++;
- }
- try {
- X3().run();
- } catch (e, st) {
- count++;
- } finally {}
- Expect.equals(-47639, var2);
- Expect.equals(9, count);
-}
diff --git a/tests/language/vm/regression_38741.dart b/tests/language/vm/regression_38741.dart
deleted file mode 100644
index 2dd1223..0000000
--- a/tests/language/vm/regression_38741.dart
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2019, 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.
-
-// VMOptions=--deterministic
-
-// Found by DartFuzzing: would fail during deopt:
-// https://github.com/dart-lang/sdk/issues/38741
-
-import 'package:expect/expect.dart';
-
-@pragma('vm:prefer-inline')
-bool foo(int x) => x < 10;
-
-@pragma('vm:never-inline')
-bool bar(bool f) => f && foo(1);
-
-void main() {
- try {
- foo(null); // seed feedback for x < 10 with null receiver cid
- } catch (e) {}
- // Now when foo will be inlined into bar we will know that x is Smi,
- // this hower disagrees with type feedback (which currently is monomorphic and
- // expects null receiver for x < 10).
- for (var i = 0; i < 10000; i++) Expect.isFalse(bar(false));
- Expect.isTrue(bar(true));
-}
diff --git a/tests/language_2/identifier/built_in_illegal_test.dart b/tests/language_2/identifier/built_in_illegal_test.dart
index 822bfc9..652199e 100644
--- a/tests/language_2/identifier/built_in_illegal_test.dart
+++ b/tests/language_2/identifier/built_in_illegal_test.dart
@@ -20,19 +20,8 @@
// [cfe] Can't use 'dynamic' as a name here.
class export { }
// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'export'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'export' as a name here.
class external { }
// ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
@@ -43,111 +32,47 @@
// [cfe] Can't use 'factory' as a name here.
class get { }
// ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] A function declaration needs an explicit list of parameters.
-// [cfe] Expected an identifier, but got 'get'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'get' as a name here.
class interface { }
// ^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'interface' as a name here.
class implements { }
// ^^^^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got 'implements'.
-// [error line 56, column 18, length 0]
-// [analyzer] COMPILE_TIME_ERROR.IMPLEMENTS_NON_CLASS
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TYPE_NAME
-// [cfe] Expected a type, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'implements' as a name here.
class import { }
// ^^^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'import'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'import' as a name here.
class mixin { }
// ^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'mixin'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'mixin' as a name here.
class library { }
// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.LIBRARY_DIRECTIVE_NOT_FIRST
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'library'.
-// [cfe] The library directive must appear before all other directives.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'library' as a name here.
class operator { }
// ^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'operator' as a name here.
class part { }
// ^^^^
-// [analyzer] SYNTACTIC_ERROR.DIRECTIVE_AFTER_DECLARATION
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Directives must appear before any declarations.
-// [cfe] Expected an identifier, but got 'part'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_STRING_LITERAL
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [cfe] Expected ';' after this.
-// [cfe] Expected a String, but got '{'.
-// [cfe] Expected a declaration, but got '{'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'part' as a name here.
class set { }
// ^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_PARAMETERS
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] A function declaration needs an explicit list of parameters.
-// [cfe] Expected an identifier, but got 'set'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'set' as a name here.
class static { }
// ^^^^^^
// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
// [cfe] Can't use 'static' as a name here.
class typedef { }
// ^^^^^^^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_BODY
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] A class declaration must have a body, even if it is empty.
-// [cfe] Expected an identifier, but got 'typedef'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
-// [cfe] Expected an identifier, but got '{'.
-// ^
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_EXECUTABLE
-// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
-// [analyzer] SYNTACTIC_ERROR.MISSING_TYPEDEF_PARAMETERS
-// [cfe] A typedef needs an explicit list of parameters.
-// [cfe] Expected ';' after this.
-// [cfe] Expected a declaration, but got '}'.
+// [analyzer] COMPILE_TIME_ERROR.BUILT_IN_IDENTIFIER_IN_DECLARATION
+// [cfe] Can't use 'typedef' as a name here.
main() {}
diff --git a/tests/language_2/vm/regression_38412.dart b/tests/language_2/vm/regression_38412_test.dart
similarity index 100%
rename from tests/language_2/vm/regression_38412.dart
rename to tests/language_2/vm/regression_38412_test.dart
diff --git a/tests/language_2/vm/regression_38436.dart b/tests/language_2/vm/regression_38436.dart
deleted file mode 100644
index f350f6c..0000000
--- a/tests/language_2/vm/regression_38436.dart
+++ /dev/null
@@ -1,2364 +0,0 @@
-// Copyright (c) 2019, 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.
-
-// @dart = 2.9
-
-// VMOptions=--optimization_counter_threshold=1
-
-import "package:expect/expect.dart";
-
-// Found by DartFuzzing: would sometimes crash on OSR
-// https://github.com/dart-lang/sdk/issues/38436
-
-import 'dart:async';
-import 'dart:cli';
-import 'dart:collection';
-import 'dart:convert';
-import 'dart:core';
-import 'dart:io';
-import 'dart:isolate';
-import 'dart:math';
-import 'dart:typed_data';
-
-String var0 = '';
-bool var1 = true;
-int var2 = -30;
-double var3 = 0.895077679110543;
-String var4 = '';
-List<int> var5 = [55, -70];
-Set<int> var6 = {
- 1024,
- for (int loc0 in [
- 79,
- ...[23],
- ...[90, -89, -24],
- -90,
- 11,
- -19,
- -91
- ])
- -55,
- 67,
- -80,
- for (int loc0 = 0; loc0 < 29; loc0++) 20,
- for (int loc0 = 0; loc0 < 24; loc0++) ...{23, -41},
- ...{
- -75,
- 128,
- 9223372034707292159,
- -56,
- -59,
- for (int loc0 in {
- -67,
- for (int loc1 in [-27, -59, 31, 32, -66, -87]) -9223372036854775680,
- 85,
- -45,
- if (false) 70,
- 13,
- 43,
- 48
- })
- if (true) 63,
- ...{-90, -24, -9223372036854743041, -9223372032559808383, 86},
- -25
- }
-};
-Map<int, String> var7 = {
- 6: '',
- ...{56: 'B\u2665pwO', 73: 'ZJDi\u{1f600}m'},
- ...{73: ')', 14: '93Q'},
- 98: 'xA0jQL',
- 21: ')\u2665TOy',
- for (int loc0 = 0; loc0 < 82; loc0++) 34: 'Q3\u2665#61',
- ...{70: 'XXRXl3O', 56: '\u2665lda2Zy', 38: 'Dr#mtz', 6: 'nx'},
- 27: '('
-};
-
-Set<int> foo0() {
- var3 += ((((var0 + var7[var5[88]])).isEmpty ? true : var1)
- ? (var1 ? (var3 ?? var3) : var3)
- : (var1 ? 0.24414824314186978 : var3));
- var1 ??= true;
- return {(var2--), Duration.secondsPerHour, var5[var2]};
-}
-
-Map<int, String> foo1(List<int> par1, bool par2) {
- throw ((-(var3)) * (-(0.943305664017911)));
-}
-
-List<int> foo2(Set<int> par1, List<int> par2, Map<int, String> par3) {
- switch (-49) {
- case 4149672951:
- {
- for (int loc0 in foo0()) {
- var6 = var6;
- try {
- for (int loc1 = 0; loc1 < 70; loc1++) {
- switch (((var1
- ? ((var1 ? var1 : true) ? Float32x4.xzzw : (--var2))
- : (4295032831 % (loc1 + 93))))
- .floor()) {
- case 3294548737:
- {
- var5[Int32x4.xxwy] ^=
- (loc0 * ('!').compareTo(((!(true)) ? var4 : 'S')));
- }
- break;
- case 3294548738:
- {
- var0 = var4;
- loc0 <<= Int32x4.zwxz;
- }
- break;
- }
- {
- int loc2 = 0;
- do {
- var1 = ('Ncb\u2665P9K').isEmpty;
- var1 ??= (!(true));
- } while (++loc2 < 91);
- }
- }
- par3 ??= {
- 44: ((false
- ? false
- : ((true
- ? var7
- : {
- 17: par3[(var5[-73] - -20)],
- 80: var7[
- ((++loc0) ~/ ((!(false)) ? 47 : var2))],
- 30: '8Qvz3',
- 36: '',
- 10: (('@B!0bW6' + var4)).toLowerCase(),
- 89: var7[-9223372036854775296],
- 4: ') '
- }) !=
- var7))
- ? ((var1 || (!(var1))) ? var7[Float32x4.wxzw] : var7[-7])
- : '8h'),
- for (int loc1 in [
- (false
- ? ((([
- var2,
- -39,
- -74,
- Float32x4.zzxy,
- (~(var5[(67 + -86)])),
- -53
- ] +
- [(var2++), var5[par2[(--loc0)]]]) !=
- [
- var5[var5[var5[(loc0++)]]],
- loc0,
- loc0,
- -55,
- -69,
- loc0
- ])
- ? (loc0--)
- : loc0)
- : var2),
- (75 ^ 93),
- (false ? var5[Float32x4.xzyw] : (loc0++)),
- ...[
- for (int loc2 in {
- -22,
- (loc0 ^ 2),
- var5[(-((par2[-79] * 86)))],
- (++loc0),
- ((par2[var5[-45]] ?? 55) >> (true ? Int32x4.wyww : -45)),
- (~((++var2))),
- par2[var2]
- })
- (loc0--),
- if ((var7[(false ? (-(loc0)) : 19)]).endsWith(var4))
- (++var2)
- else
- (var1 ? loc0 : 39),
- (((var2++) & var2) & -26),
- if (false) (var1 ? Float32x4.wzzw : var5[129]),
- for (int loc2 in {
- (loc0--),
- (true ? loc0 : loc0),
- var2,
- var5[(0.4452451921266031).floor()],
- (~(-4294967196)),
- (loc0--),
- (--var2)
- })
- (var1 ? -30 : (loc0++)),
- (~((var1 ? 51 : var2))),
- (((var3 ?? pi) < 0.9098824013356337)
- ? ((true ? 57 : -48) << (--var2))
- : par2[-59])
- ]
- ])
- 84: var4,
- 57: var4
- };
- } catch (exception, stackTrace) {
- /**
- ** Multi-line
- ** documentation comment.
- */
- for (int loc1 = 0; loc1 < 89; loc1++) {
- switch ((var2--)) {
- case 3807258589:
- {
- print(({
- (-34 ^
- ((false || var1)
- ? 24
- : (-(((-((var1
- ? par2[(-(71))]
- : 9223372032559808768))) +
- (~(loc1))))))),
- (~((true ? loc0 : (false ? -75 : 33)))),
- Float32x4.zxwz,
- (false ? (15 * -83) : (var2--)),
- ((var7 !=
- ((true ? var1 : false)
- ? var7
- : {
- 99: (true ? 'TobD' : var0),
- 59: (var4 ?? var4),
- 13: var4,
- 58: Uri.encodeFull(var4),
- 99: var7[loc1]
- }))
- ? loc1
- : (var1
- ? ((72 >> -15) ~/ (loc0--))
- : -9223372030412324864)),
- 32
- } ??
- par1));
- }
- break;
- case 3807258592:
- {
- var1 ??= true;
- try {
- var7 = {9: (var1 ? 'ON' : 'f\u{1f600}b')};
- par2 = (true
- ? var5
- : [
- DateTime.january,
- (40 - (~(var2))),
- (var1 ? (--loc0) : 23),
- var5[(--var2)]
- ]);
- } catch (exception, stackTrace) {
- var3 /= 0.9998663372091022;
- } finally {
- par2 ??= ((var1
- ? false
- : (((par1 ??
- {
- -68,
- 86,
- -33,
- var5[(-9223372034707292159 - 90)],
- (24 - (++var2)),
- (-(var2)),
- (loc1 * Int32x4.wyxx)
- }))
- .difference({
- (var1 ? Float32x4.yzyw : (loc1 % loc0)),
- 6,
- 22,
- 91,
- loc0,
- (true ? loc1 : loc1)
- }) ==
- foo0()))
- ? par2
- : [
- (var2--),
- (-((++loc0))),
- ((-(var5[-52])) ~/
- (true ? Int32x4.wyyy : (loc0--))),
- (var3).toInt()
- ]);
- var5[99] += (~(Float32x4.ywxw));
- }
- }
- break;
- }
- var5 = (par2 ??
- [
- ...[72],
- for (int loc2 in {Float32x4.xxwz, loc1})
- ((loc0--) ~/ (var2++)),
- par2[(++var2)],
- (-((--var2))),
- (var2++),
- -56,
- (~((~(loc0)))),
- for (int loc2 in {
- (-((~(17)))),
- Float32x4.zzzw,
- Float32x4.zyyz,
- (var2--),
- (Int32x4.wzwz % 78),
- loc0
- })
- Int32x4.xzzy
- ]);
- }
- {
- int loc1 = 0;
- do {
- loc0 &= (-(4295000065));
- } while (++loc1 < 94);
- }
- } finally {
- var3 -= 0.020483900923215503;
- try {
- return [
- ...[
- (loc0--),
- for (int loc1 in {Float32x4.yxyz})
- if (var1) (~(-35)) else loc0,
- (++loc0),
- for (int loc1 = 0; loc1 < 43; loc1++)
- (var5[var5[par2[var5[-9223372032559808384]]]] &
- Int32x4.yzxy),
- for (int loc1 = 0; loc1 < 98; loc1++) (-((~(Int32x4.xwwy)))),
- Float32x4.yzzz
- ],
- (-(Int32x4.xzxz))
- ];
- } catch (exception, stackTrace) {
- for (int loc1
- in (((((!((((0.13101852551635873 == 0.4825498460563603)
- ? var7
- : var7) !=
- var7)))
- ? 1
- : par2[var2]))
- .isEven
- ? {
- (var2++),
- (-48 | -54),
- (~(par2[loc0])),
- par2[var5[Int32x4.zyzz]],
- -2,
- (true ? (~((-(((!(false)) ? -11 : var2))))) : 73),
- if ((0.15992181539430828).isInfinite) (++var2)
- }
- : (false ? {-6} : {((++loc0) % 27), 92})) ??
- Set.identity())) {
- var6 ??= foo0();
- }
- var5[(~(((true ? -10 : Float32x4.zzwy) -
- Duration.millisecondsPerSecond)))] = (~((var2--)));
- }
- }
- }
- par3.forEach((loc0, loc1) {
- // Single-line comment.
- var6 = (var6 ?? foo0());
- par1 = {
- if (('X2yPgV').endsWith('b'))
- Float32x4.yxxy
- else if (true)
- Int32x4.xzyw
- else
- for (int loc2 = 0; loc2 < 9; loc2++) (++loc0),
- (4294967551 ?? (-((loc0--)))),
- (-69 ~/
- ((!(false))
- ? ((((par2[Int32x4.zwzw]).isEven
- ? (var3).truncateToDouble()
- : 0.14035347150303745))
- .isInfinite
- ? Int32x4.yzxx
- : par2[loc0])
- : (var2++))),
- ((loc0++) - ((++var2) >> (~(par2[(var2--)]))))
- };
- });
- }
- break;
- case 4149672955:
- {
- par2[((var2 ^ (~((--var2)))) | -98)] *= -62;
- {
- int loc0 = 0;
- do {
- var0 = par3[(var5[4294967808] >> Float32x4.wwyx)];
- } while (++loc0 < 46);
- }
- }
- break;
- }
- var1 ??= (!((var3).isNaN));
- return (var1
- ? par2
- : Uri.parseIPv6Address(
- (var1 ? '' : '26DgiI'), (ZLibOption.maxMemLevel % 65), 68));
-}
-
-class X0 {
- bool fld0_0 = true;
- Set<int> fld0_1 = {
- 31,
- if (true) ...{
- -93,
- -4294967041,
- -4294934527,
- if (false) 92,
- if (true) 69
- } else
- 85,
- ...{
- ...{73, 27},
- for (int loc0 in {
- for (int loc1 = 0; loc1 < 56; loc1++) -36,
- -23,
- -99,
- 20,
- 16,
- 11,
- if (false) -24,
- if (true) 14
- })
- if (false) 69,
- -9223372032559808513,
- -9223372036854775553,
- -9223372036854774784,
- -22
- },
- 81,
- ...{16, if (false) 67 else -30, if (true) 21 else -61, -84},
- -69
- };
-
- List<int> foo0_0(Map<int, String> par1) {
- if ((var1 ? ((!(fld0_0)) ? true : false) : true)) {
- return ((var4).trim()).codeUnits;
- } else {
- for (int loc0 in var6) {
- fld0_0 ??= var1;
- for (int loc1 = 0; loc1 < 57; loc1++) {
- {
- Map<int, String> loc2 = Map.identity();
- par1 ??= Map.unmodifiable(Map.unmodifiable(Map.unmodifiable((true
- ? loc2
- : ((true
- ? loc2
- : foo1(
- [var5[-60], loc0, var5[-48], -80, var5[var5[37]]],
- var1)) ??
- {
- 60: var0,
- 93: ((false ? var0 : '') + 'r\u{1f600}2B#p')
- })))));
- var4 = ' ';
- }
- try {
- var5 = foo2(
- ({loc0, 37, Float32x4.wwyw} ?? var6),
- ((fld0_0
- ? [
- for (int loc2 = 0; loc2 < 1; loc2++)
- (~(Float32x4.zyzz)),
- (~((true
- ? (Float32x4.yyzw >> (48 - (-((var2--)))))
- : (~(loc0))))),
- ((var4 ==
- String.fromEnvironment(
- (var1 ? 'l9FM' : par1[var5[loc0]])))
- ? (++loc0)
- : 4),
- ...[
- (~((var5[-9223372032559808448] - (++var2)))),
- ...[
- for (int loc2 in [
- ((-12 <= 55) ? 9223372032559841280 : loc0),
- var5[var5[(~(var5[var5[loc1]]))]],
- (var1 ? 67 : -74)
- ])
- (var5[var2]).sign,
- var5[-65],
- if (fld0_0)
- var5[(var5[var5[-90]] ~/ 22)]
- else
- (-9223372036854775679 + var5[16]),
- 76,
- 7
- ],
- (++var2),
- -9223372034707292160,
- (var2--),
- var5[(var2--)]
- ],
- loc1,
- Float32x4.ywxz,
- ((++loc0) + (--loc0)),
- for (int loc2 in [
- for (int loc3 = 0; loc3 < 4; loc3++) loc1,
- ...[
- Float32x4.zxwy,
- Float32x4.xzwx,
- var2,
- (++var2),
- Int32x4.xzyy,
- (var5[loc1] | (true ? -97 : -93)),
- Float32x4.xwyz,
- ((true || var1)
- ? (~((--loc0)))
- : (~((var5[18] % (-55 + loc0)))))
- ],
- (~((++loc0))),
- -85,
- (~((var2++))),
- (true
- ? ZLibOption.maxMemLevel
- : var5[var5[var5[var5[var2]]]]),
- ((true
- ? ((!((false
- ? (true ? fld0_0 : (!(false)))
- : fld0_0)))
- ? fld0_0
- : (({
- 96: var4,
- 60: '(0yBGn\u{1f600}',
- 57: var4,
- 73: var7[-43],
- 38: var0
- })
- .isNotEmpty ||
- ({
- 67: var4,
- 14: 'M\u{1f600}1HNbP',
- 6: 's',
- 85: 'uyq',
- 95: var7[(-(Int32x4.wwxw))],
- 33: ''
- })
- .isNotEmpty))
- : false)
- ? var2
- : (++var2))
- ]) ...[-27]
- ]
- : [
- for (int loc2 = 0; loc2 < 87; loc2++)
- (-47 * (~((((--var2) ^ loc0) ?? 78)))),
- (-(((({
- 14: (var3).toStringAsExponential(
- (false ? var5[-62] : 33)),
- 16: '',
- 71: var4,
- 78: (([var5[(-(91))]] == var5) ? var4 : var0),
- 9: par1[loc1],
- 51: '-8ht',
- 26: ('(2l3\u2665h' ?? var0),
- 79: var4
- })
- .isNotEmpty
- ? var5[(var2 % loc0)]
- : var2) %
- ((!(NetworkInterface.listSupported))
- ? -22
- : ((var1
- ? ([
- ZLibOption.STRATEGY_DEFAULT,
- 21,
- loc1,
- loc1,
- loc0,
- 5,
- loc0,
- 98
- ] ==
- Uri.parseIPv4Address(
- var7[loc1]))
- : var1)
- ? (~((-20 %
- (var5).removeAt(Float32x4.wyxw))))
- : var5[var5[82]]))))),
- (-(Float32x4.wwwz)),
- Int32x4.wxxz,
- ...[
- (loc0++),
- ...[
- (--loc0),
- -2,
- ZLibOption.DEFAULT_WINDOW_BITS,
- -42,
- for (int loc2 = 0; loc2 < 2; loc2++) (-(-22)),
- (~(-81))
- ],
- (--var2)
- ],
- (++var2),
- ((!(false)) ? (--var2) : (((~(34)) >> 48) << 79)),
- loc1
- ]) +
- foo2(
- foo0(),
- ([
- (((~(var5[(-(var5[(87 % var5[(++var2)])]))])) ??
- -11) ~/
- (var2++)),
- ((((!(var1)) && true) ? loc1 : 98) <<
- ((!((true != (var4 == par1[var5[(~(-83))]]))))
- ? -44
- : var5[88])),
- Float32x4.yyyz,
- -44,
- Int32x4.xzyx,
- (++loc0)
- ] ??
- [
- ((foo1([((!(var1)) ? 24 : 81), -93], true))
- .isEmpty
- ? 52
- : (~(Int32x4.zyww))),
- Int32x4.xxwz,
- (-(-11)),
- (loc0--),
- ((!(bool.fromEnvironment('U\u2665')))
- ? (loc0++)
- : (++var2))
- ]),
- {
- 70: var7[7],
- 18: '\u2665(#&c\u{1f600}-',
- 58: 'KuNr',
- 96: '\u{1f600}2\u2665YY',
- 94: var0,
- 28: 'l-'
- })),
- par1);
- {
- double loc2 = double.infinity;
- /*
- * Multi-line
- * comment.
- */
- return ('a!wNh!').codeUnits;
- }
- } catch (exception, stackTrace) {
- continue;
- } finally {
- fld0_0 = (!(fld0_0));
- var5 ??= ((Uri.parseIPv4Address('H') ??
- (foo2({
- loc1,
- ([
- if (((true ? loc0 : (loc0++)) <
- ((!(var1)) ? -90 : Int32x4.yyzx)))
- (~(var2))
- else
- for (int loc2 in {
- if (SecurityContext.alpnSupported)
- var2
- else
- Int32x4.wzzy,
- -9223372036754112763,
- (-((var1
- ? var5[62]
- : (-(Float32x4.wzwz))))),
- (~(Float32x4.yxzy))
- })
- ((((true && (false ? fld0_0 : var1))
- ? fld0_0
- : false)
- ? true
- : (fld0_0 && var1))
- ? (true ? (~(loc1)) : var5[-16])
- : loc0),
- for (int loc2 = 0; loc2 < 1; loc2++)
- ((false && var1) ? Float32x4.yzyy : 50)
- ][var2] *
- [
- ...[
- (((-10 >> Int32x4.wxzw) *
- ((0.42979687169554437 >=
- 0.17848133910264385)
- ? -4
- : var5[-15])) |
- var5[(loc0++)]),
- ...[
- (('@jcNl\u2665P')
- .compareTo(var7[(loc0--)]) &
- (~((~(loc0))))),
- if ((!(((!(true)) && true)))) 2,
- loc1,
- ((var5[(loc0--)] | -38) & (loc0++)),
- var2,
- (~(-22)),
- if (false) loc0 else 80,
- (--loc0)
- ],
- ...[15],
- ((~((~(-5)))) ^ Int32x4.xxxz),
- 79,
- for (int loc2 in [
- (fld0_0 ? -0 : (loc0++)),
- -49,
- for (int loc3 in [
- -16,
- (var2--),
- 35,
- ((14 * -68) ~/ Int32x4.wwyy)
- ])
- var5[(fld0_0 ? 28 : (-41 ?? 19))],
- loc0,
- (var3).round(),
- if ((!((!((!(false))))))) loc1,
- (loc0++),
- Int32x4.wyww
- ])
- ((--var2) * var5[(6 & var5[(~(-53))])]),
- (loc0++),
- Float32x4.xwxx
- ],
- Int32x4.ywyw,
- (-(ZLibOption.strategyFixed)),
- (80 % (loc0--)),
- var5[Int32x4.zxww]
- ][var5[50]]),
- (false ? -71 : 39),
- (var5[-61]).toSigned(loc0),
- -50,
- 4294967296
- }, [
- (16 *
- (~(((var1 ? ZLibOption.STRATEGY_FIXED : -66) *
- 4)))),
- Float32x4.wwwx
- ], {
- 63: var0,
- 52: (fld0_0 ? 'uG\u2665V@4' : '62'),
- 98: var7[var5[-83]],
- 70: (false
- ? 'bSg'
- : base64UrlEncode(([
- (~(var2)),
- -52,
- 68,
- [
- 10,
- loc1,
- 92,
- 53,
- Int32x4.zzyw,
- (true ? 12 : 19),
- (~(var5[(++var2)]))
- ][-64],
- (++loc0),
- (loc0 << -26)
- ] +
- [
- var5[(--loc0)],
- (((var1 ? var5[var5[(var2--)]] : loc1) +
- (--var2)) <<
- Int32x4.wyyx)
- ]))),
- 16: 'YsD\u2665\u2665K',
- 0: var0,
- 93: var7[(-(var5[-43]))]
- }) ??
- var5)) ??
- [
- if (fld0_0) -90,
- (--var2),
- ...[
- for (int loc2 in [
- (false ? (~(-9)) : -4294901760),
- (-(-7)),
- -51,
- (var1 ? -75 : [Float32x4.wwxw, Int32x4.zxyx][-7]),
- Float32x4.xyww,
- Int32x4.wwzx,
- (loc0++),
- (NetworkInterface.listSupported
- ? [1000][Float32x4.zzyx]
- : -71)
- ])
- -27,
- Float32x4.wyzy,
- (++var2)
- ]
- ]);
- }
- }
- }
- throw Map.unmodifiable(foo1(
- (MapBase.mapToString(foo1((false ? [var2] : var5), false))).codeUnits,
- true));
- }
- }
-
- void run() {}
-}
-
-class X1 extends X0 {
- double fld1_0 = 0.47694301047645304;
- bool fld1_1 = true;
-
- Map<int, String> foo1_0(
- Map<int, String> par1, Map<int, String> par2, double par3) {
- // Single-line comment.
- for (int loc0 = 0; loc0 < 91; loc0++) {
- par2.forEach((loc1, loc2) {
- {
- bool loc3 = (fld1_1 || ('U\u2665').isEmpty);
- var3 /= 0.8504341352135224;
- }
- });
- {
- int loc1 = 66;
- while (--loc1 > 0) {
- if (((!((true || fld1_1))) == true)) {
- var0 ??= par2[var5[(~((false ? ((!(var1)) ? -95 : var2) : -37)))]];
- /**
- ** Multi-line
- ** documentation comment.
- */
- return Map.unmodifiable({
- 55: var4,
- 73: 'c#',
- 17: (fld1_1
- ? '7\u{1f600}e'
- : ((!(var1)) ? '8E7AK2e' : 'Fm\u{1f600} F')),
- 40: 'mb(\u{1f600}\u2665l',
- 36: Uri.decodeFull((true ? par2[-32769] : var7[Float32x4.zyxz])),
- 51: ((false &&
- (((var1 ? true : true) || false)
- ? (var7[(var2--)]).isEmpty
- : true))
- ? (fld1_1
- ? (fld1_1 ? (var1).toString() : 'r9M')
- : ((true ? (0.2863696758528199 != par3) : false)
- ? (fld1_1 ? par1[Int32x4.zwyz] : var4)
- : var4))
- : var4),
- 8: '6G',
- 62: '+z@Gp'
- });
- } else {
- var5[Int32x4.zzyy] ??= (-(var5[((!(false)) ? loc1 : -34)]));
- {
- int loc2 = (-(7));
- var3 /= (true
- ? (-(((-9223372032459145467).isEven
- ? fld1_0
- : (-((-(0.7008573255099826)))))))
- : par3);
- }
- }
- for (int loc2 in foo2(var6, var5, {
- if (false) 11: par1[((var4).isEmpty ? 55 : -61)],
- 12: 'f5j2v\u{1f600}',
- 52: (((foo1(
- (((var1
- ? {var5[-66], var2, 88, 12, 6, -96}
- : (var1
- ? {-25, 84, (var2--), var5[83]}
- : {-36, var5[51], var2})) !=
- {var5[(++var2)]})
- ? [-2147483648, 46, loc0, var5[loc0], -21]
- : foo2(
- {var5[var5[loc0]]},
- (true
- ? var5
- : [
- -30,
- var5[(-(-42))],
- var2,
- Float32x4.zywx,
- loc1,
- 63,
- -25,
- -28
- ]),
- {30: 'j\u2665U', 98: var4})),
- false))
- .isNotEmpty
- ? (false ? fld1_0 : 0.3202297128057393)
- : 0.1301025669674245))
- .toStringAsFixed(((fld1_1 ? 79 : -88) + Int32x4.xyzw)),
- 88: (false ? var7[(var2++)] : (var4 ?? '')),
- 31: (var1
- ? (var1 ? par2[-87] : (true ? par2[-14] : var4))
- : ((fld1_1 != true) ? '3nd9t&' : var4)),
- 22: ('(Czi' + '-Y')
- })) {
- var7[(loc2--)] = 's';
- }
- }
- }
- }
- return par1;
- }
-
- String foo1_1(int par1) => var0;
- Set<int> foo1_2(String par1) {
- for (int loc0 = 0; loc0 < 58; loc0++) {
- switch ((~(13))) {
- case 746492976:
- {
- switch (Duration.millisecondsPerDay) {
- case 3635015902:
- {
- var7[var5[(var5[var2] * (-(var5[Float32x4.yxxz])))]] ??=
- (var7[-79] + '(O@');
- var7[loc0] ??= String.fromCharCode(var5[(true
- ? (var5[((var1 ? true : (false ? fld1_1 : var1))
- ? var5[Float32x4.wyyz]
- : 73)] ~/
- (-(84)))
- : -15)]);
- }
- break;
- case 3635015905:
- {
- var1 = (var1
- ? (foo1_0(
- (((!(false)) || fld1_1) ? var7 : var7),
- foo1_0(
- {74: '\u2665e', 10: 'tw8jc0R'},
- foo1_0(
- var7,
- foo1_0(
- ({
- 17: var7[Int32x4.zyxy],
- 82: var7[64],
- 27: 'VEtj',
- 90: Uri.encodeQueryComponent(
- foo1_1(var2)),
- 68: 'wew0\u{1f600}'
- } ??
- foo1_0(var7, var7, var3)),
- ({
- 65: 'mBeBfUj',
- 81: var4,
- 35: (var7[-43] + 'l'),
- 68: var4
- } ??
- {
- 33: ('N\u{1f600}xaY+' ?? par1),
- 44: var7[var5[var2]],
- 83: var4,
- 86: 'k'
- }),
- asin(0.4245871535895427)),
- (-(0.2913717674787144))),
- 0.9439800024935644),
- (-((true
- ? ((var1 ? false : var1)
- ? 0.09441225978923817
- : 0.42622157485045953)
- : (-(0.29370792038584836)))))))
- .isNotEmpty
- : (false && true));
- var3 += (-(fld1_0));
- }
- break;
- }
- }
- break;
- case 746492979:
- {
- var4 = var0;
- for (int loc1 = 0; loc1 < 88; loc1++) {
- var2 += 32;
- }
- }
- break;
- }
- }
- {
- int loc0 = 0;
- do {
- return foo0();
- } while (++loc0 < 57);
- }
- return foo0();
- }
-
- String foo1_3() {
- if ((0.42144855521066793).isNegative) {
- print((false ? (-(fld1_0)) : (-((-((-(0.26854952952179667))))))));
- switch (30) {
- case 3830102525:
- {
- try {
- var7.forEach((loc0, loc1) {
- var1 = (!(true));
- var6 = (foo1_2(var7[99]) ?? var6);
- });
- var6 ??= var6;
- } catch (exception, stackTrace) {
- var4 ??= ListBase.listToString([
- (Duration.microsecondsPerSecond + -82),
- (true
- ? var5[(var2 ~/ (false ? (~((var1 ? 46 : var2))) : var2))]
- : (-9223372034707292161 >> var5[var5[-86]])),
- Float32x4.wxyx
- ]);
- } finally {
- /**
- ** Multi-line
- ** documentation comment.
- */
- fld1_1 = (var5[var5[var2]]).isOdd;
- }
- /*
- * Multi-line
- * comment.
- */
- if ((SetBase.setToString((fld1_1
- ? {12, (fld1_1 ? (-(-22)) : (-(4395630341)))}
- : var6)))
- .isNotEmpty) {
- try {
- {
- int loc0 = 86;
- while (--loc0 > 0) {
- {
- int loc1 = 0;
- do {
- var0 = var7[(-(((--var2) &
- ((var1 ? (fld1_0).isNaN : true)
- ? (-16 | -20)
- : ((0.7513819161190503).isNaN ? 45 : loc1)))))];
-
- /// Single-line documentation comment.
- var5[(true ? loc0 : Float32x4.zxzx)] %= loc0;
- } while (++loc1 < 17);
- }
- for (int loc1 = 0; loc1 < 25; loc1++) {
- var5[Float32x4.zywy] <<= Int32x4.ywwx;
- }
- }
- }
- } catch (exception, stackTrace) {
- var7 = Map.from(foo1_0({
- 81: (foo1_1(((++var2) * (-(var5[21])))) +
- (var7[8] + (var7[var5[53]] ?? var0))),
- for (int loc0 in [
- (true ? 58 : Float32x4.wyww),
- var5[(fld1_1 ? 46 : var2)]
- ])
- 63: var7[(false
- ? var5[((24 >> -9223372036854710272) & var2)]
- : var5[(80 << var5[-31])])],
- 67: var0,
- 1: '3mlOA',
- 30: ('OQbG').substring((var2--), (--var2)),
- 93: ((var7[74] ?? var7[(++var2)])).toLowerCase(),
- ...{
- 85: foo1_1(-21),
- if ((!((!(false))))) 86: var0,
- 49: '62+v',
- 59: foo1_1((--var2)),
- for (int loc0 in [
- -10,
- -65,
- (var2++),
- (var2++),
- ((({
- ((var7[60] == var7[-30])
- ? var5[(-((var2++)))]
- : (var2--))
- } ==
- {var5[var2], -40, -81, (var2++), 93, 26})
- ? 38
- : (var1 ? var5[97] : -82)) *
- (--var2)),
- (~((true ? 5 : Float32x4.yxyy))),
- (var2++),
- ((++var2) << ((var2 % Int32x4.yxxw) >> (++var2)))
- ])
- 54: (var0 + 'ANyqN'),
- 94: (var1 ? '0T\u2665#w' : (var0).toUpperCase()),
- 68: '@n',
- 67: base64UrlEncode(((0.07857744084458451).isInfinite
- ? ([
- var2,
- var5[70],
- -32,
- Float32x4.yxwz,
- 31,
- (~(var2)),
- (var2 ?? (-70 + 57)),
- -91
- ] +
- [
- var2,
- var5[((!(var1))
- ? var5[(var2 ~/ Float32x4.zwyw)]
- : var5[var5[(var5[(~(var2))] % var2)]])],
- (var2 | (false ? (-(var2)) : var5[80])),
- (var2--),
- DateTime.daysPerWeek,
- (var2 ~/ var2)
- ])
- : (var1 ? var5 : [(var2++)])))
- },
- if (false)
- if (false)
- 26: (Uri.encodeComponent(foo1_1(var2)) + var7[var5[var2]])
- else ...{
- 4: (double.negativeInfinity).toStringAsFixed(var2),
- 46: Uri.decodeQueryComponent('bst3jz'),
- 5: ((true
- ? (true ? '(-f' : var7[(-(Int32x4.yzxz))])
- : var7[(var5[(fld1_1 ? (var2--) : var2)] >>
- (-((false ? 8589934591 : 33))))]) ??
- '4ov'),
- 37: var7[var5[100663045]],
- 13: '2B'
- }
- }, {
- 71: 'Hxbq',
- 22: ('\u{1f600}Jtj').substring(
- (-36 | var5[(~((var2++)))]), 9223372032559874048)
- }, 0.3710694748818374));
- fld1_0 ??= 0.010604823956237519;
- } finally {
- for (int loc0 = 0; loc0 < 84; loc0++) {
- var5[Float32x4.xwwz] <<=
- ((((fld1_1 ? false : ('e\u{1f600}O+Vc').isNotEmpty) &&
- (!(fld1_1)))
- ? (-73 | var5[Int32x4.yzwx])
- : Uint16List.bytesPerElement) ~/
- var2);
- }
- }
- }
- }
- break;
- case 3830102528:
- {
- fld1_1 ??= true;
- throw (-((-17).ceilToDouble()));
- }
- break;
- }
- }
- return var0;
- }
-
- void run() {
- super.run();
- {
- int loc0 = 61;
- while (--loc0 > 0) {
- {
- int loc1 = 77;
- while (--loc1 > 0) {
- {
- int loc2 = 0;
- do {
- break;
- } while (++loc2 < 84);
- }
- }
- }
- if (((var1 || fld1_1) && (!((!((!((!((!(true)))))))))))) {
- switch (Int32x4.yyzx) {
- case 900727295:
- {
- /// Single-line documentation comment.
- fld1_1 ??= (!(true));
- for (int loc1 in ((var5 ??
- Uri.parseIPv6Address(
- foo1_3(), var5[(loc0 + var5[4096])], -34)) ??
- var5)) {
- var7[(38 << (false ? (~(-58)) : Float32x4.yyxy))] =
- Uri.decodeFull(foo1_3());
- var5 ??= var5;
- }
- }
- break;
- case 900727304:
- {
- fld1_1 =
- (SecurityContext.alpnSupported ? (var3).isFinite : var1);
- fld1_0 += 0.3154406798513474;
- }
- break;
- }
- var2 ^= var2;
- } else {
- if (((-(var3)) <= (-(fld1_0)))) {
- var6 = foo1_2('0vsDWF9');
- } else {
- var6 ??= ((fld1_0 <= 0.16230005903410238)
- ? ((!((0.5144029832155854 > (0.8199455895430549 / var3))))
- ? foo1_2('ken')
- : var6)
- : (fld1_1 ? {56, 6442450945, 2} : {34}));
- }
- var5[Float32x4.zwzw] += (true ? var2 : (~(Float32x4.wyyx)));
- }
- }
- }
- }
-}
-
-class X2 extends X0 with X1 {
- Set<int> fld2_0 = {for (int loc0 = 0; loc0 < 60; loc0++) -56, 29};
-
- bool foo2_0(int par1) => var1;
- bool foo2_1(bool par1) {
- for (int loc0 in var6) {
- var2 ~/= ((((((fld2_0 ?? (true ? var6 : var6)) ?? fld2_0))
- .union({(~(-21)), 10}) !=
- {(var5[90] ~/ (-(-90)))})
- ? par1
- : (var7[(~(82))]).isNotEmpty)
- ? ((~(loc0)) *
- ((true ? (-4294966272 ?? -21) : var2) +
- Duration.millisecondsPerMinute))
- : (-9223372032559807488 ~/ 4294968296));
- }
- if (('DeAm#f' ==
- ((Uri.encodeQueryComponent((0.3687340601979223).toString()) ??
- var7[-23]) ??
- foo1_3()))) {
- throw (([Float32x4.wyyz, -9223372036854743039])
- .sublist((--var2), (--var2)) +
- ((true ? var1 : (!(false)))
- ? foo2(
- foo1_2('JLXt'),
- [
- var5[Int32x4.zxzx],
- Int32x4.xxwy,
- (var2++),
- Float32x4.yzxx,
- (var2++),
- -15
- ],
- foo1_0(var7, var7, 0.7904389283184639))
- : (var1
- ? [Float32x4.yzyz, Int32x4.wxxy, var2, (~(var5[-47]))]
- : var5)));
- } else {
- var7[var2] ??= ((({
- ...{
- for (int loc0 = 0; loc0 < 19; loc0++)
- 36: (var7[var2] ?? (par1 ? ('ccb9z' + 'iM') : var0)),
- 3: ('1sG' + var0),
- for (int loc0 in {
- (-(var5[var2])),
- if (var1) Int32x4.zxxx,
- -4294967168,
- -61,
- (~((par1 ? (~(-70)) : (var2--)))),
- (-(7)),
- -96,
- Uint32List.bytesPerElement
- })
- 85: var4
- },
- if (foo2_0(-91)) 38: (var3).toString() else 30: 'uI\u2665\u{1f600}',
- 72: '@'
- }[(par1 ? 14 : var2)])
- .trim())
- .substring((36 ~/ var5[(++var2)]), var5[((-(25)) * -53)]) ??
- foo1_3());
- /*
- * Multi-line
- * comment.
- */
- {
- int loc0 = 0;
- do {
- {
- String loc1 = 'jG7t';
- /**
- ** Multi-line
- ** documentation comment.
- */
- {
- int loc2 = 57;
- while (--loc2 > 0) {
- print((var6 ??
- (foo1_2(var0)).union(foo1_2(('n' + var7[(++var2)])))));
- }
- }
- }
- } while (++loc0 < 69);
- }
- }
- return (!(((!((par1 && false)))
- ? (true && foo2_0(-9223372036854771712))
- : (!(par1)))));
- }
-
- double foo2_2(Map<int, String> par1, int par2) {
- switch (var2) {
- case 3816231196:
- {
- throw (-(Int32x4.xxwx));
- }
- break;
- case 3816231204:
- {
- var7.forEach((loc0, loc1) {
- switch ((-43 ^ (-(Float32x4.wwxx)))) {
- case 2839002105:
- {
- var0 ??= (SetBase.setToString(((var1 ? var1 : (true || var1))
- ? fld2_0
- : {
- Int32x4.yyzw,
- Int32x4.yyxy,
- (2 >> Int32x4.ywzx),
- (var1
- ? ((foo2_1(var1) ? 17 : loc0) ~/
- (-(var5[var2])))
- : par2),
- Float32x4.zwwx,
- par2,
- Int32x4.wzzz,
- Int32x4.zyzw
- })) ??
- (loc1 +
- var7[((true
- ? (var1 &&
- bool.fromEnvironment(var7[(var2--)]))
- : foo2_1(false))
- ? 35
- : (-(66)))]));
- for (int loc2 = 0; loc2 < 23; loc2++) {
- switch ((-73 ^ (Int32x4.xyzz >> Float32x4.yzzz))) {
- case 1710454916:
- {
- var3 = 0.3372913861348876;
- print(((-(var3)) * var3));
- }
- break;
- case 1710454922:
- {
- var4 ??= ((false
- ? (var1
- ? var1
- : (fld2_0 ==
- {
- (false ? -27 : (-(92))),
- loc2,
- var5[loc2],
- (var1
- ? Float32x4.yywy
- : (false ? -74 : 2)),
- ((-(-50)) ^ 32),
- (var2++)
- }))
- : var1)
- ? base64UrlEncode([
- for (int loc3 in {
- (-(par2)),
- loc0,
- (-((par2++))),
- Float32x4.yyyx
- })
- (par2--),
- (-((-(var5[var5[var5[-41]]])))),
- if (({
- loc2,
- Duration.microsecondsPerSecond,
- (([
- (par2++),
- (-90 ^ -5),
- var5[(~(0))],
- loc2
- ] !=
- var5)
- ? -9223372032559808512
- : (par2++))
- } ==
- {
- (var1 ? (-((loc2 % loc2))) : loc2),
- -94,
- -62
- }))
- (++var2),
- loc2,
- for (int loc3 in {
- 55,
- (~(var5[var5[(++par2)]])),
- ((var1
- ? (-((++var2)))
- : var5[(true ? var5[68] : 10)]) -
- par2),
- (-(Float32x4.wzxx))
- })
- (Int32x4.yxzy | var5[-1]),
- (foo2_1(false) ? (-(32)) : loc0),
- (--par2),
- if ((!(false))) (var1 ? var5[loc0] : 30)
- ])
- : ('b1TKp3' ??
- (var4 +
- var7[(~(var5[
- ((var1 ? var2 : loc2) - 72)]))])));
- }
- break;
- }
- fld2_0 = ((!((false
- ? false
- : (false ? (!((var7[-28] != ''))) : var1))))
- ? (((var1
- ? (true ? Set.identity() : var6)
- : {
- -63,
- Int32x4.xxyx,
- var5[((var1
- ? (var5[-9223372032559808496] >>
- 59)
- : Int32x4.wxxy) ~/
- var5[var5[-48]])],
- (par2 ?? par2),
- 44,
- var5[(var1 ? -26 : (-(par2)))]
- }) ??
- ({
- loc2,
- var2,
- ZLibOption.defaultMemLevel,
- (true ? Int32x4.wyzz : 40),
- (false ? loc2 : var5[42]),
- -16
- } ??
- var6)))
- .union({loc0, (var2++), (-1 * (~(var2)))})
- : (bool.fromEnvironment((var3)
- .toStringAsFixed(Uint64List.bytesPerElement))
- ? fld2_0
- : {
- (par2++),
- (var1 ? loc2 : (++var2)),
- ((false || false) ? Int32x4.xyyz : (++par2)),
- var5[-98],
- Float32x4.zwwy,
- var5[var5[62]],
- (~(Float32x4.ywww))
- }));
- }
- }
- break;
- case 2839002106:
- {
- for (int loc2 = 0; loc2 < 13; loc2++) {
- {
- int loc3 = 0;
- do {
- switch ((loc3 | -76)) {
- case 2164097105:
- {
- var4 ??= (var1).toString();
- var5 = ((!(((true || var1) !=
- (false ? var1 : (!(foo2_1(var1)))))))
- ? foo2(
- ((var6).union(foo1_2(loc1))).toSet(),
- [
- -67,
- if (((var1
- ? 59
- : (-((false ? -97 : par2)))) !=
- (false
- ? ((var1 || var1)
- ? (-((par2++)))
- : 4)
- : (--var2)))) ...[
- ((92 ~/ Int32x4.yzwx) << 70),
- Float32x4.xxyz,
- Int8List.bytesPerElement
- ] else
- 69
- ],
- var7)
- : foo2(foo0(), Uri.parseIPv4Address(var0),
- var7));
- }
- break;
- case 2164097111:
- {
- var4 ??= var7[Float32x4.zxzw];
- }
- break;
- }
- } while (++loc3 < 96);
- }
- fld2_0 = var6;
- }
- }
- break;
- }
- });
- for (int loc0 in (foo2_1((var5 !=
- (false
- ? [par2]
- : foo2(
- var6,
- [20],
- ({
- 21: var0,
- 68: foo1_3(),
- 24: ('1MF' + '8s\u2665yx+ ')
- } ??
- {
- 9: var7[var2],
- 48: 'mB(wW\u{1f600}',
- 74: 'ojEw\u{1f600}\u{1f600}',
- 80: '\u26655E-hj\u{1f600}',
- 10: (false ? 'W7i5\u2665YX' : '! Ed9&'),
- 88: (false ? var0 : 'N0D9(H\u{1f600}'),
- 5: 'QZ'
- })))))
- ? foo1_2('XP')
- : {
- if ((foo2_1(var1)
- ? (foo2_1((fld2_0).add(-9223372036854774784)) || var1)
- : var1))
- (~(Float32x4.zyww)),
- Float32x4.xwyw,
- ((((var1 ? true : var1) ? 0.3447071353935154 : var3) >=
- 0.5995056331958718)
- ? ZLibOption.MAX_LEVEL
- : 16),
- 9223372032559841279,
- Int32x4.zwyy
- })) {
- for (int loc1 = 0; loc1 < 19; loc1++) {
- var1 = (!(bool.fromEnvironment(MapBase.mapToString({
- 1: '4',
- 56: var0,
- 85: var0,
- 51: var7[-4],
- 42: ((!((!(false)))) ? par1[72] : MapBase.mapToString(var7))
- }))));
- }
- }
- }
- break;
- }
- print((((var1 ? 'kP' : (var1 ? 'irjF' : var7[var5[90]])) ??
- ((!(false)) ? 'vWa\u{1f600}' : var0)) +
- 'xzpK'));
- return var3;
- }
-
- void run() {
- super.run();
- {
- int loc0 = (~(-24));
- var0 ??= ((false
- ? foo2_1((true
- ? (var1 && (var2).isOdd)
- : (('dTYR' ?? 'G\u{1f600}P14\u{1f600}a')).isEmpty))
- : ((var1 && true) || (!(var1))))
- ? (var4 ?? 'I')
- : 'QO');
- }
- }
-}
-
-class X3 extends X1 {
- Map<int, String> fld3_0 = {
- if (true) if (false) 45: 'ynEn\u2665nG' else 70: 'c\u{1f600}mN4\u2665a',
- if (true) 30: '6\u2665P!Pbi',
- 81: 't',
- 82: '17fx#!',
- 92: 'H',
- if (true) 69: ')Ls'
- };
- Set<int> fld3_1 = {27};
- int fld3_2 = 34;
-
- String foo1_1(int par1) {
- throw (ListBase.listToString(foo2({
- -4294967169,
- par1
- }, [
- -97,
- (var5[(var1 ? var5[87] : Int32x4.yxxy)] * Int32x4.yyxx),
- var2,
- (false ? 10 : var5[var5[(par1++)]])
- ], var7)) ??
- 'o');
- }
-
- bool foo3_0(double par1) {
- {
- Set<int> loc0 = (true ? fld3_1 : var6);
- {
- Set<int> loc1 = (false
- ? foo0()
- : {
- for (int loc2 in [var2, (-(Float32x4.xzzw))])
- if (false) Float32x4.wxyz else (++fld3_2),
- ((var1
- ? 5
- : var5[(((var5[(true ? fld3_2 : fld3_2)] ~/ 48) | 56) %
- var5[-4])]) ??
- (var2++))
- });
- for (int loc2 = 0; loc2 < 90; loc2++) {
- {
- int loc3 = 95;
- while (--loc3 > 0) {
- return (((0.7073184699576396).isNaN
- ? var7
- : (Map.of(Map.from(var7)) ??
- Map.unmodifiable(Map.identity()))))
- .isEmpty;
- }
- }
- try {
- var1 = (((12 >= Int32x4.ywxx) ? true : true)
- ? false
- : (((var1 ? fld3_0[Int32x4.wyxy] : '') ?? var7[Float32x4.xwwx]))
- .isEmpty);
- var2 |= ((fld3_2++) ?? (fld3_2--));
- } catch (exception, stackTrace) {
- var5 ??= var5;
- } finally {
- var4 = 'A';
- break;
- }
- }
- {
- double loc2 = (-(exp((acos(0.06129144867031855) ?? var3))));
- fld3_0 = (((({Int32x4.ywxw, 6442450943}).union(foo0()))
- .add((++fld3_2))
- ? false
- : false)
- ? foo1_0(
- (foo1([var5[var2], var5[75], 42], false) ?? var7), var7, loc2)
- : (var1
- ? {
- for (int loc3 = 0; loc3 < 48; loc3++) 78: 'dWek8',
- 40: fld3_0[(var5[-81] & Int32x4.xzyw)],
- 73: (' )G\u2665-d(').substring(
- (NetworkInterface.listSupported
- ? (~(((++var2) ?? (fld3_2 * fld3_2))))
- : var5[-75]),
- fld3_2),
- 74: ('k9O\u2665').trimLeft(),
- 88: var7[(++var2)],
- for (int loc3 = 0; loc3 < 27; loc3++)
- 60: ((false || var1) ? var7[46] : var0),
- 99: ((var3).isNaN
- ? (Uri.decodeComponent(foo1_3()) + var4)
- : var7[-77]),
- 92: (true
- ? ('').padLeft(82, '')
- : ('' ?? var7[(false ? 94 : 58)]))
- }
- : var7));
-
- /// Single-line documentation comment.
- fld3_1 ??= ((loc1 ?? foo1_2(fld3_0[(var2--)])) ?? foo1_2(foo1_3()));
- }
- }
- }
- return (var1 ? (!(var1)) : var1);
- }
-
- String foo3_1(int par1, String par2, String par3) {
- switch (var2) {
- case 3768780679:
- {
- {
- int loc0 = (++par1);
- var0 ??= ListBase.listToString(var5);
- if (true) {
- var5 = [
- Float32x4.xyxz,
- (var1
- ? ((!(false)) ? Float32x4.xyyw : (++fld3_2))
- : var5[fld3_2]),
- par1,
- (~(Float32x4.zxwy)),
- if ((foo3_0(var3)
- ? ([
- (++fld3_2),
- ...[
- ...[
- var5[(true ? Float32x4.xxzx : (--fld3_2))],
- 54,
- (-((((foo3_0(var3)
- ? (!(false))
- : ((var1 ? (~(-63)) : var5[-40]))
- .isOdd)
- ? ((0.8329420640871532 != var3) && var1)
- : var1)
- ? 43
- : (Float32x4.zxxy - Float32x4.zxxw)))),
- Int32x4.zzwx
- ],
- ...[
- (var5[-48] * (fld3_2++)),
- Int32x4.wyyw,
- (~(-76)),
- ((par1).isEven ? (--par1) : -13),
- Float32x4.wxyx
- ],
- for (int loc1 in [
- (++fld3_2),
- -15,
- (SecurityContext.alpnSupported
- ? Int32x4.yxyw
- : Float32x4.yxxw),
- if (true) var5[(var1 ? -32768 : par1)],
- ((--var2) ^ (++fld3_2))
- ])
- (fld3_2--),
- 93,
- (~((-(ZLibOption.minMemLevel)))),
- ((Float32x4.zyzx >> -14) & Float32x4.yxxw)
- ],
- (var1
- ? (++par1)
- : ((var3).isInfinite ? Float32x4.zwww : -84)),
- var2
- ] ==
- [
- 9223372032559808639,
- -85,
- Float32x4.wzyy,
- loc0,
- [
- ((-(36)) <<
- ((var1
- ? var1
- : ({
- 45: 'ay',
- 7: par3,
- 69: Uri.decodeFull(
- (foo1_3() + 'LX+'))
- })
- .isEmpty)
- ? (~((13 | 64)))
- : (-(var2)))),
- (par1--),
- ((~((true ? (var2--) : -31))) >> 9),
- (-((35 % (~(var5[var5[39]]))))),
- 4395630341,
- Int32x4.zxxy,
- if ((var1
- ? foo3_0(var3)
- : (0.6201792653929837).isInfinite)) ...[
- Int32x4.wxxx,
- (fld3_2 * (--fld3_2)),
- var5[((~(var5[var5[var5[(-(-23))]]])) +
- (~(-4294966296)))],
- loc0,
- for (int loc1 in [var5[Float32x4.yzww]]) 17,
- (~(var5[(++par1)])),
- -58,
- ((!(('').isEmpty))
- ? ((-(Float32x4.ywwx)) * (++par1))
- : Int32x4.yxyz)
- ]
- ][((var1 ? var1 : var1) ? var5[0] : par1)],
- ((~(70)) +
- (par1 + (-77 | ZLibOption.MAX_WINDOW_BITS))),
- (-(Int32x4.zywy)),
- (~(Float32x4.zywz))
- ])
- : (var1 ? true : true)))
- fld3_2
- ];
- }
- }
- var3 *= ((var3 + 0.6761038672016147) ?? (-(double.minPositive)));
- }
- break;
- case 3768780685:
- {
- {
- int loc0 = 67;
- while (--loc0 > 0) {
- {
- Map<int, String> loc1 = foo1(
- Uri.parseIPv4Address(('E Hu\u{1f600}' + '\u2665l&#!')),
- (!(false)));
- var3 ??= var3;
- }
- var5 = (var5 +
- ((({
- 79: (foo1_3() ?? 'eD'),
- 73: (var1 ? par2 : ' xdXgW'),
- 4: 'pUc(q',
- 15: 'K\u{1f600}hmdZ\u2665',
- 95: (var1 ? var4 : (var1 ? fld3_0[-45] : foo1_3()))
- })
- .isNotEmpty
- ? ((var1 ? var1 : (var1 ? var1 : foo3_0(var3))) ||
- foo3_0(var3))
- : (!(((false || true) ? var1 : false))))
- ? [
- (~((-61 ??
- (~((-(var5[(var1 ? fld3_2 : var5[34])]))))))),
- (var5[13] ^ (var1 ? 35 : -76)),
- (-(((~(-47)) ~/ (--par1))))
- ]
- : foo2({
- -36,
- ((0.3910802543332075).isNegative
- ? (~((var2++)))
- : (var2 &
- (var1
- ? [
- -67,
- (fld3_2++),
- if ((!((!((var1
- ? true
- : (!(false))))))))
- (false
- ? (~(Float32x4.wyyy))
- : (var1
- ? (1 ^ (-(16)))
- : var5[94])),
- fld3_2,
- var2,
- 67
- ][-12]
- : Float32x4.wwxw))),
- 26,
- [
- (var1
- ? (--fld3_2)
- : (((!(var1))
- ? (~((foo3_0(0.9959805940480148)
- ? (33 ~/ loc0)
- : Float32x4.xywx)))
- : (15 % var5[var5[-47]])) <<
- -86)),
- (-((~(RawSocketOption.levelIPv6))))
- ][var5[var5[(ZLibOption.maxMemLevel ^ -3)]]],
- -29
- }, [
- (var1 ? Float32x4.wxxw : (--par1)),
- ...[
- 52,
- (-((true ? -12 : 44))),
- var5[((var5[34] * 30) >> 4294967360)],
- ((--var2) <<
- (true
- ? var5[(-4 ~/ Int32x4.yyww)]
- : (bool.fromEnvironment(var7[fld3_2])
- ? (~((false ? loc0 : var5[(++par1)])))
- : ((!(false))
- ? (var5[var5[loc0]] ^ Int32x4.wxzz)
- : par1)))),
- (((false ? var0 : '') !=
- (true
- ? MapBase.mapToString(({
- 7: 'WTT7\u{1f600}e3',
- 22: '',
- 36: (var1
- ? 'F'
- : (var1 ? fld3_0[var2] : '')),
- 37: 'l@a',
- 85: (var1 ? '' : par3),
- 82: 'eb',
- 37: '11',
- 41: var7[94]
- } ??
- var7))
- : (var1 ? var4 : par2)))
- ? (~(var5[-71]))
- : 9),
- 32,
- if (bool.fromEnvironment(
- fld3_0[var5[ZLibOption.MIN_MEM_LEVEL]]))
- var5[(--par1)],
- (par1--)
- ],
- for (int loc1 in {
- for (int loc2 in [
- ((!((Map.unmodifiable({
- 86: var4,
- 31: var0,
- 85: (par3 + ''),
- 91: (var1
- ? fld3_0[4]
- : '!M\u{1f600}!vOw'),
- 45: '7T',
- 19: 'fha+',
- 38: (false ? '' : fld3_0[70])
- }) !=
- {
- 92: '@4',
- 41: var7[loc0],
- 24: (foo3_0(0.06591134699771606)
- ? '\u2665)\u2665NnO+'
- : 'JM3Hn\u{1f600}'),
- 26: 'aQ51Yz',
- 64: var7[
- (-((var5[18] & (36).bitLength)))]
- })))
- ? (89 ^
- (((44 - par1) * -9223372034707292160) &
- var5[128]))
- : -46),
- (fld3_2++),
- ((([
- -89,
- var2,
- (fld3_2++),
- var5[-4294967264],
- -25,
- var2,
- var5[((!(var1))
- ? (var1 ? -3 : -81)
- : var5[loc0])],
- (var1
- ? par1
- : ((~((fld3_2++))) >>
- (-((-(-64))))))
- ] ??
- foo2(var6, [
- 4295032831
- ], {
- 53: foo1_3(),
- 94: var7[13],
- 82: var7[-60],
- 30: fld3_0[-9223372032559742976],
- 98: foo1_3()
- })) !=
- var5)
- ? (--par1)
- : loc0),
- 56,
- if (((var5[21]).isOdd ? true : false))
- ((++par1) -
- (var1 ? var5[DateTime.january] : (par1--)))
- else
- fld3_2,
- if ((!(var1))) 74,
- (par1 ^ var5[26])
- ])
- (~(var2)),
- for (int loc2 in {
- 6442450944,
- Float32x4.ywyw,
- -9223372032559804416,
- (~(var5[var5[26]])),
- Float32x4.xyxy,
- (--fld3_2),
- var5[98]
- })
- if (false) -26,
- (~((-((-((-48 - -9223372036854775680))))))),
- ...{
- (-((var2--))),
- if (true) -100663046 else var5[(~(par1))]
- },
- (~((~((fld3_2++))))),
- ...{
- ((List.filled(0, 26) ==
- [
- (-(-52)),
- -29,
- (--fld3_2),
- (0.22302566014161784).floor(),
- (par1 % -56)
- ])
- ? (var1
- ? (var2++)
- : ((!((!(true))))
- ? ((var1 || foo3_0(var3)) ? 76 : par1)
- : (-(-13))))
- : ((foo1_0((var1 ? fld3_0 : var7), var7,
- var3))
- .isEmpty
- ? 97
- : (var1 ? var2 : -9223372036854774784))),
- (-(Float32x4.zyzw)),
- (--var2)
- }
- })
- ((var3 < (-(var3))) ? -9223372032559808000 : -71),
- -100663046,
- if ((var1
- ? bool.fromEnvironment('vV0')
- : (Map.from({
- 78: '',
- 49: '\u{1f600}\u{1f600}4Mz',
- 70: fld3_0[par1],
- 95: '\u{1f600}2tIYqE',
- 43: (true ? 'baf-\u2665' : var4),
- 30: var7[(-((-68 % ZLibOption.defaultLevel)))]
- }))
- .isNotEmpty))
- -13
- else
- (var1 ? (-((-(var5[56])))) : (var2--)),
- (~((~((-((var2++)))))))
- ], {
- 88: ('bV\u{1f600}iqO').toLowerCase(),
- 42: '(hZ4S',
- 37: var7[-79],
- 36: var0
- })));
- }
- }
- {
- int loc0 = 0;
- do {
- try {
- print(foo2(
- fld3_1,
- (fld3_0[var5[-12]]).codeUnits,
- (({
- 36: var4,
- 30: '0\u{1f600}EYWqr',
- 66: 'S',
- 3: '+J3Gj',
- 71: '\u{1f600}-q',
- 13: 'V3QN',
- 34: ''
- } ??
- {
- 54: fld3_0[(var2--)],
- 74: (foo3_0(
- ((-(var3)) * (0.8613045491468889 + var3)))
- ? var7[78]
- : (((var1 ? (47).isEven : var1) ? true : true)
- ? (var4 ?? 'UzK')
- : 'fH1smd')),
- 12: '\u2665',
- 18: 'V'
- }) ??
- var7)));
- } catch (exception, stackTrace) {
- fld3_1 = foo0();
- for (int loc1 = 0; loc1 < 29; loc1++) {
- if (var1) {
- {
- int loc2 = 0;
- do {
- var5 = (foo3_0(var3)
- ? [
- ((--par1) ^ (~(93))),
- if ((var3).isFinite)
- for (int loc3 in [
- -5,
- Int32x4.zxyy,
- (true
- ? var5[var5[(var1 ? -23 : var5[68])]]
- : -99),
- ((!(var1))
- ? ((false
- ? var1
- : foo3_0(0.3133865362301862))
- ? Float64List.bytesPerElement
- : [
- Float32x4.yxzx,
- if (var1)
- (false ? 40 : 85)
- else
- ((String.fromCharCode((foo3_0(
- 0.414460580942719)
- ? var5[-14]
- : var2)) ==
- 'mII\u{1f600}zkM')
- ? var5[(~(-51))]
- : ((var1
- ? (!(var1))
- : var1)
- ? var5[0]
- : (-(var2))))
- ][5])
- : fld3_2),
- (par1++),
- -72,
- Int32x4.zzxy
- ])
- Int32x4.zyww
- else
- Int32x4.wxyz
- ]
- : [
- ...[
- if ((false ? false : var1)) (-(52)),
- (++par1),
- (par1--),
- (-((-([
- (((var0 + fld3_0[(++var2)])).isNotEmpty
- ? Float32x4.yzxw
- : var5[35])
- ][loc0])))),
- (~(-17))
- ],
- 38,
- ...[
- (var1 ? (par1++) : -10),
- if (true) -62 else var2,
- if ((!((var3).isFinite)))
- Int32x4.xxzz
- else
- -45
- ],
- if ((true || false)) (-(-93)),
- (--fld3_2),
- ([
- (fld3_2--),
- if ((base64UrlEncode(var5) == 'RY'))
- (++fld3_2)
- else
- -9223372032559808383,
- Float32x4.zyxy,
- loc0,
- -55,
- if (('O \u{1f600}e\u2665').isNotEmpty)
- if (var1)
- (--var2)
- else
- for (int loc3 in {
- loc0,
- (~((--var2))),
- (-(-35)),
- Float32x4.xxyw,
- 65,
- -4,
- -4194304251,
- -54
- })
- (((0.671280258888436 ==
- (0.16535430333243706 *
- 0.18316039550464436)) ||
- var1)
- ? var5[12]
- : (~((--var2))))
- else if (false)
- if (var1) (-(Int32x4.zzwx)) else loc2
- else
- Int32x4.yzyw
- ][loc1] *
- (--par1)),
- (-71 * 38)
- ]);
- } while (++loc2 < 89);
- }
- } else {
- {
- int loc2 = 0;
- do {
- fld3_0 ??= ((((Map.unmodifiable(var7)).isEmpty ||
- (!(({
- 11: 'v+MHeiB',
- 48: var7[(true
- ? ((var2--) ?? fld3_2)
- : var5[(fld3_2--)])],
- 52: '(('
- })
- .isEmpty)))
- ? fld3_0
- : {
- 39: foo1_3(),
- 21: 'IXzJ+',
- 76: 'K2C#',
- 16: ('\u{1f600}Gh' + '#i'),
- 62: foo1_3(),
- 19: foo1_3(),
- 32: par3,
- for (int loc3 in [
- (par1--),
- -66,
- -96,
- -35,
- Float32x4.zzyz
- ])
- 72: 'y vxi'
- }) ??
- {13: par2});
- switch (4096) {
- case 3159134388:
- {
- /// Single-line documentation comment.
- {
- int loc3 = 0;
- do {
- fld3_0 ??= foo1(
- var5,
- ((((true ? par2 : var7[var5[loc1]]))
- .isNotEmpty
- ? 9
- : -55) !=
- var5[-36]));
- fld3_1 = foo0();
- } while (++loc3 < 79);
- }
- }
- break;
- case 3159134393:
- {
- throw Int32x4.zxxw;
- }
- break;
- }
- } while (++loc2 < 77);
- }
- }
- }
- }
- } while (++loc0 < 98);
- }
- }
- break;
- }
- /*
- * Multi-line
- * comment.
- */
- return ((0.7728524536008519).isNaN ? 'BjzeSsJ' : foo1_3());
- }
-
- void run() {
- super.run();
- var5 ??= var5;
- print({4294968296});
- }
-}
-
-main() {
- int count = 0;
- try {
- foo0();
- } catch (e, st) {
- count++;
- }
- try {
- foo1((' MQz').codeUnits, var1);
- } catch (e, st) {
- count++;
- }
- try {
- foo2(
- (var6).toSet(),
- (var1
- ? [-9223372036854775681, -66, 9223372032559874047, -3, 74]
- : var5),
- Map.identity());
- } catch (e, st) {
- count++;
- }
- try {
- X0().foo0_0(var7);
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_0(
- (false
- ? {
- 7: 'QMNg',
- 12: 'wzc5-Iq',
- 63: '29an-z',
- 86: 'sF5',
- 59: '\u2665L',
- 43: 'k',
- 62: 'NvF\u{1f600}k',
- 84: 'ZW 1-o'
- }
- : var7),
- {
- 28: '@smXqKl',
- 66: 'oL',
- if (false) 74: 'B' else 81: 'X',
- if (false) 18: 'j' else 25: 'N',
- 44: '\u{1f600}lrx8m',
- 20: 'hC',
- 73: 'q',
- 63: '\u{1f600}nE'
- },
- 0.18875619647922648);
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_1((-((++var2))));
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_2((var1
- ? (false
- ? (true ? var7[((!(var1)) ? var5[Int32x4.xxyx] : 3)] : var4)
- : Uri.encodeComponent(('yd' ?? (var0).padLeft(1, 'Q'))))
- : var7[-2147483649]));
- } catch (e, st) {
- count++;
- }
- try {
- X1().foo1_3();
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_0(Int32x4.xyyw);
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_1((!(((!(var1)) && (!((var1 ? false : var1)))))));
- } catch (e, st) {
- count++;
- }
- try {
- X2().foo2_2(var7, ((-(var5[(--var2)])) << 98));
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo3_0(0.37767598562234317);
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo3_1(
- -6, var0, (Uri.decodeComponent('yQg') + ((var4 ?? var4) + var0)));
- } catch (e, st) {
- count++;
- }
- try {
- X3().foo1_0(
- Map.unmodifiable({77: 'hG'}),
- ((false
- ? {
- 88: 'Sv-EbnG',
- 73: 'G',
- 46: 'O#',
- 16: 'm1nf(',
- 91: 'F',
- 11: 'Q+O@K',
- 70: '3q\u2665BJ'
- }
- : Map.identity()) ??
- {
- 68: 'r',
- 56: 'IH&',
- 31: '9cqu',
- 49: '8ug',
- 84: 'mR2VyC',
- 41: 'gk&(asy'
- }),
- (var3 * sin(var3)));
- } catch (e, st) {
- count++;
- }
- try {
- X3().run();
- } catch (e, st) {
- count++;
- } finally {}
- Expect.equals(-47639, var2);
- Expect.equals(9, count);
-}
diff --git a/tests/language_2/vm/regression_38741.dart b/tests/language_2/vm/regression_38741_test.dart
similarity index 100%
rename from tests/language_2/vm/regression_38741.dart
rename to tests/language_2/vm/regression_38741_test.dart
diff --git a/tests/web/regress/190814734a_test.dart b/tests/web/regress/190814734a_test.dart
new file mode 100644
index 0000000..435d2f1
--- /dev/null
+++ b/tests/web/regress/190814734a_test.dart
@@ -0,0 +1,22 @@
+// 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.
+//
+// dart2jsOptions=--null-assertions
+
+@pragma('dart2js:noInline')
+confuse(x) => x;
+
+class MyObject {
+ // Operator == _not_ overridden.
+}
+
+class MyObject2 {
+ @override
+ bool operator ==(other) => other is MyObject2;
+}
+
+void main() {
+ confuse(MyObject2());
+ print(confuse(MyObject()) == confuse(null));
+}
diff --git a/tests/web/regress/190814734b_test.dart b/tests/web/regress/190814734b_test.dart
new file mode 100644
index 0000000..25fcc5d
--- /dev/null
+++ b/tests/web/regress/190814734b_test.dart
@@ -0,0 +1,22 @@
+// 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.
+//
+// dart2jsOptions=--null-assertions --enable-asserts
+
+@pragma('dart2js:noInline')
+confuse(x) => x;
+
+class MyObject {
+ // Operator == _not_ overridden.
+}
+
+class MyObject2 {
+ @override
+ bool operator ==(other) => other is MyObject2;
+}
+
+void main() {
+ confuse(MyObject2());
+ print(confuse(MyObject()) == confuse(null));
+}
diff --git a/tools/VERSION b/tools/VERSION
index a1c0feb..ba5c6a0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 223
+PRERELEASE 224
PRERELEASE_PATCH 0
\ No newline at end of file