diff --git a/.gitignore b/.gitignore index 8cdeac8fccc..e230a3028dc 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ editor/util/testing/mac/CodeLab.suite/Results editor/util/testing/mac/DartEditor.suite/Results editor/util/testing/mac/Samples.suite/Results .test-outcome.log +/outline.dill +/generated/ +/crash_logs/ diff --git a/.packages b/.packages index fd0b3e2eca8..fdf45db5234 100644 --- a/.packages +++ b/.packages @@ -28,7 +28,6 @@ compiler_unsupported:pkg/compiler/lib convert:third_party/pkg/convert/lib crypto:third_party/pkg/crypto/lib csslib:third_party/pkg/csslib/lib -dart2js_incremental:pkg/dart2js_incremental/lib dart2js_info:third_party/pkg/dart2js_info/lib dart_messages:pkg/dart_messages/lib dart_style:third_party/pkg_tested/dart_style/lib @@ -90,7 +89,8 @@ stack_trace:third_party/pkg/stack_trace/lib stream_channel:third_party/pkg/stream_channel/lib string_scanner:third_party/pkg/string_scanner/lib test:third_party/pkg/test/lib -testing:third_party/testing/lib +test_dart:tools/testing/dart +testing:pkg/testing/lib test_reflective_loader:third_party/pkg/test_reflective_loader/lib typed_data:third_party/pkg/typed_data/lib typed_mock:pkg/typed_mock/lib diff --git a/pkg/compiler/lib/src/closure.dart b/pkg/compiler/lib/src/closure.dart index 8cec93b45be..bf97b43e2c8 100644 --- a/pkg/compiler/lib/src/closure.dart +++ b/pkg/compiler/lib/src/closure.dart @@ -18,7 +18,7 @@ import 'elements/modelx.dart' import 'elements/visitor.dart' show ElementVisitor; import 'js_backend/js_backend.dart' show JavaScriptBackend; import 'resolution/tree_elements.dart' show TreeElements; -import 'tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import 'tree/tree.dart'; import 'util/util.dart'; import 'world.dart' show ClosedWorldRefiner; diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart index cd17e561b68..81f528dd703 100644 --- a/pkg/compiler/lib/src/common/codegen.dart +++ b/pkg/compiler/lib/src/common/codegen.dart @@ -17,7 +17,6 @@ import '../elements/elements.dart' FunctionElement, LocalFunctionElement, ResolvedAst; -import '../enqueue.dart' show Enqueuer; import '../universe/use.dart' show DynamicUse, StaticUse, TypeUse; import '../universe/world_impact.dart' show WorldImpact, WorldImpactBuilderImpl, WorldImpactVisitor; diff --git a/pkg/compiler/lib/src/common/resolution.dart b/pkg/compiler/lib/src/common/resolution.dart index a267c34794a..d489b81caa6 100644 --- a/pkg/compiler/lib/src/common/resolution.dart +++ b/pkg/compiler/lib/src/common/resolution.dart @@ -30,6 +30,7 @@ import '../mirrors_used.dart'; import '../options.dart' show CompilerOptions; import '../parser/element_listener.dart' show ScannerOptions; import '../parser/parser_task.dart'; +import '../scanner/scanner_task.dart'; import '../patch_parser.dart'; import '../resolution/resolution.dart'; import '../tree/tree.dart' show Send, TypeAnnotation; @@ -215,10 +216,12 @@ abstract class Resolution implements Frontend { /// A container of commonly used dependencies for tasks that involve parsing. abstract class ParsingContext { factory ParsingContext(DiagnosticReporter reporter, ParserTask parser, - PatchParserTask patchParser, Backend backend) = _ParsingContext; + ScannerTask scanner, PatchParserTask patchParser, Backend backend) + = _ParsingContext; DiagnosticReporter get reporter; ParserTask get parser; + ScannerTask get scanner; PatchParserTask get patchParser; /// Use [patchParser] directly instead. @@ -236,10 +239,12 @@ abstract class ParsingContext { class _ParsingContext implements ParsingContext { final DiagnosticReporter reporter; final ParserTask parser; + final ScannerTask scanner; final PatchParserTask patchParser; final Backend backend; - _ParsingContext(this.reporter, this.parser, this.patchParser, this.backend); + _ParsingContext(this.reporter, this.parser, this.scanner, this.patchParser, + this.backend); @override measure(f()) => parser.measure(f); diff --git a/pkg/compiler/lib/src/common/work.dart b/pkg/compiler/lib/src/common/work.dart index c36a2a5cb67..b8cd3517f97 100644 --- a/pkg/compiler/lib/src/common/work.dart +++ b/pkg/compiler/lib/src/common/work.dart @@ -5,9 +5,7 @@ library dart2js.common.work; import '../common.dart'; -import '../compiler.dart' show Compiler; import '../elements/elements.dart' show AstElement; -import '../enqueue.dart' show Enqueuer; import '../universe/world_impact.dart' show WorldImpact; abstract class WorkItem { diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart index 82459f35510..7151e2eb99b 100644 --- a/pkg/compiler/lib/src/compile_time_constants.dart +++ b/pkg/compiler/lib/src/compile_time_constants.dart @@ -1294,7 +1294,7 @@ class ConstructorEvaluator extends CompileTimeConstantEvaluator { Function compileArgument = (element) => definitions[element]; Function compileConstant = handler.compileConstant; FunctionElement target = constructor.definingConstructor.implementation; - Elements.addForwardingElementArgumentsToList(constructor, + Elements.addForwardingElementArgumentsToList(constructor, compiledArguments, target, compileArgument, compileConstant); CallStructure callStructure = new CallStructure( target.functionSignature.parameterCount, target.type.namedParameters); diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart index ccc20713052..3e34bc90f7f 100644 --- a/pkg/compiler/lib/src/compiler.dart +++ b/pkg/compiler/lib/src/compiler.dart @@ -66,9 +66,9 @@ import 'scanner/scanner_task.dart' show ScannerTask; import 'script.dart' show Script; import 'serialization/task.dart' show SerializationTask; import 'ssa/nodes.dart' show HInstruction; -import 'tokens/token.dart' show StringToken, Token, TokenPair; +import 'package:front_end/src/fasta/scanner.dart' + show StringToken, Token; import 'tokens/token_map.dart' show TokenMap; -import 'tracer.dart' show Tracer; import 'tree/tree.dart' show Node, TypeAnnotation; import 'typechecker.dart' show TypeCheckerTask; import 'types/types.dart' show GlobalTypeInferenceTask; @@ -80,7 +80,6 @@ import 'universe/world_impact.dart' show ImpactStrategy, WorldImpact, - WorldImpactBuilder, WorldImpactBuilderImpl; import 'util/util.dart' show Link, Setlet; import 'world.dart' show ClosedWorld, ClosedWorldRefiner, ClosedWorldImpl; @@ -266,7 +265,7 @@ abstract class Compiler implements LibraryLoaderListener { } _parsingContext = - new ParsingContext(reporter, parser, patchParser, backend); + new ParsingContext(reporter, parser, scanner, patchParser, backend); tasks.addAll(backend.tasks); } @@ -1214,9 +1213,6 @@ class _CompilerCommonElements extends CommonElementsMixin { return _findLibraryMember(library, name, required: required); } - Element _findRequired(LibraryElement library, String name) => - _findLibraryMember(library, name); - Element _findLibraryMember(LibraryElement library, String name, {bool required: true}) { // If the script of the library is synthesized, the library does not exist @@ -1398,6 +1394,9 @@ class CompilerDiagnosticReporter extends DiagnosticReporter { api.Diagnostic.CRASH); } + @override + SourceSpan spanFromToken(Token token) => spanFromTokens(token, token); + SourceSpan spanFromTokens(Token begin, Token end, [Uri uri]) { if (begin == null || end == null) { // TODO(ahe): We can almost always do better. Often it is only @@ -1546,10 +1545,6 @@ class CompilerDiagnosticReporter extends DiagnosticReporter { return node; } else if (node is Node) { return spanFromNode(node); - } else if (node is TokenPair) { - return spanFromTokens(node.begin, node.end); - } else if (node is Token) { - return spanFromTokens(node, node); } else if (node is HInstruction) { return spanFromHInstruction(node); } else if (node is Element) { @@ -1715,7 +1710,6 @@ class CompilerResolution implements Resolution { MirrorUsageAnalyzerTask get mirrorUsageAnalyzerTask => _compiler.mirrorUsageAnalyzerTask; - @override LibraryElement get coreLibrary => _compiler._commonElements.coreLibrary; @override diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart index cb39e780276..812460a3e23 100644 --- a/pkg/compiler/lib/src/dart2js.dart +++ b/pkg/compiler/lib/src/dart2js.dart @@ -122,7 +122,6 @@ Future compile(List argv) { Uri resolutionOutput = currentDirectory.resolve('out.data'); bool allowNativeExtensions = false; bool trustTypeAnnotations = false; - bool trustJSInteropTypeAnnotations = false; bool checkedMode = false; List hints = []; bool verbose; @@ -243,7 +242,6 @@ Future compile(List argv) { } void setTrustJSInteropTypeAnnotations(String argument) { - trustJSInteropTypeAnnotations = true; implyCompilation(argument); } diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart index 6055e037a75..228ead09c98 100644 --- a/pkg/compiler/lib/src/deferred_load.dart +++ b/pkg/compiler/lib/src/deferred_load.dart @@ -40,7 +40,7 @@ import 'universe/world_impact.dart' show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl; import 'util/setlet.dart' show Setlet; import 'util/uri_extras.dart' as uri_extras; -import 'util/util.dart' show Link, makeUnique; +import 'util/util.dart' show makeUnique; /// A "hunk" of the program that will be loaded whenever one of its [imports] /// are loaded. diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart index e12c09c824f..b853b5b9ba8 100644 --- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart +++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart @@ -4,6 +4,7 @@ library dart2js.diagnostic_listener; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../elements/elements.dart' show Element; import '../options.dart' show DiagnosticOptions; import 'messages.dart'; @@ -21,11 +22,16 @@ abstract class DiagnosticReporter { /// Creates a [SourceSpan] for [node] in scope of the current element. /// - /// If [node] is a [Node] or [Token] we assert in checked mode that the - /// corresponding tokens can be found within the tokens of the current - /// element. + /// If [node] is a [Node] we assert in checked mode that the corresponding + /// tokens can be found within the tokens of the current element. SourceSpan spanFromSpannable(Spannable node); + /// Creates a [SourceSpan] for [token] in scope of the current element. + /// + /// In checked mode we assert that the token can be found within the tokens + /// of the current element. + SourceSpan spanFromToken(Token token); + void reportErrorMessage(Spannable spannable, MessageKind messageKind, [Map arguments = const {}]) { reportError(createMessage(spannable, messageKind, arguments)); diff --git a/pkg/compiler/lib/src/diagnostics/messages.dart b/pkg/compiler/lib/src/diagnostics/messages.dart index 7563ceac1c1..d53ff29a40b 100644 --- a/pkg/compiler/lib/src/diagnostics/messages.dart +++ b/pkg/compiler/lib/src/diagnostics/messages.dart @@ -62,7 +62,8 @@ library dart2js.messages; -import '../tokens/token.dart' show ErrorToken, Token; +import 'package:front_end/src/fasta/scanner.dart' + show ErrorToken, Token; import 'generated/shared_messages.dart' as shared_messages; import 'invariant.dart' show invariant; import 'spannable.dart' show CURRENT_ELEMENT_SPANNABLE; @@ -3090,7 +3091,9 @@ main() => r\"\"\" examples: const [ "main(", "main(){", - "main(){]}", + "main(){[}", + // TODO(ahe): https://github.com/dart-lang/sdk/issues/28495 + // "main(){]}", ]), MessageKind.UNTERMINATED_TOKEN: const MessageTemplate( diff --git a/pkg/compiler/lib/src/diagnostics/source_span.dart b/pkg/compiler/lib/src/diagnostics/source_span.dart index d53ebae2274..638a92352e9 100644 --- a/pkg/compiler/lib/src/diagnostics/source_span.dart +++ b/pkg/compiler/lib/src/diagnostics/source_span.dart @@ -4,7 +4,7 @@ library dart2js.diagnostics.source_span; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../tree/tree.dart' show Node; import 'spannable.dart' show Spannable; diff --git a/pkg/compiler/lib/src/elements/elements.dart b/pkg/compiler/lib/src/elements/elements.dart index 40c5a08689b..15c8cfddef4 100644 --- a/pkg/compiler/lib/src/elements/elements.dart +++ b/pkg/compiler/lib/src/elements/elements.dart @@ -13,11 +13,11 @@ import '../ordered_typeset.dart' show OrderedTypeSet; import '../resolution/scope.dart' show Scope; import '../resolution/tree_elements.dart' show TreeElements; import '../script.dart'; -import '../tokens/token.dart' +import 'package:front_end/src/fasta/scanner.dart' show Token, isUserDefinableOperator, isMinusOperator; import '../tree/tree.dart'; import '../universe/call_structure.dart'; -import '../util/characters.dart' show $_; +import 'package:front_end/src/fasta/scanner/characters.dart' show $_; import '../util/util.dart'; import '../world.dart' show ClosedWorld; import 'entities.dart'; diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart index faac946b05c..0798b2a4cb6 100644 --- a/pkg/compiler/lib/src/elements/modelx.dart +++ b/pkg/compiler/lib/src/elements/modelx.dart @@ -20,8 +20,10 @@ import '../resolution/scope.dart' import '../resolution/tree_elements.dart' show TreeElements; import '../resolution/typedefs.dart' show TypedefCyclicVisitor; import '../script.dart'; -import '../tokens/token.dart' show ErrorToken, Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' + show ErrorToken, Token; +import 'package:front_end/src/fasta/scanner.dart' as Tokens + show EOF_TOKEN; import '../tree/tree.dart'; import '../util/util.dart'; import 'common.dart'; @@ -314,7 +316,6 @@ class ErroneousConstructorElementX extends ErroneousElementX @override bool isRedirectingGenerativeInternal; - @override void set isRedirectingGenerative(_) { throw new UnsupportedError("isRedirectingGenerative"); } diff --git a/pkg/compiler/lib/src/hash/sha1.dart b/pkg/compiler/lib/src/hash/sha1.dart index 56ae8b97e9e..7b04aedadd1 100644 --- a/pkg/compiler/lib/src/hash/sha1.dart +++ b/pkg/compiler/lib/src/hash/sha1.dart @@ -78,7 +78,6 @@ int _rotl32(int val, int shift) { // functions. abstract class _HashBase implements Hash { final int _chunkSizeInWords; - final int _digestSizeInWords; final bool _bigEndianWords; final List _currentChunk; final List _h; @@ -91,8 +90,7 @@ abstract class _HashBase implements Hash { : _pendingData = [], _currentChunk = new List(chunkSizeInWords), _h = new List(digestSizeInWords), - _chunkSizeInWords = chunkSizeInWords, - _digestSizeInWords = digestSizeInWords; + _chunkSizeInWords = chunkSizeInWords; // Update the hasher with more data. void add(List data) { diff --git a/pkg/compiler/lib/src/helpers/trace.dart b/pkg/compiler/lib/src/helpers/trace.dart index 021ba97fd92..49c93240d0b 100644 --- a/pkg/compiler/lib/src/helpers/trace.dart +++ b/pkg/compiler/lib/src/helpers/trace.dart @@ -102,7 +102,6 @@ StackTraceLines stackTrace({int offset: 1, int limit: null}) { rangeEnd: rangeEnd, filePrefix: stackTraceFilePrefix); } - return null; } /// A stack trace as a sequence of [StackTraceLine]s. diff --git a/pkg/compiler/lib/src/inferrer/builder.dart b/pkg/compiler/lib/src/inferrer/builder.dart index 050235c5276..0373058920d 100644 --- a/pkg/compiler/lib/src/inferrer/builder.dart +++ b/pkg/compiler/lib/src/inferrer/builder.dart @@ -1215,7 +1215,6 @@ class ElementGraphBuilder extends ast.Visitor (element != null && element.isInstanceMember); } - @override TypeInformation handleSendSet(ast.SendSet node) { Element element = elements[node]; if (!Elements.isUnresolved(element) && element.impliesType) { @@ -2280,7 +2279,6 @@ class ElementGraphBuilder extends ast.Visitor return inferrer.registerAwait(node, futureType); } - @override TypeInformation handleTypeLiteralInvoke(ast.NodeList arguments) { // This is reached when users forget to put a `new` in front of a type // literal. The emitter will generate an actual call (even though it is diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart index 0155c28f4e7..5c75b9a7633 100644 --- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart +++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart @@ -6,7 +6,6 @@ library type_graph_inferrer; import 'dart:collection' show Queue; -import '../common.dart'; import '../compiler.dart' show Compiler; import '../elements/elements.dart'; import '../tree/tree.dart' as ast show Node; diff --git a/pkg/compiler/lib/src/io/start_end_information.dart b/pkg/compiler/lib/src/io/start_end_information.dart index b246958e74e..f7d4dce1369 100644 --- a/pkg/compiler/lib/src/io/start_end_information.dart +++ b/pkg/compiler/lib/src/io/start_end_information.dart @@ -12,7 +12,7 @@ import '../diagnostics/messages.dart' show MessageTemplate; import '../elements/elements.dart' show ResolvedAst, ResolvedAstKind; import '../js/js.dart' as js; import '../js/js_source_mapping.dart'; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../tree/tree.dart' show Node; import 'source_file.dart'; import 'source_information.dart'; diff --git a/pkg/compiler/lib/src/js/js.dart b/pkg/compiler/lib/src/js/js.dart index bad0d1223a1..892da38697d 100644 --- a/pkg/compiler/lib/src/js/js.dart +++ b/pkg/compiler/lib/src/js/js.dart @@ -129,7 +129,6 @@ abstract class ReferenceCountedAstNode implements Node { /// This is used when generated code needs to be represented as a string, /// for example by the lazy emitter or when generating code generators. class UnparsedNode extends DeferredString implements AstContainer { - @override final Node tree; final Compiler _compiler; final bool _protectForEval; diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart index ddef592ca39..c870e760c31 100644 --- a/pkg/compiler/lib/src/js_backend/backend.dart +++ b/pkg/compiler/lib/src/js_backend/backend.dart @@ -905,7 +905,8 @@ class JavaScriptBackend extends Backend { if (elements.isEmpty) return false; return elements.any((element) { return selector.applies(element) && - (mask == null || mask.canHit(element, selector, _closedWorld)); + (mask == null || + mask.canHit(element as MemberElement, selector, _closedWorld)); }); } diff --git a/pkg/compiler/lib/src/js_backend/backend_helpers.dart b/pkg/compiler/lib/src/js_backend/backend_helpers.dart index 5c2834ac187..7b3144d942c 100644 --- a/pkg/compiler/lib/src/js_backend/backend_helpers.dart +++ b/pkg/compiler/lib/src/js_backend/backend_helpers.dart @@ -206,8 +206,6 @@ class BackendHelpers { // TODO(johnniwinther): Split into _findHelperFunction and _findHelperClass // and add a check that the element has the expected kind. Element _findHelper(String name) => _find(jsHelperLibrary, name); - FunctionElement _findHelperFunction(String name) => - _find(jsHelperLibrary, name); Element _findAsyncHelper(String name) => _find(asyncLibrary, name); Element _findInterceptor(String name) => _find(interceptorsLibrary, name); Element _find(LibraryElement library, String name) { diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart index 9aea1dfa185..0ba422fe392 100644 --- a/pkg/compiler/lib/src/js_backend/backend_impact.dart +++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart @@ -12,7 +12,6 @@ import '../elements/elements.dart' show ClassElement, Element; import '../universe/selector.dart'; import '../util/enumset.dart'; import 'backend_helpers.dart'; -import 'constant_system_javascript.dart'; import 'js_backend.dart'; /// Backend specific features required by a backend impact. diff --git a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart index 3a5534537fa..422b0c9b858 100644 --- a/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart +++ b/pkg/compiler/lib/src/js_backend/custom_elements_analysis.dart @@ -6,7 +6,6 @@ import '../compiler.dart' show Compiler; import '../constants/values.dart'; import '../elements/resolution_types.dart'; import '../elements/elements.dart'; -import '../enqueue.dart' show Enqueuer; import '../universe/use.dart' show StaticUse; import '../universe/world_impact.dart' show WorldImpact, StagedWorldImpactBuilder; diff --git a/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart b/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart index f3bb84e993c..71065d5c8e0 100644 --- a/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart +++ b/pkg/compiler/lib/src/js_backend/lookup_map_analysis.dart @@ -17,7 +17,6 @@ import '../constants/values.dart' NullConstantValue, StringConstantValue, TypeConstantValue; -import '../elements/resolution_types.dart' show ResolutionDartType; import '../elements/resolution_types.dart' show ResolutionInterfaceType; import '../elements/elements.dart' show ClassElement, FieldElement, LibraryElement, VariableElement; diff --git a/pkg/compiler/lib/src/js_backend/minify_namer.dart b/pkg/compiler/lib/src/js_backend/minify_namer.dart index f0fdcb872fd..2871687c17c 100644 --- a/pkg/compiler/lib/src/js_backend/minify_namer.dart +++ b/pkg/compiler/lib/src/js_backend/minify_namer.dart @@ -317,25 +317,20 @@ class _ConstructorBodyNamingScope { int get numberOfConstructors => _constructors.length; - _ConstructorBodyNamingScope _superScope; - _ConstructorBodyNamingScope.rootScope(ClassElement cls) - : _superScope = null, - _startIndex = 0, + : _startIndex = 0, _constructors = cls.constructors.toList(growable: false); _ConstructorBodyNamingScope.forClass( ClassElement cls, _ConstructorBodyNamingScope superScope) - : _superScope = superScope, - _startIndex = superScope._startIndex + superScope.numberOfConstructors, + : _startIndex = superScope._startIndex + superScope.numberOfConstructors, _constructors = cls.constructors.toList(growable: false); // Mixin Applications have constructors but we never generate code for them, // so they do not count in the inheritance chain. _ConstructorBodyNamingScope.forMixinApplication( ClassElement cls, _ConstructorBodyNamingScope superScope) - : _superScope = superScope, - _startIndex = superScope._startIndex + superScope.numberOfConstructors, + : _startIndex = superScope._startIndex + superScope.numberOfConstructors, _constructors = const []; factory _ConstructorBodyNamingScope(ClassElement cls, diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart index ffb78003373..33e31650245 100644 --- a/pkg/compiler/lib/src/js_backend/namer.dart +++ b/pkg/compiler/lib/src/js_backend/namer.dart @@ -11,7 +11,6 @@ import 'package:js_runtime/shared/embedded_names.dart' show JsGetName; import '../closure.dart'; import '../common.dart'; import '../common/names.dart' show Identifiers, Selectors; -import '../compiler.dart' show Compiler; import '../constants/values.dart'; import '../core_types.dart' show CommonElements; import '../elements/resolution_types.dart'; @@ -24,7 +23,7 @@ import '../tree/tree.dart'; import '../universe/call_structure.dart' show CallStructure; import '../universe/selector.dart' show Selector, SelectorKind; import '../universe/world_builder.dart' show CodegenWorldBuilder; -import '../util/characters.dart'; +import 'package:front_end/src/fasta/scanner/characters.dart'; import '../util/util.dart'; import '../world.dart' show ClosedWorld; import 'backend.dart'; diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart index dfa0813019b..a1761209eae 100644 --- a/pkg/compiler/lib/src/js_backend/runtime_types.dart +++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart @@ -589,7 +589,6 @@ class _RuntimeTypes implements RuntimeTypes { class _RuntimeTypesEncoder implements RuntimeTypesEncoder { final Compiler compiler; - @override final TypeRepresentationGenerator representationGenerator; _RuntimeTypesEncoder(Compiler compiler) diff --git a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart index 898e910df67..49bee74ed72 100644 --- a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart +++ b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart @@ -8,12 +8,10 @@ import '../constants/expressions.dart'; import '../constants/values.dart'; import '../elements/resolution_types.dart'; import '../elements/elements.dart'; -import '../enqueue.dart' show Enqueuer; import '../js/js.dart' as jsAst; import '../js_emitter/js_emitter.dart' show CodeEmitterTask, MetadataCollector, Placeholder; import '../universe/call_structure.dart' show CallStructure; -import '../universe/use.dart' show StaticUse; import '../universe/world_impact.dart'; import '../util/util.dart'; import 'backend.dart'; @@ -101,7 +99,6 @@ class TypeVariableHandler { // Do not process classes twice. if (_typeVariables.containsKey(cls)) return; - ResolutionInterfaceType typeVariableType = _typeVariableClass.thisType; List constants = []; for (ResolutionTypeVariableType currentTypeVariable in cls.typeVariables) { @@ -111,8 +108,6 @@ class TypeVariableHandler { _metadataCollector.reifyType(typeVariableElement.bound); ConstantValue boundValue = new SyntheticConstantValue( SyntheticConstantKind.TYPEVARIABLE_REFERENCE, boundIndex); - ConstantExpression boundExpression = - new SyntheticConstantExpression(boundValue); ConstantExpression constant = new ConstructedConstantExpression( _typeVariableConstructor.enclosingClass.thisType, _typeVariableConstructor, diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart index 472a2c7c5cd..aa40f913298 100644 --- a/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart +++ b/pkg/compiler/lib/src/js_emitter/full_emitter/nsm_emitter.dart @@ -9,7 +9,8 @@ import '../../js/js.dart' as jsAst; import '../../js/js.dart' show js; import '../../js_backend/js_backend.dart' show GetterName, SetterName; import '../../universe/selector.dart' show Selector; -import '../../util/characters.dart' show $$, $A, $HASH, $Z, $a, $z; +import 'package:front_end/src/fasta/scanner/characters.dart' + show $$, $A, $HASH, $Z, $a, $z; import '../../world.dart' show ClosedWorld; import '../js_emitter.dart' hide Emitter, EmitterFactory; import '../model.dart'; diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart index 01b3a9987ec..bf7ce4ab038 100644 --- a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart +++ b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart @@ -281,7 +281,6 @@ class Collector { } void computeNeededStaticNonFinalFields() { - JavaScriptConstantCompiler handler = backend.constants; addToOutputUnit(Element element) { List list = outputStaticNonFinalFieldLists.putIfAbsent( compiler.deferredLoadTask.outputUnitForElement(element), diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart index 79eff9ac5d7..8ef52b6a2fc 100644 --- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart +++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart @@ -183,7 +183,7 @@ class ProgramBuilder { List finalizers = [_task.metadataCollector]; if (backend.namer is js.TokenFinalizer) { var namingFinalizer = backend.namer; - finalizers.add(namingFinalizer); + finalizers.add(namingFinalizer as js.TokenFinalizer); } return new Program(fragments, holders, _buildLoadMap(), _symbolsMap, diff --git a/pkg/compiler/lib/src/kernel/kernel_visitor.dart b/pkg/compiler/lib/src/kernel/kernel_visitor.dart index 03f700241ce..13544295ed9 100644 --- a/pkg/compiler/lib/src/kernel/kernel_visitor.dart +++ b/pkg/compiler/lib/src/kernel/kernel_visitor.dart @@ -1037,11 +1037,8 @@ class KernelVisitor extends Object } ir.SwitchCase irCase = casesIterator.current; List statements = []; - bool hasVariableDeclaration = false; for (Statement statement in caseNode.statements.nodes) { - if (buildStatement(statement, statements)) { - hasVariableDeclaration = true; - } + buildStatement(statement, statements); } if (statements.isEmpty || fallsThrough(statements.last)) { if (isLastCase) { @@ -2116,7 +2113,6 @@ class KernelVisitor extends Object // [body] must be `null`. } else if (function.isConstructor) { // TODO(johnniwinther): Clean this up pending kernel issue #28. - ConstructorElement constructor = function; if (bodyNode == null || bodyNode.asEmptyStatement() != null) { body = new ir.EmptyStatement(); } else { diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart index 228caa39f50..715494137dd 100644 --- a/pkg/compiler/lib/src/native/enqueue.dart +++ b/pkg/compiler/lib/src/native/enqueue.dart @@ -2,8 +2,6 @@ // 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:collection' show Queue; - import '../common.dart'; import '../common/backend_api.dart' show ForeignResolver; import '../common/resolution.dart' show Resolution; @@ -17,8 +15,10 @@ import '../elements/resolution_types.dart'; import '../js_backend/backend_helpers.dart' show BackendHelpers; import '../js_backend/js_backend.dart'; import '../js_emitter/js_emitter.dart' show CodeEmitterTask, NativeEmitter; -import '../tokens/token.dart' show BeginGroupToken, Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' + show BeginGroupToken, Token; +import 'package:front_end/src/fasta/scanner.dart' as Tokens + show EOF_TOKEN; import '../tree/tree.dart'; import '../universe/use.dart' show StaticUse, TypeUse; import '../universe/world_impact.dart' diff --git a/pkg/compiler/lib/src/native/scanner.dart b/pkg/compiler/lib/src/native/scanner.dart index c1bc40d40f8..9cba42c4d3b 100644 --- a/pkg/compiler/lib/src/native/scanner.dart +++ b/pkg/compiler/lib/src/native/scanner.dart @@ -4,12 +4,14 @@ import '../common.dart'; import '../parser/element_listener.dart' show ElementListener; -import '../tokens/token.dart' show BeginGroupToken, Token; -import '../tokens/token_constants.dart' as Tokens show STRING_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' + show BeginGroupToken, Token; +import 'package:front_end/src/fasta/scanner/token_constants.dart' as Tokens + show STRING_TOKEN; void checkAllowedLibrary(ElementListener listener, Token token) { if (listener.scannerOptions.canUseNative) return; - listener.reportError(token, MessageKind.NATIVE_NOT_SUPPORTED); + listener.reportErrorFromToken(token, MessageKind.NATIVE_NOT_SUPPORTED); } Token handleNativeBlockToSkip(ElementListener listener, Token token) { diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart index 4798c43d3fa..464b826fea0 100644 --- a/pkg/compiler/lib/src/ordered_typeset.dart +++ b/pkg/compiler/lib/src/ordered_typeset.dart @@ -9,7 +9,8 @@ import 'elements/resolution_types.dart'; import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter; import 'elements/elements.dart' show ClassElement; import 'util/util.dart' show Link, LinkBuilder; -import 'util/util_implementation.dart' show LinkEntry; +import 'package:front_end/src/fasta/util/link_implementation.dart' + show LinkEntry; /** * An ordered set of the supertypes of a class. The supertypes of a class are diff --git a/pkg/compiler/lib/src/parser/class_element_parser.dart b/pkg/compiler/lib/src/parser/class_element_parser.dart deleted file mode 100644 index 88a6fa1538e..00000000000 --- a/pkg/compiler/lib/src/parser/class_element_parser.dart +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) 2011, 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. - -library dart2js.parser.classes; - -import '../tokens/token.dart' show Token; -import 'listener.dart' show Listener; -import 'partial_parser.dart' show PartialParser; - -class ClassElementParser extends PartialParser { - ClassElementParser(Listener listener) : super(listener); - - Token parseClassBody(Token token) => fullParseClassBody(token); -} diff --git a/pkg/compiler/lib/src/parser/diet_parser_task.dart b/pkg/compiler/lib/src/parser/diet_parser_task.dart index aa635b91c27..6499632c9d4 100644 --- a/pkg/compiler/lib/src/parser/diet_parser_task.dart +++ b/pkg/compiler/lib/src/parser/diet_parser_task.dart @@ -9,10 +9,17 @@ import '../common/backend_api.dart' show Backend; import '../common/tasks.dart' show CompilerTask, Measurer; import '../elements/elements.dart' show CompilationUnitElement; import '../id_generator.dart'; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import 'element_listener.dart' show ElementListener, ScannerOptions; -import 'listener.dart' show ParserError; -import 'partial_parser.dart' show PartialParser; +import 'package:front_end/src/fasta/parser.dart' + show Listener, ParserError, TopLevelParser; + +class PartialParser extends TopLevelParser { + PartialParser(Listener listener) + : super(listener); + + Token parseFormalParameters(Token token) => skipFormalParameters(token); +} class DietParserTask extends CompilerTask { final IdGenerator _idGenerator; diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart index 5c058ee7331..68656001862 100644 --- a/pkg/compiler/lib/src/parser/element_listener.dart +++ b/pkg/compiler/lib/src/parser/element_listener.dart @@ -22,14 +22,16 @@ import '../elements/modelx.dart' import '../id_generator.dart'; import '../native/native.dart' as native; import '../string_validator.dart' show StringValidator; -import '../tokens/keyword.dart' show Keyword; -import '../tokens/precedence_constants.dart' as Precedence show BAD_INPUT_INFO; -import '../tokens/token.dart' - show BeginGroupToken, ErrorToken, KeywordToken, Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' + show Keyword, BeginGroupToken, ErrorToken, KeywordToken, StringToken, Token; +import 'package:front_end/src/fasta/scanner.dart' as Tokens + show EOF_TOKEN; +import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence show + BAD_INPUT_INFO, IDENTIFIER_INFO; import '../tree/tree.dart'; import '../util/util.dart' show Link, LinkBuilder; -import 'listener.dart' show closeBraceFor, Listener, ParserError, VERBOSE; +import 'package:front_end/src/fasta/parser.dart' + show ErrorKind, Listener, ParserError, optional; import 'partial_elements.dart' show PartialClassElement, @@ -39,6 +41,8 @@ import 'partial_elements.dart' PartialMetadataAnnotation, PartialTypedefElement; +const bool VERBOSE = false; + /// Options used for scanning. /// /// Use this to conditionally support special tokens. @@ -82,6 +86,10 @@ class ElementListener extends Listener { bool suppressParseErrors = false; + /// Set to true each time we parse a native function body. It is reset in + /// [handleInvalidFunctionBody] which is called immediately after. + bool lastErrorWasNativeFunctionBody = false; + ElementListener(this.scannerOptions, DiagnosticReporter reporter, this.compilationUnitElement, this.idGenerator) : this.reporter = reporter, @@ -121,12 +129,14 @@ class ElementListener extends Listener { library.entryCompilationUnit == compilationUnitElement; } + @override void endLibraryName(Token libraryKeyword, Token semicolon) { Expression name = popNode(); addLibraryTag(new LibraryName( libraryKeyword, name, popMetadata(compilationUnitElement))); } + @override void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword, Token semicolon) { NodeList combinators = popNode(); @@ -142,11 +152,13 @@ class ElementListener extends Listener { isDeferred: isDeferred)); } + @override void endDottedName(int count, Token token) { NodeList identifiers = makeNodeList(count, null, null, '.'); pushNode(new DottedName(token, identifiers)); } + @override void endConditionalUris(int count) { if (count == 0) { pushNode(null); @@ -155,6 +167,7 @@ class ElementListener extends Listener { } } + @override void endConditionalUri(Token ifToken, Token equalSign) { StringNode uri = popNode(); LiteralString conditionValue = (equalSign != null) ? popNode() : null; @@ -162,6 +175,7 @@ class ElementListener extends Listener { pushNode(new ConditionalUri(ifToken, identifier, conditionValue, uri)); } + @override void endEnum(Token enumKeyword, Token endBrace, int count) { NodeList names = makeNodeList(count, enumKeyword.next.next, endBrace, ","); Identifier name = popNode(); @@ -173,6 +187,7 @@ class ElementListener extends Listener { rejectBuiltInIdentifier(name); } + @override void endExport(Token exportKeyword, Token semicolon) { NodeList combinators = popNode(); NodeList conditionalUris = popNode(); @@ -181,6 +196,7 @@ class ElementListener extends Listener { popMetadata(compilationUnitElement))); } + @override void endCombinators(int count) { if (0 == count) { pushNode(null); @@ -189,8 +205,10 @@ class ElementListener extends Listener { } } + @override void endHide(Token hideKeyword) => pushCombinator(hideKeyword); + @override void endShow(Token showKeyword) => pushCombinator(showKeyword); void pushCombinator(Token keywordToken) { @@ -198,20 +216,24 @@ class ElementListener extends Listener { pushNode(new Combinator(identifiers, keywordToken)); } + @override void endIdentifierList(int count) { pushNode(makeNodeList(count, null, null, ",")); } + @override void endTypeList(int count) { pushNode(makeNodeList(count, null, null, ",")); } + @override void endPart(Token partKeyword, Token semicolon) { StringNode uri = popLiteralString(); addLibraryTag( new Part(partKeyword, uri, popMetadata(compilationUnitElement))); } + @override void endPartOf(Token partKeyword, Token semicolon) { Expression name = popNode(); addPartOfTag( @@ -222,6 +244,7 @@ class ElementListener extends Listener { compilationUnitElement.setPartOf(tag, reporter); } + @override void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { if (periodBeforeName != null) { popNode(); // Discard name. @@ -230,14 +253,17 @@ class ElementListener extends Listener { pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); } + @override void endTopLevelDeclaration(Token token) { if (!metadata.isEmpty) { MetadataAnnotationX first = metadata.first; - recoverableError(first.beginToken, 'Metadata not supported here.'); + recoverableError(reporter.spanFromToken(first.beginToken), + 'Metadata not supported here.'); metadata.clear(); } } + @override void endClassDeclaration(int interfacesCount, Token beginToken, Token extendsKeyword, Token implementsKeyword, Token endToken) { makeNodeList(interfacesCount, implementsKeyword, null, ","); // interfaces @@ -260,6 +286,7 @@ class ElementListener extends Listener { } } + @override void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { popNode(); // TODO(karlklose): do not throw away typeVariables. Identifier name = popNode(); @@ -269,6 +296,7 @@ class ElementListener extends Listener { rejectBuiltInIdentifier(name); } + @override void endNamedMixinApplication( Token classKeyword, Token implementsKeyword, Token endToken) { NodeList interfaces = (implementsKeyword != null) ? popNode() : null; @@ -292,16 +320,19 @@ class ElementListener extends Listener { rejectBuiltInIdentifier(name); } + @override void endMixinApplication() { NodeList mixins = popNode(); TypeAnnotation superclass = popNode(); pushNode(new MixinApplication(superclass, mixins)); } + @override void handleVoidKeyword(Token token) { pushNode(new TypeAnnotation(new Identifier(token), null)); } + @override void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) { bool hasParseError = currentMemberHasParseError; memberErrors = memberErrors.tail; @@ -315,6 +346,7 @@ class ElementListener extends Listener { pushElement(element); } + @override void endTopLevelFields(int count, Token beginToken, Token endToken) { bool hasParseError = currentMemberHasParseError; memberErrors = memberErrors.tail; @@ -351,20 +383,24 @@ class ElementListener extends Listener { } } + @override void handleIdentifier(Token token) { pushNode(new Identifier(token)); } + @override void handleQualified(Token period) { Identifier last = popNode(); Expression first = popNode(); pushNode(new Send(first, last)); } + @override void handleNoType(Token token) { pushNode(null); } + @override void endTypeVariable(Token token, Token extendsOrSuper) { TypeAnnotation bound = popNode(); Identifier name = popNode(); @@ -372,37 +408,45 @@ class ElementListener extends Listener { rejectBuiltInIdentifier(name); } + @override void endTypeVariables(int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, endToken, ',')); } + @override void handleNoTypeVariables(Token token) { pushNode(null); } + @override void endTypeArguments(int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, endToken, ',')); } + @override void handleNoTypeArguments(Token token) { pushNode(null); } + @override void endType(Token beginToken, Token endToken) { NodeList typeArguments = popNode(); Expression typeName = popNode(); pushNode(new TypeAnnotation(typeName, typeArguments)); } + @override void handleParenthesizedExpression(BeginGroupToken token) { Expression expression = popNode(); pushNode(new ParenthesizedExpression(expression, token)); } + @override void handleModifier(Token token) { pushNode(new Identifier(token)); } + @override void handleModifiers(int count) { if (count == 0) { pushNode(Modifiers.EMPTY); @@ -412,29 +456,234 @@ class ElementListener extends Listener { } } - Token expected(String string, Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else if (identical(';', string)) { - // When a semicolon is missing, it often leads to an error on the - // following line. So we try to find the token preceding the semicolon - // and report that something is missing *after* it. - Token preceding = findPrecedingToken(token); - if (preceding == token) { - reportError( - token, MessageKind.MISSING_TOKEN_BEFORE_THIS, {'token': string}); - } else { - reportError( - preceding, MessageKind.MISSING_TOKEN_AFTER_THIS, {'token': string}); - } - return token; + @override + Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) { + Token next = handleError(token, kind, arguments); + if (next == null && + kind != ErrorKind.UnterminatedComment && + kind != ErrorKind.UnterminatedString) { + throw new ParserError.fromTokens(token, token, kind, arguments); } else { - reportFatalError( - token, - MessageTemplate.TEMPLATES[MessageKind.MISSING_TOKEN_BEFORE_THIS] - .message({'token': string}, true).toString()); + return next; } - return skipToEof(token); + } + + @override + void handleRecoverableError(Token token, ErrorKind kind, Map arguments) { + handleError(token, kind, arguments); + } + + @override + void handleInvalidExpression(Token token) { + pushNode(new ErrorExpression(token)); + } + + @override + void handleInvalidFunctionBody(Token token) { + lastErrorWasNativeFunctionBody = false; + } + + @override + void handleInvalidTypeReference(Token token) { + pushNode(null); + } + + Token handleError(Token token, ErrorKind kind, Map arguments) { + MessageKind errorCode; + + switch (kind) { + case ErrorKind.ExpectedButGot: + String expected = arguments["expected"]; + if (identical(";", expected)) { + // When a semicolon is missing, it often leads to an error on the + // following line. So we try to find the token preceding the semicolon + // and report that something is missing *after* it. + Token preceding = findPrecedingToken(token); + if (preceding == token) { + reportErrorFromToken( + token, MessageKind.MISSING_TOKEN_BEFORE_THIS, + {'token': expected}); + } else { + reportErrorFromToken( + preceding, MessageKind.MISSING_TOKEN_AFTER_THIS, + {'token': expected}); + } + return token; + } else { + reportFatalError( + reporter.spanFromToken(token), + MessageTemplate.TEMPLATES[MessageKind.MISSING_TOKEN_BEFORE_THIS] + .message({'token': expected}, true).toString()); + return null; + } + break; + + case ErrorKind.ExpectedIdentifier: + if (token is KeywordToken) { + reportErrorFromToken(token, + MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD, + {'keyword': token.value}); + } else if (token is ErrorToken) { + // TODO(ahe): This is dead code. + return synthesizeIdentifier(token); + } else { + reportFatalError(reporter.spanFromToken(token), + "Expected identifier, but got '${token.value}'."); + } + return token; + + case ErrorKind.ExpectedType: + reportFatalError(reporter.spanFromToken(token), + "Expected a type, but got '${token.value}'."); + return null; + + case ErrorKind.ExpectedExpression: + reportFatalError( + reporter.spanFromToken(token), + "Expected an expression, but got '${token.value}'."); + return null; + + case ErrorKind.UnexpectedToken: + String message = "Unexpected token '${token.value}'."; + if (token.info == Precedence.BAD_INPUT_INFO) { + message = token.value; + } + reportFatalError(reporter.spanFromToken(token), message); + return null; + + case ErrorKind.ExpectedBlockToSkip: + if (optional("native", token)) { + return native.handleNativeBlockToSkip(this, token); + } else { + errorCode = MessageKind.BODY_EXPECTED; + } + break; + + case ErrorKind.ExpectedFunctionBody: + if (optional("native", token)) { + lastErrorWasNativeFunctionBody = true; + return native.handleNativeFunctionBody(this, token); + } else { + reportFatalError( + reporter.spanFromToken(token), + "Expected a function body, but got '${token.value}'."); + } + return null; + + case ErrorKind.ExpectedClassBodyToSkip: + case ErrorKind.ExpectedClassBody: + reportFatalError( + reporter.spanFromToken(token), + "Expected a class body, but got '${token.value}'."); + return null; + + case ErrorKind.ExpectedDeclaration: + reportFatalError( + reporter.spanFromToken(token), + "Expected a declaration, but got '${token.value}'."); + return null; + + case ErrorKind.UnmatchedToken: + reportErrorFromToken(token, MessageKind.UNMATCHED_TOKEN, arguments); + Token next = token.next; + while (next is ErrorToken) { + next = next.next; + } + return next; + + case ErrorKind.EmptyNamedParameterList: + errorCode = MessageKind.EMPTY_NAMED_PARAMETER_LIST; + break; + + case ErrorKind.EmptyOptionalParameterList: + errorCode = MessageKind.EMPTY_OPTIONAL_PARAMETER_LIST; + break; + + case ErrorKind.ExpectedBody: + errorCode = MessageKind.BODY_EXPECTED; + break; + + case ErrorKind.ExpectedHexDigit: + errorCode = MessageKind.HEX_DIGIT_EXPECTED; + break; + + case ErrorKind.ExpectedOpenParens: + errorCode = MessageKind.GENERIC; + arguments = {"text": "Expected '('."}; + break; + + case ErrorKind.ExpectedString: + reportFatalError( + reporter.spanFromToken(token), + "Expected a String, but got '${token.value}'."); + return null; + + case ErrorKind.ExtraneousModifier: + errorCode = MessageKind.EXTRANEOUS_MODIFIER; + break; + + case ErrorKind.ExtraneousModifierReplace: + errorCode = MessageKind.EXTRANEOUS_MODIFIER_REPLACE; + break; + + case ErrorKind.InvalidAwaitFor: + errorCode = MessageKind.INVALID_AWAIT_FOR; + break; + + case ErrorKind.InvalidInputCharacter: + errorCode = MessageKind.BAD_INPUT_CHARACTER; + break; + + case ErrorKind.InvalidSyncModifier: + errorCode = MessageKind.INVALID_SYNC_MODIFIER; + break; + + case ErrorKind.InvalidVoid: + errorCode = MessageKind.VOID_NOT_ALLOWED; + break; + + case ErrorKind.MalformedStringLiteral: + errorCode = MessageKind.MALFORMED_STRING_LITERAL; + break; + + case ErrorKind.MissingExponent: + errorCode = MessageKind.EXPONENT_MISSING; + break; + + case ErrorKind.PositionalParameterWithEquals: + errorCode = MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS; + break; + + case ErrorKind.RequiredParameterWithDefault: + errorCode = MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT; + break; + + case ErrorKind.UnmatchedToken: + errorCode = MessageKind.UNMATCHED_TOKEN; + break; + + case ErrorKind.UnsupportedPrefixPlus: + errorCode = MessageKind.UNSUPPORTED_PREFIX_PLUS; + break; + + case ErrorKind.UnterminatedComment: + errorCode = MessageKind.UNTERMINATED_COMMENT; + break; + + case ErrorKind.UnterminatedString: + errorCode = MessageKind.UNTERMINATED_STRING; + break; + + case ErrorKind.UnterminatedToken: + errorCode = MessageKind.UNTERMINATED_TOKEN; + break; + + case ErrorKind.Unspecified: + errorCode = MessageKind.GENERIC; + break; + } + SourceSpan span = reporter.spanFromToken(token); + reportError(span, errorCode, arguments); } /// Finds the preceding token via the begin token of the last AST node pushed @@ -494,113 +743,13 @@ class ElementListener extends Listener { return null; } - Token expectedIdentifier(Token token) { - if (token is KeywordToken) { - reportError(token, MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD, - {'keyword': token.value}); - } else if (token is ErrorToken) { - reportErrorToken(token); - return synthesizeIdentifier(token); - } else { - reportFatalError(token, "Expected identifier, but got '${token.value}'."); - } - return token; - } - - Token expectedType(Token token) { - pushNode(null); - if (token is ErrorToken) { - reportErrorToken(token); - return synthesizeIdentifier(token); - } else { - reportFatalError(token, "Expected a type, but got '${token.value}'."); - return skipToEof(token); - } - } - - Token expectedExpression(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - pushNode(new ErrorExpression(token)); - return token.next; - } else { - reportFatalError( - token, "Expected an expression, but got '${token.value}'."); - pushNode(null); - return skipToEof(token); - } - } - - Token unexpected(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - String message = "Unexpected token '${token.value}'."; - if (token.info == Precedence.BAD_INPUT_INFO) { - message = token.value; - } - reportFatalError(token, message); - } - return skipToEof(token); - } - - Token expectedBlockToSkip(Token token) { - if (identical(token.stringValue, 'native')) { - return native.handleNativeBlockToSkip(this, token); - } else { - return unexpected(token); - } - } - - Token expectedFunctionBody(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - String printString = token.value; - reportFatalError( - token, "Expected a function body, but got '$printString'."); - } - return skipToEof(token); - } - - Token expectedClassBody(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - reportFatalError( - token, "Expected a class body, but got '${token.value}'."); - } - return skipToEof(token); - } - - Token expectedClassBodyToSkip(Token token) { - return unexpected(token); - } - - Token expectedDeclaration(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - reportFatalError( - token, "Expected a declaration, but got '${token.value}'."); - } - return skipToEof(token); - } - - Token unmatched(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - String begin = token.value; - String end = closeBraceFor(begin); - reportError( - token, MessageKind.UNMATCHED_TOKEN, {'begin': begin, 'end': end}); - } - Token next = token.next; - while (next is ErrorToken) { - next = next.next; - } - return next; + /// Finds the preceding token via the begin token of the last AST node pushed + /// on the [nodes] stack. + Token synthesizeIdentifier(Token token) { + Token synthesizedToken = new StringToken.fromString( + Precedence.IDENTIFIER_INFO, '?', token.charOffset); + synthesizedToken.next = token.next; + return synthesizedToken; } void recoverableError(Spannable node, String message) { @@ -663,6 +812,7 @@ class ElementListener extends Listener { return new NodeList(beginToken, poppedNodes, endToken, delimiter); } + @override void beginLiteralString(Token token) { String source = token.value; StringQuoting quoting = StringValidator.quotingFromString(source); @@ -672,12 +822,14 @@ class ElementListener extends Listener { pushNode(new LiteralString(token, null)); } + @override void handleStringPart(Token token) { // Just push an unvalidated token now, and replace it when we know the // end of the interpolation. pushNode(new LiteralString(token, null)); } + @override void endLiteralString(int count) { StringQuoting quoting = popQuoting(); @@ -711,6 +863,7 @@ class ElementListener extends Listener { } } + @override void handleStringJuxtaposition(int stringCount) { assert(stringCount != 0); Expression accumulator = popNode(); @@ -723,14 +876,17 @@ class ElementListener extends Listener { pushNode(accumulator); } + @override void beginMember(Token token) { memberErrors = memberErrors.prepend(false); } + @override void beginTopLevelMember(Token token) { beginMember(token); } + @override void endMember() { memberErrors = memberErrors.tail; } @@ -740,11 +896,12 @@ class ElementListener extends Listener { void reportFatalError(Spannable spannable, String message) { reportError(spannable, MessageKind.GENERIC, {'text': message}); // Some parse errors are infeasible to recover from, so we throw an error. - throw new ParserError(message); + SourceSpan span = reporter.spanFromSpannable(spannable); + throw new ParserError( + span.begin, span.end, ErrorKind.Unspecified, {'text': message}); } - @override - void reportErrorHelper(Spannable spannable, MessageKind errorCode, + void reportError(Spannable spannable, MessageKind errorCode, [Map arguments = const {}]) { if (currentMemberHasParseError) return; // Error already reported. if (suppressParseErrors) return; @@ -753,4 +910,9 @@ class ElementListener extends Listener { } reporter.reportErrorMessage(spannable, errorCode, arguments); } + + void reportErrorFromToken(Token token, MessageKind errorCode, + [Map arguments = const {}]) { + reportError(reporter.spanFromToken(token), errorCode, arguments); + } } diff --git a/pkg/compiler/lib/src/parser/member_listener.dart b/pkg/compiler/lib/src/parser/member_listener.dart index 17ecce0c267..4697d5b2de7 100644 --- a/pkg/compiler/lib/src/parser/member_listener.dart +++ b/pkg/compiler/lib/src/parser/member_listener.dart @@ -8,7 +8,7 @@ import '../common.dart'; import '../elements/elements.dart' show Element, ElementKind, Elements; import '../elements/modelx.dart' show ClassElementX, ElementX, FieldElementX, VariableList; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../tree/tree.dart'; import 'element_listener.dart' show ScannerOptions; import 'node_listener.dart' show NodeListener; @@ -67,6 +67,7 @@ class MemberListener extends NodeListener { } } + @override void endMethod(Token getOrSet, Token beginToken, Token endToken) { super.endMethod(getOrSet, beginToken, endToken); FunctionExpression method = popNode(); @@ -76,7 +77,7 @@ class MemberListener extends NodeListener { Element memberElement; if (isConstructor) { if (getOrSet != null) { - recoverableError(getOrSet, 'illegal modifier'); + recoverableError(reporter.spanFromToken(getOrSet), 'illegal modifier'); } memberElement = new PartialConstructorElement(name, beginToken, endToken, ElementKind.GENERATIVE_CONSTRUCTOR, method.modifiers, enclosingClass); @@ -88,6 +89,7 @@ class MemberListener extends NodeListener { addMember(memberElement); } + @override void endFactoryMethod(Token beginToken, Token endToken) { super.endFactoryMethod(beginToken, endToken); FunctionExpression method = popNode(); @@ -112,6 +114,7 @@ class MemberListener extends NodeListener { addMember(memberElement); } + @override void endFields(int count, Token beginToken, Token endToken) { bool hasParseError = memberErrors.head; super.endFields(count, beginToken, endToken); @@ -127,12 +130,14 @@ class MemberListener extends NodeListener { enclosingClass, buildFieldElement, beginToken, endToken, hasParseError); } - void endInitializer(Token assignmentOperator) { + @override + void endFieldInitializer(Token assignmentOperator) { pushNode(null); // Super expects an expression, but // ClassElementParser just skips expressions. - super.endInitializer(assignmentOperator); + super.endFieldInitializer(assignmentOperator); } + @override void endInitializers(int count, Token beginToken, Token endToken) { pushNode(null); } @@ -146,6 +151,7 @@ class MemberListener extends NodeListener { enclosingClass.addMember(memberElement, reporter); } + @override void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { super.endMetadata(beginToken, periodBeforeName, endToken); pushMetadata(new PartialMetadataAnnotation(beginToken, endToken)); diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart index 4dc325cef5b..ae08c785c63 100644 --- a/pkg/compiler/lib/src/parser/node_listener.dart +++ b/pkg/compiler/lib/src/parser/node_listener.dart @@ -6,27 +6,30 @@ library dart2js.parser.node_listener; import '../common.dart'; import '../elements/elements.dart' show CompilationUnitElement; -import '../native/native.dart' as native; -import '../tokens/precedence_constants.dart' as Precedence show INDEX_INFO; -import '../tokens/token.dart' show ErrorToken, StringToken, Token; +import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence show + INDEX_INFO; +import 'package:front_end/src/fasta/scanner.dart' show + StringToken, Token; import '../tree/tree.dart'; import '../util/util.dart' show Link; import 'element_listener.dart' show ElementListener, ScannerOptions; -import 'partial_elements.dart' show PartialFunctionElement; class NodeListener extends ElementListener { NodeListener(ScannerOptions scannerOptions, DiagnosticReporter reporter, CompilationUnitElement element) : super(scannerOptions, reporter, element, null); + @override void addLibraryTag(LibraryTag tag) { pushNode(tag); } + @override void addPartOfTag(PartOf tag) { pushNode(tag); } + @override void endLibraryName(Token libraryKeyword, Token semicolon) { Expression name = popNode(); pushNode(new LibraryName( @@ -37,6 +40,7 @@ class NodeListener extends ElementListener { null)); } + @override void endImport(Token importKeyword, Token deferredKeyword, Token asKeyword, Token semicolon) { NodeList combinators = popNode(); @@ -55,6 +59,7 @@ class NodeListener extends ElementListener { isDeferred: deferredKeyword != null)); } + @override void endExport(Token exportKeyword, Token semicolon) { NodeList combinators = popNode(); NodeList conditionalUris = popNode(); @@ -69,6 +74,7 @@ class NodeListener extends ElementListener { null)); } + @override void endPart(Token partKeyword, Token semicolon) { StringNode uri = popLiteralString(); pushNode(new Part( @@ -79,6 +85,7 @@ class NodeListener extends ElementListener { null)); } + @override void endPartOf(Token partKeyword, Token semicolon) { Expression name = popNode(); // name pushNode(new PartOf( @@ -89,6 +96,7 @@ class NodeListener extends ElementListener { null)); } + @override void endClassDeclaration(int interfacesCount, Token beginToken, Token extendsKeyword, Token implementsKeyword, Token endToken) { NodeList body = popNode(); @@ -102,6 +110,7 @@ class NodeListener extends ElementListener { interfaces, beginToken, extendsKeyword, body, endToken)); } + @override void endTopLevelDeclaration(Token token) { // TODO(sigmund): consider moving metadata into each declaration // element instead. @@ -111,10 +120,12 @@ class NodeListener extends ElementListener { super.endTopLevelDeclaration(token); } + @override void endCompilationUnit(int count, Token token) { pushNode(makeNodeList(count, null, null, '\n')); } + @override void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { NodeList formals = popNode(); NodeList typeParameters = popNode(); @@ -124,6 +135,7 @@ class NodeListener extends ElementListener { returnType, name, typeParameters, formals, typedefKeyword, endToken)); } + @override void endNamedMixinApplication( Token classKeyword, Token implementsKeyword, Token endToken) { NodeList interfaces = (implementsKeyword != null) ? popNode() : null; @@ -135,16 +147,19 @@ class NodeListener extends ElementListener { mixinApplication, interfaces, classKeyword, endToken)); } + @override void endEnum(Token enumKeyword, Token endBrace, int count) { NodeList names = makeNodeList(count, enumKeyword.next.next, endBrace, ","); Identifier name = popNode(); pushNode(new Enum(enumKeyword, name, names)); } + @override void endClassBody(int memberCount, Token beginToken, Token endToken) { pushNode(makeNodeList(memberCount, beginToken, endToken, null)); } + @override void endTopLevelFields(int count, Token beginToken, Token endToken) { NodeList variables = makeNodeList(count, null, endToken, ","); TypeAnnotation type = popNode(); @@ -152,6 +167,7 @@ class NodeListener extends ElementListener { pushNode(new VariableDefinitions(type, modifiers, variables)); } + @override void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) { Statement body = popNode(); AsyncModifier asyncModifier = popNode(); @@ -164,6 +180,7 @@ class NodeListener extends ElementListener { modifiers, null, getOrSet, asyncModifier)); } + @override void endFormalParameter(Token thisKeyword) { Expression name = popNode(); if (thisKeyword != null) { @@ -181,22 +198,27 @@ class NodeListener extends ElementListener { metadata, type, modifiers, new NodeList.singleton(name))); } + @override void endFormalParameters(int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, endToken, ",")); } + @override void handleNoFormalParameters(Token token) { pushNode(null); } + @override void endArguments(int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, endToken, ",")); } + @override void handleNoArguments(Token token) { pushNode(null); } + @override void endConstructorReference( Token start, Token periodBeforeName, Token endToken) { Identifier name = null; @@ -228,74 +250,61 @@ class NodeListener extends ElementListener { pushNode(constructor); } + @override void endRedirectingFactoryBody(Token beginToken, Token endToken) { pushNode(new RedirectingFactoryBody(beginToken, endToken, popNode())); } + @override void endReturnStatement( bool hasExpression, Token beginToken, Token endToken) { Expression expression = hasExpression ? popNode() : null; pushNode(new Return(beginToken, endToken, expression)); } + @override void endYieldStatement(Token yieldToken, Token starToken, Token endToken) { Expression expression = popNode(); pushNode(new Yield(yieldToken, starToken, expression, endToken)); } + @override void endExpressionStatement(Token token) { pushNode(new ExpressionStatement(popNode(), token)); } void handleOnError(Token token, var errorInformation) { - reporter.internalError(token, "'${token.value}': ${errorInformation}"); - } - - Token expectedFunctionBody(Token token) { - if (identical(token.stringValue, 'native')) { - return native.handleNativeFunctionBody(this, token); - } else if (token is ErrorToken) { - pushNode(null); - reportErrorToken(token); - } else { - reportFatalError( - token, "Expected a function body, but got '${token.value}'."); - } - return skipToEof(token); - } - - Token expectedClassBody(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - return skipToEof(token); - } else { - reportFatalError( - token, "Expected a class body, but got '${token.value}'."); - return skipToEof(token); - } + reporter.internalError(reporter.spanFromToken(token), + "'${token.value}': ${errorInformation}"); } + @override void handleLiteralInt(Token token) { pushNode(new LiteralInt(token, (t, e) => handleOnError(t, e))); } + @override void handleLiteralDouble(Token token) { pushNode(new LiteralDouble(token, (t, e) => handleOnError(t, e))); } + @override void handleLiteralBool(Token token) { pushNode(new LiteralBool(token, (t, e) => handleOnError(t, e))); } + @override void handleLiteralNull(Token token) { pushNode(new LiteralNull(token)); } + @override void endLiteralSymbol(Token hashToken, int identifierCount) { NodeList identifiers = makeNodeList(identifierCount, null, null, '.'); pushNode(new LiteralSymbol(hashToken, identifiers)); } + @override void handleBinaryExpression(Token token) { Node argument = popNode(); Node receiver = popNode(); @@ -307,7 +316,8 @@ class NodeListener extends ElementListener { if (argumentSend == null) { // TODO(ahe): The parser should diagnose this problem, not // this listener. - reportFatalError(argument, 'Expected an identifier.'); + reportFatalError(reporter.spanFromSpannable(argument), + "Expected an identifier."); } if (argumentSend.receiver != null) internalError(node: argument); if (argument is SendSet) internalError(node: argument); @@ -319,23 +329,27 @@ class NodeListener extends ElementListener { pushNode(new Send(receiver, new Operator(token), arguments)); } if (identical(tokenString, '===')) { - reporter.reportErrorMessage(token, MessageKind.UNSUPPORTED_EQ_EQ_EQ, - {'lhs': receiver, 'rhs': argument}); + reporter.reportErrorMessage(reporter.spanFromToken(token), + MessageKind.UNSUPPORTED_EQ_EQ_EQ, {'lhs': receiver, 'rhs': argument}); } if (identical(tokenString, '!==')) { - reporter.reportErrorMessage(token, MessageKind.UNSUPPORTED_BANG_EQ_EQ, + reporter.reportErrorMessage(reporter.spanFromToken(token), + MessageKind.UNSUPPORTED_BANG_EQ_EQ, {'lhs': receiver, 'rhs': argument}); } } + @override void beginCascade(Token token) { pushNode(new CascadeReceiver(popNode(), token)); } + @override void endCascade() { pushNode(new Cascade(popNode())); } + @override void handleAsOperator(Token operator, Token endToken) { TypeAnnotation type = popNode(); Expression expression = popNode(); @@ -343,6 +357,7 @@ class NodeListener extends ElementListener { pushNode(new Send(expression, new Operator(operator), arguments)); } + @override void handleAssignmentExpression(Token token) { Node arg = popNode(); Node node = popNode(); @@ -367,9 +382,10 @@ class NodeListener extends ElementListener { void reportNotAssignable(Node node) { // TODO(ahe): The parser should diagnose this problem, not this // listener. - reportFatalError(node, 'Not assignable.'); + reportFatalError(reporter.spanFromSpannable(node), "Not assignable."); } + @override void handleConditionalExpression(Token question, Token colon) { Node elseExpression = popNode(); Node thenExpression = popNode(); @@ -378,6 +394,7 @@ class NodeListener extends ElementListener { condition, thenExpression, elseExpression, question, colon)); } + @override void endSend(Token token) { NodeList arguments = popNode(); NodeList typeArguments = popNode(); @@ -386,6 +403,7 @@ class NodeListener extends ElementListener { pushNode(new Send(null, selector, arguments, typeArguments)); } + @override void endFunctionBody(int count, Token beginToken, Token endToken) { if (count == 0 && beginToken == null) { pushNode(new EmptyStatement(endToken)); @@ -394,6 +412,7 @@ class NodeListener extends ElementListener { } } + @override void handleAsyncModifier(Token asyncToken, Token starToken) { if (asyncToken != null) { pushNode(new AsyncModifier(asyncToken, starToken)); @@ -402,14 +421,17 @@ class NodeListener extends ElementListener { } } - void skippedFunctionBody(Token token) { + @override + void handleFunctionBodySkipped(Token token) { pushNode(new Block(new NodeList.empty())); } + @override void handleNoFunctionBody(Token token) { pushNode(new EmptyStatement(token)); } + @override void endFunction(Token getOrSet, Token endToken) { Statement body = popNode(); AsyncModifier asyncModifier = popNode(); @@ -424,10 +446,12 @@ class NodeListener extends ElementListener { modifiers, initializers, getOrSet, asyncModifier)); } + @override void endFunctionDeclaration(Token endToken) { pushNode(new FunctionDeclaration(popNode())); } + @override void endVariablesDeclaration(int count, Token endToken) { // TODO(ahe): Pick one name for this concept, either // VariablesDeclaration or VariableDefinitions. @@ -437,7 +461,8 @@ class NodeListener extends ElementListener { pushNode(new VariableDefinitions(type, modifiers, variables)); } - void endInitializer(Token assignmentOperator) { + @override + void endVariableInitializer(Token assignmentOperator) { Expression initializer = popNode(); NodeList arguments = initializer == null ? null : new NodeList.singleton(initializer); @@ -446,6 +471,12 @@ class NodeListener extends ElementListener { pushNode(new SendSet(null, name, op, arguments)); } + @override + void endFieldInitializer(Token assignmentOperator) { + endVariableInitializer(assignmentOperator); + } + + @override void endIfStatement(Token ifToken, Token elseToken) { Statement elsePart = (elseToken == null) ? null : popNode(); Statement thenPart = popNode(); @@ -453,6 +484,7 @@ class NodeListener extends ElementListener { pushNode(new If(condition, thenPart, elsePart, ifToken, elseToken)); } + @override void endForStatement( int updateExpressionCount, Token beginToken, Token endToken) { Statement body = popNode(); @@ -462,10 +494,12 @@ class NodeListener extends ElementListener { pushNode(new For(initializer, condition, updates, body, beginToken)); } + @override void handleNoExpression(Token token) { pushNode(null); } + @override void endDoWhileStatement( Token doKeyword, Token whileKeyword, Token endToken) { Expression condition = popNode(); @@ -473,42 +507,51 @@ class NodeListener extends ElementListener { pushNode(new DoWhile(body, condition, doKeyword, whileKeyword, endToken)); } + @override void endWhileStatement(Token whileKeyword, Token endToken) { Statement body = popNode(); Expression condition = popNode(); pushNode(new While(condition, body, whileKeyword)); } + @override void endBlock(int count, Token beginToken, Token endToken) { pushNode(new Block(makeNodeList(count, beginToken, endToken, null))); } + @override void endThrowExpression(Token throwToken, Token endToken) { Expression expression = popNode(); pushNode(new Throw(expression, throwToken, endToken)); } + @override void endAwaitExpression(Token awaitToken, Token endToken) { Expression expression = popNode(); pushNode(new Await(awaitToken, expression)); } + @override void endRethrowStatement(Token throwToken, Token endToken) { pushNode(new Rethrow(throwToken, endToken)); if (identical(throwToken.stringValue, 'throw')) { reporter.reportErrorMessage( - throwToken, MessageKind.MISSING_EXPRESSION_IN_THROW); + reporter.spanFromToken(throwToken), + MessageKind.MISSING_EXPRESSION_IN_THROW); } } + @override void handleUnaryPrefixExpression(Token token) { pushNode(new Send.prefix(popNode(), new Operator(token))); } + @override void handleSuperExpression(Token token) { pushNode(new Identifier(token)); } + @override void handleThisExpression(Token token) { pushNode(new Identifier(token)); } @@ -536,22 +579,27 @@ class NodeListener extends ElementListener { } } + @override void handleUnaryPostfixAssignmentExpression(Token token) { handleUnaryAssignmentExpression(token, false); } + @override void handleUnaryPrefixAssignmentExpression(Token token) { handleUnaryAssignmentExpression(token, true); } + @override void endInitializers(int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, null, ',')); } + @override void handleNoInitializers() { pushNode(null); } + @override void endMember() { // TODO(sigmund): consider moving metadata into each declaration // element instead. @@ -561,6 +609,7 @@ class NodeListener extends ElementListener { super.endMember(); } + @override void endFields(int count, Token beginToken, Token endToken) { NodeList variables = makeNodeList(count, null, endToken, ","); TypeAnnotation type = popNode(); @@ -568,6 +617,7 @@ class NodeListener extends ElementListener { pushNode(new VariableDefinitions(type, modifiers, variables)); } + @override void endMethod(Token getOrSet, Token beginToken, Token endToken) { Statement body = popNode(); AsyncModifier asyncModifier = popNode(); @@ -581,6 +631,7 @@ class NodeListener extends ElementListener { returnType, modifiers, initializers, getOrSet, asyncModifier)); } + @override void handleLiteralMap( int count, Token beginToken, Token constKeyword, Token endToken) { NodeList entries = makeNodeList(count, beginToken, endToken, ','); @@ -588,18 +639,21 @@ class NodeListener extends ElementListener { pushNode(new LiteralMap(typeArguments, entries, constKeyword)); } + @override void endLiteralMapEntry(Token colon, Token endToken) { Expression value = popNode(); Expression key = popNode(); pushNode(new LiteralMapEntry(key, colon, value)); } + @override void handleLiteralList( int count, Token beginToken, Token constKeyword, Token endToken) { NodeList elements = makeNodeList(count, beginToken, endToken, ','); pushNode(new LiteralList(popNode(), elements, constKeyword)); } + @override void handleIndexedExpression( Token openSquareBracket, Token closeSquareBracket) { NodeList arguments = @@ -611,38 +665,45 @@ class NodeListener extends ElementListener { pushNode(new Send(receiver, selector, arguments)); } + @override void handleNewExpression(Token token) { NodeList arguments = popNode(); Node name = popNode(); pushNode(new NewExpression(token, new Send(null, name, arguments))); } + @override void handleConstExpression(Token token) { // [token] carries the 'const' information. handleNewExpression(token); } + @override void handleOperator(Token token) { pushNode(new Operator(token)); } + @override void handleOperatorName(Token operatorKeyword, Token token) { Operator op = new Operator(token); pushNode(new Send(new Identifier(operatorKeyword), op, null)); } + @override void handleNamedArgument(Token colon) { Expression expression = popNode(); Identifier name = popNode(); pushNode(new NamedArgument(name, colon, expression)); } + @override void endOptionalFormalParameters( int count, Token beginToken, Token endToken) { pushNode(makeNodeList(count, beginToken, endToken, ',')); } - void handleFunctionTypedFormalParameter(Token endToken) { + @override + void endFunctionTypedFormalParameter(Token endToken) { NodeList formals = popNode(); NodeList typeVariables = popNode(); Identifier name = popNode(); @@ -652,6 +713,7 @@ class NodeListener extends ElementListener { returnType, Modifiers.EMPTY, null, null, null)); } + @override void handleValuedFormalParameter(Token equals, Token token) { Expression defaultValue = popNode(); Expression parameterName = popNode(); @@ -659,6 +721,7 @@ class NodeListener extends ElementListener { new NodeList.singleton(defaultValue))); } + @override void endTryStatement(int catchCount, Token tryKeyword, Token finallyKeyword) { Block finallyBlock = null; if (finallyKeyword != null) { @@ -670,10 +733,12 @@ class NodeListener extends ElementListener { tryBlock, catchBlocks, finallyBlock, tryKeyword, finallyKeyword)); } + @override void handleCaseMatch(Token caseKeyword, Token colon) { pushNode(new CaseMatch(caseKeyword, popNode(), colon)); } + @override void handleCatchBlock(Token onKeyword, Token catchKeyword) { Block block = popNode(); NodeList formals = catchKeyword != null ? popNode() : null; @@ -681,12 +746,14 @@ class NodeListener extends ElementListener { pushNode(new CatchBlock(type, formals, block, onKeyword, catchKeyword)); } + @override void endSwitchStatement(Token switchKeyword, Token endToken) { NodeList cases = popNode(); ParenthesizedExpression expression = popNode(); pushNode(new SwitchStatement(expression, cases, switchKeyword)); } + @override void endSwitchBlock(int caseCount, Token beginToken, Token endToken) { Link caseNodes = const Link(); while (caseCount > 0) { @@ -697,6 +764,7 @@ class NodeListener extends ElementListener { pushNode(new NodeList(beginToken, caseNodes, endToken, null)); } + @override void handleSwitchCase(int labelCount, int caseCount, Token defaultKeyword, int statementCount, Token firstToken, Token endToken) { NodeList statements = makeNodeList(statementCount, null, null, null); @@ -706,6 +774,7 @@ class NodeListener extends ElementListener { new SwitchCase(labelsAndCases, defaultKeyword, statements, firstToken)); } + @override void handleBreakStatement( bool hasTarget, Token breakKeyword, Token endToken) { Identifier target = null; @@ -715,6 +784,7 @@ class NodeListener extends ElementListener { pushNode(new BreakStatement(target, breakKeyword, endToken)); } + @override void handleContinueStatement( bool hasTarget, Token continueKeyword, Token endToken) { Identifier target = null; @@ -724,10 +794,12 @@ class NodeListener extends ElementListener { pushNode(new ContinueStatement(target, continueKeyword, endToken)); } + @override void handleEmptyStatement(Token token) { pushNode(new EmptyStatement(token)); } + @override void endFactoryMethod(Token beginToken, Token endToken) { super.endFactoryMethod(beginToken, endToken); Statement body = popNode(); @@ -758,6 +830,7 @@ class NodeListener extends ElementListener { name, null, formals, body, null, modifiers, null, null, asyncModifier)); } + @override void endForIn( Token awaitToken, Token forToken, Token inKeyword, Token endToken) { Statement body = popNode(); @@ -772,6 +845,7 @@ class NodeListener extends ElementListener { } } + @override void endMetadataStar(int count, bool forParameter) { if (0 == count) { pushNode(null); @@ -780,6 +854,7 @@ class NodeListener extends ElementListener { } } + @override void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { NodeList arguments = popNode(); if (arguments == null) { @@ -816,6 +891,7 @@ class NodeListener extends ElementListener { } } + @override void handleAssertStatement( Token assertKeyword, Token commaToken, Token semicolonToken) { Node message; @@ -827,6 +903,7 @@ class NodeListener extends ElementListener { pushNode(new Assert(assertKeyword, condition, message, semicolonToken)); } + @override void endUnnamedFunction(Token token) { Statement body = popNode(); AsyncModifier asyncModifier = popNode(); @@ -836,6 +913,7 @@ class NodeListener extends ElementListener { Modifiers.EMPTY, null, null, asyncModifier)); } + @override void handleIsOperator(Token operator, Token not, Token endToken) { TypeAnnotation type = popNode(); Expression expression = popNode(); @@ -850,21 +928,32 @@ class NodeListener extends ElementListener { pushNode(new Send(expression, new Operator(operator), arguments)); } + @override void handleLabel(Token colon) { Identifier name = popNode(); pushNode(new Label(name, colon)); } + @override void endLabeledStatement(int labelCount) { Statement statement = popNode(); NodeList labels = makeNodeList(labelCount, null, null, null); pushNode(new LabeledStatement(labels, statement)); } + @override void log(message) { reporter.log(message); } + @override + void handleInvalidFunctionBody(Token token) { + if (!lastErrorWasNativeFunctionBody) { + pushNode(null); + } + lastErrorWasNativeFunctionBody = false; + } + void internalError({Token token, Node node}) { // TODO(ahe): This should call reporter.internalError. Spannable spannable = (token == null) ? node : token; diff --git a/pkg/compiler/lib/src/parser/parser_task.dart b/pkg/compiler/lib/src/parser/parser_task.dart index 54219d47418..84264fae7f9 100644 --- a/pkg/compiler/lib/src/parser/parser_task.dart +++ b/pkg/compiler/lib/src/parser/parser_task.dart @@ -8,12 +8,11 @@ import '../common.dart'; import '../common/tasks.dart' show CompilerTask; import '../compiler.dart' show Compiler; import '../elements/modelx.dart' show ElementX; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../tree/tree.dart' show Node; import 'element_listener.dart' show ScannerOptions; -import 'listener.dart' show ParserError; +import 'package:front_end/src/fasta/parser.dart' show Parser, ParserError; import 'node_listener.dart' show NodeListener; -import 'parser.dart' show Parser; class ParserTask extends CompilerTask { final Compiler compiler; @@ -36,7 +35,8 @@ class ParserTask extends CompilerTask { try { parser.parseUnit(token); } on ParserError catch (_) { - assert(invariant(token, compiler.compilationFailed)); + assert(invariant(compiler.reporter.spanFromToken(token), + compiler.compilationFailed)); return listener.makeNodeList(0, null, null, '\n'); } Node result = listener.popNode(); diff --git a/pkg/compiler/lib/src/parser/partial_elements.dart b/pkg/compiler/lib/src/parser/partial_elements.dart index c68e5e4521f..8c06c214382 100644 --- a/pkg/compiler/lib/src/parser/partial_elements.dart +++ b/pkg/compiler/lib/src/parser/partial_elements.dart @@ -31,14 +31,20 @@ import '../elements/modelx.dart' TypedefElementX, VariableList; import '../elements/visitor.dart' show ElementVisitor; -import '../tokens/token.dart' show Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' as Tokens show EOF_TOKEN; import '../tree/tree.dart'; -import 'class_element_parser.dart' show ClassElementParser; -import 'listener.dart' show ParserError; +import 'package:front_end/src/fasta/parser.dart' + show ClassMemberParser, Listener, Parser, ParserError; import 'member_listener.dart' show MemberListener; import 'node_listener.dart' show NodeListener; -import 'parser.dart' show Parser; + +class ClassElementParser extends ClassMemberParser { + ClassElementParser(Listener listener) + : super(listener); + + Token parseFormalParameters(Token token) => skipFormalParameters(token); +} abstract class PartialElement implements DeclarationSite { Token beginToken; @@ -379,8 +385,9 @@ class PartialClassElement extends ClassElementX with PartialElement { Token token = parser.parseTopLevelDeclaration(beginToken); assert(identical(token, endToken.next)); cachedNode = listener.popNode(); - assert(invariant(beginToken, listener.nodes.isEmpty, - message: "Non-empty listener stack: ${listener.nodes}")); + assert(invariant(reporter.spanFromToken(beginToken), + listener.nodes.isEmpty, + message: "Non-empty listener stack: ${listener.nodes}")); } on ParserError { // TODO(ahe): Often, a ParserError is thrown while parsing the class // body. This means that the stack actually contains most of the @@ -443,7 +450,7 @@ Node parse(ParsingContext parsing, ElementX element, PartialElement partial, doParse(new Parser(listener)); } on ParserError catch (e) { partial.hasParseError = true; - return new ErrorNode(element.position, e.reason); + return new ErrorNode(element.position, e.kind, e.arguments); } Node node = listener.popNode(); assert(listener.nodes.isEmpty); diff --git a/pkg/compiler/lib/src/patch_parser.dart b/pkg/compiler/lib/src/patch_parser.dart index bf2ae05b2bb..e4aec64cdb2 100644 --- a/pkg/compiler/lib/src/patch_parser.dart +++ b/pkg/compiler/lib/src/patch_parser.dart @@ -134,14 +134,14 @@ import 'id_generator.dart'; import 'js_backend/js_backend.dart' show JavaScriptBackend; import 'library_loader.dart' show LibraryLoader; import 'parser/element_listener.dart' show ElementListener; -import 'parser/listener.dart' show Listener, ParserError; +import 'package:front_end/src/fasta/parser.dart' + show Listener, Parser, ParserError; import 'parser/member_listener.dart' show MemberListener; -import 'parser/parser.dart' show Parser; -import 'parser/partial_elements.dart' show PartialClassElement; -import 'parser/partial_parser.dart' show PartialParser; -import 'scanner/scanner.dart' show Scanner; +import 'parser/partial_elements.dart' + show ClassElementParser, PartialClassElement; import 'script.dart'; -import 'tokens/token.dart' show StringToken, Token; +import 'package:front_end/src/fasta/scanner.dart' show StringToken, Token; +import 'parser/diet_parser_task.dart' show PartialParser; class PatchParserTask extends CompilerTask { final String name = "Patching Parser"; @@ -178,7 +178,7 @@ class PatchParserTask extends CompilerTask { measure(() { // TODO(johnniwinther): Test that parts and exports are handled correctly. Script script = compilationUnit.script; - Token tokens = new Scanner(script.file).tokenize(); + Token tokens = compiler.scanner.scanFile(script.file); Listener patchListener = new PatchElementListener( compiler, compilationUnit, compiler.idGenerator); try { @@ -199,7 +199,7 @@ class PatchParserTask extends CompilerTask { measure(() => reporter.withCurrentElement(cls, () { MemberListener listener = new PatchMemberListener(compiler, cls); - Parser parser = new PatchClassElementParser(listener); + Parser parser = new ClassElementParser(listener); try { Token token = parser.parseTopLevelDeclaration(cls.beginToken); assert(identical(token, cls.endToken.next)); @@ -244,16 +244,6 @@ class PatchMemberListener extends MemberListener { } } -/** - * Partial parser for patch files that also handles the members of class - * declarations. - */ -class PatchClassElementParser extends PartialParser { - PatchClassElementParser(Listener listener) : super(listener); - - Token parseClassBody(Token token) => fullParseClassBody(token); -} - /** * Extension of [ElementListener] for parsing patch files. */ diff --git a/pkg/compiler/lib/src/resolution/enum_creator.dart b/pkg/compiler/lib/src/resolution/enum_creator.dart index c73a926961a..0186e97dbea 100644 --- a/pkg/compiler/lib/src/resolution/enum_creator.dart +++ b/pkg/compiler/lib/src/resolution/enum_creator.dart @@ -9,10 +9,9 @@ import '../core_types.dart' show CommonElements; import '../elements/resolution_types.dart'; import '../elements/elements.dart'; import '../elements/modelx.dart'; -import '../tokens/keyword.dart' show Keyword; -import '../tokens/precedence.dart'; -import '../tokens/precedence_constants.dart' as Precedence; -import '../tokens/token.dart'; +import 'package:front_end/src/fasta/scanner.dart'; +import 'package:front_end/src/fasta/scanner/precedence.dart'; +import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence; import '../tree/tree.dart'; import '../util/util.dart'; diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart index 13bcdd9efe8..559a6d6e6f1 100644 --- a/pkg/compiler/lib/src/resolution/members.dart +++ b/pkg/compiler/lib/src/resolution/members.dart @@ -27,7 +27,7 @@ import '../elements/modelx.dart' VariableElementX, VariableList; import '../options.dart'; -import '../tokens/token.dart' show isUserDefinableOperator; +import 'package:front_end/src/fasta/scanner.dart' show isUserDefinableOperator; import '../tree/tree.dart'; import '../universe/call_structure.dart' show CallStructure; import '../universe/feature.dart' show Feature; @@ -2841,7 +2841,7 @@ class ResolverVisitor extends MappingVisitor { } else if (member.isFunction) { // `a = b`, `a++` or `a += b` where `a` is a function. MethodElement method = member; - ErroneousElement error = reportAndCreateErroneousElement( + reportAndCreateErroneousElement( node.selector, name.text, MessageKind.ASSIGNING_METHOD, const {}); registry.registerFeature(Feature.THROW_NO_SUCH_METHOD); if (node.isComplex) { @@ -2860,7 +2860,7 @@ class ResolverVisitor extends MappingVisitor { registry.registerStaticUse(new StaticUse.staticGet(member)); } if (member.isFinal || member.isConst) { - ErroneousElement error = reportAndCreateErroneousElement( + reportAndCreateErroneousElement( node.selector, name.text, MessageKind.UNDEFINED_STATIC_SETTER_BUT_GETTER, @@ -3613,7 +3613,8 @@ class ResolverVisitor extends MappingVisitor { ResolutionResult visitYield(Yield node) { if (!resolution.target.supportsAsyncAwait) { reporter.reportErrorMessage( - node.yieldToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); + reporter.spanFromToken(node.yieldToken), + MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); } else { if (!currentAsyncMarker.isYielding) { reporter.reportErrorMessage(node, MessageKind.INVALID_YIELD); @@ -3754,7 +3755,8 @@ class ResolverVisitor extends MappingVisitor { ResolutionResult visitAwait(Await node) { if (!resolution.target.supportsAsyncAwait) { reporter.reportErrorMessage( - node.awaitToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); + reporter.spanFromToken(node.awaitToken), + MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); } else { if (!currentAsyncMarker.isAsync) { reporter.reportErrorMessage(node, MessageKind.INVALID_AWAIT); @@ -4017,7 +4019,8 @@ class ResolverVisitor extends MappingVisitor { if (resolution.commonElements.isSymbolConstructor(constructor) && !resolution.mirrorUsageAnalyzerTask .hasMirrorUsage(enclosingElement)) { - reporter.reportHintMessage(node.newToken, MessageKind.NON_CONST_BLOAT, + reporter.reportHintMessage(reporter.spanFromToken(node.newToken), + MessageKind.NON_CONST_BLOAT, {'name': commonElements.symbolClass.name}); } registry.registerNewStructure( @@ -4289,11 +4292,13 @@ class ResolverVisitor extends MappingVisitor { ResolutionResult visitAsyncForIn(AsyncForIn node) { if (!resolution.target.supportsAsyncAwait) { reporter.reportErrorMessage( - node.awaitToken, MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); + reporter.spanFromToken(node.awaitToken), + MessageKind.ASYNC_AWAIT_NOT_SUPPORTED); } else { if (!currentAsyncMarker.isAsync) { reporter.reportErrorMessage( - node.awaitToken, MessageKind.INVALID_AWAIT_FOR_IN); + reporter.spanFromToken(node.awaitToken), + MessageKind.INVALID_AWAIT_FOR_IN); } registry.registerFeature(Feature.ASYNC_FOR_IN); registry.registerDynamicUse(new DynamicUse(Selectors.current, null)); @@ -4693,7 +4698,8 @@ class ResolverVisitor extends MappingVisitor { visit(node.tryBlock); if (node.catchBlocks.isEmpty && node.finallyBlock == null) { reporter.reportErrorMessage( - node.getEndToken().next, MessageKind.NO_CATCH_NOR_FINALLY); + reporter.spanFromToken(node.getEndToken().next), + MessageKind.NO_CATCH_NOR_FINALLY); } visit(node.catchBlocks); visit(node.finallyBlock); diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart index b844779104f..87ed6b0fd55 100644 --- a/pkg/compiler/lib/src/resolution/resolution.dart +++ b/pkg/compiler/lib/src/resolution/resolution.dart @@ -37,7 +37,7 @@ import '../elements/modelx.dart' TypedefElementX; import '../enqueue.dart'; import '../options.dart'; -import '../tokens/token.dart' +import 'package:front_end/src/fasta/scanner.dart' show isBinaryOperator, isMinusOperator, @@ -47,7 +47,7 @@ import '../tokens/token.dart' import '../tree/tree.dart'; import '../universe/call_structure.dart' show CallStructure; import '../universe/feature.dart' show Feature; -import '../universe/use.dart' show StaticUse, TypeUse; +import '../universe/use.dart' show StaticUse; import '../universe/world_impact.dart' show WorldImpact; import '../util/util.dart' show Link, Setlet; import '../world.dart'; @@ -518,7 +518,6 @@ class ResolverTask extends CompilerTask { ResolvedAst resolvedAst = factory.resolvedAst; assert(invariant(node, resolvedAst != null, message: 'No ResolvedAst for $factory.')); - FunctionExpression functionNode = resolvedAst.node; RedirectingFactoryBody redirectionNode = resolvedAst.body; ResolutionDartType factoryType = resolvedAst.elements.getType(redirectionNode); diff --git a/pkg/compiler/lib/src/resolution/signatures.dart b/pkg/compiler/lib/src/resolution/signatures.dart index 07f3bbaf940..ac7b6d84783 100644 --- a/pkg/compiler/lib/src/resolution/signatures.dart +++ b/pkg/compiler/lib/src/resolution/signatures.dart @@ -18,7 +18,6 @@ import '../elements/modelx.dart' LocalParameterElementX, TypeVariableElementX; import '../tree/tree.dart'; -import '../universe/use.dart' show TypeUse; import '../util/util.dart' show Link, LinkBuilder; import 'members.dart' show ResolverVisitor; import 'registry.dart' show ResolutionRegistry; diff --git a/pkg/compiler/lib/src/resolution/variables.dart b/pkg/compiler/lib/src/resolution/variables.dart index d6490e0bc99..60541a5cc81 100644 --- a/pkg/compiler/lib/src/resolution/variables.dart +++ b/pkg/compiler/lib/src/resolution/variables.dart @@ -8,7 +8,6 @@ import '../common.dart'; import '../common/resolution.dart'; import '../elements/modelx.dart' show LocalVariableElementX, VariableList; import '../tree/tree.dart'; -import '../universe/use.dart' show TypeUse; import '../universe/feature.dart'; import '../util/util.dart' show Link; import 'members.dart' show ResolverVisitor; diff --git a/pkg/compiler/lib/src/scanner/scanner_task.dart b/pkg/compiler/lib/src/scanner/scanner_task.dart index 1977248b510..c49621eca5c 100644 --- a/pkg/compiler/lib/src/scanner/scanner_task.dart +++ b/pkg/compiler/lib/src/scanner/scanner_task.dart @@ -9,11 +9,12 @@ import '../diagnostics/diagnostic_listener.dart' show DiagnosticReporter; import '../elements/elements.dart' show CompilationUnitElement, LibraryElement; import '../parser/diet_parser_task.dart' show DietParserTask; import '../script.dart' show Script; -import '../tokens/token.dart' show Token; -import '../tokens/token_constants.dart' as Tokens show COMMENT_TOKEN, EOF_TOKEN; +import 'package:front_end/src/fasta/scanner.dart' + show Scanner, StringScanner, Token, Utf8BytesScanner; +import 'package:front_end/src/fasta/scanner/token_constants.dart' as Tokens + show COMMENT_TOKEN, EOF_TOKEN; import '../tokens/token_map.dart' show TokenMap; -import 'scanner.dart' show Scanner; -import 'string_scanner.dart' show StringScanner; +import '../io/source_file.dart'; class ScannerTask extends CompilerTask { final DietParserTask _dietParser; @@ -52,10 +53,17 @@ class ScannerTask extends CompilerTask { }); } + Token scanFile(SourceFile file, {bool includeComments: false}) { + Scanner scanner = file is Utf8BytesSourceFile + ? new Utf8BytesScanner(file.slowUtf8ZeroTerminatedBytes(), + includeComments: includeComments) + : new StringScanner(file.slowText(), includeComments: includeComments); + return measure(scanner.tokenize); + } + void scanElements(CompilationUnitElement compilationUnit) { Script script = compilationUnit.script; - Token tokens = - new Scanner(script.file, includeComments: _preserveComments).tokenize(); + Token tokens = scanFile(script.file, includeComments: _preserveComments); if (_preserveComments) { tokens = processAndStripComments(tokens); } @@ -71,8 +79,7 @@ class ScannerTask extends CompilerTask { */ Token tokenize(String source) { return measure(() { - return new StringScanner.fromString(source, includeComments: false) - .tokenize(); + return new StringScanner(source, includeComments: false).tokenize(); }); } diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart index a149543e1f6..9cd79c972f1 100644 --- a/pkg/compiler/lib/src/serialization/equivalence.dart +++ b/pkg/compiler/lib/src/serialization/equivalence.dart @@ -21,7 +21,7 @@ import '../native/native.dart' show NativeBehavior; import '../resolution/access_semantics.dart'; import '../resolution/send_structure.dart'; import '../resolution/tree_elements.dart'; -import '../tokens/token.dart'; +import 'package:front_end/src/fasta/scanner.dart'; import '../tree/nodes.dart'; import '../universe/selector.dart'; import '../universe/feature.dart'; @@ -1437,7 +1437,10 @@ class NodeEquivalenceVisitor implements Visitor1 { (Token t1, Token t2) { if (t1 == t2) return true; if (t1 == null || t2 == null) return false; - return strategy.test(t1, t2, 'hashCode', t1.hashCode, t2.hashCode); + return + strategy.test(t1, t2, 'charOffset', t1.charOffset, t2.charOffset) && + strategy.test(t1, t2, 'info', t1.info, t2.info) && + strategy.test(t1, t2, 'value', t1.value, t2.value); }); } diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart index e1fb5d0b60f..cbe95a524e4 100644 --- a/pkg/compiler/lib/src/serialization/modelz.dart +++ b/pkg/compiler/lib/src/serialization/modelz.dart @@ -25,7 +25,7 @@ import '../resolution/scope.dart' show Scope; import '../resolution/tree_elements.dart' show TreeElements; import '../script.dart'; import '../serialization/constant_serialization.dart'; -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../tree/tree.dart'; import '../util/util.dart' show Link, LinkBuilder; import 'keys.dart'; @@ -1572,7 +1572,6 @@ abstract class MemberElementMixin @override bool get isInjected => _decoder.getBool(Key.IS_INJECTED); - @override void forgetElement() { nestedClosures.clear(); } diff --git a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart index 85044fb3cf3..c81aec52ac5 100644 --- a/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart +++ b/pkg/compiler/lib/src/serialization/resolved_ast_serialization.dart @@ -11,16 +11,14 @@ import '../elements/resolution_types.dart'; import '../diagnostics/diagnostic_listener.dart'; import '../elements/elements.dart'; import '../elements/modelx.dart'; -import '../parser/listener.dart' show ParserError; +import 'package:front_end/src/fasta/parser.dart' show Parser, ParserError; import '../parser/node_listener.dart' show NodeListener; -import '../parser/parser.dart' show Parser; import '../resolution/enum_creator.dart'; import '../resolution/send_structure.dart'; import '../resolution/tree_elements.dart'; -import '../tokens/token.dart'; +import 'package:front_end/src/fasta/scanner.dart'; import '../tree/tree.dart'; import '../universe/selector.dart'; -import '../util/util.dart'; import 'keys.dart'; import 'modelz.dart'; import 'serialization.dart'; @@ -374,7 +372,6 @@ class ResolvedAstDeserializer { ParsingContext parsing, Token getBeginToken(Uri uri, int charOffset), DeserializerPlugin nativeDataDeserializer) { - CompilationUnitElement compilationUnit = element.compilationUnit; DiagnosticReporter reporter = parsing.reporter; Uri uri = objectDecoder.getUri(Key.URI); @@ -395,7 +392,6 @@ class ResolvedAstDeserializer { Node doParse(parse(Parser parser)) { return parsing.measure(() { return reporter.withCurrentElement(element, () { - CompilationUnitElement unit = element.compilationUnit; NodeListener listener = new NodeListener( parsing.getScannerOptionsFor(element), reporter, null); listener.memberErrors = listener.memberErrors.prepend(false); @@ -424,7 +420,6 @@ class ResolvedAstDeserializer { case AstKind.ENUM_VALUES_FIELD: EnumClassElement enumClass = element.enclosingClass; AstBuilder builder = new AstBuilder(element.sourcePosition.begin); - List enumValues = []; List valueReferences = []; for (EnumConstantElement enumConstant in enumClass.enumValues) { AstBuilder valueBuilder = @@ -532,7 +527,6 @@ class ResolvedAstDeserializer { Node root = computeNode(kind); TreeElementMapping elements = new TreeElementMapping(element); AstIndexComputer indexComputer = new AstIndexComputer(); - Map nodeIndices = indexComputer.nodeIndices; List nodeList = indexComputer.nodeList; root.accept(indexComputer); elements.containsTryStatement = objectDecoder.getBool(Key.CONTAINS_TRY); diff --git a/pkg/compiler/lib/src/serialization/serialization.dart b/pkg/compiler/lib/src/serialization/serialization.dart index ff18e36fdbd..9bbfb8ddd91 100644 --- a/pkg/compiler/lib/src/serialization/serialization.dart +++ b/pkg/compiler/lib/src/serialization/serialization.dart @@ -659,7 +659,6 @@ bool includeAllElements(Element element) => true; class Serializer { List plugins = []; - Map _dependencyMap = {}; Map _elementMap = {}; Map _constantMap = {}; diff --git a/pkg/compiler/lib/src/serialization/serialization_util.dart b/pkg/compiler/lib/src/serialization/serialization_util.dart index 9c7d1a818a1..8816cbdd5e2 100644 --- a/pkg/compiler/lib/src/serialization/serialization_util.dart +++ b/pkg/compiler/lib/src/serialization/serialization_util.dart @@ -52,9 +52,6 @@ Selector deserializeSelector(ObjectDecoder decoder) { int argumentCount = decoder.getInt(Key.ARGUMENTS); List namedArguments = decoder.getStrings(Key.NAMED_ARGUMENTS, isOptional: true); - String name = decoder.getString(Key.NAME); - bool isSetter = decoder.getBool(Key.IS_SETTER); - LibraryElement library = decoder.getElement(Key.LIBRARY, isOptional: true); return new Selector(kind, deserializeName(decoder), new CallStructure(argumentCount, namedArguments)); } diff --git a/pkg/compiler/lib/src/serialization/system.dart b/pkg/compiler/lib/src/serialization/system.dart index 12b4adb41cd..b2507121608 100644 --- a/pkg/compiler/lib/src/serialization/system.dart +++ b/pkg/compiler/lib/src/serialization/system.dart @@ -11,10 +11,9 @@ import '../common/resolution.dart'; import '../compiler.dart'; import '../elements/resolution_types.dart'; import '../elements/elements.dart'; -import '../scanner/scanner.dart'; import '../script.dart'; import '../serialization/impact_serialization.dart'; -import '../tokens/token.dart'; +import 'package:front_end/src/fasta/scanner.dart'; import '../universe/call_structure.dart'; import '../universe/use.dart'; import '../universe/world_impact.dart'; @@ -315,7 +314,7 @@ class ResolvedAstDeserializerPlugin extends DeserializerPlugin { 'No source file found for $uri in:\n ${scripts.keys.join('\n ')}'); } if (script.isSynthesized) return null; - return new Scanner(script.file).tokenize(); + return parsingContext.scanner.scanFile(script.file); }); if (beginToken == null) return null; return ResolvedAstDeserializer.findTokenInStream(beginToken, offset); diff --git a/pkg/compiler/lib/src/serialization/task.dart b/pkg/compiler/lib/src/serialization/task.dart index acad2240e73..886aac467fc 100644 --- a/pkg/compiler/lib/src/serialization/task.dart +++ b/pkg/compiler/lib/src/serialization/task.dart @@ -10,7 +10,6 @@ import '../common/resolution.dart' show ResolutionImpact, ResolutionWorkItem; import '../common/tasks.dart' show CompilerTask; import '../compiler.dart' show Compiler; import '../elements/elements.dart'; -import '../enqueue.dart' show ResolutionEnqueuer; import '../universe/world_impact.dart' show WorldImpact; import 'json_serializer.dart'; import 'serialization.dart'; diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart index b49d87e6120..ec83c92a50d 100644 --- a/pkg/compiler/lib/src/ssa/builder.dart +++ b/pkg/compiler/lib/src/ssa/builder.dart @@ -1140,7 +1140,6 @@ class SsaBuilder extends ast.Visitor if (compiler.elementHasCompileTimeError(member)) return; reporter.withCurrentElement(member, () { ResolvedAst fieldResolvedAst = member.resolvedAst; - ast.Node node = fieldResolvedAst.node; ast.Expression initializer = fieldResolvedAst.body; if (initializer == null) { // Unassigned fields of native classes are not initialized to diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart index 5c5d5a11324..cd0532bece1 100644 --- a/pkg/compiler/lib/src/ssa/builder_kernel.dart +++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart @@ -26,7 +26,7 @@ import '../kernel/kernel.dart'; import '../native/native.dart' as native; import '../resolution/tree_elements.dart'; import '../tree/dartstring.dart'; -import '../tree/nodes.dart' show Node, BreakStatement; +import '../tree/nodes.dart' show Node; import '../types/masks.dart'; import '../universe/call_structure.dart' show CallStructure; import '../universe/selector.dart'; @@ -663,7 +663,6 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { returnStatement.expression.accept(this); value = pop(); if (_targetFunction.asyncMarker == ir.AsyncMarker.Async) { - var returnType = astAdapter.getDartType(_targetFunction.returnType); if (compiler.options.enableTypeAssertions && !isValidAsyncReturnType(_targetFunction.returnType)) { generateTypeError( @@ -1309,12 +1308,12 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { int switchIndex = 1; bool hasDefault = false; for (ir.SwitchCase switchCase in switchStatement.cases) { + if (_isDefaultCase(switchCase)) { + hasDefault = true; + } if (SwitchContinueAnalysis.containsContinue(switchCase.body)) { hasContinue = true; } - if (switchCase.isDefault) { - hasDefault = true; - } caseIndex[switchCase] = switchIndex; switchIndex++; } diff --git a/pkg/compiler/lib/src/ssa/graph_builder.dart b/pkg/compiler/lib/src/ssa/graph_builder.dart index 8c3d4b519f0..9dbab934216 100644 --- a/pkg/compiler/lib/src/ssa/graph_builder.dart +++ b/pkg/compiler/lib/src/ssa/graph_builder.dart @@ -2,11 +2,10 @@ // 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 '../common.dart'; import '../common/codegen.dart' show CodegenRegistry; import '../compiler.dart'; import '../elements/elements.dart'; -import '../elements/entities.dart'; +import '../elements/entities.dart' show Entity, Local; import '../elements/resolution_types.dart'; import '../js_backend/js_backend.dart'; import '../resolution/tree_elements.dart'; diff --git a/pkg/compiler/lib/src/ssa/jump_handler.dart b/pkg/compiler/lib/src/ssa/jump_handler.dart index c3d1528bebc..50628f89723 100644 --- a/pkg/compiler/lib/src/ssa/jump_handler.dart +++ b/pkg/compiler/lib/src/ssa/jump_handler.dart @@ -6,7 +6,6 @@ import '../common.dart'; import '../elements/elements.dart'; import '../tree/tree.dart' as ast; -import 'builder.dart'; import 'graph_builder.dart'; import 'locals_handler.dart'; import 'nodes.dart'; diff --git a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart index 9e648f08847..d7c34a005be 100644 --- a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart +++ b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart @@ -6,7 +6,6 @@ import 'package:js_runtime/shared/embedded_names.dart'; import 'package:kernel/ast.dart' as ir; import '../common.dart'; -import '../common/names.dart'; import '../compiler.dart'; import '../constants/expressions.dart'; import '../constants/values.dart'; @@ -17,7 +16,6 @@ import '../elements/entities.dart'; import '../elements/modelx.dart'; import '../elements/types.dart'; import '../js/js.dart' as js; -import '../js_backend/backend_helpers.dart'; import '../js_backend/js_backend.dart'; import '../kernel/element_adapter.dart'; import '../kernel/kernel.dart'; @@ -766,7 +764,7 @@ class Constantifier extends ir.ExpressionVisitor { ConstantExpression visitStaticGet(ir.StaticGet node) { Element element = astAdapter.getMember(node.target); if (element.isField) { - return new VariableConstantExpression(element); + return new VariableConstantExpression(element as VariableElement); } astAdapter.reporter.internalError( CURRENT_ELEMENT_SPANNABLE, "Unexpected constant target: $element."); diff --git a/pkg/compiler/lib/src/ssa/locals_handler.dart b/pkg/compiler/lib/src/ssa/locals_handler.dart index ea2666b2986..3e97e0a824f 100644 --- a/pkg/compiler/lib/src/ssa/locals_handler.dart +++ b/pkg/compiler/lib/src/ssa/locals_handler.dart @@ -487,7 +487,6 @@ class LocalsHandler { Map savedDirectLocals = new Map.from(directLocals); - JavaScriptBackend backend = _compiler.backend; // Create phis for all elements in the definitions environment. savedDirectLocals.forEach((Local local, HInstruction instruction) { if (isAccessedDirectly(local)) { diff --git a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart index 8c1fa214c64..7493d308228 100644 --- a/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart +++ b/pkg/compiler/lib/src/ssa/ssa_branch_builder.dart @@ -4,7 +4,6 @@ import '../compiler.dart'; import '../io/source_information.dart'; -import '../js_backend/js_backend.dart'; import '../tree/tree.dart' as ast; import 'graph_builder.dart'; diff --git a/pkg/compiler/lib/src/string_validator.dart b/pkg/compiler/lib/src/string_validator.dart index b81661a9415..0868d03d8ee 100644 --- a/pkg/compiler/lib/src/string_validator.dart +++ b/pkg/compiler/lib/src/string_validator.dart @@ -9,10 +9,10 @@ library stringvalidator; import 'dart:collection'; import 'common.dart'; -import 'tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import 'tree/dartstring.dart' show DartString; import 'tree/nodes.dart' show StringQuoting; -import 'util/characters.dart'; +import 'package:front_end/src/fasta/scanner/characters.dart'; class StringValidator { final DiagnosticReporter reporter; @@ -100,7 +100,8 @@ class StringValidator { void stringParseError(String message, Token token, int offset) { reporter.reportErrorMessage( - token, MessageKind.GENERIC, {'text': "$message @ $offset"}); + reporter.spanFromToken(token), MessageKind.GENERIC, + {'text': "$message @ $offset"}); } /** diff --git a/pkg/compiler/lib/src/tokens/precedence.dart b/pkg/compiler/lib/src/tokens/precedence.dart deleted file mode 100644 index c3f4906c929..00000000000 --- a/pkg/compiler/lib/src/tokens/precedence.dart +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -library dart2js.tokens.precedence; - -import '../util/util.dart' show computeHashCode; - -class PrecedenceInfo { - final String value; - final int precedence; - final int kind; - - const PrecedenceInfo(this.value, this.precedence, this.kind); - - toString() => 'PrecedenceInfo($value, $precedence, $kind)'; - - int get hashCode => computeHashCode(value, precedence, kind); -} diff --git a/pkg/compiler/lib/src/tokens/token_map.dart b/pkg/compiler/lib/src/tokens/token_map.dart index e7fc3b574e5..4d5da679259 100644 --- a/pkg/compiler/lib/src/tokens/token_map.dart +++ b/pkg/compiler/lib/src/tokens/token_map.dart @@ -4,7 +4,7 @@ library dart2js.tokens.token_map; -import 'token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; /** * Key class used in [TokenMap] in which the hash code for a token is based diff --git a/pkg/compiler/lib/src/tree/dartstring.dart b/pkg/compiler/lib/src/tree/dartstring.dart index 4ec773c1d37..6df4af8e1fe 100644 --- a/pkg/compiler/lib/src/tree/dartstring.dart +++ b/pkg/compiler/lib/src/tree/dartstring.dart @@ -4,7 +4,7 @@ import 'dart:collection'; -import '../util/characters.dart'; +import 'package:front_end/src/fasta/scanner/characters.dart'; /** * The [DartString] type represents a Dart string value as a sequence of Unicode diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart index 1e5f9ddbdd4..a5b20d08b22 100644 --- a/pkg/compiler/lib/src/tree/nodes.dart +++ b/pkg/compiler/lib/src/tree/nodes.dart @@ -8,14 +8,17 @@ import '../common.dart'; import '../elements/elements.dart' show MetadataAnnotation; import '../resolution/secret_tree_element.dart' show NullTreeElementMixin, StoredTreeElementMixin; -import '../tokens/precedence_constants.dart' as Precedence show FUNCTION_INFO; -import '../tokens/token.dart' show BeginGroupToken, Token; -import '../tokens/token_constants.dart' as Tokens show PLUS_TOKEN; -import '../util/characters.dart'; +import 'package:front_end/src/fasta/scanner/precedence.dart' as Precedence + show FUNCTION_INFO; +import 'package:front_end/src/fasta/scanner.dart' show BeginGroupToken, Token; +import 'package:front_end/src/fasta/scanner/token_constants.dart' as Tokens + show PLUS_TOKEN; +import 'package:front_end/src/fasta/scanner/characters.dart'; import '../util/util.dart'; import 'dartstring.dart'; import 'prettyprint.dart'; import 'unparser.dart'; +import 'package:front_end/src/fasta/parser.dart' show ErrorKind; abstract class Visitor { const Visitor(); @@ -478,7 +481,7 @@ class ClassNode extends Node { if (token == null) { token = name.getEndToken(); } - assert(invariant(beginToken, token != null)); + assert(token != null); return token; } @@ -3086,17 +3089,19 @@ class IsInterpolationVisitor extends Visitor { class ErrorNode extends Node implements FunctionExpression, VariableDefinitions, Typedef { final Token token; - final String reason; + final ErrorKind kind; + final Map arguments; final Identifier name; final NodeList definitions; - ErrorNode.internal(this.token, this.reason, this.name, this.definitions); + ErrorNode.internal( + this.token, this.kind, this.arguments, this.name, this.definitions); - factory ErrorNode(Token token, String reason) { + factory ErrorNode(Token token, ErrorKind kind, Map arguments) { Identifier name = new Identifier(token); NodeList definitions = new NodeList(null, const Link().prepend(name), null, null); - return new ErrorNode.internal(token, reason, name, definitions); + return new ErrorNode.internal(token, kind, arguments, name, definitions); } Token get beginToken => token; diff --git a/pkg/compiler/lib/src/tree/prettyprint.dart b/pkg/compiler/lib/src/tree/prettyprint.dart index 837db3750ab..6056a3d7696 100644 --- a/pkg/compiler/lib/src/tree/prettyprint.dart +++ b/pkg/compiler/lib/src/tree/prettyprint.dart @@ -2,7 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import '../tokens/token.dart' show Token; +import 'package:front_end/src/fasta/scanner.dart' show Token; import '../util/util.dart'; import 'nodes.dart'; diff --git a/pkg/compiler/lib/src/tree/unparser.dart b/pkg/compiler/lib/src/tree/unparser.dart index 5d1d15431e2..1aa5eb70be3 100644 --- a/pkg/compiler/lib/src/tree/unparser.dart +++ b/pkg/compiler/lib/src/tree/unparser.dart @@ -2,8 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -import '../tokens/token.dart' show Token; -import '../tokens/token_constants.dart' as Tokens +import 'package:front_end/src/fasta/scanner.dart' show Token; +import 'package:front_end/src/fasta/scanner/token_constants.dart' as Tokens show IDENTIFIER_TOKEN, KEYWORD_TOKEN, PLUS_TOKEN; import '../util/util.dart'; import 'nodes.dart'; diff --git a/pkg/compiler/lib/src/types/constants.dart b/pkg/compiler/lib/src/types/constants.dart index c6cc7b864fd..d62a2166126 100644 --- a/pkg/compiler/lib/src/types/constants.dart +++ b/pkg/compiler/lib/src/types/constants.dart @@ -5,11 +5,8 @@ library types.constants; import '../common.dart'; -import '../constants/constant_system.dart' show ConstantSystem; -import '../compiler.dart' show Compiler; import '../constants/values.dart'; -import '../js_backend/js_backend.dart' - show JavaScriptBackend, SyntheticConstantKind; +import '../js_backend/js_backend.dart' show SyntheticConstantKind; import '../world.dart' show ClosedWorld; import 'masks.dart'; diff --git a/pkg/compiler/lib/src/universe/call_structure.dart b/pkg/compiler/lib/src/universe/call_structure.dart index 7386238a184..8e6c3b9f78f 100644 --- a/pkg/compiler/lib/src/universe/call_structure.dart +++ b/pkg/compiler/lib/src/universe/call_structure.dart @@ -4,7 +4,6 @@ library dart2js.call_structure; -import '../common.dart'; import '../common/names.dart' show Names; import '../elements/types.dart' show FunctionType; import '../util/util.dart'; diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart index 39f507a3030..e004c98ddb7 100644 --- a/pkg/compiler/lib/src/universe/class_set.dart +++ b/pkg/compiler/lib/src/universe/class_set.dart @@ -6,7 +6,6 @@ library dart2js.world.class_set; import 'dart:collection' show IterableBase; -import '../common.dart'; import '../elements/elements.dart' show ClassElement; import '../util/enumset.dart' show EnumSet; import '../util/util.dart' show Link; diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart index a201a737429..75974871083 100644 --- a/pkg/compiler/lib/src/universe/world_builder.dart +++ b/pkg/compiler/lib/src/universe/world_builder.dart @@ -22,7 +22,6 @@ import '../universe/function_set.dart' show FunctionSetBuilder; import '../util/enumset.dart'; import '../util/util.dart'; import '../world.dart' show World, ClosedWorld, ClosedWorldImpl, OpenWorld; -import 'call_structure.dart' show CallStructure; import 'selector.dart' show Selector; import 'use.dart' show DynamicUse, DynamicUseKind, StaticUse, StaticUseKind; diff --git a/pkg/compiler/lib/src/universe/world_impact.dart b/pkg/compiler/lib/src/universe/world_impact.dart index 4d4f3f9084a..0c708a23455 100644 --- a/pkg/compiler/lib/src/universe/world_impact.dart +++ b/pkg/compiler/lib/src/universe/world_impact.dart @@ -4,7 +4,6 @@ library dart2js.universe.world_impact; -import '../elements/elements.dart' show Element; import '../util/util.dart' show Setlet; import 'use.dart' show DynamicUse, StaticUse, TypeUse; diff --git a/pkg/compiler/lib/src/util/util.dart b/pkg/compiler/lib/src/util/util.dart index dbcc7d3a432..457377800ed 100644 --- a/pkg/compiler/lib/src/util/util.dart +++ b/pkg/compiler/lib/src/util/util.dart @@ -4,15 +4,15 @@ library dart2js.util; -import 'characters.dart'; -import 'util_implementation.dart'; +import 'package:front_end/src/fasta/scanner/characters.dart'; +import 'package:front_end/src/fasta/util/link.dart'; export 'emptyset.dart'; export 'maplet.dart'; export 'setlet.dart'; +export 'package:front_end/src/fasta/util/link.dart'; part 'indentation.dart'; -part 'link.dart'; /// Helper functions for creating hash codes. class Hashing { diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart new file mode 100644 index 00000000000..af342b58410 --- /dev/null +++ b/pkg/front_end/lib/src/fasta/parser.dart @@ -0,0 +1,42 @@ +// Copyright (c) 2016, 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.md file. + +library fasta.parser; + +import 'package:front_end/src/fasta/scanner/token.dart' show + Token; + +import 'parser/listener.dart' show + Listener; + +import 'parser/parser.dart' show + Parser; + +import 'parser/listener.dart' show + ParserError; + +export 'parser/parser.dart' show + Parser, + closeBraceFor, + optional; + +export 'parser/listener.dart' show + Listener, + ParserError; + +export 'parser/error_kind.dart' show + ErrorKind; + +export 'parser/top_level_parser.dart' show + TopLevelParser; + +export 'parser/class_member_parser.dart' show + ClassMemberParser; + +List parse(Token tokens) { + Listener listener = new Listener(); + Parser parser = new Parser(listener); + parser.parseUnit(tokens); + return listener.recoverableErrors; +} diff --git a/pkg/front_end/lib/src/fasta/parser/bin/parser.dart b/pkg/front_end/lib/src/fasta/parser/bin/parser.dart new file mode 100644 index 00000000000..a20586ade1d --- /dev/null +++ b/pkg/front_end/lib/src/fasta/parser/bin/parser.dart @@ -0,0 +1,7 @@ +// Copyright (c) 2016, 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:front_end/src/fasta/parser/main.dart' as dart_parser; + +main(List arguments) => dart_parser.main(arguments); diff --git a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart index 6aaa52cd776..5b7613d0386 100644 --- a/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart +++ b/pkg/front_end/lib/src/fasta/parser/class_member_parser.dart @@ -2,174 +2,32 @@ // 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. -library dart2js.parser.partial; +library fasta.parser.class_member_parser; -import '../common.dart'; -import '../tokens/token.dart' show BeginGroupToken, ErrorToken, Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; -import '../util/characters.dart' as Characters show $CLOSE_CURLY_BRACKET; -import 'listener.dart' show Listener; -import 'parser.dart' show Parser; +import 'package:front_end/src/fasta/scanner/token.dart' show + Token; -class PartialParser extends Parser { - PartialParser(Listener listener) : super(listener); +import 'listener.dart' show + Listener; - Token parseClassBody(Token token) => skipClassBody(token); +import 'parser.dart' show + Parser; - Token fullParseClassBody(Token token) => super.parseClassBody(token); +/// Parser similar to [TopLevelParser] but also parses class members (excluding +/// their bodies). +class ClassMemberParser extends Parser { + ClassMemberParser(Listener listener, + {bool asyncAwaitKeywordsEnabled: false}) + : super(listener, asyncAwaitKeywordsEnabled: asyncAwaitKeywordsEnabled); Token parseExpression(Token token) => skipExpression(token); - Token parseArgumentsOpt(Token token) { - // This method is overridden for two reasons: - // 1. Avoid generating events for arguments. - // 2. Avoid calling skip expression for each argument (which doesn't work). - listener.handleNoArguments(token); - if (optional('(', token)) { - BeginGroupToken begin = token; - return begin.endGroup.next; - } else { - return token; - } - } - - Token skipExpression(Token token) { - while (true) { - final kind = token.kind; - final value = token.stringValue; - if ((identical(kind, Tokens.EOF_TOKEN)) || - (identical(value, ';')) || - (identical(value, ',')) || - (identical(value, '}')) || - (identical(value, ')')) || - (identical(value, ']'))) { - break; - } - if (identical(value, '=') || - identical(value, '?') || - identical(value, ':') || - identical(value, '??')) { - var nextValue = token.next.stringValue; - if (identical(nextValue, 'const')) { - token = token.next; - nextValue = token.next.stringValue; - } - if (identical(nextValue, '{')) { - // Handle cases like this: - // class Foo { - // var map; - // Foo() : map = {}; - // Foo.x() : map = true ? {} : {}; - // } - BeginGroupToken begin = token.next; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - continue; - } - if (identical(nextValue, '<')) { - // Handle cases like this: - // class Foo { - // var map; - // Foo() : map = {}; - // Foo.x() : map = true ? {} : {}; - // } - BeginGroupToken begin = token.next; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - if (identical(token.stringValue, '{')) { - begin = token; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - } - continue; - } - } - if (!mayParseFunctionExpressions && identical(value, '{')) { - break; - } - if (token is BeginGroupToken) { - BeginGroupToken begin = token; - token = (begin.endGroup != null) ? begin.endGroup : token; - } else if (token is ErrorToken) { - listener.reportErrorToken(token); - } - token = token.next; - } - return token; - } - - Token skipClassBody(Token token) { - if (!optional('{', token)) { - return listener.expectedClassBodyToSkip(token); - } - BeginGroupToken beginGroupToken = token; - Token endGroup = beginGroupToken.endGroup; - if (endGroup == null) { - return listener.unmatched(beginGroupToken); - } else if (!identical(endGroup.kind, Characters.$CLOSE_CURLY_BRACKET)) { - return listener.unmatched(beginGroupToken); - } - return endGroup; - } - - Token skipAsyncModifier(Token token) { - String value = token.stringValue; - if (identical(value, 'async')) { - token = token.next; - value = token.stringValue; - - if (identical(value, '*')) { - token = token.next; - } - } else if (identical(value, 'sync')) { - token = token.next; - value = token.stringValue; - - if (identical(value, '*')) { - token = token.next; - } - } - return token; - } + // This method is overridden for two reasons: + // 1. Avoid generating events for arguments. + // 2. Avoid calling skip expression for each argument (which doesn't work). + Token parseArgumentsOpt(Token token) => skipArgumentsOpt(token); Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) { - assert(!isExpression); - token = skipAsyncModifier(token); - String value = token.stringValue; - if (identical(value, ';')) { - if (!allowAbstract) { - listener.reportError(token, MessageKind.BODY_EXPECTED); - } - listener.handleNoFunctionBody(token); - } else { - if (identical(value, '=>')) { - token = parseExpression(token.next); - expectSemicolon(token); - } else if (value == '=') { - token = parseRedirectingFactoryBody(token); - expectSemicolon(token); - } else { - token = skipBlock(token); - } - listener.skippedFunctionBody(token); - } - return token; - } - - Token parseFormalParameters(Token token) => skipFormals(token); - - Token skipFormals(Token token) { - listener.beginOptionalFormalParameters(token); - if (!optional('(', token)) { - if (optional(';', token)) { - listener.recoverableError(token, "expected '('"); - return token; - } - return listener.unexpected(token); - } - BeginGroupToken beginGroupToken = token; - Token endToken = beginGroupToken.endGroup; - listener.endFormalParameters(0, token, endToken); - return endToken.next; + return skipFunctionBody(token, isExpression, allowAbstract); } } diff --git a/pkg/front_end/lib/src/fasta/parser/error_kind.dart b/pkg/front_end/lib/src/fasta/parser/error_kind.dart new file mode 100644 index 00000000000..a51f207e99b --- /dev/null +++ b/pkg/front_end/lib/src/fasta/parser/error_kind.dart @@ -0,0 +1,41 @@ +// Copyright (c) 2016, 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. + +library fasta.parser.error_kind; + +enum ErrorKind { + EmptyNamedParameterList, + EmptyOptionalParameterList, + ExpectedBlockToSkip, + ExpectedBody, + ExpectedButGot, + ExpectedClassBody, + ExpectedClassBodyToSkip, + ExpectedDeclaration, + ExpectedExpression, + ExpectedFunctionBody, + ExpectedHexDigit, + ExpectedIdentifier, + ExpectedOpenParens, + ExpectedString, + ExpectedType, + ExtraneousModifier, + ExtraneousModifierReplace, + InvalidAwaitFor, + InvalidInputCharacter, + InvalidSyncModifier, + InvalidVoid, + MalformedStringLiteral, + MissingExponent, + PositionalParameterWithEquals, + RequiredParameterWithDefault, + UnexpectedToken, + UnmatchedToken, + UnsupportedPrefixPlus, + UnterminatedComment, + UnterminatedString, + UnterminatedToken, + + Unspecified, +} diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart index b33bd84d2b2..8b159c5a1c6 100644 --- a/pkg/front_end/lib/src/fasta/parser/listener.dart +++ b/pkg/front_end/lib/src/fasta/parser/listener.dart @@ -2,402 +2,739 @@ // 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. -library dart2js.parser.listener; +library fasta.parser.listener; -import '../common.dart'; -import '../diagnostics/messages.dart' show MessageTemplate; -import '../tokens/precedence_constants.dart' as Precedence - show EOF_INFO, IDENTIFIER_INFO; -import '../tokens/token.dart' - show - BadInputToken, - BeginGroupToken, - ErrorToken, - StringToken, - Token, - UnmatchedToken, - UnterminatedToken; -import '../tree/tree.dart'; +import 'package:front_end/src/fasta/scanner/token.dart' show + BeginGroupToken, + Token; -const bool VERBOSE = false; +import 'error_kind.dart' show + ErrorKind; -/** - * A parser event listener that does nothing except throw exceptions - * on parser errors. - */ +/// A parser event listener that does nothing except throw exceptions +/// on parser errors. +/// +/// Events are methods that begin with one of: `begin`, `end`, or `handle`. +/// +/// Events starting with `begin` and `end` come in pairs. Normally, a +/// `beginFoo` event is followed by an `endFoo` event. There's a few exceptions +/// documented below. +/// +/// Events starting with `handle` are used when isn't possible to have a begin +/// event. class Listener { + final List recoverableErrors = []; + + void logEvent(String name) {} + set suppressParseErrors(bool value) {} void beginArguments(Token token) {} - void endArguments(int count, Token beginToken, Token endToken) {} + void endArguments(int count, Token beginToken, Token endToken) { + logEvent("Arguments"); + } /// Handle async modifiers `async`, `async*`, `sync`. - void handleAsyncModifier(Token asyncToken, Token startToken) {} + void handleAsyncModifier(Token asyncToken, Token starToken) { + logEvent("AsyncModifier"); + } void beginAwaitExpression(Token token) {} - void endAwaitExpression(Token beginToken, Token endToken) {} + void endAwaitExpression(Token beginToken, Token endToken) { + logEvent("AwaitExpression"); + } void beginBlock(Token token) {} - void endBlock(int count, Token beginToken, Token endToken) {} + void endBlock(int count, Token beginToken, Token endToken) { + logEvent("Block"); + } void beginCascade(Token token) {} - void endCascade() {} + void endCascade() { + logEvent("Cascade"); + } void beginClassBody(Token token) {} - void endClassBody(int memberCount, Token beginToken, Token endToken) {} + void endClassBody(int memberCount, Token beginToken, Token endToken) { + logEvent("ClassBody"); + } void beginClassDeclaration(Token token) {} void endClassDeclaration(int interfacesCount, Token beginToken, - Token extendsKeyword, Token implementsKeyword, Token endToken) {} + Token extendsKeyword, Token implementsKeyword, Token endToken) { + logEvent("ClassDeclaration"); + } void beginCombinators(Token token) {} - void endCombinators(int count) {} + void endCombinators(int count) { + logEvent("Combinators"); + } void beginCompilationUnit(Token token) {} - void endCompilationUnit(int count, Token token) {} + void endCompilationUnit(int count, Token token) { + logEvent("CompilationUnit"); + } void beginConstructorReference(Token start) {} void endConstructorReference( - Token start, Token periodBeforeName, Token endToken) {} + Token start, Token periodBeforeName, Token endToken) { + logEvent("ConstructorReference"); + } void beginDoWhileStatement(Token token) {} void endDoWhileStatement( - Token doKeyword, Token whileKeyword, Token endToken) {} + Token doKeyword, Token whileKeyword, Token endToken) { + logEvent("DoWhileStatement"); + } + + void beginDoWhileStatementBody(Token token) { + } + + void endDoWhileStatementBody(Token token) { + logEvent("DoWhileStatementBody"); + } + + void beginWhileStatementBody(Token token) { + } + + void endWhileStatementBody(Token token) { + logEvent("WhileStatementBody"); + } void beginEnum(Token enumKeyword) {} - void endEnum(Token enumKeyword, Token endBrace, int count) {} + void endEnum(Token enumKeyword, Token endBrace, int count) { + logEvent("Enum"); + } void beginExport(Token token) {} - void endExport(Token exportKeyword, Token semicolon) {} + void endExport(Token exportKeyword, Token semicolon) { + logEvent("Export"); + } + + void beginExpression(Token token) {} void beginExpressionStatement(Token token) {} - void endExpressionStatement(Token token) {} + void endExpressionStatement(Token token) { + logEvent("ExpressionStatement"); + } void beginFactoryMethod(Token token) {} - void endFactoryMethod(Token beginToken, Token endToken) {} + void endFactoryMethod(Token beginToken, Token endToken) { + logEvent("FactoryMethod"); + } void beginFormalParameter(Token token) {} - void endFormalParameter(Token thisKeyword) {} + void endFormalParameter(Token thisKeyword) { + logEvent("FormalParameter"); + } - void handleNoFormalParameters(Token token) {} + void handleNoFormalParameters(Token token) { + logEvent("NoFormalParameters"); + } void beginFormalParameters(Token token) {} - void endFormalParameters(int count, Token beginToken, Token endToken) {} + void endFormalParameters(int count, Token beginToken, Token endToken) { + logEvent("FormalParameters"); + } - void endFields(int count, Token beginToken, Token endToken) {} + /// Doesn't have a corresponding begin event, use [beginMember] instead. + void endFields(int count, Token beginToken, Token endToken) { + logEvent("Fields"); + } void beginForStatement(Token token) {} void endForStatement( - int updateExpressionCount, Token beginToken, Token endToken) {} + int updateExpressionCount, Token beginToken, Token endToken) { + logEvent("ForStatement"); + } + + void beginForStatementBody(Token token) { + } + + void endForStatementBody(Token token) { + logEvent("ForStatementBody"); + } void endForIn( - Token awaitToken, Token forToken, Token inKeyword, Token endToken) {} + Token awaitToken, Token forToken, Token inKeyword, Token endToken) { + logEvent("ForIn"); + } + + void beginForInExpression(Token token) { + } + + void endForInExpression(Token token) { + logEvent("ForInExpression"); + } + + void beginForInBody(Token token) { + } + + void endForInBody(Token token) { + logEvent("ForInBody"); + } void beginFunction(Token token) {} - void endFunction(Token getOrSet, Token endToken) {} + void endFunction(Token getOrSet, Token endToken) { + logEvent("Function"); + } void beginFunctionDeclaration(Token token) {} - void endFunctionDeclaration(Token token) {} + void endFunctionDeclaration(Token token) { + logEvent("FunctionDeclaration"); + } void beginFunctionBody(Token token) {} - void endFunctionBody(int count, Token beginToken, Token endToken) {} + void endFunctionBody(int count, Token beginToken, Token endToken) { + logEvent("FunctionBody"); + } - void handleNoFunctionBody(Token token) {} + void handleNoFunctionBody(Token token) { + logEvent("NoFunctionBody"); + } - void skippedFunctionBody(Token token) {} + void handleFunctionBodySkipped(Token token) {} void beginFunctionName(Token token) {} - void endFunctionName(Token token) {} + void endFunctionName(Token token) { + logEvent("FunctionName"); + } void beginFunctionTypeAlias(Token token) {} - void endFunctionTypeAlias(Token typedefKeyword, Token endToken) {} + void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { + logEvent("FunctionTypeAlias"); + } void beginMixinApplication(Token token) {} - void endMixinApplication() {} + void endMixinApplication() { + logEvent("MixinApplication"); + } void beginNamedMixinApplication(Token token) {} void endNamedMixinApplication( - Token classKeyword, Token implementsKeyword, Token endToken) {} + Token classKeyword, Token implementsKeyword, Token endToken) { + logEvent("NamedMixinApplication"); + } void beginHide(Token hideKeyword) {} - void endHide(Token hideKeyword) {} + void endHide(Token hideKeyword) { + logEvent("Hide"); + } void beginIdentifierList(Token token) {} - void endIdentifierList(int count) {} + void endIdentifierList(int count) { + logEvent("IdentifierList"); + } void beginTypeList(Token token) {} - void endTypeList(int count) {} + void endTypeList(int count) { + logEvent("TypeList"); + } void beginIfStatement(Token token) {} - void endIfStatement(Token ifToken, Token elseToken) {} + void endIfStatement(Token ifToken, Token elseToken) { + logEvent("IfStatement"); + } + + void beginThenStatement(Token token) { + } + + void endThenStatement(Token token) { + logEvent("ThenStatement"); + } + + void beginElseStatement(Token token) { + } + + void endElseStatement(Token token) { + logEvent("ElseStatement"); + } void beginImport(Token importKeyword) {} void endImport(Token importKeyword, Token DeferredKeyword, Token asKeyword, - Token semicolon) {} + Token semicolon) { + logEvent("Import"); + } void beginConditionalUris(Token token) {} - void endConditionalUris(int count) {} + void endConditionalUris(int count) { + logEvent("ConditionalUris"); + } void beginConditionalUri(Token ifKeyword) {} - void endConditionalUri(Token ifKeyword, Token equalitySign) {} + void endConditionalUri(Token ifKeyword, Token equalitySign) { + logEvent("ConditionalUri"); + } void beginDottedName(Token token) {} - void endDottedName(int count, Token firstIdentifier) {} + void endDottedName(int count, Token firstIdentifier) { + logEvent("DottedName"); + } void beginInitializedIdentifier(Token token) {} - void endInitializedIdentifier() {} + void endInitializedIdentifier() { + logEvent("InitializedIdentifier"); + } + + void beginFieldInitializer(Token token) { + } + + void endFieldInitializer(Token assignment) { + logEvent("FieldInitializer"); + } + + void handleNoFieldInitializer(Token token) { + logEvent("NoFieldInitializer"); + } + + void beginVariableInitializer(Token token) {} + + void endVariableInitializer(Token assignmentOperator) { + logEvent("VariableInitializer"); + } void beginInitializer(Token token) {} - void endInitializer(Token assignmentOperator) {} + void endInitializer(Token token) { + logEvent("ConstructorInitializer"); + } void beginInitializers(Token token) {} - void endInitializers(int count, Token beginToken, Token endToken) {} + void endInitializers(int count, Token beginToken, Token endToken) { + logEvent("Initializers"); + } - void handleNoInitializers() {} + void handleNoInitializers() { + logEvent("NoInitializers"); + } - void handleLabel(Token token) {} + /// Called after the listener has recovered from an invalid expression. The + /// parser will resume parsing from [token]. Exactly where the parser will + /// resume parsing is unspecified. + void handleInvalidExpression(Token token) { + logEvent("InvalidExpression"); + } + + /// Called after the listener has recovered from an invalid function + /// body. The parser expected an open curly brace `{` and will resume parsing + /// from [token] as if a function body had preceeded it. + void handleInvalidFunctionBody(Token token) { + logEvent("InvalidFunctionBody"); + } + + /// Called after the listener has recovered from an invalid type. The parser + /// expected an identifier, and will resume parsing type arguments from + /// [token]. + void handleInvalidTypeReference(Token token) { + logEvent("InvalidTypeReference"); + } + + void handleLabel(Token token) { + logEvent("Label"); + } void beginLabeledStatement(Token token, int labelCount) {} - void endLabeledStatement(int labelCount) {} + void endLabeledStatement(int labelCount) { + logEvent("LabeledStatement"); + } void beginLibraryName(Token token) {} - void endLibraryName(Token libraryKeyword, Token semicolon) {} + void endLibraryName(Token libraryKeyword, Token semicolon) { + logEvent("LibraryName"); + } void beginLiteralMapEntry(Token token) {} - void endLiteralMapEntry(Token colon, Token endToken) {} + void endLiteralMapEntry(Token colon, Token endToken) { + logEvent("LiteralMapEntry"); + } void beginLiteralString(Token token) {} - void endLiteralString(int interpolationCount) {} + void endLiteralString(int interpolationCount) { + logEvent("LiteralString"); + } - void handleStringJuxtaposition(int literalCount) {} + void handleStringJuxtaposition(int literalCount) { + logEvent("StringJuxtaposition"); + } void beginMember(Token token) {} - void endMember() {} + /// This event is added for convenience. Normally, one should override + /// [endMethod] or [endFields] instead. + void endMember() { + logEvent("Member"); + } - void endMethod(Token getOrSet, Token beginToken, Token endToken) {} + /// Doesn't have a corresponding begin event, use [beginMember] instead. + void endMethod(Token getOrSet, Token beginToken, Token endToken) { + logEvent("Method"); + } void beginMetadataStar(Token token) {} - void endMetadataStar(int count, bool forParameter) {} + void endMetadataStar(int count, bool forParameter) { + logEvent("MetadataStar"); + } void beginMetadata(Token token) {} - void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) {} + void endMetadata(Token beginToken, Token periodBeforeName, Token endToken) { + logEvent("Metadata"); + } void beginOptionalFormalParameters(Token token) {} void endOptionalFormalParameters( - int count, Token beginToken, Token endToken) {} + int count, Token beginToken, Token endToken) { + logEvent("OptionalFormalParameters"); + } void beginPart(Token token) {} - void endPart(Token partKeyword, Token semicolon) {} + void endPart(Token partKeyword, Token semicolon) { + logEvent("Part"); + } void beginPartOf(Token token) {} - void endPartOf(Token partKeyword, Token semicolon) {} + void endPartOf(Token partKeyword, Token semicolon) { + logEvent("PartOf"); + } void beginRedirectingFactoryBody(Token token) {} - void endRedirectingFactoryBody(Token beginToken, Token endToken) {} + void endRedirectingFactoryBody(Token beginToken, Token endToken) { + logEvent("RedirectingFactoryBody"); + } void beginReturnStatement(Token token) {} void endReturnStatement( - bool hasExpression, Token beginToken, Token endToken) {} + bool hasExpression, Token beginToken, Token endToken) { + logEvent("ReturnStatement"); + } void beginSend(Token token) {} - void endSend(Token token) {} + void endSend(Token token) { + logEvent("Send"); + } void beginShow(Token showKeyword) {} - void endShow(Token showKeyword) {} + void endShow(Token showKeyword) { + logEvent("Show"); + } void beginSwitchStatement(Token token) {} - void endSwitchStatement(Token switchKeyword, Token endToken) {} + void endSwitchStatement(Token switchKeyword, Token endToken) { + logEvent("SwitchStatement"); + } void beginSwitchBlock(Token token) {} - void endSwitchBlock(int caseCount, Token beginToken, Token endToken) {} + void endSwitchBlock(int caseCount, Token beginToken, Token endToken) { + logEvent("SwitchBlock"); + } void beginLiteralSymbol(Token token) {} - void endLiteralSymbol(Token hashToken, int identifierCount) {} + void endLiteralSymbol(Token hashToken, int identifierCount) { + logEvent("LiteralSymbol"); + } void beginThrowExpression(Token token) {} - void endThrowExpression(Token throwToken, Token endToken) {} + void endThrowExpression(Token throwToken, Token endToken) { + logEvent("ThrowExpression"); + } void beginRethrowStatement(Token token) {} - void endRethrowStatement(Token throwToken, Token endToken) {} + void endRethrowStatement(Token throwToken, Token endToken) { + logEvent("RethrowStatement"); + } - void endTopLevelDeclaration(Token token) {} + /// This event is added for convenience. Normally, one should use + /// [endClassDeclaration], [endNamedMixinApplication], [endEnum], + /// [endFunctionTypeAlias], [endLibraryName], [endImport], [endExport], + /// [endPart], [endPartOf], [endTopLevelFields], or [endTopLevelMethod]. + void endTopLevelDeclaration(Token token) { + logEvent("TopLevelDeclaration"); + } void beginTopLevelMember(Token token) {} - void endTopLevelFields(int count, Token beginToken, Token endToken) {} + /// Doesn't have a corresponding begin event, use [beginTopLevelMember] + /// instead. + void endTopLevelFields(int count, Token beginToken, Token endToken) { + logEvent("TopLevelFields"); + } - void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {} + /// Doesn't have a corresponding begin event, use [beginTopLevelMember] + /// instead. + void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) { + logEvent("TopLevelMethod"); + } void beginTryStatement(Token token) {} - void handleCaseMatch(Token caseKeyword, Token colon) {} + void handleCaseMatch(Token caseKeyword, Token colon) { + logEvent("CaseMatch"); + } - void handleCatchBlock(Token onKeyword, Token catchKeyword) {} + void beginCatchClause(Token token) { + } - void handleFinallyBlock(Token finallyKeyword) {} + void endCatchClause(Token token) { + logEvent("CatchClause"); + } + + void handleCatchBlock(Token onKeyword, Token catchKeyword) { + logEvent("CatchBlock"); + } + + void handleFinallyBlock(Token finallyKeyword) { + logEvent("FinallyBlock"); + } void endTryStatement( - int catchCount, Token tryKeyword, Token finallyKeyword) {} + int catchCount, Token tryKeyword, Token finallyKeyword) { + logEvent("TryStatement"); + } - void endType(Token beginToken, Token endToken) {} + void endType(Token beginToken, Token endToken) { + logEvent("Type"); + } void beginTypeArguments(Token token) {} - void endTypeArguments(int count, Token beginToken, Token endToken) {} + void endTypeArguments(int count, Token beginToken, Token endToken) { + logEvent("TypeArguments"); + } - void handleNoTypeArguments(Token token) {} + void handleNoTypeArguments(Token token) { + logEvent("NoTypeArguments"); + } void beginTypeVariable(Token token) {} - void endTypeVariable(Token token, Token extendsOrSuper) {} + void endTypeVariable(Token token, Token extendsOrSuper) { + logEvent("TypeVariable"); + } void beginTypeVariables(Token token) {} - void endTypeVariables(int count, Token beginToken, Token endToken) {} + void endTypeVariables(int count, Token beginToken, Token endToken) { + logEvent("TypeVariables"); + } void beginUnnamedFunction(Token token) {} - void endUnnamedFunction(Token token) {} + void endUnnamedFunction(Token token) { + logEvent("UnnamedFunction"); + } void beginVariablesDeclaration(Token token) {} - void endVariablesDeclaration(int count, Token endToken) {} + void endVariablesDeclaration(int count, Token endToken) { + logEvent("VariablesDeclaration"); + } void beginWhileStatement(Token token) {} - void endWhileStatement(Token whileKeyword, Token endToken) {} + void endWhileStatement(Token whileKeyword, Token endToken) { + logEvent("WhileStatement"); + } - void handleAsOperator(Token operator, Token endToken) {} + void handleAsOperator(Token operator, Token endToken) { + logEvent("AsOperator"); + } - void handleAssignmentExpression(Token token) {} + void handleAssignmentExpression(Token token) { + logEvent("AssignmentExpression"); + } - void handleBinaryExpression(Token token) {} + void handleBinaryExpression(Token token) { + logEvent("BinaryExpression"); + } - void handleConditionalExpression(Token question, Token colon) {} + void handleConditionalExpression(Token question, Token colon) { + logEvent("ConditionalExpression"); + } - void handleConstExpression(Token token) {} + void handleConstExpression(Token token) { + logEvent("ConstExpression"); + } - void handleFunctionTypedFormalParameter(Token token) {} + void beginFunctionTypedFormalParameter(Token token) { + } - void handleIdentifier(Token token) {} + void endFunctionTypedFormalParameter(Token token) { + logEvent("FunctionTypedFormalParameter"); + } + + void handleIdentifier(Token token) { + logEvent("Identifier"); + } void handleIndexedExpression( - Token openCurlyBracket, Token closeCurlyBracket) {} + Token openCurlyBracket, Token closeCurlyBracket) { + logEvent("IndexedExpression"); + } - void handleIsOperator(Token operator, Token not, Token endToken) {} + void handleIsOperator(Token operator, Token not, Token endToken) { + logEvent("IsOperator"); + } - void handleLiteralBool(Token token) {} + void handleLiteralBool(Token token) { + logEvent("LiteralBool"); + } void handleBreakStatement( - bool hasTarget, Token breakKeyword, Token endToken) {} + bool hasTarget, Token breakKeyword, Token endToken) { + logEvent("BreakStatement"); + } void handleContinueStatement( - bool hasTarget, Token continueKeyword, Token endToken) {} + bool hasTarget, Token continueKeyword, Token endToken) { + logEvent("ContinueStatement"); + } - void handleEmptyStatement(Token token) {} + void handleEmptyStatement(Token token) { + logEvent("EmptyStatement"); + } void handleAssertStatement( - Token assertKeyword, Token commaToken, Token semicolonToken) {} + Token assertKeyword, Token commaToken, Token semicolonToken) { + logEvent("AssertStatement"); + } /** Called with either the token containing a double literal, or * an immediately preceding "unary plus" token. */ - void handleLiteralDouble(Token token) {} + void handleLiteralDouble(Token token) { + logEvent("LiteralDouble"); + } /** Called with either the token containing an integer literal, * or an immediately preceding "unary plus" token. */ - void handleLiteralInt(Token token) {} + void handleLiteralInt(Token token) { + logEvent("LiteralInt"); + } void handleLiteralList( - int count, Token beginToken, Token constKeyword, Token endToken) {} + int count, Token beginToken, Token constKeyword, Token endToken) { + logEvent("LiteralList"); + } void handleLiteralMap( - int count, Token beginToken, Token constKeyword, Token endToken) {} + int count, Token beginToken, Token constKeyword, Token endToken) { + logEvent("LiteralMap"); + } - void handleLiteralNull(Token token) {} + void handleLiteralNull(Token token) { + logEvent("LiteralNull"); + } - void handleModifier(Token token) {} + void handleModifier(Token token) { + logEvent("Modifier"); + } - void handleModifiers(int count) {} + void handleModifiers(int count) { + logEvent("Modifiers"); + } - void handleNamedArgument(Token colon) {} + void handleNamedArgument(Token colon) { + logEvent("NamedArgument"); + } - void handleNewExpression(Token token) {} + void handleNewExpression(Token token) { + logEvent("NewExpression"); + } - void handleNoArguments(Token token) {} + void handleNoArguments(Token token) { + logEvent("NoArguments"); + } - void handleNoExpression(Token token) {} + void handleNoExpression(Token token) { + logEvent("NoExpression"); + } - void handleNoType(Token token) {} + void handleNoType(Token token) { + logEvent("NoType"); + } - void handleNoTypeVariables(Token token) {} + void handleNoTypeVariables(Token token) { + logEvent("NoTypeVariables"); + } - void handleOperator(Token token) {} + void handleOperator(Token token) { + logEvent("Operator"); + } - void handleOperatorName(Token operatorKeyword, Token token) {} + void handleOperatorName(Token operatorKeyword, Token token) { + logEvent("OperatorName"); + } - void handleParenthesizedExpression(BeginGroupToken token) {} + void handleParenthesizedExpression(BeginGroupToken token) { + logEvent("ParenthesizedExpression"); + } - void handleQualified(Token period) {} + void handleQualified(Token period) { + logEvent("Qualified"); + } - void handleStringPart(Token token) {} + void handleStringPart(Token token) { + logEvent("StringPart"); + } - void handleSuperExpression(Token token) {} + void handleSuperExpression(Token token) { + logEvent("SuperExpression"); + } + + void beginSwitchCase(int labelCount, int expressionCount, Token firstToken) { + } void handleSwitchCase( int labelCount, @@ -405,233 +742,78 @@ class Listener { Token defaultKeyword, int statementCount, Token firstToken, - Token endToken) {} + Token endToken) { + logEvent("SwitchCase"); + } - void handleThisExpression(Token token) {} + void handleThisExpression(Token token) { + logEvent("ThisExpression"); + } - void handleUnaryPostfixAssignmentExpression(Token token) {} + void handleUnaryPostfixAssignmentExpression(Token token) { + logEvent("UnaryPostfixAssignmentExpression"); + } - void handleUnaryPrefixExpression(Token token) {} + void handleUnaryPrefixExpression(Token token) { + logEvent("UnaryPrefixExpression"); + } - void handleUnaryPrefixAssignmentExpression(Token token) {} + void handleUnaryPrefixAssignmentExpression(Token token) { + logEvent("UnaryPrefixAssignmentExpression"); + } - void handleValuedFormalParameter(Token equals, Token token) {} + void handleValuedFormalParameter(Token equals, Token token) { + logEvent("ValuedFormalParameter"); + } - void handleVoidKeyword(Token token) {} + void handleVoidKeyword(Token token) { + logEvent("VoidKeyword"); + } void beginYieldStatement(Token token) {} - void endYieldStatement(Token yieldToken, Token starToken, Token endToken) {} - - Token expected(String string, Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected '$string', but got '${token.value}'", token); - } - return skipToEof(token); + void endYieldStatement(Token yieldToken, Token starToken, Token endToken) { + logEvent("YieldStatement"); } - Token synthesizeIdentifier(Token token) { - Token synthesizedToken = new StringToken.fromString( - Precedence.IDENTIFIER_INFO, '?', token.charOffset); - synthesizedToken.next = token.next; - return synthesizedToken; + /// An unrecoverable error is an error that the parser can't recover from + /// itself, and recovery is left to the listener. If the listener can + /// recover, it should return a non-null continuation token. Error recovery + /// is tightly coupled to the parser implementation, so to recover from an + /// error, one must carefully examine the code in the parser that generates + /// the error. + /// + /// If the listener can't recover, it can throw an exception or return + /// `null`. In the latter case, the parser simply skips to EOF which will + /// often result in additional parser errors as the parser returns from its + /// recursive state. + Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) { + throw new ParserError.fromTokens(token, token, kind, arguments); } - Token expectedIdentifier(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected identifier, but got '${token.value}'", token); - } - return skipToEof(token); + /// The parser noticed a syntax error, but was able to recover from it. + void handleRecoverableError(Token token, ErrorKind kind, Map arguments) { + recoverableErrors.add( + new ParserError.fromTokens(token, token, kind, arguments)); } - - Token expectedType(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a type, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedExpression(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected an expression, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token unexpected(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("unexpected token '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedBlockToSkip(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a block, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedFunctionBody(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a function body, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedClassBody(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a class body, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedClassBodyToSkip(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a class body, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token expectedDeclaration(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("expected a declaration, but got '${token.value}'", token); - } - return skipToEof(token); - } - - Token unmatched(Token token) { - if (token is ErrorToken) { - reportErrorToken(token); - } else { - error("unmatched '${token.value}'", token); - } - return skipToEof(token); - } - - skipToEof(Token token) { - while (!identical(token.info, Precedence.EOF_INFO)) { - token = token.next; - } - return token; - } - - void recoverableError(Token token, String message) { - error(message, token); - } - - void error(String message, Token token) { - throw new ParserError("$message @ ${token.charOffset}"); - } - - void reportError(Spannable spannable, MessageKind messageKind, - [Map arguments = const {}]) { - if (spannable is ErrorToken) { - reportErrorToken(spannable); - } else { - reportErrorHelper(spannable, messageKind, arguments); - } - } - - void reportErrorHelper(Spannable spannable, MessageKind messageKind, - [Map arguments = const {}]) { - MessageTemplate template = MessageTemplate.TEMPLATES[messageKind]; - String message = template.message(arguments, true).toString(); - Token token; - if (spannable is Token) { - token = spannable; - } else if (spannable is Node) { - token = spannable.getBeginToken(); - } else { - throw new ParserError(message); - } - recoverableError(token, message); - } - - void reportErrorToken(ErrorToken token) { - if (token is BadInputToken) { - String hex = token.character.toRadixString(16); - if (hex.length < 4) { - String padding = "0000".substring(hex.length); - hex = "$padding$hex"; - } - reportErrorHelper( - token, MessageKind.BAD_INPUT_CHARACTER, {'characterHex': hex}); - } else if (token is UnterminatedToken) { - MessageKind kind; - var arguments = const {}; - switch (token.start) { - case '1e': - kind = MessageKind.EXPONENT_MISSING; - break; - case '"': - case "'": - case '"""': - case "'''": - case 'r"': - case "r'": - case 'r"""': - case "r'''": - kind = MessageKind.UNTERMINATED_STRING; - arguments = {'quote': token.start}; - break; - case '0x': - kind = MessageKind.HEX_DIGIT_EXPECTED; - break; - case r'$': - kind = MessageKind.MALFORMED_STRING_LITERAL; - break; - case '/*': - kind = MessageKind.UNTERMINATED_COMMENT; - break; - default: - kind = MessageKind.UNTERMINATED_TOKEN; - break; - } - reportErrorHelper(token, kind, arguments); - } else if (token is UnmatchedToken) { - String begin = token.begin.value; - String end = closeBraceFor(begin); - reportErrorHelper( - token, MessageKind.UNMATCHED_TOKEN, {'begin': begin, 'end': end}); - } else { - throw new SpannableAssertionFailure(token, token.assertionMessage); - } - } -} - -String closeBraceFor(String openBrace) { - return const { - '(': ')', - '[': ']', - '{': '}', - '<': '>', - r'${': '}', - }[openBrace]; } class ParserError { - final String reason; - ParserError(this.reason); - toString() => reason; + /// Character offset from the beginning of file where this error starts. + final int beginOffset; + + /// Character offset from the beginning of file where this error ends. + final int endOffset; + + final ErrorKind kind; + + final Map arguments; + + ParserError(this.beginOffset, this.endOffset, this.kind, this.arguments); + + ParserError.fromTokens(Token begin, Token end, ErrorKind kind, Map arguments) + : this(begin.charOffset, end.charOffset + end.charCount, kind, + arguments); + + String toString() => "@${beginOffset}: $kind $arguments"; } diff --git a/pkg/front_end/lib/src/fasta/parser/main.dart b/pkg/front_end/lib/src/fasta/parser/main.dart new file mode 100644 index 00000000000..6937a25827d --- /dev/null +++ b/pkg/front_end/lib/src/fasta/parser/main.dart @@ -0,0 +1,57 @@ +// Copyright (c) 2016, 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. + +library fasta.parser.main; + +import 'dart:convert' show + LineSplitter, + UTF8; + +import 'dart:io' show + File; + +import 'package:front_end/src/fasta/scanner/token.dart' show + Token; + +import 'package:front_end/src/fasta/scanner/io.dart' show + readBytesFromFileSync; + +import 'package:front_end/src/fasta/scanner.dart' show + scan; + +import 'listener.dart' show + Listener; + +import 'top_level_parser.dart' show + TopLevelParser; + +class DebugListener extends Listener { + void handleIdentifier(Token token) { + logEvent("Identifier: ${token.value}"); + } + + void logEvent(String name) { + print(name); + } +} + +main(List arguments) async { + for (String argument in arguments) { + if (argument.startsWith("@")) { + Uri uri = Uri.base.resolve(argument.substring(1)); + await for (String file in new File.fromUri(uri).openRead() + .transform(UTF8.decoder) + .transform(const LineSplitter())) { + outLine(uri.resolve(file)); + } + } else { + outLine(Uri.base.resolve(argument)); + } + } +} + +void outLine(Uri uri) { + new TopLevelParser(new DebugListener()).parseUnit( + scan(readBytesFromFileSync(uri)).tokens); +} diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart index 0ef9cb8373d..69772508bc4 100644 --- a/pkg/front_end/lib/src/fasta/parser/parser.dart +++ b/pkg/front_end/lib/src/fasta/parser/parser.dart @@ -2,62 +2,81 @@ // 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. -library dart2js.parser; +library fasta.parser.parser; -import '../common.dart'; -import '../tokens/keyword.dart' show Keyword; -import '../tokens/precedence.dart' show PrecedenceInfo; -import '../tokens/precedence_constants.dart' - show - AS_INFO, - ASSIGNMENT_PRECEDENCE, - CASCADE_PRECEDENCE, - EQUALITY_PRECEDENCE, - GT_INFO, - IS_INFO, - MINUS_MINUS_INFO, - OPEN_PAREN_INFO, - OPEN_SQUARE_BRACKET_INFO, - PERIOD_INFO, - PLUS_PLUS_INFO, - POSTFIX_PRECEDENCE, - QUESTION_INFO, - QUESTION_PERIOD_INFO, - RELATIONAL_PRECEDENCE; -import '../tokens/token.dart' - show - BeginGroupToken, - isUserDefinableOperator, - KeywordToken, - SymbolToken, - Token; -import '../tokens/token_constants.dart' - show - BAD_INPUT_TOKEN, - COMMA_TOKEN, - DOUBLE_TOKEN, - EOF_TOKEN, - EQ_TOKEN, - FUNCTION_TOKEN, - GT_TOKEN, - GT_GT_TOKEN, - HASH_TOKEN, - HEXADECIMAL_TOKEN, - IDENTIFIER_TOKEN, - INT_TOKEN, - KEYWORD_TOKEN, - LT_TOKEN, - OPEN_CURLY_BRACKET_TOKEN, - OPEN_PAREN_TOKEN, - OPEN_SQUARE_BRACKET_TOKEN, - PERIOD_TOKEN, - SEMICOLON_TOKEN, - STRING_INTERPOLATION_IDENTIFIER_TOKEN, - STRING_INTERPOLATION_TOKEN, - STRING_TOKEN; -import '../util/characters.dart' as Characters show $CLOSE_CURLY_BRACKET; -import '../util/util.dart' show Link; -import 'listener.dart' show Listener; +import 'package:front_end/src/fasta/scanner/keyword.dart' show + Keyword; + +import 'package:front_end/src/fasta/scanner/precedence.dart' show + ASSIGNMENT_PRECEDENCE, + AS_INFO, + CASCADE_PRECEDENCE, + EOF_INFO, + EQUALITY_PRECEDENCE, + GT_INFO, + IS_INFO, + MINUS_MINUS_INFO, + OPEN_PAREN_INFO, + OPEN_SQUARE_BRACKET_INFO, + PERIOD_INFO, + PLUS_PLUS_INFO, + POSTFIX_PRECEDENCE, + PrecedenceInfo, + QUESTION_INFO, + QUESTION_PERIOD_INFO, + RELATIONAL_PRECEDENCE; + +import 'package:front_end/src/fasta/scanner/token.dart' show + BadInputToken, + BeginGroupToken, + ErrorToken, + KeywordToken, + SymbolToken, + Token, + UnmatchedToken, + UnterminatedToken, + isUserDefinableOperator; + +import 'package:front_end/src/fasta/scanner/token_constants.dart' show + BAD_INPUT_TOKEN, + COMMA_TOKEN, + DOUBLE_TOKEN, + EOF_TOKEN, + EQ_TOKEN, + FUNCTION_TOKEN, + GT_TOKEN, + GT_GT_TOKEN, + HASH_TOKEN, + HEXADECIMAL_TOKEN, + IDENTIFIER_TOKEN, + INT_TOKEN, + KEYWORD_TOKEN, + LT_TOKEN, + OPEN_CURLY_BRACKET_TOKEN, + OPEN_PAREN_TOKEN, + OPEN_SQUARE_BRACKET_TOKEN, + PERIOD_TOKEN, + SEMICOLON_TOKEN, + STRING_INTERPOLATION_IDENTIFIER_TOKEN, + STRING_INTERPOLATION_TOKEN, + STRING_TOKEN; + +import 'package:front_end/src/fasta/scanner/characters.dart' show + $CLOSE_CURLY_BRACKET; + +import 'package:front_end/src/fasta/util/link.dart' show + Link; + +import 'listener.dart' show + Listener; + +import 'error_kind.dart' show + ErrorKind; + +/// Returns true if [token] is the symbol or keyword [value]. +bool optional(String value, Token token) { + return identical(value, token.stringValue); +} class FormalParameterType { final String type; @@ -95,7 +114,9 @@ class FormalParameterType { */ class Parser { final Listener listener; + bool mayParseFunctionExpressions = true; + bool asyncAwaitKeywordsEnabled; Parser(this.listener, {this.asyncAwaitKeywordsEnabled: false}); @@ -398,6 +419,23 @@ class Parser { } } + Token skipFormalParameters(Token token) { + // TODO(ahe): Shouldn't this be `beginFormalParameters`? + listener.beginOptionalFormalParameters(token); + if (!optional('(', token)) { + if (optional(';', token)) { + reportRecoverableError(token, ErrorKind.ExpectedOpenParens); + return token; + } + return reportUnrecoverableError( + token, ErrorKind.ExpectedButGot, {"expected": "("}); + } + BeginGroupToken beginGroupToken = token; + Token endToken = beginGroupToken.endGroup; + listener.endFormalParameters(0, token, endToken); + return endToken.next; + } + Token parseFormalParameters(Token token) { Token begin = token; listener.beginFormalParameters(begin); @@ -447,13 +485,15 @@ class Parser { } token = parseIdentifier(token); if (optional('(', token)) { + listener.beginFunctionTypedFormalParameter(token); listener.handleNoTypeVariables(token); token = parseFormalParameters(token); - listener.handleFunctionTypedFormalParameter(token); + listener.endFunctionTypedFormalParameter(token); } else if (optional('<', token)) { + listener.beginFunctionTypedFormalParameter(token); token = parseTypeVariablesOpt(token); token = parseFormalParameters(token); - listener.handleFunctionTypedFormalParameter(token); + listener.endFunctionTypedFormalParameter(token); } String value = token.stringValue; if ((identical('=', value)) || (identical(':', value))) { @@ -462,11 +502,11 @@ class Parser { token = parseExpression(token.next); listener.handleValuedFormalParameter(equal, token); if (type.isRequired) { - listener.reportError( - equal, MessageKind.REQUIRED_PARAMETER_WITH_DEFAULT); + reportRecoverableError( + equal, ErrorKind.RequiredParameterWithDefault); } else if (type.isPositional && identical(':', value)) { - listener.reportError( - equal, MessageKind.POSITIONAL_PARAMETER_WITH_EQUALS); + reportRecoverableError( + equal, ErrorKind.PositionalParameterWithEquals); } } listener.endFormalParameter(thisKeyword); @@ -491,11 +531,11 @@ class Parser { ++parameterCount; } while (optional(',', token)); if (parameterCount == 0) { - listener.reportError( + reportRecoverableError( token, isNamed - ? MessageKind.EMPTY_NAMED_PARAMETER_LIST - : MessageKind.EMPTY_OPTIONAL_PARAMETER_LIST); + ? ErrorKind.EmptyNamedParameterList + : ErrorKind.EmptyOptionalParameterList); } listener.endOptionalFormalParameters(parameterCount, begin, token); if (isNamed) { @@ -628,14 +668,16 @@ class Parser { Token skipBlock(Token token) { if (!optional('{', token)) { - return listener.expectedBlockToSkip(token); + return reportUnrecoverableError(token, ErrorKind.ExpectedBlockToSkip); } BeginGroupToken beginGroupToken = token; Token endGroup = beginGroupToken.endGroup; if (endGroup == null) { - return listener.unmatched(beginGroupToken); - } else if (!identical(endGroup.kind, Characters.$CLOSE_CURLY_BRACKET)) { - return listener.unmatched(beginGroupToken); + return reportUnrecoverableError( + beginGroupToken, ErrorKind.UnmatchedToken); + } else if (!identical(endGroup.kind, $CLOSE_CURLY_BRACKET)) { + return reportUnrecoverableError( + beginGroupToken, ErrorKind.UnmatchedToken); } return beginGroupToken.endGroup; } @@ -740,13 +782,13 @@ class Parser { listener.handleStringPart(token); return token.next; } else { - return listener.expected('string', token); + return reportUnrecoverableError(token, ErrorKind.ExpectedString); } } Token parseIdentifier(Token token) { if (!token.isIdentifier()) { - token = listener.expectedIdentifier(token); + token = reportUnrecoverableError(token, ErrorKind.ExpectedIdentifier); } listener.handleIdentifier(token); return token.next; @@ -754,7 +796,8 @@ class Parser { Token expect(String string, Token token) { if (!identical(string, token.stringValue)) { - return listener.expected(string, token); + return reportUnrecoverableError( + token, ErrorKind.ExpectedButGot, {"expected": string}); } return token.next; } @@ -773,13 +816,6 @@ class Parser { return token; } - /** - * Returns true if the stringValue of the [token] is [value]. - */ - bool optional(String value, Token token) { - return identical(value, token.stringValue); - } - /** * Returns true if the stringValue of the [token] is either [value1], * [value2], or [value3]. @@ -815,7 +851,8 @@ class Parser { token = parseIdentifier(token); token = parseQualifiedRestOpt(token); } else { - token = listener.expectedType(token); + token = reportUnrecoverableError(token, ErrorKind.ExpectedType); + listener.handleInvalidTypeReference(token); } token = parseTypeArgumentsOpt(token); listener.endType(begin, token); @@ -870,13 +907,13 @@ class Parser { Link identifiers = findMemberName(token); if (identifiers.isEmpty) { - return listener.expectedDeclaration(start); + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration); } Token afterName = identifiers.head; identifiers = identifiers.tail; if (identifiers.isEmpty) { - return listener.expectedDeclaration(start); + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration); } Token name = identifiers.head; identifiers = identifiers.tail; @@ -921,7 +958,7 @@ class Parser { } break; } else { - token = listener.unexpected(token); + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken); if (identical(token.kind, EOF_TOKEN)) return token; } } @@ -989,10 +1026,10 @@ class Parser { } listener.handleModifiers(modifierCount); var kind = hasTypeOrModifier - ? MessageKind.EXTRANEOUS_MODIFIER - : MessageKind.EXTRANEOUS_MODIFIER_REPLACE; + ? ErrorKind.ExtraneousModifier + : ErrorKind.ExtraneousModifierReplace; for (Token modifier in modifierList) { - listener.reportError(modifier, kind, {'modifier': modifier}); + reportRecoverableError(modifier, kind, {'modifier': modifier}); } return null; } @@ -1031,9 +1068,9 @@ class Parser { if (getOrSet != null) { var kind = (hasModifier || hasType) - ? MessageKind.EXTRANEOUS_MODIFIER - : MessageKind.EXTRANEOUS_MODIFIER_REPLACE; - listener.reportError(getOrSet, kind, {'modifier': getOrSet}); + ? ErrorKind.ExtraneousModifier + : ErrorKind.ExtraneousModifierReplace; + reportRecoverableError(getOrSet, kind, {'modifier': getOrSet}); } if (!hasType) { @@ -1043,11 +1080,11 @@ class Parser { // TODO(ahe): This error is reported twice, second time is from // [parseVariablesDeclarationMaybeSemicolon] via // [PartialFieldListElement.parseNode]. - listener.reportError(type, MessageKind.VOID_NOT_ALLOWED); + reportRecoverableError(type, ErrorKind.InvalidVoid); } else { parseType(type); if (isVar) { - listener.reportError(modifiers.head, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(modifiers.head, ErrorKind.ExtraneousModifier, {'modifier': modifiers.head}); } } @@ -1055,10 +1092,10 @@ class Parser { Token token = parseIdentifier(name); int fieldCount = 1; - token = parseVariableInitializerOpt(token); + token = parseFieldInitializerOpt(token); while (optional(',', token)) { token = parseIdentifier(token.next); - token = parseVariableInitializerOpt(token); + token = parseFieldInitializerOpt(token); ++fieldCount; } Token semicolon = token; @@ -1080,8 +1117,8 @@ class Parser { if (externalModifier == null && optional('external', modifier)) { externalModifier = modifier; } else { - listener.reportError( - modifier, MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier}); + reportRecoverableError( + modifier, ErrorKind.ExtraneousModifier, {'modifier': modifier}); } } if (externalModifier != null) { @@ -1111,7 +1148,7 @@ class Parser { Token endToken = token; token = token.next; if (token.kind == BAD_INPUT_TOKEN) { - token = listener.unexpected(token); + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } listener.endTopLevelMethod(start, getOrSet, endToken); return token; @@ -1188,7 +1225,7 @@ class Parser { if (token.next is BeginGroupToken) { BeginGroupToken beginGroup = token.next; if (beginGroup.endGroup == null) { - listener.unmatched(beginGroup); + reportUnrecoverableError(beginGroup, ErrorKind.UnmatchedToken); } token = beginGroup.endGroup; } @@ -1199,12 +1236,24 @@ class Parser { return const Link(); } + Token parseFieldInitializerOpt(Token token) { + if (optional('=', token)) { + Token assignment = token; + listener.beginFieldInitializer(token); + token = parseExpression(token.next); + listener.endFieldInitializer(assignment); + } else { + listener.handleNoFieldInitializer(token); + } + return token; + } + Token parseVariableInitializerOpt(Token token) { if (optional('=', token)) { Token assignment = token; - listener.beginInitializer(token); + listener.beginVariableInitializer(token); token = parseExpression(token.next); - listener.endInitializer(assignment); + listener.endVariableInitializer(assignment); } return token; } @@ -1226,7 +1275,10 @@ class Parser { bool old = mayParseFunctionExpressions; mayParseFunctionExpressions = false; do { - token = parseExpression(token.next); + token = token.next; + listener.beginInitializer(token); + token = parseExpression(token); + listener.endInitializer(token); ++count; } while (optional(',', token)); mayParseFunctionExpressions = old; @@ -1238,7 +1290,7 @@ class Parser { if (identical(token.kind, STRING_TOKEN)) { return parseLiteralString(token); } else { - listener.recoverableError(token, "unexpected"); + reportRecoverableError(token, ErrorKind.ExpectedString); return parseExpression(token); } } @@ -1270,7 +1322,7 @@ class Parser { if (isModifier(token)) { parseModifier(token); } else { - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); // Skip the remaining modifiers. break; } @@ -1329,11 +1381,27 @@ class Parser { return peekAfterType(token); } + Token skipClassBody(Token token) { + if (!optional('{', token)) { + return reportUnrecoverableError(token, ErrorKind.ExpectedClassBodyToSkip); + } + BeginGroupToken beginGroupToken = token; + Token endGroup = beginGroupToken.endGroup; + if (endGroup == null) { + return reportUnrecoverableError( + beginGroupToken, ErrorKind.UnmatchedToken); + } else if (!identical(endGroup.kind, $CLOSE_CURLY_BRACKET)) { + return reportUnrecoverableError( + beginGroupToken, ErrorKind.UnmatchedToken); + } + return endGroup; + } + Token parseClassBody(Token token) { Token begin = token; listener.beginClassBody(token); if (!optional('{', token)) { - token = listener.expectedClassBody(token); + token = reportUnrecoverableError(token, ErrorKind.ExpectedClassBody); } token = token.next; int count = 0; @@ -1370,13 +1438,13 @@ class Parser { Link identifiers = findMemberName(token); if (identifiers.isEmpty) { - return listener.expectedDeclaration(start); + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration); } Token afterName = identifiers.head; identifiers = identifiers.tail; if (identifiers.isEmpty) { - return listener.expectedDeclaration(start); + return reportUnrecoverableError(start, ErrorKind.ExpectedDeclaration); } Token name = identifiers.head; identifiers = identifiers.tail; @@ -1428,7 +1496,7 @@ class Parser { isField = true; break; } else { - token = listener.unexpected(token); + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken); if (identical(token.kind, EOF_TOKEN)) { // TODO(ahe): This is a hack, see parseTopLevelMember. listener.endFields(1, start, token); @@ -1460,7 +1528,7 @@ class Parser { modifierCount++; externalModifier = modifier; if (modifierCount != allowedModifierCount) { - listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(modifier, ErrorKind.ExtraneousModifier, {'modifier': modifier}); } allowedModifierCount++; @@ -1468,23 +1536,23 @@ class Parser { modifierCount++; staticModifier = modifier; if (modifierCount != allowedModifierCount) { - listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(modifier, ErrorKind.ExtraneousModifier, {'modifier': modifier}); } } else if (constModifier == null && optional('const', modifier)) { modifierCount++; constModifier = modifier; if (modifierCount != allowedModifierCount) { - listener.reportError(modifier, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(modifier, ErrorKind.ExtraneousModifier, {'modifier': modifier}); } } else { - listener.reportError( - modifier, MessageKind.EXTRANEOUS_MODIFIER, {'modifier': modifier}); + reportRecoverableError( + modifier, ErrorKind.ExtraneousModifier, {'modifier': modifier}); } } if (getOrSet != null && constModifier != null) { - listener.reportError(constModifier, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(constModifier, ErrorKind.ExtraneousModifier, {'modifier': constModifier}); } parseModifierList(modifiers); @@ -1498,7 +1566,7 @@ class Parser { if (optional('operator', name)) { token = parseOperatorName(name); if (staticModifier != null) { - listener.reportError(staticModifier, MessageKind.EXTRANEOUS_MODIFIER, + reportRecoverableError(staticModifier, ErrorKind.ExtraneousModifier, {'modifier': staticModifier}); } } else { @@ -1680,10 +1748,34 @@ class Parser { return token; } + Token skipFunctionBody(Token token, bool isExpression, bool allowAbstract) { + assert(!isExpression); + token = skipAsyncModifier(token); + String value = token.stringValue; + if (identical(value, ';')) { + if (!allowAbstract) { + reportRecoverableError(token, ErrorKind.ExpectedBody); + } + listener.handleNoFunctionBody(token); + } else { + if (identical(value, '=>')) { + token = parseExpression(token.next); + expectSemicolon(token); + } else if (value == '=') { + token = parseRedirectingFactoryBody(token); + expectSemicolon(token); + } else { + token = skipBlock(token); + } + listener.handleFunctionBodySkipped(token); + } + return token; + } + Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) { if (optional(';', token)) { if (!allowAbstract) { - listener.reportError(token, MessageKind.BODY_EXPECTED); + reportRecoverableError(token, ErrorKind.ExpectedBody); } listener.endFunctionBody(0, null, token); return token; @@ -1701,7 +1793,9 @@ class Parser { Token begin = token; int statementCount = 0; if (!optional('{', token)) { - return listener.expectedFunctionBody(token); + token = reportUnrecoverableError(token, ErrorKind.ExpectedFunctionBody); + listener.handleInvalidFunctionBody(token); + return token; } listener.beginFunctionBody(begin); @@ -1715,6 +1809,26 @@ class Parser { return token; } + Token skipAsyncModifier(Token token) { + String value = token.stringValue; + if (identical(value, 'async')) { + token = token.next; + value = token.stringValue; + + if (identical(value, '*')) { + token = token.next; + } + } else if (identical(value, 'sync')) { + token = token.next; + value = token.stringValue; + + if (identical(value, '*')) { + token = token.next; + } + } + return token; + } + Token parseAsyncModifier(Token token) { Token async; Token star; @@ -1735,7 +1849,7 @@ class Parser { star = token; token = token.next; } else { - listener.reportError(async, MessageKind.INVALID_SYNC_MODIFIER); + reportRecoverableError(async, ErrorKind.InvalidSyncModifier); } } listener.handleAsyncModifier(async, star); @@ -1982,13 +2096,80 @@ class Parser { return expectSemicolon(token); } + Token skipExpression(Token token) { + while (true) { + final kind = token.kind; + final value = token.stringValue; + if ((identical(kind, EOF_TOKEN)) || + (identical(value, ';')) || + (identical(value, ',')) || + (identical(value, '}')) || + (identical(value, ')')) || + (identical(value, ']'))) { + break; + } + if (identical(value, '=') || + identical(value, '?') || + identical(value, ':') || + identical(value, '??')) { + var nextValue = token.next.stringValue; + if (identical(nextValue, 'const')) { + token = token.next; + nextValue = token.next.stringValue; + } + if (identical(nextValue, '{')) { + // Handle cases like this: + // class Foo { + // var map; + // Foo() : map = {}; + // Foo.x() : map = true ? {} : {}; + // } + BeginGroupToken begin = token.next; + token = (begin.endGroup != null) ? begin.endGroup : token; + token = token.next; + continue; + } + if (identical(nextValue, '<')) { + // Handle cases like this: + // class Foo { + // var map; + // Foo() : map = {}; + // Foo.x() : map = true ? {} : {}; + // } + BeginGroupToken begin = token.next; + token = (begin.endGroup != null) ? begin.endGroup : token; + token = token.next; + if (identical(token.stringValue, '{')) { + begin = token; + token = (begin.endGroup != null) ? begin.endGroup : token; + token = token.next; + } + continue; + } + } + if (!mayParseFunctionExpressions && identical(value, '{')) { + break; + } + if (token is BeginGroupToken) { + BeginGroupToken begin = token; + token = (begin.endGroup != null) ? begin.endGroup : token; + } else if (token is ErrorToken) { + reportErrorToken(token, false); + } + token = token.next; + } + return token; + } + Token parseExpression(Token token) { + listener.beginExpression(token); return optional('throw', token) ? parseThrowExpression(token, true) : parsePrecedenceExpression(token, ASSIGNMENT_PRECEDENCE, true); } Token parseExpressionWithoutCascade(Token token) { + listener.beginExpression(token); return optional('throw', token) ? parseThrowExpression(token, false) : parsePrecedenceExpression(token, ASSIGNMENT_PRECEDENCE, false); @@ -2023,6 +2204,7 @@ class Parser { } else if (identical(tokenLevel, ASSIGNMENT_PRECEDENCE)) { // Right associative, so we recurse at the same precedence // level. + listener.beginExpression(token.next); token = parsePrecedenceExpression(token.next, level, allowCascades); listener.handleAssignmentExpression(operator); } else if (identical(tokenLevel, POSTFIX_PRECEDENCE)) { @@ -2042,7 +2224,7 @@ class Parser { listener.handleUnaryPostfixAssignmentExpression(token); token = token.next; } else { - token = listener.unexpected(token); + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } } else if (identical(info, IS_INFO)) { token = parseIsOperatorRest(token); @@ -2053,6 +2235,7 @@ class Parser { } else { // Left associative, so we recurse at the next higher // precedence level. + listener.beginExpression(token.next); token = parsePrecedenceExpression(token.next, level + 1, allowCascades); listener.handleBinaryExpression(operator); @@ -2081,7 +2264,7 @@ class Parser { token = parseSend(token); listener.handleBinaryExpression(cascadeOperator); } else { - return listener.unexpected(token); + return reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } Token mark; do { @@ -2110,7 +2293,7 @@ class Parser { return parseAwaitExpression(token, allowCascades); } else if (identical(value, '+')) { // Dart no longer allows prefix-plus. - listener.reportError(token, MessageKind.UNSUPPORTED_PREFIX_PLUS); + reportRecoverableError(token, ErrorKind.UnsupportedPrefixPlus); return parseUnaryExpression(token.next, allowCascades); } else if ((identical(value, '!')) || (identical(value, '-')) || @@ -2186,11 +2369,11 @@ class Parser { return parseFunctionExpression(token); } else if (asyncAwaitKeywordsEnabled && (value == 'yield' || value == 'async')) { - return listener.expectedExpression(token); + return expressionExpected(token); } else if (token.isIdentifier()) { return parseSendOrFunctionLiteral(token); } else { - return listener.expectedExpression(token); + return expressionExpected(token); } } else if (kind == OPEN_PAREN_TOKEN) { return parseParenthesizedExpressionOrFunctionLiteral(token); @@ -2203,10 +2386,16 @@ class Parser { } else if (kind == LT_TOKEN) { return parseLiteralListOrMapOrFunction(token, null); } else { - return listener.expectedExpression(token); + return expressionExpected(token); } } + Token expressionExpected(Token token) { + token = reportUnrecoverableError(token, ErrorKind.ExpectedExpression); + listener.handleInvalidExpression(token); + return token; + } + Token parseParenthesizedExpressionOrFunctionLiteral(Token token) { BeginGroupToken beginGroup = token; // TODO(eernst): Check for NPE as described in issue 26252. @@ -2236,7 +2425,7 @@ class Parser { // [begin] is now known to have type [BeginGroupToken]. token = parseExpression(token); if (!identical(begin.endGroup, token)) { - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); token = begin.endGroup; } listener.handleParenthesizedExpression(begin); @@ -2338,7 +2527,7 @@ class Parser { } // Fall through. } - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); return null; } @@ -2366,7 +2555,7 @@ class Parser { } else if ((optional('[', token)) || (optional('[]', token))) { return parseLiteralListSuffix(token, constKeyword); } - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); return null; } } @@ -2421,7 +2610,7 @@ class Parser { token = parseArguments(token); } else { listener.handleNoArguments(token); - token = listener.unexpected(token); + token = reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } return token; } @@ -2556,6 +2745,16 @@ class Parser { return token; } + Token skipArgumentsOpt(Token token) { + listener.handleNoArguments(token); + if (optional('(', token)) { + BeginGroupToken begin = token; + return begin.endGroup.next; + } else { + return token; + } + } + Token parseArgumentsOpt(Token token) { if (!optional('(', token)) { listener.handleNoArguments(token); @@ -2609,7 +2808,7 @@ class Parser { if (identical(value, 'is') || identical(value, 'as')) { // The is- and as-operators cannot be chained, but they can take part of // expressions like: foo is Foo || foo is Bar. - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } return token; } @@ -2622,7 +2821,7 @@ class Parser { String value = token.stringValue; if (identical(value, 'is') || identical(value, 'as')) { // The is- and as-operators cannot be chained. - listener.unexpected(token); + reportUnrecoverableError(token, ErrorKind.UnexpectedToken); } return token; } @@ -2671,11 +2870,15 @@ class Parser { listener.beginIfStatement(ifToken); token = expect('if', token); token = parseParenthesizedExpression(token); + listener.beginThenStatement(token); token = parseStatement(token); + listener.endThenStatement(token); Token elseToken = null; if (optional('else', token)) { elseToken = token; + listener.beginElseStatement(token); token = parseStatement(token.next); + listener.endElseStatement(token); } listener.endIfStatement(ifToken, elseToken); return token; @@ -2691,7 +2894,7 @@ class Parser { return parseForInRest(awaitToken, forToken, token); } else { if (awaitToken != null) { - listener.reportError(awaitToken, MessageKind.INVALID_AWAIT_FOR); + reportRecoverableError(awaitToken, ErrorKind.InvalidAwaitFor); } return parseForRest(forToken, token); } @@ -2734,7 +2937,9 @@ class Parser { } } token = expect(')', token); + listener.beginForStatementBody(token); token = parseStatement(token); + listener.endForStatementBody(token); listener.endForStatement(expressionCount, forToken, token); return token; } @@ -2742,9 +2947,14 @@ class Parser { Token parseForInRest(Token awaitToken, Token forToken, Token token) { assert(optional('in', token)); Token inKeyword = token; - token = parseExpression(token.next); + token = token.next; + listener.beginForInExpression(token); + token = parseExpression(token); + listener.endForInExpression(token); token = expect(')', token); + listener.beginForInBody(token); token = parseStatement(token); + listener.endForInBody(token); listener.endForIn(awaitToken, forToken, inKeyword, token); return token; } @@ -2754,7 +2964,9 @@ class Parser { listener.beginWhileStatement(whileToken); token = expect('while', token); token = parseParenthesizedExpression(token); + listener.beginWhileStatementBody(token); token = parseStatement(token); + listener.endWhileStatementBody(token); listener.endWhileStatement(whileToken, token); return token; } @@ -2763,7 +2975,9 @@ class Parser { Token doToken = token; listener.beginDoWhileStatement(doToken); token = expect('do', token); + listener.beginDoWhileStatementBody(token); token = parseStatement(token); + listener.endDoWhileStatementBody(token); Token whileToken = token; token = expect('while', token); token = parseParenthesizedExpression(token); @@ -2826,6 +3040,7 @@ class Parser { String value = token.stringValue; while (identical(value, 'catch') || identical(value, 'on')) { + listener.beginCatchClause(token); var onKeyword = null; if (identical(value, 'on')) { // on qualified catchPart? @@ -2839,6 +3054,7 @@ class Parser { // TODO(ahe): Validate the "parameters". token = parseFormalParameters(token.next); } + listener.endCatchClause(token); token = parseBlock(token); ++catchCount; listener.handleCatchBlock(onKeyword, catchKeyword); @@ -2930,11 +3146,14 @@ class Parser { peek = peekPastLabels(token); } else { if (expressionCount == 0) { - listener.expected("case", token); + // TODO(ahe): This is probably easy to recover from. + reportUnrecoverableError( + token, ErrorKind.ExpectedButGot, {"expected": "case"}); } break; } } + listener.beginSwitchCase(labelCount, expressionCount, begin); // Finally zero or more statements. int statementCount = 0; while (!identical(token.kind, EOF_TOKEN)) { @@ -3004,4 +3223,101 @@ class Parser { listener.handleEmptyStatement(token); return expectSemicolon(token); } + + /// Don't call this method. Should only be used as a last resort when there + /// is no feasible way to recover from a parser error. + Token reportUnrecoverableError(Token token, ErrorKind kind, [Map arguments]) { + Token next; + if (token is ErrorToken) { + next = reportErrorToken(token, false); + } else { + arguments ??= {}; + arguments.putIfAbsent("actual", () => token.value); + next = listener.handleUnrecoverableError(token, kind, arguments); + } + return next ?? skipToEof(token); + } + + void reportRecoverableError(Token token, ErrorKind kind, [Map arguments]) { + if (token is ErrorToken) { + reportErrorToken(token, true); + } else { + arguments ??= {}; + listener.handleRecoverableError(token, kind, arguments); + } + } + + Token reportErrorToken(ErrorToken token, bool isRecoverable) { + ErrorKind kind; + Map arguments = const {}; + if (token is BadInputToken) { + String hex = token.character.toRadixString(16); + if (hex.length < 4) { + String padding = "0000".substring(hex.length); + hex = "$padding$hex"; + } + kind = ErrorKind.InvalidInputCharacter; + arguments = {'characterHex': hex}; + } else if (token is UnterminatedToken) { + switch (token.start) { + case '1e': + kind = ErrorKind.MissingExponent; + break; + case '"': + case "'": + case '"""': + case "'''": + case 'r"': + case "r'": + case 'r"""': + case "r'''": + kind = ErrorKind.UnterminatedString; + arguments = {'quote': token.start}; + break; + case '0x': + kind = ErrorKind.ExpectedHexDigit; + break; + case r'$': + kind = ErrorKind.MalformedStringLiteral; + break; + case '/*': + kind = ErrorKind.UnterminatedComment; + break; + default: + kind = ErrorKind.UnterminatedToken; + break; + } + } else if (token is UnmatchedToken) { + String begin = token.begin.value; + String end = closeBraceFor(begin); + kind = ErrorKind.UnmatchedToken; + arguments = {'begin': begin, 'end': end}; + } else { + return listener.handleUnrecoverableError( + token, ErrorKind.Unspecified, {"text": token.assertionMessage}); + } + if (isRecoverable) { + listener.handleRecoverableError(token, kind, arguments); + return null; + } else { + return listener.handleUnrecoverableError(token, kind, arguments); + } + } +} + +String closeBraceFor(String openBrace) { + return const { + '(': ')', + '[': ']', + '{': '}', + '<': '>', + r'${': '}', + }[openBrace]; +} + +Token skipToEof(Token token) { + while (!identical(token.info, EOF_INFO)) { + token = token.next; + } + return token; } diff --git a/pkg/front_end/lib/src/fasta/parser/top_level_parser.dart b/pkg/front_end/lib/src/fasta/parser/top_level_parser.dart index 6aaa52cd776..af96f3c4193 100644 --- a/pkg/front_end/lib/src/fasta/parser/top_level_parser.dart +++ b/pkg/front_end/lib/src/fasta/parser/top_level_parser.dart @@ -2,174 +2,22 @@ // 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. -library dart2js.parser.partial; +library fasta.parser.top_level_parser; -import '../common.dart'; -import '../tokens/token.dart' show BeginGroupToken, ErrorToken, Token; -import '../tokens/token_constants.dart' as Tokens show EOF_TOKEN; -import '../util/characters.dart' as Characters show $CLOSE_CURLY_BRACKET; -import 'listener.dart' show Listener; -import 'parser.dart' show Parser; +import 'package:front_end/src/fasta/scanner/token.dart' show + Token; -class PartialParser extends Parser { - PartialParser(Listener listener) : super(listener); +import 'listener.dart' show + Listener; + +import 'class_member_parser.dart' show + ClassMemberParser; + +/// Parser which only parses top-level elements, but ignores their bodies. +/// Use [Parser] to parse everything. +class TopLevelParser extends ClassMemberParser { + TopLevelParser(Listener listener, {bool asyncAwaitKeywordsEnabled: false}) + : super(listener, asyncAwaitKeywordsEnabled: asyncAwaitKeywordsEnabled); Token parseClassBody(Token token) => skipClassBody(token); - - Token fullParseClassBody(Token token) => super.parseClassBody(token); - - Token parseExpression(Token token) => skipExpression(token); - - Token parseArgumentsOpt(Token token) { - // This method is overridden for two reasons: - // 1. Avoid generating events for arguments. - // 2. Avoid calling skip expression for each argument (which doesn't work). - listener.handleNoArguments(token); - if (optional('(', token)) { - BeginGroupToken begin = token; - return begin.endGroup.next; - } else { - return token; - } - } - - Token skipExpression(Token token) { - while (true) { - final kind = token.kind; - final value = token.stringValue; - if ((identical(kind, Tokens.EOF_TOKEN)) || - (identical(value, ';')) || - (identical(value, ',')) || - (identical(value, '}')) || - (identical(value, ')')) || - (identical(value, ']'))) { - break; - } - if (identical(value, '=') || - identical(value, '?') || - identical(value, ':') || - identical(value, '??')) { - var nextValue = token.next.stringValue; - if (identical(nextValue, 'const')) { - token = token.next; - nextValue = token.next.stringValue; - } - if (identical(nextValue, '{')) { - // Handle cases like this: - // class Foo { - // var map; - // Foo() : map = {}; - // Foo.x() : map = true ? {} : {}; - // } - BeginGroupToken begin = token.next; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - continue; - } - if (identical(nextValue, '<')) { - // Handle cases like this: - // class Foo { - // var map; - // Foo() : map = {}; - // Foo.x() : map = true ? {} : {}; - // } - BeginGroupToken begin = token.next; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - if (identical(token.stringValue, '{')) { - begin = token; - token = (begin.endGroup != null) ? begin.endGroup : token; - token = token.next; - } - continue; - } - } - if (!mayParseFunctionExpressions && identical(value, '{')) { - break; - } - if (token is BeginGroupToken) { - BeginGroupToken begin = token; - token = (begin.endGroup != null) ? begin.endGroup : token; - } else if (token is ErrorToken) { - listener.reportErrorToken(token); - } - token = token.next; - } - return token; - } - - Token skipClassBody(Token token) { - if (!optional('{', token)) { - return listener.expectedClassBodyToSkip(token); - } - BeginGroupToken beginGroupToken = token; - Token endGroup = beginGroupToken.endGroup; - if (endGroup == null) { - return listener.unmatched(beginGroupToken); - } else if (!identical(endGroup.kind, Characters.$CLOSE_CURLY_BRACKET)) { - return listener.unmatched(beginGroupToken); - } - return endGroup; - } - - Token skipAsyncModifier(Token token) { - String value = token.stringValue; - if (identical(value, 'async')) { - token = token.next; - value = token.stringValue; - - if (identical(value, '*')) { - token = token.next; - } - } else if (identical(value, 'sync')) { - token = token.next; - value = token.stringValue; - - if (identical(value, '*')) { - token = token.next; - } - } - return token; - } - - Token parseFunctionBody(Token token, bool isExpression, bool allowAbstract) { - assert(!isExpression); - token = skipAsyncModifier(token); - String value = token.stringValue; - if (identical(value, ';')) { - if (!allowAbstract) { - listener.reportError(token, MessageKind.BODY_EXPECTED); - } - listener.handleNoFunctionBody(token); - } else { - if (identical(value, '=>')) { - token = parseExpression(token.next); - expectSemicolon(token); - } else if (value == '=') { - token = parseRedirectingFactoryBody(token); - expectSemicolon(token); - } else { - token = skipBlock(token); - } - listener.skippedFunctionBody(token); - } - return token; - } - - Token parseFormalParameters(Token token) => skipFormals(token); - - Token skipFormals(Token token) { - listener.beginOptionalFormalParameters(token); - if (!optional('(', token)) { - if (optional(';', token)) { - listener.recoverableError(token, "expected '('"); - return token; - } - return listener.unexpected(token); - } - BeginGroupToken beginGroupToken = token; - Token endToken = beginGroupToken.endGroup; - listener.endFormalParameters(0, token, endToken); - return endToken.next; - } } diff --git a/pkg/front_end/lib/src/fasta/scanner.dart b/pkg/front_end/lib/src/fasta/scanner.dart new file mode 100644 index 00000000000..53d0122429e --- /dev/null +++ b/pkg/front_end/lib/src/fasta/scanner.dart @@ -0,0 +1,72 @@ +// Copyright (c) 2016, 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.md file. + +library fasta.scanner; + +import 'scanner/token.dart' show + Token; + +import 'scanner/utf8_bytes_scanner.dart' show + Utf8BytesScanner; + +import 'scanner/recover.dart' show + defaultRecoveryStrategy; + +export 'scanner/token.dart' show + BeginGroupToken, + ErrorToken, + KeywordToken, + StringToken, + SymbolToken, + Token, + isBinaryOperator, + isMinusOperator, + isTernaryOperator, + isUnaryOperator, + isUserDefinableOperator; + +export 'scanner/token_constants.dart' show + EOF_TOKEN; + +export 'scanner/utf8_bytes_scanner.dart' show + Utf8BytesScanner; + +export 'scanner/string_scanner.dart' show + StringScanner; + +export 'scanner/keyword.dart' show + Keyword; + +typedef Token Recover(List bytes, Token tokens, List lineStarts); + +abstract class Scanner { + /// Returns true if an error occured during [tokenize]. + bool get hasErrors; + + List get lineStarts; + + Token tokenize(); +} + +class ScannerResult { + final Token tokens; + final List lineStarts; + + ScannerResult(this.tokens, this.lineStarts); +} + +ScannerResult scan(List bytes, + {bool includeComments: false, Recover recover}) { + if (bytes.last != 0) { + throw new ArgumentError("[bytes]: the last byte must be null."); + } + Scanner scanner = + new Utf8BytesScanner(bytes, includeComments: includeComments); + Token tokens = scanner.tokenize(); + if (scanner.hasErrors) { + recover ??= defaultRecoveryStrategy; + tokens = recover(bytes, tokens, scanner.lineStarts); + } + return new ScannerResult(tokens, scanner.lineStarts); +} diff --git a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart index f0698611482..e9ebd479f2f 100644 --- a/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart +++ b/pkg/front_end/lib/src/fasta/scanner/abstract_scanner.dart @@ -2,33 +2,32 @@ // 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. -library dart2js.scanner; +library fasta.scanner.abstract_scanner; -import '../io/source_file.dart' show SourceFile, Utf8BytesSourceFile; -import '../tokens/keyword.dart' show Keyword, KeywordState; -import '../tokens/precedence.dart'; -import '../tokens/precedence_constants.dart'; -import '../tokens/token.dart'; -import '../tokens/token_constants.dart'; -import '../util/characters.dart'; -import 'string_scanner.dart' show StringScanner; -import 'utf8_bytes_scanner.dart' show Utf8BytesScanner; +import '../scanner.dart' show + Scanner; -abstract class Scanner { - Token tokenize(); +import 'keyword.dart' show + KeywordState, + Keyword; - factory Scanner(SourceFile file, {bool includeComments: false}) { - if (file is Utf8BytesSourceFile) { - return new Utf8BytesScanner(file, includeComments: includeComments); - } else { - return new StringScanner(file, includeComments: includeComments); - } - } -} +import 'precedence.dart'; + +import 'token.dart' show + BadInputToken, + BeginGroupToken, + ErrorToken, + KeywordToken, + SymbolToken, + Token, + UnmatchedToken, + UnterminatedToken; + +import 'token_constants.dart'; + +import 'characters.dart'; abstract class AbstractScanner implements Scanner { - // TODO(ahe): Move this class to implementation. - final bool includeComments; /** @@ -54,16 +53,9 @@ abstract class AbstractScanner implements Scanner { */ Token tail; - /** - * The source file that is being scanned. This field can be [:null:]. - * If the source file is available, the scanner assigns its [:lineStarts:] and - * [:length:] fields at the end of [tokenize]. - */ - final SourceFile file; - final List lineStarts = [0]; - AbstractScanner(this.file, this.includeComments) { + AbstractScanner(this.includeComments) { this.tail = this.tokens; } @@ -214,12 +206,8 @@ abstract class AbstractScanner implements Scanner { } } - if (file != null) { - file.length = stringOffset; - // One additional line start at the end, see [SourceFile.lineStarts]. - lineStarts.add(stringOffset + 1); - file.lineStarts = lineStarts; - } + // Always pretend that there's a line at the end of the file. + lineStarts.add(stringOffset + 1); return firstToken(); } @@ -635,7 +623,6 @@ abstract class AbstractScanner implements Scanner { return next; } } - return null; } int tokenizeHexOrNumber(int next) { @@ -665,7 +652,6 @@ abstract class AbstractScanner implements Scanner { return next; } } - return null; } int tokenizeDotsOrNumber(int next) { @@ -761,7 +747,6 @@ abstract class AbstractScanner implements Scanner { return next; } } - return null; } int tokenizeMultiLineComment(int next, int start) { diff --git a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart index edd22ae2796..e0f115c9afe 100644 --- a/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart +++ b/pkg/front_end/lib/src/fasta/scanner/array_based_scanner.dart @@ -2,24 +2,43 @@ // 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. -library dart2js.scanner.array_based; +library fasta.scanner.array_based_scanner; -import '../io/source_file.dart' show SourceFile; -import '../tokens/keyword.dart' show Keyword; -import '../tokens/precedence.dart' show PrecedenceInfo; -import '../tokens/precedence_constants.dart' as Precedence - show COMMENT_INFO, EOF_INFO; -import '../tokens/token.dart' - show BeginGroupToken, ErrorToken, KeywordToken, SymbolToken, Token; -import '../tokens/token_constants.dart' as Tokens - show LT_TOKEN, OPEN_CURLY_BRACKET_TOKEN, STRING_INTERPOLATION_TOKEN; -import '../util/characters.dart' show $LF, $STX; -import '../util/util.dart' show Link; -import 'scanner.dart' show AbstractScanner; +import 'keyword.dart' show + Keyword; + +import 'precedence.dart' show + COMMENT_INFO, + EOF_INFO, + PrecedenceInfo; + +import 'token.dart' show + BeginGroupToken, + ErrorToken, + KeywordToken, + SymbolToken, + Token; + +import 'token_constants.dart' show + LT_TOKEN, + OPEN_CURLY_BRACKET_TOKEN, + STRING_INTERPOLATION_TOKEN; + +import 'characters.dart' show + $LF, + $STX; + +import 'abstract_scanner.dart' show + AbstractScanner; + +import 'package:front_end/src/fasta/util/link.dart' show + Link; abstract class ArrayBasedScanner extends AbstractScanner { - ArrayBasedScanner(SourceFile file, bool includeComments) - : super(file, includeComments); + bool hasErrors = false; + + ArrayBasedScanner(bool includeComments) + : super(includeComments); /** * The stack of open groups, e.g [: { ... ( .. :] @@ -77,7 +96,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { unmatchedBeginGroup(groupingStack.head); groupingStack = groupingStack.tail; } - tail.next = new SymbolToken(Precedence.EOF_INFO, tokenStart); + tail.next = new SymbolToken(EOF_INFO, tokenStart); tail = tail.next; // EOF points to itself so there's always infinite look-ahead. tail.next = tail; @@ -91,7 +110,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { * [lineStarts] map. */ void appendWhiteSpace(int next) { - if (next == $LF && file != null) { + if (next == $LF) { lineStarts.add(stringOffset + 1); // +1, the line starts after the $LF. } } @@ -103,9 +122,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { * [lineStarts] map. */ void lineFeedInMultiline() { - if (file != null) { - lineStarts.add(stringOffset + 1); - } + lineStarts.add(stringOffset + 1); } /** @@ -118,7 +135,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { tail = tail.next; // { ( [ ${ cannot appear inside a type parameters / arguments. - if (!identical(info.kind, Tokens.LT_TOKEN)) discardOpenLt(); + if (!identical(info.kind, LT_TOKEN)) discardOpenLt(); groupingStack = groupingStack.prepend(token); } @@ -128,7 +145,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { * '>>' are handled separately bo [appendGt] and [appendGtGt]. */ int appendEndGroup(PrecedenceInfo info, int openKind) { - assert(!identical(openKind, Tokens.LT_TOKEN)); // openKind is < for > and >> + assert(!identical(openKind, LT_TOKEN)); // openKind is < for > and >> discardBeginGroupUntil(openKind); appendPrecedenceToken(info); Token close = tail; @@ -137,8 +154,8 @@ abstract class ArrayBasedScanner extends AbstractScanner { } BeginGroupToken begin = groupingStack.head; if (!identical(begin.kind, openKind)) { - assert(begin.kind == Tokens.STRING_INTERPOLATION_TOKEN && - openKind == Tokens.OPEN_CURLY_BRACKET_TOKEN); + assert(begin.kind == STRING_INTERPOLATION_TOKEN && + openKind == OPEN_CURLY_BRACKET_TOKEN); // We're ending an interpolated expression. begin.endGroup = close; groupingStack = groupingStack.tail; @@ -162,8 +179,8 @@ abstract class ArrayBasedScanner extends AbstractScanner { if (groupingStack.isEmpty) return; BeginGroupToken begin = groupingStack.head; if (openKind == begin.kind) return; - if (openKind == Tokens.OPEN_CURLY_BRACKET_TOKEN && - begin.kind == Tokens.STRING_INTERPOLATION_TOKEN) return; + if (openKind == OPEN_CURLY_BRACKET_TOKEN && + begin.kind == STRING_INTERPOLATION_TOKEN) return; unmatchedBeginGroup(begin); groupingStack = groupingStack.tail; } @@ -177,7 +194,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { void appendGt(PrecedenceInfo info) { appendPrecedenceToken(info); if (groupingStack.isEmpty) return; - if (identical(groupingStack.head.kind, Tokens.LT_TOKEN)) { + if (identical(groupingStack.head.kind, LT_TOKEN)) { groupingStack.head.endGroup = tail; groupingStack = groupingStack.tail; } @@ -191,13 +208,13 @@ abstract class ArrayBasedScanner extends AbstractScanner { void appendGtGt(PrecedenceInfo info) { appendPrecedenceToken(info); if (groupingStack.isEmpty) return; - if (identical(groupingStack.head.kind, Tokens.LT_TOKEN)) { + if (identical(groupingStack.head.kind, LT_TOKEN)) { // Don't assign endGroup: in "T>", the '>>' token closes the outer // '<', the inner '<' is left without endGroup. groupingStack = groupingStack.tail; } if (groupingStack.isEmpty) return; - if (identical(groupingStack.head.kind, Tokens.LT_TOKEN)) { + if (identical(groupingStack.head.kind, LT_TOKEN)) { groupingStack.head.endGroup = tail; groupingStack = groupingStack.tail; } @@ -205,10 +222,11 @@ abstract class ArrayBasedScanner extends AbstractScanner { void appendComment(start, bool asciiOnly) { if (!includeComments) return; - appendSubstringToken(Precedence.COMMENT_INFO, start, asciiOnly); + appendSubstringToken(COMMENT_INFO, start, asciiOnly); } void appendErrorToken(ErrorToken token) { + hasErrors = true; tail.next = token; tail = token; } @@ -226,7 +244,7 @@ abstract class ArrayBasedScanner extends AbstractScanner { */ void discardOpenLt() { while (!groupingStack.isEmpty && - identical(groupingStack.head.kind, Tokens.LT_TOKEN)) { + identical(groupingStack.head.kind, LT_TOKEN)) { groupingStack = groupingStack.tail; } } diff --git a/pkg/front_end/lib/src/fasta/scanner/bin/scanner.dart b/pkg/front_end/lib/src/fasta/scanner/bin/scanner.dart new file mode 100644 index 00000000000..4d46811eaab --- /dev/null +++ b/pkg/front_end/lib/src/fasta/scanner/bin/scanner.dart @@ -0,0 +1,7 @@ +// Copyright (c) 2016, 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.md file. + +import 'package:front_end/src/fasta/scanner/main.dart' as dart_scanner; + +main(List arguments) => dart_scanner.main(arguments); diff --git a/pkg/front_end/lib/src/fasta/scanner/characters.dart b/pkg/front_end/lib/src/fasta/scanner/characters.dart index 60fe4e16ef8..e9f1e6f9857 100644 --- a/pkg/front_end/lib/src/fasta/scanner/characters.dart +++ b/pkg/front_end/lib/src/fasta/scanner/characters.dart @@ -2,7 +2,7 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -library characters; +library fasta.scanner.characters; const int $EOF = 0; const int $STX = 2; diff --git a/pkg/front_end/lib/src/fasta/scanner/io.dart b/pkg/front_end/lib/src/fasta/scanner/io.dart index 94052cb6bc0..476c595a265 100644 --- a/pkg/front_end/lib/src/fasta/scanner/io.dart +++ b/pkg/front_end/lib/src/fasta/scanner/io.dart @@ -1,408 +1,46 @@ -// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file +// Copyright (c) 2016, 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. +// BSD-style license that can be found in the LICENSE.md file. -library source_file_provider; +library fasta.scanner.io; -import 'dart:async'; -import 'dart:convert'; -import 'dart:io'; -import 'dart:math' as math; -import 'dart:typed_data'; +import 'dart:async' show + Future; -import '../compiler.dart' as api show Diagnostic; -import '../compiler_new.dart' as api; -import '../compiler_new.dart'; -import 'colors.dart' as colors; -import 'dart2js.dart' show AbortLeg; -import 'filenames.dart'; -import 'io/source_file.dart'; -import 'util/uri_extras.dart'; +import 'dart:io' show + File, + RandomAccessFile; -abstract class SourceFileProvider implements CompilerInput { - bool isWindows = (Platform.operatingSystem == 'windows'); - Uri cwd = currentDirectory; - Map sourceFiles = {}; - int dartCharactersRead = 0; +import 'dart:typed_data' show + Uint8List; - Future readStringFromUri(Uri resourceUri) { - return readUtf8BytesFromUri(resourceUri).then(UTF8.decode); - } - - Future> readUtf8BytesFromUri(Uri resourceUri) { - if (resourceUri.scheme == 'file') { - return _readFromFile(resourceUri); - } else if (resourceUri.scheme == 'http' || resourceUri.scheme == 'https') { - return _readFromHttp(resourceUri); - } else { - throw new ArgumentError("Unknown scheme in uri '$resourceUri'"); - } - } - - Future> _readFromFile(Uri resourceUri) { - assert(resourceUri.scheme == 'file'); - List source; - try { - source = readAll(resourceUri.toFilePath()); - } on FileSystemException catch (ex) { - String message = ex.osError?.message; - String detail = message != null ? ' ($message)' : ''; - return new Future.error( - "Error reading '${relativizeUri(resourceUri)}' $detail"); - } - dartCharactersRead += source.length; - sourceFiles[resourceUri] = new CachingUtf8BytesSourceFile( - resourceUri, relativizeUri(resourceUri), source); - return new Future.value(source); - } - - Future> _readFromHttp(Uri resourceUri) { - assert(resourceUri.scheme == 'http'); - HttpClient client = new HttpClient(); - return client - .getUrl(resourceUri) - .then((HttpClientRequest request) => request.close()) - .then((HttpClientResponse response) { - if (response.statusCode != HttpStatus.OK) { - String msg = 'Failure getting $resourceUri: ' - '${response.statusCode} ${response.reasonPhrase}'; - throw msg; - } - return response.toList(); - }).then((List> splitContent) { - int totalLength = splitContent.fold(0, (int old, List list) { - return old + list.length; - }); - Uint8List result = new Uint8List(totalLength); - int offset = 0; - for (List contentPart in splitContent) { - result.setRange(offset, offset + contentPart.length, contentPart); - offset += contentPart.length; - } - dartCharactersRead += totalLength; - sourceFiles[resourceUri] = new CachingUtf8BytesSourceFile( - resourceUri, resourceUri.toString(), result); - return result; - }); - } - - // TODO(johnniwinther): Remove this when no longer needed for the old compiler - // API. - Future/* | String>*/ call(Uri resourceUri) => throw "unimplemented"; - - relativizeUri(Uri uri) => relativize(cwd, uri, isWindows); - - SourceFile getSourceFile(Uri resourceUri) { - return sourceFiles[resourceUri]; +List readBytesFromFileSync(Uri uri) { + RandomAccessFile file = new File.fromUri(uri).openSync(); + Uint8List list; + try { + int length = file.lengthSync(); + // +1 to have a 0 terminated list, see [Scanner]. + list = new Uint8List(length + 1); + file.readIntoSync(list, 0, length); + } finally { + file.closeSync(); } + return list; } -List readAll(String filename) { - var file = (new File(filename)).openSync(); - var length = file.lengthSync(); - // +1 to have a 0 terminated list, see [Scanner]. - var buffer = new Uint8List(length + 1); - file.readIntoSync(buffer, 0, length); - file.closeSync(); - return buffer; -} - -class CompilerSourceFileProvider extends SourceFileProvider { - // TODO(johnniwinther): Remove this when no longer needed for the old compiler - // API. - Future> call(Uri resourceUri) => readFromUri(resourceUri); - - @override - Future readFromUri(Uri uri) => readUtf8BytesFromUri(uri); -} - -class FormattingDiagnosticHandler implements CompilerDiagnostics { - final SourceFileProvider provider; - bool showWarnings = true; - bool showHints = true; - bool verbose = false; - bool isAborting = false; - bool enableColors = false; - bool throwOnError = false; - int throwOnErrorCount = 0; - api.Diagnostic lastKind = null; - int fatalCount = 0; - - final int FATAL = api.Diagnostic.CRASH.ordinal | api.Diagnostic.ERROR.ordinal; - final int INFO = - api.Diagnostic.INFO.ordinal | api.Diagnostic.VERBOSE_INFO.ordinal; - - FormattingDiagnosticHandler([SourceFileProvider provider]) - : this.provider = - (provider == null) ? new CompilerSourceFileProvider() : provider; - - void info(var message, [api.Diagnostic kind = api.Diagnostic.VERBOSE_INFO]) { - if (!verbose && kind == api.Diagnostic.VERBOSE_INFO) return; - if (enableColors) { - print('${colors.green("Info:")} $message'); - } else { - print('Info: $message'); - } - } - - /// Adds [kind] specific prefix to [message]. - String prefixMessage(String message, api.Diagnostic kind) { - switch (kind) { - case api.Diagnostic.ERROR: - return 'Error: $message'; - case api.Diagnostic.WARNING: - return 'Warning: $message'; - case api.Diagnostic.HINT: - return 'Hint: $message'; - case api.Diagnostic.CRASH: - return 'Internal Error: $message'; - case api.Diagnostic.INFO: - case api.Diagnostic.VERBOSE_INFO: - return 'Info: $message'; - } - throw 'Unexpected diagnostic kind: $kind (${kind.ordinal})'; - } - - @override - void report(var code, Uri uri, int begin, int end, String message, - api.Diagnostic kind) { - if (isAborting) return; - isAborting = (kind == api.Diagnostic.CRASH); - - bool fatal = (kind.ordinal & FATAL) != 0; - bool isInfo = (kind.ordinal & INFO) != 0; - if (isInfo && uri == null && kind != api.Diagnostic.INFO) { - info(message, kind); - return; - } - - message = prefixMessage(message, kind); - - // [lastKind] records the previous non-INFO kind we saw. - // This is used to suppress info about a warning when warnings are - // suppressed, and similar for hints. - if (kind != api.Diagnostic.INFO) { - lastKind = kind; - } - var color; - if (kind == api.Diagnostic.ERROR) { - color = colors.red; - } else if (kind == api.Diagnostic.WARNING) { - if (!showWarnings) return; - color = colors.magenta; - } else if (kind == api.Diagnostic.HINT) { - if (!showHints) return; - color = colors.cyan; - } else if (kind == api.Diagnostic.CRASH) { - color = colors.red; - } else if (kind == api.Diagnostic.INFO) { - if (lastKind == api.Diagnostic.WARNING && !showWarnings) return; - if (lastKind == api.Diagnostic.HINT && !showHints) return; - color = colors.green; - } else { - throw 'Unknown kind: $kind (${kind.ordinal})'; - } - if (!enableColors) { - color = (x) => x; - } - if (uri == null) { - print('${color(message)}'); - } else { - SourceFile file = provider.sourceFiles[uri]; - if (file != null) { - print(file.getLocationMessage(color(message), begin, end, - colorize: color)); - } else { - String position = end - begin > 0 ? '@$begin+${end - begin}' : ''; - print('${provider.relativizeUri(uri)}$position:\n' - '${color(message)}'); - } - } - if (fatal && ++fatalCount >= throwOnErrorCount && throwOnError) { - isAborting = true; - throw new AbortLeg(message); - } - } - - // TODO(johnniwinther): Remove this when no longer needed for the old compiler - // API. - void call(Uri uri, int begin, int end, String message, api.Diagnostic kind) { - return report(null, uri, begin, end, message, kind); - } -} - -typedef void MessageCallback(String message); - -class RandomAccessFileOutputProvider implements CompilerOutput { - final Uri out; - final Uri sourceMapOut; - final Uri resolutionOutput; - final MessageCallback onInfo; - final MessageCallback onFailure; - - int totalCharactersWritten = 0; - List allOutputFiles = new List(); - - RandomAccessFileOutputProvider(this.out, this.sourceMapOut, - {this.onInfo, this.onFailure, this.resolutionOutput}); - - static Uri computePrecompiledUri(Uri out) { - String extension = 'precompiled.js'; - String outPath = out.path; - if (outPath.endsWith('.js')) { - outPath = outPath.substring(0, outPath.length - 3); - return out.resolve('$outPath.$extension'); - } else { - return out.resolve(extension); - } - } - - EventSink call(String name, String extension) { - return createEventSink(name, extension); - } - - EventSink createEventSink(String name, String extension) { - Uri uri; - bool isPrimaryOutput = false; - // TODO (johnniwinther, sigurdm): Make a better interface for - // output-providers. - if (extension == "deferred_map") { - uri = out.resolve(name); - } else if (name == '') { - if (extension == 'js' || extension == 'dart') { - isPrimaryOutput = true; - uri = out; - } else if (extension == 'precompiled.js') { - uri = computePrecompiledUri(out); - onInfo("File ($uri) is compatible with header" - " \"Content-Security-Policy: script-src 'self'\""); - } else if (extension == 'js.map' || extension == 'dart.map') { - uri = sourceMapOut; - } else if (extension == 'info.json') { - String outName = out.path.substring(out.path.lastIndexOf('/') + 1); - uri = out.resolve('$outName.$extension'); - } else if (extension == 'data') { - if (resolutionOutput == null) { - onFailure('Serialization target unspecified.'); - } - uri = resolutionOutput; - } else { - onFailure('Unknown extension: $extension'); - } - } else { - uri = out.resolve('$name.$extension'); - } - - if (uri.scheme != 'file') { - onFailure('Unhandled scheme ${uri.scheme} in $uri.'); - } - - RandomAccessFile output; - try { - output = new File(uri.toFilePath()).openSync(mode: FileMode.WRITE); - } on FileSystemException catch (e) { - onFailure('$e'); - } - - allOutputFiles.add(relativize(currentDirectory, uri, Platform.isWindows)); - - int charactersWritten = 0; - - writeStringSync(String data) { - // Write the data in chunks of 8kb, otherwise we risk running OOM. - int chunkSize = 8 * 1024; - - int offset = 0; - while (offset < data.length) { - output.writeStringSync( - data.substring(offset, math.min(offset + chunkSize, data.length))); - offset += chunkSize; - } - charactersWritten += data.length; - } - - onDone() { - output.closeSync(); - if (isPrimaryOutput) { - totalCharactersWritten += charactersWritten; - } - } - - return new _EventSinkWrapper(writeStringSync, onDone); - } -} - -class _EventSinkWrapper extends EventSink { - var onAdd, onClose; - - _EventSinkWrapper(this.onAdd, this.onClose); - - void add(String data) => onAdd(data); - - void addError(error, [StackTrace stackTrace]) => throw error; - - void close() => onClose(); -} - -/// Adapter to integrate dart2js in bazel. -/// -/// To handle bazel's special layout: -/// -/// * We specify a .packages configuration file that expands packages to their -/// corresponding bazel location. This way there is no need to create a pub -/// cache prior to invoking dart2js. -/// -/// * We provide an implicit mapping that can make all urls relative to the -/// bazel root. -/// To the compiler, URIs look like: -/// file:///bazel-root/a/b/c.dart -/// -/// even though in the file system the file is located at: -/// file:///path/to/the/actual/bazel/root/a/b/c.dart -/// -/// This mapping serves two purposes: -/// - It makes compiler results independent of the machine layout, which -/// enables us to share results across bazel runs and across machines. -/// -/// - It hides the distinction between generated and source files. That way -/// we can use the standard package-resolution mechanism and ignore the -/// internals of how files are organized within bazel. -/// -/// When invoking the compiler, bazel will use `package:` and -/// `file:///bazel-root/` URIs to specify entrypoints. -/// -/// The mapping is specified using search paths relative to the current -/// directory. When this provider looks up a file, the bazel-root folder is -/// replaced by the first directory in the search path containing the file, if -/// any. For example, given the search path ".,bazel-bin/", and a URL -/// of the form `file:///bazel-root/a/b.dart`, this provider will check if the -/// file exists under "./a/b.dart", then check under "bazel-bin/a/b.dart". If -/// none of the paths matches, it will attempt to load the file from -/// `/bazel-root/a/b.dart` which will likely fail. -class BazelInputProvider extends SourceFileProvider { - final List dirs; - - BazelInputProvider(List searchPaths) - : dirs = searchPaths.map(_resolve).toList(); - - static _resolve(String path) => currentDirectory.resolve(path); - - @override - Future readFromUri(Uri uri) async { - var resolvedUri = uri; - var path = uri.path; - if (path.startsWith('/bazel-root')) { - path = path.substring('/bazel-root/'.length); - for (var dir in dirs) { - var file = dir.resolve(path); - if (await new File.fromUri(file).exists()) { - resolvedUri = file; - break; - } - } - } - var result = await readUtf8BytesFromUri(resolvedUri); - sourceFiles[uri] = sourceFiles[resolvedUri]; - return result; - } +Future> readBytesFromFile(Uri uri) async { + RandomAccessFile file = await new File.fromUri(uri).open(); + Uint8List list; + try { + int length = await file.length(); + // +1 to have a 0 terminated list, see [Scanner]. + list = new Uint8List(length + 1); + int read = await file.readInto(list); + if (read != length) { + throw "Error reading file: ${uri}"; + } + } finally { + await file.close(); + } + return list; } diff --git a/pkg/front_end/lib/src/fasta/scanner/keyword.dart b/pkg/front_end/lib/src/fasta/scanner/keyword.dart index 607c4e83ac9..2038c6b40a9 100644 --- a/pkg/front_end/lib/src/fasta/scanner/keyword.dart +++ b/pkg/front_end/lib/src/fasta/scanner/keyword.dart @@ -2,12 +2,18 @@ // 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. -library dart2js.tokens.keywords; +library fasta.scanner.keywords; -import '../util/characters.dart' as Characters show $a; -import 'precedence.dart' show PrecedenceInfo; -import 'precedence_constants.dart' as Precedence - show AS_INFO, IS_INFO, KEYWORD_INFO; +import 'characters.dart' show + $a; + +import 'precedence.dart' show + PrecedenceInfo; + +import 'precedence.dart' show + AS_INFO, + IS_INFO, + KEYWORD_INFO; /** * A keyword in the Dart programming language. @@ -49,10 +55,10 @@ class Keyword { // TODO(ahe): Don't think this is a reserved word. // See: http://dartbug.com/5579 - const Keyword("is", info: Precedence.IS_INFO), + const Keyword("is", info: IS_INFO), const Keyword("abstract", isBuiltIn: true), - const Keyword("as", info: Precedence.AS_INFO, isBuiltIn: true), + const Keyword("as", info: AS_INFO, isBuiltIn: true), const Keyword("covariant", isBuiltIn: true), const Keyword("dynamic", isBuiltIn: true), const Keyword("export", isBuiltIn: true), @@ -97,7 +103,7 @@ class Keyword { const Keyword(this.syntax, {this.isPseudo: false, this.isBuiltIn: false, - this.info: Precedence.KEYWORD_INFO}); + this.info: KEYWORD_INFO}); static Map computeKeywordMap() { Map result = new Map(); @@ -147,8 +153,8 @@ abstract class KeywordState { int c = strings[i].codeUnitAt(start); if (chunk != c) { if (chunkStart != -1) { - assert(result[chunk - Characters.$a] == null); - result[chunk - Characters.$a] = computeKeywordStateTable( + assert(result[chunk - $a] == null); + result[chunk - $a] = computeKeywordStateTable( start + 1, strings, chunkStart, i - chunkStart); } chunkStart = i; @@ -157,8 +163,8 @@ abstract class KeywordState { } } if (chunkStart != -1) { - assert(result[chunk - Characters.$a] == null); - result[chunk - Characters.$a] = computeKeywordStateTable( + assert(result[chunk - $a] == null); + result[chunk - $a] = computeKeywordStateTable( start + 1, strings, chunkStart, offset + length - chunkStart); } else { assert(length == 1); @@ -181,7 +187,7 @@ class ArrayKeywordState extends KeywordState { ArrayKeywordState(List this.table, String syntax) : super((syntax == null) ? null : Keyword.keywords[syntax]); - KeywordState next(int c) => table[c - Characters.$a]; + KeywordState next(int c) => table[c - $a]; String toString() { StringBuffer sb = new StringBuffer(); @@ -194,7 +200,7 @@ class ArrayKeywordState extends KeywordState { List foo = table; for (int i = 0; i < foo.length; i++) { if (foo[i] != null) { - sb.write("${new String.fromCharCodes([i + Characters.$a])}: " + sb.write("${new String.fromCharCodes([i + $a])}: " "${foo[i]}; "); } } diff --git a/pkg/front_end/lib/src/fasta/scanner/main.dart b/pkg/front_end/lib/src/fasta/scanner/main.dart new file mode 100644 index 00000000000..e95304b3815 --- /dev/null +++ b/pkg/front_end/lib/src/fasta/scanner/main.dart @@ -0,0 +1,36 @@ +// Copyright (c) 2016, 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.md file. + +library fasta.scanner.main; + +import 'io.dart' show + readBytesFromFileSync; + +import '../scanner.dart' show + scan; + +scanAll(Map> files) { + Stopwatch sw = new Stopwatch()..start(); + int byteCount = 0; + files.forEach((Uri uri, List bytes) { + scan(bytes); + byteCount += bytes.length - 1; + }); + sw.stop(); + print("Scanning files took: ${sw.elapsed}"); + print("Bytes/ms: ${byteCount/sw.elapsedMilliseconds}"); +} + +main(List arguments) { + Map> files = >{}; + Stopwatch sw = new Stopwatch()..start(); + for (String name in arguments) { + Uri uri = Uri.base.resolve(name); + List bytes = readBytesFromFileSync(uri); + files[uri] = bytes; + } + sw.stop(); + print("Reading files took: ${sw.elapsed}"); + scanAll(files); +} diff --git a/pkg/front_end/lib/src/fasta/scanner/precedence.dart b/pkg/front_end/lib/src/fasta/scanner/precedence.dart index 08475ec6754..d1a222b9481 100644 --- a/pkg/front_end/lib/src/fasta/scanner/precedence.dart +++ b/pkg/front_end/lib/src/fasta/scanner/precedence.dart @@ -2,11 +2,20 @@ // 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. -library dart2js.tokens.precedence.constants; +library fasta.scanner.precedence; -import 'precedence.dart' show PrecedenceInfo; import 'token_constants.dart'; +class PrecedenceInfo { + final String value; + final int precedence; + final int kind; + + const PrecedenceInfo(this.value, this.precedence, this.kind); + + toString() => 'PrecedenceInfo($value, $precedence, $kind)'; +} + // TODO(ahe): The following are not tokens in Dart. const PrecedenceInfo BACKPING_INFO = const PrecedenceInfo('`', 0, BACKPING_TOKEN); diff --git a/pkg/front_end/lib/src/fasta/scanner/recover.dart b/pkg/front_end/lib/src/fasta/scanner/recover.dart new file mode 100644 index 00000000000..de124f3cb05 --- /dev/null +++ b/pkg/front_end/lib/src/fasta/scanner/recover.dart @@ -0,0 +1,29 @@ +// Copyright (c) 2017, 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 licenset hat can be found in the LICENSE file. + +library fasta.scanner.recover; + +import 'token.dart' show + Token; + +/// Recover from errors in [tokens]. The original sources are provided as +/// [bytes]. [lineStarts] are the beginning character offsets of lines, and +/// must be updated if recovery is performed rewriting the original source +/// code. +Token defaultRecoveryStrategy( + List bytes, Token tokens, List lineStarts) { + // See [Parser.reportErrorToken](package:front_end/src/fasta/parser/src/parser.dart) for how + // it currently handles lexical errors. In addition, notice how the parser + // calls [handleInvalidExpression], [handleInvalidFunctionBody], and + // [handleInvalidTypeReference] to allow the listener to recover its internal + // state. See [package:compiler/src/parser/element_listener.dart] for an + // example of how these events are used. + // + // In addition, the scanner will attempt a bit of recovery when braces don't + // match up during brace grouping. See + // [ArrayBasedScanner.discardBeginGroupUntil](array_based_scanner.dart). For + // more details on brace grouping see + // [AbstractScanner.unmatchedBeginGroup](abstract_scanner.dart). + return tokens; +} diff --git a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart index 7e1f995d825..641a6786444 100644 --- a/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart +++ b/pkg/front_end/lib/src/fasta/scanner/string_scanner.dart @@ -2,12 +2,17 @@ // 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. -library dart2js.scanner.string; +library dart2js.scanner.string_scanner; -import '../io/source_file.dart' show SourceFile; -import '../tokens/precedence.dart' show PrecedenceInfo; -import '../tokens/token.dart' show StringToken, Token; -import 'array_based_scanner.dart' show ArrayBasedScanner; +import 'array_based_scanner.dart' show + ArrayBasedScanner; + +import 'precedence.dart' show + PrecedenceInfo; + +import 'token.dart' show + StringToken, + Token; /** * Scanner that reads from a String and creates tokens that points to @@ -20,22 +25,15 @@ class StringScanner extends ArrayBasedScanner { /** The current offset in [string]. */ int scanOffset = -1; - StringScanner(SourceFile file, {bool includeComments: false}) - : string = file.slowText(), - super(file, includeComments) { - ensureZeroTermination(); - } + StringScanner(String string, {bool includeComments: false}) + : string = ensureZeroTermination(string), + super(includeComments); - StringScanner.fromString(this.string, {bool includeComments: false}) - : super(null, includeComments) { - ensureZeroTermination(); - } - - void ensureZeroTermination() { - if (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) { - // TODO(lry): abort instead of copying the array, or warn? - string = string + '\x00'; - } + static String ensureZeroTermination(String string) { + return (string.isEmpty || string.codeUnitAt(string.length - 1) != 0) + // TODO(lry): abort instead of copying the array, or warn? + ? string + '\x00' + : string; } int advance() => string.codeUnitAt(++scanOffset); diff --git a/pkg/front_end/lib/src/fasta/scanner/testing/scanner_chain.dart b/pkg/front_end/lib/src/fasta/scanner/testing/scanner_chain.dart new file mode 100644 index 00000000000..138b8c4750d --- /dev/null +++ b/pkg/front_end/lib/src/fasta/scanner/testing/scanner_chain.dart @@ -0,0 +1,33 @@ +// Copyright (c) 2016, 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.md file. + +library fasta.scanner.testing.scanner_chain; + +import 'package:testing/testing.dart'; + +import 'package:front_end/src/fasta/scanner.dart'; + +import 'package:front_end/src/fasta/scanner/io.dart'; + +class Read extends Step, ChainContext> { + const Read(); + + String get name => "read"; + + Future>> run( + TestDescription input, ChainContext context) async { + return pass(await readBytesFromFile(input.uri)); + } +} + +class Scan extends Step, ScannerResult, ChainContext> { + const Scan(); + + String get name => "scan"; + + Future> run( + List bytes, ChainContext context) async { + return pass(scan(bytes)); + } +} diff --git a/pkg/front_end/lib/src/fasta/scanner/token.dart b/pkg/front_end/lib/src/fasta/scanner/token.dart index af31142ec0a..e1ba6b90141 100644 --- a/pkg/front_end/lib/src/fasta/scanner/token.dart +++ b/pkg/front_end/lib/src/fasta/scanner/token.dart @@ -2,22 +2,28 @@ // 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. -library dart2js.tokens; +library fasta.scanner.token; -import 'dart:collection' show HashSet; -import 'dart:convert' show UTF8; +import 'dart:collection' show + HashSet; -import '../common.dart'; -import '../util/util.dart' show computeHashCode; -import 'keyword.dart' show Keyword; -import 'precedence.dart' show PrecedenceInfo; -import 'precedence_constants.dart' as Precedence show BAD_INPUT_INFO; -import 'token_constants.dart' as Tokens show IDENTIFIER_TOKEN; +import 'dart:convert' show + UTF8; + +import 'keyword.dart' show + Keyword; + +import 'precedence.dart' show + BAD_INPUT_INFO, + PrecedenceInfo; + +import 'token_constants.dart' show + IDENTIFIER_TOKEN; /** * A token that doubles as a linked list. */ -abstract class Token implements Spannable { +abstract class Token { /** * The character offset of the start of this token within the source text. */ @@ -95,7 +101,7 @@ abstract class Token implements Spannable { * The number of characters parsed by this token. */ int get charCount { - if (info == Precedence.BAD_INPUT_INFO) { + if (info == BAD_INPUT_INFO) { // This is a token that wraps around an error message. Return 1 // instead of the size of the length of the error message. return 1; @@ -106,17 +112,6 @@ abstract class Token implements Spannable { /// The character offset of the end of this token within the source text. int get charEnd => charOffset + charCount; - - int get hashCode => computeHashCode(charOffset, info, value); -} - -/// A pair of tokens marking the beginning and the end of a span. Use for error -/// reporting. -class TokenPair implements Spannable { - final Token begin; - final Token end; - - TokenPair(this.begin, this.end); } /** @@ -172,10 +167,10 @@ class KeywordToken extends Token { abstract class ErrorToken extends Token { ErrorToken(int charOffset) : super(charOffset); - PrecedenceInfo get info => Precedence.BAD_INPUT_INFO; + PrecedenceInfo get info => BAD_INPUT_INFO; String get value { - throw new SpannableAssertionFailure(this, assertionMessage); + throw assertionMessage; } String get stringValue => null; @@ -307,7 +302,7 @@ class StringToken extends Token { /// See [Token.stringValue] for an explanation. String get stringValue => null; - bool isIdentifier() => identical(kind, Tokens.IDENTIFIER_TOKEN); + bool isIdentifier() => identical(kind, IDENTIFIER_TOKEN); String toString() => "StringToken($value)"; diff --git a/pkg/front_end/lib/src/fasta/scanner/token_constants.dart b/pkg/front_end/lib/src/fasta/scanner/token_constants.dart index c1078f0a4d1..b5501e4c06e 100644 --- a/pkg/front_end/lib/src/fasta/scanner/token_constants.dart +++ b/pkg/front_end/lib/src/fasta/scanner/token_constants.dart @@ -2,9 +2,9 @@ // 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. -library dart2js.tokens.constants; +library fasta.scanner.token_constants; -import '../util/characters.dart'; +import 'characters.dart'; const int EOF_TOKEN = 0; diff --git a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart index ea46e35457c..b0914d43609 100644 --- a/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart +++ b/pkg/front_end/lib/src/fasta/scanner/utf8_bytes_scanner.dart @@ -2,14 +2,21 @@ // 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. -library dart2js.scanner.utf8; +library fasta.scanner.utf8_bytes_scanner; -import 'dart:convert' show UNICODE_BOM_CHARACTER_RUNE, UTF8; +import 'dart:convert' show + UNICODE_BOM_CHARACTER_RUNE, + UTF8; -import '../io/source_file.dart' show SourceFile; -import '../tokens/precedence.dart' show PrecedenceInfo; -import '../tokens/token.dart' show StringToken, Token; -import 'array_based_scanner.dart' show ArrayBasedScanner; +import 'precedence.dart' show + PrecedenceInfo; + +import 'token.dart' show + StringToken, + Token; + +import 'array_based_scanner.dart' show + ArrayBasedScanner; /** * Scanner that reads from a UTF-8 encoded list of bytes and creates tokens @@ -76,29 +83,14 @@ class Utf8BytesScanner extends ArrayBasedScanner { * array whose last element is '0' to signal the end of the file. If this * is not the case, the entire array is copied before scanning. */ - Utf8BytesScanner(SourceFile file, {bool includeComments: false}) - : bytes = file.slowUtf8ZeroTerminatedBytes(), - super(file, includeComments) { + Utf8BytesScanner(this.bytes, {bool includeComments: false}) + : super(includeComments) { assert(bytes.last == 0); // Skip a leading BOM. - if (_containsBomAt(0)) byteOffset += 3; + if (containsBomAt(0)) byteOffset += 3; } - /** - * Creates a new Utf8BytesScanner from a list of UTF-8 bytes. - * - * The last element of the list is expected to be '0' to signal the end of - * the file. If this is not the case, the entire array is copied before - * scanning. - */ - Utf8BytesScanner.fromBytes(List zeroTerminatedBytes, - {bool includeComments: false}) - : this.bytes = zeroTerminatedBytes, - super(null, includeComments) { - assert(bytes.last == 0); - } - - bool _containsBomAt(int offset) { + bool containsBomAt(int offset) { const BOM_UTF8 = const [0xEF, 0xBB, 0xBF]; return offset + 3 < bytes.length && @@ -136,7 +128,7 @@ class Utf8BytesScanner extends ArrayBasedScanner { // The UTF-8 decoder discards leading BOM characters. // TODO(floitsch): don't just assume that removed characters were the // BOM. - assert(_containsBomAt(startOffset)); + assert(containsBomAt(startOffset)); codePoint = new String.fromCharCode(UNICODE_BOM_CHARACTER_RUNE); } if (codePoint.length == 1) { diff --git a/pkg/front_end/lib/src/fasta/util/link.dart b/pkg/front_end/lib/src/fasta/util/link.dart index 58d2cb98cf0..a8f1b653ef7 100644 --- a/pkg/front_end/lib/src/fasta/util/link.dart +++ b/pkg/front_end/lib/src/fasta/util/link.dart @@ -2,7 +2,13 @@ // 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. -part of dart2js.util; +library fasta.util.link; + +import 'link_implementation.dart' show + LinkBuilderImplementation, + LinkEntry, + LinkIterator, + MappedLinkIterable; class Link implements Iterable { T get head => throw new StateError("no elements"); diff --git a/pkg/front_end/lib/src/fasta/util/link_implementation.dart b/pkg/front_end/lib/src/fasta/util/link_implementation.dart index 186bfffd210..c2773bb2071 100644 --- a/pkg/front_end/lib/src/fasta/util/link_implementation.dart +++ b/pkg/front_end/lib/src/fasta/util/link_implementation.dart @@ -2,7 +2,14 @@ // 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. -part of util_implementation; +library fasta.util.link_implementation; + +import 'dart:collection' show + IterableBase; + +import 'link.dart' show + Link, + LinkBuilder; class LinkIterator implements Iterator { T _current; diff --git a/pkg/front_end/test/fasta/dart2js_test.dart b/pkg/front_end/test/fasta/dart2js_test.dart new file mode 100644 index 00000000000..42812a86ad8 --- /dev/null +++ b/pkg/front_end/test/fasta/dart2js_test.dart @@ -0,0 +1,48 @@ +// Copyright (c) 2017, 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.md file. + +library fasta.test.dart2js_test; + +import 'package:test_dart/test_configurations.dart' show + testConfigurations; + +import 'package:test_dart/test_options.dart' show + TestOptionsParser; + +import 'package:test_dart/test_suite.dart' show + TestUtils; + +const String arch = "-ax64"; + +const String mode = "-mrelease"; + +const String processes = "-j16"; + +const String dart2jsV8 = "-cdart2js -rd8"; + +const String common = + // --dart2js-batch is ignored unless set in the first configuration. + "--dart2js-batch --time -pcolor --report --failure-summary"; + +main(List arguments) { + if (arguments.join(" ") != "--run-tests") { + // Protect against being run from test.dart. + print("Usage: dart2js_test.dart --run-tests"); + return; + } + TestUtils.setDartDirUri(Uri.base); + List commandLines = [ + "--checked dart2js", + "$dart2jsV8 --exclude-suite=observatory_ui", + "$dart2jsV8 dart2js_extra dart2js_native", + ]; + List configurations = []; + for (String commandLine in commandLines) { + List arguments = [arch, mode, processes] + ..addAll("$common $commandLine".split(" ")); + TestOptionsParser optionsParser = new TestOptionsParser(); + configurations.addAll(optionsParser.parse(arguments)); + } + testConfigurations(configurations); +} diff --git a/pkg/front_end/test/fasta/parser/parser.status b/pkg/front_end/test/fasta/parser/parser.status new file mode 100644 index 00000000000..2b658c5c9b7 --- /dev/null +++ b/pkg/front_end/test/fasta/parser/parser.status @@ -0,0 +1,2134 @@ +# Copyright (c) 2016, 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.md file. + +tests/language/deep_nesting1_negative_test: Crash +tests/language/deep_nesting2_negative_test: Crash + +pkg/analyzer_cli/test/data/file_with_error: Fail +pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_test: Fail +pkg/dev_compiler/test/codegen/corelib/from_environment_const_type_undefined_test: Fail +pkg/dev_compiler/test/codegen/corelib/symbol_reserved_word_test: Fail +pkg/dev_compiler/test/codegen/destructuring: Fail +pkg/dev_compiler/test/codegen/language/abstract_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/application_negative_test: Fail +pkg/dev_compiler/test/codegen/language/argument_definition_test: Fail +pkg/dev_compiler/test/codegen/language/assign_instance_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/async_await_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/await_backwards_compatibility_test: Fail +pkg/dev_compiler/test/codegen/language/bad_constructor_test: Fail +pkg/dev_compiler/test/codegen/language/bad_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_initializer2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_named_constructor_negative_test: Fail +pkg/dev_compiler/test/codegen/language/black_listed_test: Fail +pkg/dev_compiler/test/codegen/language/body_less_constructor_wrong_arg_negative_test: Fail +pkg/dev_compiler/test/codegen/language/built_in_identifier_prefix_test: Fail +pkg/dev_compiler/test/codegen/language/built_in_identifier_test: Fail +pkg/dev_compiler/test/codegen/language/cascade_test: Fail +pkg/dev_compiler/test/codegen/language/class_cycle2_test: Fail +pkg/dev_compiler/test/codegen/language/class_keyword_test: Fail +pkg/dev_compiler/test/codegen/language/class_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/closure_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/compile_time_constant13_test: Fail +pkg/dev_compiler/test/codegen/language/const_counter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/const_native_factory_test: Fail +pkg/dev_compiler/test/codegen/language/const_optional_args_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_initializer_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_name_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_redirect1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_redirect2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_setter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/cyclic_typedef_test: Fail +pkg/dev_compiler/test/codegen/language/deferred_type_dependency_test: Fail +pkg/dev_compiler/test/codegen/language/duplicate_export_negative_test: Fail +pkg/dev_compiler/test/codegen/language/duplicate_interface_negative_test: Fail +pkg/dev_compiler/test/codegen/language/enum_is_keyword_test: Fail +pkg/dev_compiler/test/codegen/language/enum_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/export_ambiguous_main_negative_test: Fail +pkg/dev_compiler/test/codegen/language/extend_type_parameter2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/extend_type_parameter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/external_test: Fail +pkg/dev_compiler/test/codegen/language/factory2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/factory_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field3a_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field6a_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field_method4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/function_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/function_type_parameter2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/function_type_parameter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/get_set_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/getter_declaration_negative_test: Fail +pkg/dev_compiler/test/codegen/language/illegal_declaration_test: Fail +pkg/dev_compiler/test/codegen/language/import_combinators_negative_test: Fail +pkg/dev_compiler/test/codegen/language/inst_field_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_method2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface_cycle_test: Fail +pkg/dev_compiler/test/codegen/language/interface_static_non_final_fields_negative_test: Fail +pkg/dev_compiler/test/codegen/language/keyword_type_expression_test: Fail +pkg/dev_compiler/test/codegen/language/label2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/library_negative_test: Fail +pkg/dev_compiler/test/codegen/language/list_literal2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/list_literal_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/literal_unary_plus_test: Fail +pkg/dev_compiler/test/codegen/language/main_test: Fail +pkg/dev_compiler/test/codegen/language/malformed_inheritance_test: Fail +pkg/dev_compiler/test/codegen/language/malformed_test: Fail +pkg/dev_compiler/test/codegen/language/map_literal2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/metadata_test: Fail +pkg/dev_compiler/test/codegen/language/method_override2_test: Fail +pkg/dev_compiler/test/codegen/language/mixin_forwarding_constructor4_test: Fail +pkg/dev_compiler/test/codegen/language/mixin_illegal_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/mixin_invalid_inheritance1_test: Fail +pkg/dev_compiler/test/codegen/language/named_constructor_test: Fail +pkg/dev_compiler/test/codegen/language/named_parameters_aggregated_test: Fail +pkg/dev_compiler/test/codegen/language/no_such_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/non_const_super_negative_test: Fail +pkg/dev_compiler/test/codegen/language/null_test: Fail +pkg/dev_compiler/test/codegen/language/number_identifier_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_inheritance_generic_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_default_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix10_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix11_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix12_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix13_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix15_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix7_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix8_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/regress_23051_test: Fail +pkg/dev_compiler/test/codegen/language/script1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/script2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/setter_declaration2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/setter_declaration_negative_test: Fail +pkg/dev_compiler/test/codegen/language/source_self_negative_test: Fail +pkg/dev_compiler/test/codegen/language/static_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/static_parameter_test: Fail +pkg/dev_compiler/test/codegen/language/static_top_level_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation9_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch7_negative_test: Fail +pkg/dev_compiler/test/codegen/language/sync_generator2_test: Fail +pkg/dev_compiler/test/codegen/language/syntax_test: Fail +pkg/dev_compiler/test/codegen/language/tearoff_basic_test: Fail +pkg/dev_compiler/test/codegen/language/tearoff_constructor_basic_test: Fail +pkg/dev_compiler/test/codegen/language/try_catch_on_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/try_catch_syntax_test: Fail +pkg/dev_compiler/test/codegen/language/type_variable_bounds2_test: Fail +pkg/dev_compiler/test/codegen/language/type_variable_static_context_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unbalanced_brace_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_in_factory_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_top_level_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_top_level_var_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unsigned_right_shift_test: Fail +pkg/dev_compiler/test/codegen/language/variable_declaration_metadata_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/metadata_allowed_values_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/metadata_scope_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/mirror_in_static_init_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/other_declarations_location_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/syntax_error_test: Fail +pkg/dev_compiler/test/codegen/lib/mirrors/typevariable_mirror_metadata_test: Fail +pkg/dev_compiler/tool/input_sdk/lib/html/dart2js/html_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/lib/indexed_db/dart2js/indexed_db_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/lib/svg/dart2js/svg_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/lib/web_audio/dart2js/web_audio_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/lib/web_gl/dart2js/web_gl_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/lib/web_sql/dart2js/web_sql_dart2js: Fail +pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/types: Fail +pkg/dev_compiler/tool/input_sdk/private/native_typed_data: Fail +pkg/testing/test/dart_sdk_negative_test: Fail +runtime/bin/builtin: Fail +runtime/bin/common_patch: Fail +runtime/bin/directory_patch: Fail +runtime/bin/eventhandler_patch: Fail +runtime/bin/file_patch: Fail +runtime/bin/file_system_entity_patch: Fail +runtime/bin/filter_patch: Fail +runtime/bin/io_service_patch: Fail +runtime/bin/platform_patch: Fail +runtime/bin/process_patch: Fail +runtime/bin/secure_socket_patch: Fail +runtime/bin/socket_patch: Fail +runtime/bin/stdio_patch: Fail +runtime/bin/vmservice/server: Fail +runtime/bin/vmservice/vmservice_io: Fail +runtime/lib/array: Fail +runtime/lib/async_patch: Fail +runtime/lib/bigint: Fail +runtime/lib/bool_patch: Fail +runtime/lib/class_id: Fail +runtime/lib/compact_hash: Fail +runtime/lib/convert_patch: Fail +runtime/lib/core_patch: Fail +runtime/lib/date_patch: Fail +runtime/lib/developer: Fail +runtime/lib/double: Fail +runtime/lib/double_patch: Fail +runtime/lib/errors_patch: Fail +runtime/lib/function: Fail +runtime/lib/function_patch: Fail +runtime/lib/growable_array: Fail +runtime/lib/identical_patch: Fail +runtime/lib/integers: Fail +runtime/lib/integers_patch: Fail +runtime/lib/internal_patch: Fail +runtime/lib/isolate_patch: Fail +runtime/lib/lib_prefix: Fail +runtime/lib/math_patch: Fail +runtime/lib/mirror_reference: Fail +runtime/lib/mirrors_impl: Fail +runtime/lib/mirrors_patch: Fail +runtime/lib/object_patch: Fail +runtime/lib/profiler: Fail +runtime/lib/regexp_patch: Fail +runtime/lib/stopwatch_patch: Fail +runtime/lib/string_buffer_patch: Fail +runtime/lib/string_patch: Fail +runtime/lib/timeline: Fail +runtime/lib/type_patch: Fail +runtime/lib/typed_data: Fail +runtime/lib/typed_data_patch: Fail +runtime/lib/uri_patch: Fail +runtime/lib/vmservice_patch: Fail +runtime/lib/weak_property: Fail +runtime/observatory/tests/service/developer_extension_test: Fail +runtime/observatory/tests/service/get_isolate_after_language_error_test: Fail +samples/sample_extension/sample_asynchronous_extension: Fail +samples/sample_extension/sample_synchronous_extension: Fail +sdk/lib/_blink/dartium/_blink_dartium: Fail +sdk/lib/_internal/js_runtime/lib/native_typed_data: Fail +sdk/lib/html/dart2js/html_dart2js: Fail +sdk/lib/indexed_db/dart2js/indexed_db_dart2js: Fail +sdk/lib/js/dartium/js_dartium: Fail +sdk/lib/svg/dart2js/svg_dart2js: Fail +sdk/lib/web_audio/dart2js/web_audio_dart2js: Fail +sdk/lib/web_gl/dart2js/web_gl_dart2js: Fail +sdk/lib/web_sql/dart2js/web_sql_dart2js: Fail +tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t02: Fail +tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t04: Fail +tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t05: Fail +tests/co19/src/Language/Classes/Constructors/Constant_Constructors/syntax_t06: Fail +tests/co19/src/Language/Classes/Constructors/Factories/redirecting_constructor_t02: Fail +tests/co19/src/Language/Classes/Constructors/Factories/redirecting_constructor_t03: Fail +tests/co19/src/Language/Classes/Constructors/Factories/syntax_t03: Fail +tests/co19/src/Language/Classes/Constructors/Factories/syntax_t04: Fail +tests/co19/src/Language/Classes/Constructors/Factories/syntax_t05: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t02: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t03: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t04: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t05: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t07: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t09: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t10: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t11: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/initializers_t16: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/syntax_t03: Fail +tests/co19/src/Language/Classes/Constructors/Generative_Constructors/syntax_t06: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t02: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t03: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t04: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t05: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t06: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t07: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t08: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t09: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t10: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t11: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t12: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t13: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t14: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t15: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t16: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t17: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t18: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t19: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t20: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t21: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/allowed_names_t22: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/optional_parameter_t05: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/optional_parameter_t07: Fail +tests/co19/src/Language/Classes/Instance_Methods/Operators/syntax_t02: Fail +tests/co19/src/Language/Classes/Setters/name_t08: Fail +tests/co19/src/Language/Classes/Setters/name_t09: Fail +tests/co19/src/Language/Classes/Setters/name_t10: Fail +tests/co19/src/Language/Classes/Setters/name_t11: Fail +tests/co19/src/Language/Classes/Setters/name_t12: Fail +tests/co19/src/Language/Classes/Setters/name_t13: Fail +tests/co19/src/Language/Classes/Setters/name_t14: Fail +tests/co19/src/Language/Classes/Setters/name_t15: Fail +tests/co19/src/Language/Classes/Superclasses/wrong_superclass_t06: Fail +tests/co19/src/Language/Classes/Superinterfaces/syntax_t02: Fail +tests/co19/src/Language/Classes/declarations_t12: Fail +tests/co19/src/Language/Classes/declarations_t13: Fail +tests/co19/src/Language/Classes/declarations_t14: Fail +tests/co19/src/Language/Classes/declarations_t15: Fail +tests/co19/src/Language/Classes/declarations_t16: Fail +tests/co19/src/Language/Classes/declarations_t17: Fail +tests/co19/src/Language/Classes/declarations_t18: Fail +tests/co19/src/Language/Classes/declarations_t19: Fail +tests/co19/src/Language/Classes/declarations_t20: Fail +tests/co19/src/Language/Classes/declarations_t21: Fail +tests/co19/src/Language/Classes/declarations_t22: Fail +tests/co19/src/Language/Classes/declarations_t23: Fail +tests/co19/src/Language/Classes/declarations_t24: Fail +tests/co19/src/Language/Classes/declarations_t25: Fail +tests/co19/src/Language/Classes/declarations_t26: Fail +tests/co19/src/Language/Classes/declarations_t27: Fail +tests/co19/src/Language/Classes/declarations_t28: Fail +tests/co19/src/Language/Classes/declarations_t29: Fail +tests/co19/src/Language/Classes/declarations_t30: Fail +tests/co19/src/Language/Classes/declarations_t31: Fail +tests/co19/src/Language/Classes/declarations_t32: Fail +tests/co19/src/Language/Classes/definition_t02: Fail +tests/co19/src/Language/Classes/definition_t03: Fail +tests/co19/src/Language/Classes/definition_t04: Fail +tests/co19/src/Language/Classes/definition_t05: Fail +tests/co19/src/Language/Classes/definition_t06: Fail +tests/co19/src/Language/Classes/definition_t07: Fail +tests/co19/src/Language/Classes/definition_t08: Fail +tests/co19/src/Language/Classes/definition_t09: Fail +tests/co19/src/Language/Classes/definition_t10: Fail +tests/co19/src/Language/Classes/definition_t11: Fail +tests/co19/src/Language/Classes/definition_t12: Fail +tests/co19/src/Language/Classes/definition_t13: Fail +tests/co19/src/Language/Classes/definition_t14: Fail +tests/co19/src/Language/Classes/definition_t15: Fail +tests/co19/src/Language/Classes/definition_t16: Fail +tests/co19/src/Language/Classes/definition_t17: Fail +tests/co19/src/Language/Classes/definition_t18: Fail +tests/co19/src/Language/Classes/definition_t19: Fail +tests/co19/src/Language/Classes/definition_t21: Fail +tests/co19/src/Language/Classes/definition_t22: Fail +tests/co19/src/Language/Classes/member_definition_t01: Fail +tests/co19/src/Language/Classes/member_definition_t02: Fail +tests/co19/src/Language/Classes/member_definition_t04: Fail +tests/co19/src/Language/Classes/member_definition_t05: Fail +tests/co19/src/Language/Classes/member_definition_t06: Fail +tests/co19/src/Language/Classes/member_definition_t07: Fail +tests/co19/src/Language/Classes/member_definition_t08: Fail +tests/co19/src/Language/Classes/member_definition_t09: Fail +tests/co19/src/Language/Classes/member_definition_t10: Fail +tests/co19/src/Language/Classes/member_definition_t11: Fail +tests/co19/src/Language/Classes/member_definition_t12: Fail +tests/co19/src/Language/Classes/member_definition_t13: Fail +tests/co19/src/Language/Classes/member_definition_t14: Fail +tests/co19/src/Language/Classes/member_definition_t15: Fail +tests/co19/src/Language/Classes/member_definition_t16: Fail +tests/co19/src/Language/Classes/member_definition_t17: Fail +tests/co19/src/Language/Classes/member_definition_t19: Fail +tests/co19/src/Language/Classes/member_definition_t21: Fail +tests/co19/src/Language/Classes/member_definition_t22: Fail +tests/co19/src/Language/Classes/member_definition_t24: Fail +tests/co19/src/Language/Classes/member_definition_t25: Fail +tests/co19/src/Language/Classes/method_definition_t02: Fail +tests/co19/src/Language/Classes/method_definition_t07: Fail +tests/co19/src/Language/Classes/method_definition_t08: Fail +tests/co19/src/Language/Classes/method_definition_t09: Fail +tests/co19/src/Language/Classes/mixins_t02: Fail +tests/co19/src/Language/Enums/syntax_t04: Fail +tests/co19/src/Language/Enums/syntax_t05: Fail +tests/co19/src/Language/Enums/syntax_t06: Fail +tests/co19/src/Language/Enums/syntax_t07: Fail +tests/co19/src/Language/Enums/syntax_t08: Fail +tests/co19/src/Language/Enums/syntax_t09: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_lib: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_lib_p2: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_t01: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_t02: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_t03: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_t04: Fail +tests/co19/src/Language/Errors_and_Warnings/compile_error_t05: Fail +tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t02: Fail +tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Additive_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t10: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t11: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t12: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t13: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t14: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t15: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t16: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t18: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t19: Fail +tests/co19/src/Language/Expressions/Assignable_Expressions/syntax_t20: Fail +tests/co19/src/Language/Expressions/Await_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Await_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Await_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t07: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t08: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t09: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t10: Fail +tests/co19/src/Language/Expressions/Bitwise_Expressions/syntax_t11: Fail +tests/co19/src/Language/Expressions/Booleans/boolean_literals_t01: Fail +tests/co19/src/Language/Expressions/Booleans/boolean_literals_t02: Fail +tests/co19/src/Language/Expressions/Booleans/boolean_literals_t03: Fail +tests/co19/src/Language/Expressions/Conditional/syntax_t05: Fail +tests/co19/src/Language/Expressions/Conditional/syntax_t06: Fail +tests/co19/src/Language/Expressions/Conditional/syntax_t07: Fail +tests/co19/src/Language/Expressions/Conditional/syntax_t08: Fail +tests/co19/src/Language/Expressions/Conditional/syntax_t09: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t03: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t04: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t07: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t08: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t11: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t12: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t15: Fail +tests/co19/src/Language/Expressions/Equality/syntax_t16: Fail +tests/co19/src/Language/Expressions/Function_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Function_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Function_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Function_Invocation/Actual_Argument_List_Evaluation/syntax_t04: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t01: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t03: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t04: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t11: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t12: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t13: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t14: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t15: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t16: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t17: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t18: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t19: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t20: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t21: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t22: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t23: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t24: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t25: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t26: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t27: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t28: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t29: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t30: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t31: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t32: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t33: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t34: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t38: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t39: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t40: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t41: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t42: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t43: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t44: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t45: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t46: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t47: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t48: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t49: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t50: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t51: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_identifier_t52: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t02: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t04: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t05: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t06: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t07: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t08: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t09: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t10: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t11: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t13: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t16: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t17: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t18: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t21: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t22: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t23: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t24: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t25: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t26: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t27: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t28: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t29: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t30: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t31: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/built_in_not_dynamic_t32: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_built_in_t01: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t02: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t04: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t05: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t06: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t07: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t08: Fail +tests/co19/src/Language/Expressions/Identifier_Reference/syntax_t09: Fail +tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t07: Fail +tests/co19/src/Language/Expressions/If_null_Expressions/syntax_t08: Fail +tests/co19/src/Language/Expressions/Instance_Creation/Const/syntax_t03: Fail +tests/co19/src/Language/Expressions/Instance_Creation/Const/syntax_t04: Fail +tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t02: Fail +tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t03: Fail +tests/co19/src/Language/Expressions/Instance_Creation/New/syntax_t05: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t02: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t03: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t04: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t05: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t06: Fail +tests/co19/src/Language/Expressions/Lists/syntax_t07: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t07: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t08: Fail +tests/co19/src/Language/Expressions/Logical_Boolean_Expressions/syntax_t09: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t03: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t04: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t05: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t06: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t07: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t08: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t09: Fail +tests/co19/src/Language/Expressions/Maps/syntax_t10: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t02: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t03: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t04: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t05: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t06: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t07: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t08: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t09: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t10: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t11: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t12: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t13: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t14: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t15: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t17: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Cascaded_Invocations/syntax_t18: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t04: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Ordinary_Invocation/syntax_t09: Fail +tests/co19/src/Language/Expressions/Method_Invocation/Super_Invocation/syntax_t04: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t02: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t07: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t08: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t09: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t18: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t19: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t20: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t21: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t22: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t23: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t24: Fail +tests/co19/src/Language/Expressions/Multiplicative_Expressions/syntax_t25: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t16: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t17: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t18: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t21: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t22: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t23: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t24: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t25: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t26: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t27: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t29: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t30: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t31: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t32: Fail +tests/co19/src/Language/Expressions/Numbers/syntax_t33: Fail +tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t09: Fail +tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t10: Fail +tests/co19/src/Language/Expressions/Postfix_Expressions/syntax_t11: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/identical_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/named_parameters_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Closurization/positional_parameters_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/deferred_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malbounded_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/malformed_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/no_such_method_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/not_class_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Anonymous_Constructor_Extraction/static_type_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/class_object_member_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/expression_evaluation_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/getter_lookup_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/method_lookup_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/no_accessible_member_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/setter_lookup_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Closurization/static_type_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_failed_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/getter_lookup_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/method_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_failed_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/setter_lookup_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_type_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/General_Super_Property_Extraction/static_warning_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Getter_Access_and_Method_Extraction/expression_evaluation_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/identical_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/named_parameters_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Closurization/positional_parameters_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/deferred_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malbounded_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/malformed_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/no_such_method_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/not_class_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Named_Constructor_Extraction/static_type_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/getter_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_named_params_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_closurization_positional_params_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/method_identical_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_access_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_list_assignment_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t10: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t11: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t12: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t13: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t14: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t15: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t16: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_t17: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/operator_closurization_unary_bitwise_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Ordinary_Member_Closurization/setter_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/getter_closurization_t10: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_closurization_named_params_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_closurization_named_params_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_closurization_positional_params_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_closurization_positional_params_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/method_identical_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_list_access_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_list_assignment_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t10: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t11: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t12: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t13: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t14: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t15: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t16: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_t17: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/operator_closurization_unary_bitwise_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t01: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t02: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t03: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t04: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t05: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t06: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t07: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t08: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t09: Fail +tests/co19/src/Language/Expressions/Property_Extraction/Super_Closurization/setter_closurization_t10: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t02: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t03: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t04: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t05: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t06: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t07: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t08: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t09: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t10: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t11: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t12: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t13: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t14: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t15: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t16: Fail +tests/co19/src/Language/Expressions/Relational_Expressions/syntax_t17: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t02: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t03: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t04: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t05: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t06: Fail +tests/co19/src/Language/Expressions/Shift/syntax_t07: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t02: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t03: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t08: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t09: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t10: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t11: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t14: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t15: Fail +tests/co19/src/Language/Expressions/Strings/String_Interpolation/syntax_t16: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t02: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t03: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t04: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t05: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t06: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t07: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t08: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t09: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t10: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t11: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t12: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t13: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t14: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t15: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t16: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t17: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t18: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t19: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t20: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t21: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t22: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t23: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t24: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t25: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t26: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t27: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t28: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t29: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t30: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t31: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t32: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t33: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t34: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t36: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t38: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t40: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t42: Fail +tests/co19/src/Language/Expressions/Strings/multi_line_t44: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t02: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t03: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t04: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t05: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t06: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t07: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t10: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t11: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t12: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t13: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t14: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t15: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t16: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t17: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t18: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t19: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t20: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t21: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t22: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t23: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t24: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t25: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t26: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t27: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t28: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t29: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t30: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t31: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t32: Fail +tests/co19/src/Language/Expressions/Strings/string_literal_t33: Fail +tests/co19/src/Language/Expressions/This/definition_t01: Fail +tests/co19/src/Language/Expressions/This/definition_t02: Fail +tests/co19/src/Language/Expressions/This/definition_t03: Fail +tests/co19/src/Language/Expressions/This/definition_t04: Fail +tests/co19/src/Language/Expressions/This/placement_t02: Fail +tests/co19/src/Language/Expressions/Type_Cast/syntax_t02: Fail +tests/co19/src/Language/Expressions/Type_Cast/syntax_t03: Fail +tests/co19/src/Language/Expressions/Type_Cast/syntax_t05: Fail +tests/co19/src/Language/Expressions/Type_Cast/syntax_t06: Fail +tests/co19/src/Language/Expressions/Type_Test/syntax_t03: Fail +tests/co19/src/Language/Expressions/Type_Test/syntax_t05: Fail +tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t24: Fail +tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t25: Fail +tests/co19/src/Language/Expressions/Unary_Expressions/syntax_t26: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t04: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t05: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t08: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t09: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t12: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t13: Fail +tests/co19/src/Language/Functions/Formal_Parameters/Optional_Formals/syntax_t15: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t02: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t03: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t06: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t07: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t08: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t09: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t10: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t13: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t14: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t15: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t16: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t17: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t20: Fail +tests/co19/src/Language/Functions/Formal_Parameters/syntax_t21: Fail +tests/co19/src/Language/Functions/Function_Declarations/static_preface_t01: Fail +tests/co19/src/Language/Functions/Function_Declarations/static_preface_t02: Fail +tests/co19/src/Language/Functions/syntax_t06: Fail +tests/co19/src/Language/Functions/syntax_t07: Fail +tests/co19/src/Language/Functions/syntax_t08: Fail +tests/co19/src/Language/Functions/syntax_t09: Fail +tests/co19/src/Language/Functions/syntax_t10: Fail +tests/co19/src/Language/Functions/syntax_t12: Fail +tests/co19/src/Language/Functions/syntax_t13: Fail +tests/co19/src/Language/Functions/syntax_t14: Fail +tests/co19/src/Language/Functions/syntax_t15: Fail +tests/co19/src/Language/Functions/syntax_t16: Fail +tests/co19/src/Language/Functions/syntax_t17: Fail +tests/co19/src/Language/Functions/syntax_t18: Fail +tests/co19/src/Language/Functions/syntax_t19: Fail +tests/co19/src/Language/Functions/syntax_t20: Fail +tests/co19/src/Language/Functions/syntax_t21: Fail +tests/co19/src/Language/Functions/syntax_t23: Fail +tests/co19/src/Language/Functions/syntax_t24: Fail +tests/co19/src/Language/Functions/syntax_t25: Fail +tests/co19/src/Language/Functions/syntax_t28: Fail +tests/co19/src/Language/Functions/syntax_t29: Fail +tests/co19/src/Language/Functions/syntax_t30: Fail +tests/co19/src/Language/Functions/syntax_t32: Fail +tests/co19/src/Language/Functions/syntax_t33: Fail +tests/co19/src/Language/Functions/syntax_t34: Fail +tests/co19/src/Language/Functions/syntax_t35: Fail +tests/co19/src/Language/Generics/syntax_t05: Fail +tests/co19/src/Language/Generics/syntax_t06: Fail +tests/co19/src/Language/Generics/syntax_t07: Fail +tests/co19/src/Language/Generics/syntax_t08: Fail +tests/co19/src/Language/Generics/syntax_t10: Fail +tests/co19/src/Language/Generics/syntax_t11: Fail +tests/co19/src/Language/Generics/syntax_t12: Fail +tests/co19/src/Language/Generics/syntax_t13: Fail +tests/co19/src/Language/Generics/syntax_t14: Fail +tests/co19/src/Language/Generics/syntax_t15: Fail +tests/co19/src/Language/Generics/syntax_t17: Fail +tests/co19/src/Language/Interfaces/Superinterfaces/definition_t05: Fail +tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t01_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t04_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t05_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/Exports/syntax_t06_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/namespace_changes_t07: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/namespace_changes_t08: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t01: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t02: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t03: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t04: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t05: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t06: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t07: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t08: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t09: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t10: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t11: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t12: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t13: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t14: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t16: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t17: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t18: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t19: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t20: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t21: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t22: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t23: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t24: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t27: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t28: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t29: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t30: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t31: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t32: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t33: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t34: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t39: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t40: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t42: Fail +tests/co19/src/Language/Libraries_and_Scripts/Imports/syntax_t43: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/part_4: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/part_6: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/part_7: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/part_8: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t02: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t03: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t04: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t05: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t07: Fail +tests/co19/src/Language/Libraries_and_Scripts/Parts/syntax_t08: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t01: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t02: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t03: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t04: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t09: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/syntax_t13: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t02: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t03: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t04: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t05: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t06: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t07: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t08: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t09: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t10: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t11: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t12: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t13: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t14: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t15: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t16: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t17: Fail +tests/co19/src/Language/Libraries_and_Scripts/Scripts/top_level_syntax_t18: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t15_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t16_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t17_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t18_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t19_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t20_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t21_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t22_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t23_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t24_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t25_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t26_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t27_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t28: Fail +tests/co19/src/Language/Libraries_and_Scripts/definition_syntax_t29_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t02_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t03_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t04_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t05_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t06_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t07_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t08_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t09_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t10_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t11_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t12_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t13_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t14_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t15_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t16_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t17_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t18_lib: Fail +tests/co19/src/Language/Libraries_and_Scripts/top_level_syntax_t19_lib: Fail +tests/co19/src/Language/Metadata/before_type_param_t01: Fail +tests/co19/src/Language/Metadata/compilation_t05: Fail +tests/co19/src/Language/Metadata/compilation_t06: Fail +tests/co19/src/Language/Metadata/compilation_t07: Fail +tests/co19/src/Language/Metadata/syntax_t04: Fail +tests/co19/src/Language/Metadata/syntax_t05: Fail +tests/co19/src/Language/Metadata/syntax_t06: Fail +tests/co19/src/Language/Metadata/syntax_t07: Fail +tests/co19/src/Language/Metadata/syntax_t08: Fail +tests/co19/src/Language/Mixins/Mixin_Application/deferred_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/documentation_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/multi_line_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Comments/single_line_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/assert_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/break_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/case_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/catch_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/class_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/const_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/continue_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/default_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/do_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/else_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/enum_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/extends_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/false_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/final_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/finally_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/for_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/if_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/in_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/is_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/new_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/null_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/rethrow_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/return_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/super_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/switch_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/this_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/throw_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/true_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/try_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/var_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/void_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/while_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/whitespace_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/whitespace_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_lib: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t06: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t10: Fail +tests/co19/src/Language/Reference/Lexical_Rules/Reserved_Words/with_t11: Fail +tests/co19/src/Language/Reference/Lexical_Rules/unicode_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t01: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t02: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t03: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t04: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t05: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t07: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t08: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t09: Fail +tests/co19/src/Language/Reference/Lexical_Rules/whitespace_t11: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t02: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t03: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_07_equality_t05: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t02: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t03: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t05: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t06: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t08: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t09: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t11: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t12: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t14: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t16: Fail +tests/co19/src/Language/Reference/Operator_Precedence/precedence_08_relational_t18: Fail +tests/co19/src/Language/Statements/Assert/syntax_t01: Fail +tests/co19/src/Language/Statements/Assert/syntax_t02: Fail +tests/co19/src/Language/Statements/Assert/syntax_t03: Fail +tests/co19/src/Language/Statements/Assert/syntax_t05: Fail +tests/co19/src/Language/Statements/Blocks/execution_t04: Fail +tests/co19/src/Language/Statements/Blocks/execution_t05: Fail +tests/co19/src/Language/Statements/Break/syntax_t01: Fail +tests/co19/src/Language/Statements/Continue/syntax_t01: Fail +tests/co19/src/Language/Statements/Continue/syntax_t02: Fail +tests/co19/src/Language/Statements/Do/syntax_t01: Fail +tests/co19/src/Language/Statements/Do/syntax_t02: Fail +tests/co19/src/Language/Statements/Do/syntax_t03: Fail +tests/co19/src/Language/Statements/Do/syntax_t04: Fail +tests/co19/src/Language/Statements/Do/syntax_t05: Fail +tests/co19/src/Language/Statements/Do/syntax_t06: Fail +tests/co19/src/Language/Statements/Do/syntax_t07: Fail +tests/co19/src/Language/Statements/Expression_Statements/syntax_t02: Fail +tests/co19/src/Language/Statements/Expression_Statements/syntax_t07: Fail +tests/co19/src/Language/Statements/Expression_Statements/syntax_t12: Fail +tests/co19/src/Language/Statements/Expression_Statements/syntax_t13: Fail +tests/co19/src/Language/Statements/For/Asynchronous_For_in/syntax_t01: Fail +tests/co19/src/Language/Statements/For/Asynchronous_For_in/syntax_t03: Fail +tests/co19/src/Language/Statements/For/syntax_t01: Fail +tests/co19/src/Language/Statements/For/syntax_t02: Fail +tests/co19/src/Language/Statements/For/syntax_t03: Fail +tests/co19/src/Language/Statements/For/syntax_t04: Fail +tests/co19/src/Language/Statements/For/syntax_t05: Fail +tests/co19/src/Language/Statements/For/syntax_t06: Fail +tests/co19/src/Language/Statements/For/syntax_t08: Fail +tests/co19/src/Language/Statements/For/syntax_t10: Fail +tests/co19/src/Language/Statements/For/syntax_t14: Fail +tests/co19/src/Language/Statements/For/syntax_t15: Fail +tests/co19/src/Language/Statements/For/syntax_t17: Fail +tests/co19/src/Language/Statements/If/syntax_t01: Fail +tests/co19/src/Language/Statements/If/syntax_t02: Fail +tests/co19/src/Language/Statements/If/syntax_t03: Fail +tests/co19/src/Language/Statements/If/syntax_t04: Fail +tests/co19/src/Language/Statements/If/syntax_t05: Fail +tests/co19/src/Language/Statements/If/syntax_t06: Fail +tests/co19/src/Language/Statements/If/syntax_t07: Fail +tests/co19/src/Language/Statements/If/syntax_t08: Fail +tests/co19/src/Language/Statements/Labels/scope_t03: Fail +tests/co19/src/Language/Statements/Labels/syntax_t02: Fail +tests/co19/src/Language/Statements/Labels/syntax_t04: Fail +tests/co19/src/Language/Statements/Labels/syntax_t06: Fail +tests/co19/src/Language/Statements/Labels/syntax_t07: Fail +tests/co19/src/Language/Statements/Labels/syntax_t08: Fail +tests/co19/src/Language/Statements/Labels/syntax_t09: Fail +tests/co19/src/Language/Statements/Local_Function_Declaration/syntax_t02: Fail +tests/co19/src/Language/Statements/Local_Function_Declaration/syntax_t03: Fail +tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t03: Fail +tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t04: Fail +tests/co19/src/Language/Statements/Local_Variable_Declaration/syntax_t13: Fail +tests/co19/src/Language/Statements/Return/syntax_t03: Fail +tests/co19/src/Language/Statements/Switch/syntax_t04: Fail +tests/co19/src/Language/Statements/Switch/syntax_t05: Fail +tests/co19/src/Language/Statements/Switch/syntax_t06: Fail +tests/co19/src/Language/Statements/Switch/syntax_t07: Fail +tests/co19/src/Language/Statements/Switch/syntax_t08: Fail +tests/co19/src/Language/Statements/Switch/syntax_t09: Fail +tests/co19/src/Language/Statements/Switch/syntax_t10: Fail +tests/co19/src/Language/Statements/Switch/syntax_t11: Fail +tests/co19/src/Language/Statements/Switch/syntax_t12: Fail +tests/co19/src/Language/Statements/Switch/syntax_t14: Fail +tests/co19/src/Language/Statements/Switch/syntax_t15: Fail +tests/co19/src/Language/Statements/Switch/syntax_t18: Fail +tests/co19/src/Language/Statements/Try/syntax_t02: Fail +tests/co19/src/Language/Statements/Try/syntax_t03: Fail +tests/co19/src/Language/Statements/Try/syntax_t04: Fail +tests/co19/src/Language/Statements/Try/syntax_t07: Fail +tests/co19/src/Language/Statements/Try/syntax_t08: Fail +tests/co19/src/Language/Statements/Try/syntax_t09: Fail +tests/co19/src/Language/Statements/Try/syntax_t10: Fail +tests/co19/src/Language/Statements/Try/syntax_t11: Fail +tests/co19/src/Language/Statements/Try/syntax_t16: Fail +tests/co19/src/Language/Statements/Try/syntax_t17: Fail +tests/co19/src/Language/Statements/Try/syntax_t18: Fail +tests/co19/src/Language/Statements/Try/syntax_t19: Fail +tests/co19/src/Language/Statements/Try/syntax_t20: Fail +tests/co19/src/Language/Statements/Try/syntax_t21: Fail +tests/co19/src/Language/Statements/Try/syntax_t22: Fail +tests/co19/src/Language/Statements/While/syntax_t01: Fail +tests/co19/src/Language/Statements/While/syntax_t02: Fail +tests/co19/src/Language/Statements/While/syntax_t03: Fail +tests/co19/src/Language/Statements/While/syntax_t04: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t01: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t03: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/location_t05: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t07: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t08: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t09: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield/syntax_t10: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t07: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t08: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t09: Fail +tests/co19/src/Language/Statements/Yield_and_Yield_Each/Yield_Each/syntax_t10: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t01: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t02: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t03: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t04: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t05: Fail +tests/co19/src/Language/Types/Static_Types/syntax_t07: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t01: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t04: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/param_default_value_t05: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t02: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t03: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t04: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t05: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t06: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t07: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t08: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t09: Fail +tests/co19/src/Language/Types/Type_Declarations/Typedef/syntax_t10: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t01: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t03: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t04: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t05: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t06: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t07: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t08: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t09: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t10: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t11: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t12: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t13: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t14: Fail +tests/co19/src/Language/Types/Type_Void/syntax_t15: Fail +tests/co19/src/Language/Variables/library_variable_t01_lib: Fail +tests/co19/src/Language/Variables/library_variable_t02: Fail +tests/co19/src/Language/Variables/library_variable_t03: Fail +tests/co19/src/Language/Variables/library_variable_t04: Fail +tests/co19/src/Language/Variables/library_variable_t05: Fail +tests/co19/src/Language/Variables/library_variable_t06: Fail +tests/co19/src/Language/Variables/library_variable_t07: Fail +tests/co19/src/Language/Variables/static_variable_t02: Fail +tests/co19/src/Language/Variables/syntax_t03: Fail +tests/co19/src/Language/Variables/syntax_t06: Fail +tests/co19/src/Language/Variables/syntax_t07: Fail +tests/co19/src/Language/Variables/syntax_t09: Fail +tests/co19/src/Language/Variables/syntax_t10: Fail +tests/co19/src/Language/Variables/syntax_t11: Fail +tests/co19/src/Language/Variables/syntax_t15: Fail +tests/co19/src/Language/Variables/syntax_t16: Fail +tests/co19/src/Language/Variables/syntax_t17: Fail +tests/co19/src/Language/Variables/syntax_t18: Fail +tests/co19/src/Language/Variables/syntax_t19: Fail +tests/co19/src/Language/Variables/syntax_t20: Fail +tests/co19/src/Language/Variables/syntax_t21: Fail +tests/co19/src/Language/Variables/syntax_t22: Fail +tests/co19/src/Language/Variables/syntax_t23: Fail +tests/co19/src/LibTest/html/HttpRequest/responseType_A01_t03: Fail +tests/co19/src/WebPlatformTest/dom/nodes/DOMImplementation-createHTMLDocument_t01: Fail +tests/co19/src/WebPlatformTest/dom/nodes/Document-createElement_t01: Fail +tests/co19/src/WebPlatformTest/dom/nodes/Element-childElementCount-nochild_t01: Fail +tests/compiler/dart2js/data/one_line_dart_program: Fail +tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test: Fail +tests/compiler/dart2js_extra/deferred_custom_loader_test: Fail +tests/compiler/dart2js_extra/empty_negative_test: Fail +tests/compiler/dart2js_extra/invalid_annotation2_test: Fail +tests/compiler/dart2js_extra/invalid_annotation_test: Fail +tests/compiler/dart2js_extra/invalid_length_negative_test: Fail +tests/compiler/dart2js_extra/switch_test: Fail +tests/compiler/dart2js_extra/timer_negative_test: Fail +tests/compiler/dart2js_extra/typed_locals_test: Fail +tests/compiler/dart2js_native/abstract_class_test: Fail +tests/compiler/dart2js_native/bound_closure_test: Fail +tests/compiler/dart2js_native/browser_compat_1_prepatched_test: Fail +tests/compiler/dart2js_native/browser_compat_1_unpatched_test: Fail +tests/compiler/dart2js_native/browser_compat_2_test: Fail +tests/compiler/dart2js_native/core_type_check_native_test: Fail +tests/compiler/dart2js_native/dispatch_property_initialization_test: Fail +tests/compiler/dart2js_native/downcast_test: Fail +tests/compiler/dart2js_native/error_safeToString_test: Fail +tests/compiler/dart2js_native/event_loop_test: Fail +tests/compiler/dart2js_native/fake_thing_2_test: Fail +tests/compiler/dart2js_native/fake_thing_test: Fail +tests/compiler/dart2js_native/field_type2_test: Fail +tests/compiler/dart2js_native/field_type_test: Fail +tests/compiler/dart2js_native/fixup_get_tag_test: Fail +tests/compiler/dart2js_native/hash_code_test: Fail +tests/compiler/dart2js_native/issue9182_test: Fail +tests/compiler/dart2js_native/jsobject_test: Fail +tests/compiler/dart2js_native/native_call_arity1_frog_test: Fail +tests/compiler/dart2js_native/native_call_arity2_frog_test: Fail +tests/compiler/dart2js_native/native_call_arity3_frog_test: Fail +tests/compiler/dart2js_native/native_checked_arguments1_frog_test: Fail +tests/compiler/dart2js_native/native_checked_fields_frog_test: Fail +tests/compiler/dart2js_native/native_class_avoids_hidden_name_frog_test: Fail +tests/compiler/dart2js_native/native_class_fields_2_test: Fail +tests/compiler/dart2js_native/native_class_fields_3_test: Fail +tests/compiler/dart2js_native/native_class_fields_test: Fail +tests/compiler/dart2js_native/native_class_inheritance1_frog_test: Fail +tests/compiler/dart2js_native/native_class_inheritance2_frog_test: Fail +tests/compiler/dart2js_native/native_class_inheritance3_frog_test: Fail +tests/compiler/dart2js_native/native_class_inheritance4_frog_test: Fail +tests/compiler/dart2js_native/native_class_is_check1_frog_test: Fail +tests/compiler/dart2js_native/native_class_is_check3_frog_test: Fail +tests/compiler/dart2js_native/native_class_with_dart_methods_frog_test: Fail +tests/compiler/dart2js_native/native_closure_identity_frog_test: Fail +tests/compiler/dart2js_native/native_constructor_name_test: Fail +tests/compiler/dart2js_native/native_equals_frog_test: Fail +tests/compiler/dart2js_native/native_exception2_test: Fail +tests/compiler/dart2js_native/native_exceptions1_frog_test: Fail +tests/compiler/dart2js_native/native_field_invocation2_test: Fail +tests/compiler/dart2js_native/native_field_invocation3_test: Fail +tests/compiler/dart2js_native/native_field_invocation4_test: Fail +tests/compiler/dart2js_native/native_field_invocation5_test: Fail +tests/compiler/dart2js_native/native_field_invocation6_test: Fail +tests/compiler/dart2js_native/native_field_invocation_test: Fail +tests/compiler/dart2js_native/native_field_name_test: Fail +tests/compiler/dart2js_native/native_field_optimization_test: Fail +tests/compiler/dart2js_native/native_field_rename_1_frog_test: Fail +tests/compiler/dart2js_native/native_field_rename_2_frog_test: Fail +tests/compiler/dart2js_native/native_library_same_name_used_frog_test: Fail +tests/compiler/dart2js_native/native_library_same_name_used_lib2: Fail +tests/compiler/dart2js_native/native_method_inlining_test: Fail +tests/compiler/dart2js_native/native_method_rename1_frog_test: Fail +tests/compiler/dart2js_native/native_method_rename2_frog_test: Fail +tests/compiler/dart2js_native/native_method_rename3_frog_test: Fail +tests/compiler/dart2js_native/native_method_with_keyword_name_test: Fail +tests/compiler/dart2js_native/native_missing_method1_frog_test: Fail +tests/compiler/dart2js_native/native_missing_method2_frog_test: Fail +tests/compiler/dart2js_native/native_mixin_field_test: Fail +tests/compiler/dart2js_native/native_mixin_multiple2_test: Fail +tests/compiler/dart2js_native/native_mixin_multiple3_test: Fail +tests/compiler/dart2js_native/native_mixin_multiple_test: Fail +tests/compiler/dart2js_native/native_mixin_test: Fail +tests/compiler/dart2js_native/native_mixin_with_plain_test: Fail +tests/compiler/dart2js_native/native_named_constructors2_frog_test: Fail +tests/compiler/dart2js_native/native_named_constructors3_frog_test: Fail +tests/compiler/dart2js_native/native_no_such_method_exception2_frog_test: Fail +tests/compiler/dart2js_native/native_no_such_method_exception3_frog_test: Fail +tests/compiler/dart2js_native/native_no_such_method_exception4_frog_test: Fail +tests/compiler/dart2js_native/native_no_such_method_exception5_frog_test: Fail +tests/compiler/dart2js_native/native_no_such_method_exception_frog_test: Fail +tests/compiler/dart2js_native/native_novel_html_test: Fail +tests/compiler/dart2js_native/native_null_closure_frog_test: Fail +tests/compiler/dart2js_native/native_null_frog_test: Fail +tests/compiler/dart2js_native/native_property_frog_test: Fail +tests/compiler/dart2js_native/native_testing: Fail +tests/compiler/dart2js_native/native_to_string_frog_test: Fail +tests/compiler/dart2js_native/native_use_native_name_in_table_frog_test: Fail +tests/compiler/dart2js_native/native_wrapping_function3_frog_test: Fail +tests/compiler/dart2js_native/native_wrapping_function_frog_test: Fail +tests/compiler/dart2js_native/oddly_named_fields_test: Fail +tests/compiler/dart2js_native/runtimetype_test: Fail +tests/compiler/dart2js_native/static_methods_test: Fail +tests/compiler/dart2js_native/subclassing_1_test: Fail +tests/compiler/dart2js_native/subclassing_2_test: Fail +tests/compiler/dart2js_native/subclassing_3_test: Fail +tests/compiler/dart2js_native/subclassing_4_test: Fail +tests/compiler/dart2js_native/subclassing_5_test: Fail +tests/compiler/dart2js_native/subclassing_constructor_1_test: Fail +tests/compiler/dart2js_native/subclassing_super_call_test: Fail +tests/compiler/dart2js_native/subclassing_super_field_1_test: Fail +tests/compiler/dart2js_native/subclassing_super_field_2_test: Fail +tests/compiler/dart2js_native/subclassing_type_test: Fail +tests/compiler/dart2js_native/super_call_test: Fail +tests/compiler/dart2js_native/super_property_test: Fail +tests/corelib/from_environment_const_type_test: Fail +tests/corelib/from_environment_const_type_undefined_test: Fail +tests/corelib/symbol_reserved_word_test: Fail +tests/corelib_strong/from_environment_const_type_test: Fail +tests/corelib_strong/from_environment_const_type_undefined_test: Fail +tests/corelib_strong/symbol_reserved_word_test: Fail +tests/language/abstract_syntax_test: Fail +tests/language/application_negative_test: Fail +tests/language/arg_param_trailing_comma_test: Fail +tests/language/argument_definition_test: Fail +tests/language/assert_initializer_test: Fail +tests/language/assign_instance_method_negative_test: Fail +tests/language/async_await_syntax_test: Fail +tests/language/await_backwards_compatibility_test: Fail +tests/language/bad_constructor_test: Fail +tests/language/bad_initializer1_negative_test: Fail +tests/language/bad_initializer2_negative_test: Fail +tests/language/bad_named_constructor_negative_test: Fail +tests/language/bad_typedef_test: Fail +tests/language/black_listed_test: Fail +tests/language/body_less_constructor_wrong_arg_negative_test: Fail +tests/language/built_in_identifier_test: Fail +tests/language/cascade_test: Fail +tests/language/class_cycle2_test: Fail +tests/language/class_keyword_test: Fail +tests/language/class_syntax_test: Fail +tests/language/closure_call_wrong_argument_count_negative_test: Fail +tests/language/compile_time_constant13_test: Fail +tests/language/const_counter_negative_test: Fail +tests/language/const_getter_test: Fail +tests/language/const_native_factory_test: Fail +tests/language/const_optional_args_negative_test: Fail +tests/language/constructor3_negative_test: Fail +tests/language/constructor_call_wrong_argument_count_negative_test: Fail +tests/language/constructor_initializer_test: Fail +tests/language/constructor_name_test: Fail +tests/language/constructor_redirect1_negative_test: Fail +tests/language/constructor_redirect2_negative_test: Fail +tests/language/constructor_setter_negative_test: Fail +tests/language/covariant_test: Fail +tests/language/cyclic_typedef_test: Fail +tests/language/deferred_type_dependency_test: Fail +tests/language/duplicate_export_negative_test: Fail +tests/language/duplicate_interface_negative_test: Fail +tests/language/enum_is_keyword_test: Fail +tests/language/enum_syntax_test: Fail +tests/language/export_ambiguous_main_negative_test: Fail +tests/language/extend_type_parameter2_negative_test: Fail +tests/language/extend_type_parameter_negative_test: Fail +tests/language/external_test: Fail +tests/language/factory2_negative_test: Fail +tests/language/factory_negative_test: Fail +tests/language/field1_negative_test: Fail +tests/language/field2_negative_test: Fail +tests/language/field3a_negative_test: Fail +tests/language/field4_negative_test: Fail +tests/language/field5_negative_test: Fail +tests/language/field6_negative_test: Fail +tests/language/field6a_negative_test: Fail +tests/language/field_method4_negative_test: Fail +tests/language/function_syntax_test: Fail +tests/language/function_type_parameter2_negative_test: Fail +tests/language/function_type_parameter_negative_test: Fail +tests/language/get_set_syntax_test: Fail +tests/language/getter_declaration_negative_test: Fail +tests/language/illegal_declaration_test: Fail +tests/language/import_combinators_negative_test: Fail +tests/language/inst_field_initializer1_negative_test: Fail +tests/language/instance_call_wrong_argument_count_negative_test: Fail +tests/language/instance_method2_negative_test: Fail +tests/language/instance_method_negative_test: Fail +tests/language/interface2_negative_test: Fail +tests/language/interface_cycle_test: Fail +tests/language/interface_static_non_final_fields_negative_test: Fail +tests/language/keyword_type_expression_test: Fail +tests/language/label2_negative_test: Fail +tests/language/label3_negative_test: Fail +tests/language/label5_negative_test: Fail +tests/language/label6_negative_test: Fail +tests/language/library_negative_test: Fail +tests/language/list_literal2_negative_test: Fail +tests/language/list_literal_syntax_test: Fail +tests/language/literal_unary_plus_test: Fail +tests/language/main_test: Fail +tests/language/malformed_inheritance_test: Fail +tests/language/malformed_test: Fail +tests/language/map_literal2_negative_test: Fail +tests/language/metadata_test: Fail +tests/language/method_name_test: Fail +tests/language/method_override2_test: Fail +tests/language/mixin_forwarding_constructor4_test: Fail +tests/language/mixin_illegal_syntax_test: Fail +tests/language/mixin_invalid_inheritance1_test: Fail +tests/language/mixin_supertype_subclass2_test: Fail +tests/language/mixin_supertype_subclass4_test: Fail +tests/language/mixin_supertype_subclass_test: Fail +tests/language/named_constructor_test: Fail +tests/language/named_parameters_aggregated_test: Fail +tests/language/no_such_method_negative_test: Fail +tests/language/non_const_super_negative_test: Fail +tests/language/null_test: Fail +tests/language/number_identifier_test: Fail +tests/language/override_field_method1_negative_test: Fail +tests/language/override_field_method2_negative_test: Fail +tests/language/override_field_method4_negative_test: Fail +tests/language/override_field_method5_negative_test: Fail +tests/language/override_inheritance_generic_test: Fail +tests/language/parameter_default_test: Fail +tests/language/parameter_initializer1_negative_test: Fail +tests/language/parameter_initializer2_negative_test: Fail +tests/language/parameter_initializer3_negative_test: Fail +tests/language/parameter_initializer4_negative_test: Fail +tests/language/parameter_initializer5_negative_test: Fail +tests/language/parameter_initializer6_negative_test: Fail +tests/language/prefix10_negative_test: Fail +tests/language/prefix11_negative_test: Fail +tests/language/prefix12_negative_test: Fail +tests/language/prefix13_negative_test: Fail +tests/language/prefix15_negative_test: Fail +tests/language/prefix1_negative_test: Fail +tests/language/prefix2_negative_test: Fail +tests/language/prefix3_negative_test: Fail +tests/language/prefix4_negative_test: Fail +tests/language/prefix5_negative_test: Fail +tests/language/prefix6_negative_test: Fail +tests/language/prefix7_negative_test: Fail +tests/language/prefix8_negative_test: Fail +tests/language/private_member1_negative_test: Fail +tests/language/private_member2_negative_test: Fail +tests/language/private_member3_negative_test: Fail +tests/language/regress_23051_test: Fail +tests/language/script1_negative_test: Fail +tests/language/script2_negative_test: Fail +tests/language/setter_declaration2_negative_test: Fail +tests/language/setter_declaration_negative_test: Fail +tests/language/source_self_negative_test: Fail +tests/language/static_call_wrong_argument_count_negative_test: Fail +tests/language/static_parameter_test: Fail +tests/language/static_top_level_test: Fail +tests/language/string_interpolation1_test: Fail +tests/language/string_interpolation2_test: Fail +tests/language/string_interpolation3_test: Fail +tests/language/string_interpolation4_test: Fail +tests/language/string_interpolation5_test: Fail +tests/language/string_interpolation6_test: Fail +tests/language/string_interpolation9_test: Fail +tests/language/string_unicode1_negative_test: Fail +tests/language/string_unicode2_negative_test: Fail +tests/language/string_unicode3_negative_test: Fail +tests/language/string_unicode4_negative_test: Fail +tests/language/switch1_negative_test: Fail +tests/language/switch3_negative_test: Fail +tests/language/switch4_negative_test: Fail +tests/language/switch5_negative_test: Fail +tests/language/switch7_negative_test: Fail +tests/language/sync_generator2_test: Fail +tests/language/syntax_test: Fail +tests/language/tearoff_basic_test: Fail +tests/language/tearoff_constructor_basic_test: Fail +tests/language/try_catch_on_syntax_test: Fail +tests/language/try_catch_syntax_test: Fail +tests/language/type_variable_bounds2_test: Fail +tests/language/type_variable_static_context_negative_test: Fail +tests/language/unbalanced_brace_test: Fail +tests/language/unresolved_in_factory_negative_test: Fail +tests/language/unresolved_top_level_method_negative_test: Fail +tests/language/unresolved_top_level_var_negative_test: Fail +tests/language/unsigned_right_shift_test: Fail +tests/language/variable_declaration_metadata_test: Fail +tests/language/vm/debug_break_enabled_vm_test: Fail +tests/language/vm/debug_break_vm_test: Fail +tests/language_strong/abstract_syntax_test: Fail +tests/language_strong/application_negative_test: Fail +tests/language_strong/argument_definition_test: Fail +tests/language_strong/assign_instance_method_negative_test: Fail +tests/language_strong/async_await_syntax_test: Fail +tests/language_strong/await_backwards_compatibility_test: Fail +tests/language_strong/bad_constructor_test: Fail +tests/language_strong/bad_initializer1_negative_test: Fail +tests/language_strong/bad_initializer2_negative_test: Fail +tests/language_strong/bad_named_constructor_negative_test: Fail +tests/language_strong/black_listed_test: Fail +tests/language_strong/body_less_constructor_wrong_arg_negative_test: Fail +tests/language_strong/built_in_identifier_prefix_test: Fail +tests/language_strong/built_in_identifier_test: Fail +tests/language_strong/cascade_test: Fail +tests/language_strong/class_cycle2_test: Fail +tests/language_strong/class_keyword_test: Fail +tests/language_strong/class_syntax_test: Fail +tests/language_strong/closure_call_wrong_argument_count_negative_test: Fail +tests/language_strong/compile_time_constant13_test: Fail +tests/language_strong/const_counter_negative_test: Fail +tests/language_strong/const_native_factory_test: Fail +tests/language_strong/const_optional_args_negative_test: Fail +tests/language_strong/constructor3_negative_test: Fail +tests/language_strong/constructor_call_wrong_argument_count_negative_test: Fail +tests/language_strong/constructor_initializer_test: Fail +tests/language_strong/constructor_name_test: Fail +tests/language_strong/constructor_redirect1_negative_test: Fail +tests/language_strong/constructor_redirect2_negative_test: Fail +tests/language_strong/constructor_setter_negative_test: Fail +tests/language_strong/cyclic_typedef_test: Fail +tests/language_strong/deferred_type_dependency_test: Fail +tests/language_strong/duplicate_export_negative_test: Fail +tests/language_strong/duplicate_interface_negative_test: Fail +tests/language_strong/enum_is_keyword_test: Fail +tests/language_strong/enum_syntax_test: Fail +tests/language_strong/export_ambiguous_main_negative_test: Fail +tests/language_strong/extend_type_parameter2_negative_test: Fail +tests/language_strong/extend_type_parameter_negative_test: Fail +tests/language_strong/external_test: Fail +tests/language_strong/factory2_negative_test: Fail +tests/language_strong/factory_negative_test: Fail +tests/language_strong/field1_negative_test: Fail +tests/language_strong/field2_negative_test: Fail +tests/language_strong/field3a_negative_test: Fail +tests/language_strong/field4_negative_test: Fail +tests/language_strong/field5_negative_test: Fail +tests/language_strong/field6_negative_test: Fail +tests/language_strong/field6a_negative_test: Fail +tests/language_strong/field_method4_negative_test: Fail +tests/language_strong/function_syntax_test: Fail +tests/language_strong/function_type_parameter2_negative_test: Fail +tests/language_strong/function_type_parameter_negative_test: Fail +tests/language_strong/get_set_syntax_test: Fail +tests/language_strong/getter_declaration_negative_test: Fail +tests/language_strong/illegal_declaration_test: Fail +tests/language_strong/import_combinators_negative_test: Fail +tests/language_strong/inst_field_initializer1_negative_test: Fail +tests/language_strong/instance_call_wrong_argument_count_negative_test: Fail +tests/language_strong/instance_method2_negative_test: Fail +tests/language_strong/instance_method_negative_test: Fail +tests/language_strong/interface2_negative_test: Fail +tests/language_strong/interface_cycle_test: Fail +tests/language_strong/interface_static_non_final_fields_negative_test: Fail +tests/language_strong/keyword_type_expression_test: Fail +tests/language_strong/label2_negative_test: Fail +tests/language_strong/label3_negative_test: Fail +tests/language_strong/label5_negative_test: Fail +tests/language_strong/label6_negative_test: Fail +tests/language_strong/library_negative_test: Fail +tests/language_strong/list_literal2_negative_test: Fail +tests/language_strong/list_literal_syntax_test: Fail +tests/language_strong/literal_unary_plus_test: Fail +tests/language_strong/main_test: Fail +tests/language_strong/malformed_inheritance_test: Fail +tests/language_strong/malformed_test: Fail +tests/language_strong/map_literal2_negative_test: Fail +tests/language_strong/metadata_test: Fail +tests/language_strong/method_override2_test: Fail +tests/language_strong/mixin_forwarding_constructor4_test: Fail +tests/language_strong/mixin_illegal_syntax_test: Fail +tests/language_strong/mixin_invalid_inheritance1_test: Fail +tests/language_strong/named_constructor_test: Fail +tests/language_strong/named_parameters_aggregated_test: Fail +tests/language_strong/no_such_method_negative_test: Fail +tests/language_strong/non_const_super_negative_test: Fail +tests/language_strong/null_test: Fail +tests/language_strong/number_identifier_test: Fail +tests/language_strong/override_field_method1_negative_test: Fail +tests/language_strong/override_field_method2_negative_test: Fail +tests/language_strong/override_field_method4_negative_test: Fail +tests/language_strong/override_field_method5_negative_test: Fail +tests/language_strong/override_inheritance_generic_test: Fail +tests/language_strong/parameter_default_test: Fail +tests/language_strong/parameter_initializer1_negative_test: Fail +tests/language_strong/parameter_initializer2_negative_test: Fail +tests/language_strong/parameter_initializer3_negative_test: Fail +tests/language_strong/parameter_initializer4_negative_test: Fail +tests/language_strong/parameter_initializer6_negative_test: Fail +tests/language_strong/prefix10_negative_test: Fail +tests/language_strong/prefix11_negative_test: Fail +tests/language_strong/prefix12_negative_test: Fail +tests/language_strong/prefix13_negative_test: Fail +tests/language_strong/prefix15_negative_test: Fail +tests/language_strong/prefix1_negative_test: Fail +tests/language_strong/prefix2_negative_test: Fail +tests/language_strong/prefix3_negative_test: Fail +tests/language_strong/prefix4_negative_test: Fail +tests/language_strong/prefix5_negative_test: Fail +tests/language_strong/prefix6_negative_test: Fail +tests/language_strong/prefix7_negative_test: Fail +tests/language_strong/prefix8_negative_test: Fail +tests/language_strong/private_member1_negative_test: Fail +tests/language_strong/private_member2_negative_test: Fail +tests/language_strong/private_member3_negative_test: Fail +tests/language_strong/regress_23051_test: Fail +tests/language_strong/script1_negative_test: Fail +tests/language_strong/script2_negative_test: Fail +tests/language_strong/setter_declaration2_negative_test: Fail +tests/language_strong/setter_declaration_negative_test: Fail +tests/language_strong/source_self_negative_test: Fail +tests/language_strong/static_call_wrong_argument_count_negative_test: Fail +tests/language_strong/static_parameter_test: Fail +tests/language_strong/static_top_level_test: Fail +tests/language_strong/string_interpolation9_test: Fail +tests/language_strong/string_unicode1_negative_test: Fail +tests/language_strong/string_unicode2_negative_test: Fail +tests/language_strong/string_unicode3_negative_test: Fail +tests/language_strong/string_unicode4_negative_test: Fail +tests/language_strong/switch1_negative_test: Fail +tests/language_strong/switch3_negative_test: Fail +tests/language_strong/switch4_negative_test: Fail +tests/language_strong/switch5_negative_test: Fail +tests/language_strong/switch7_negative_test: Fail +tests/language_strong/sync_generator2_test: Fail +tests/language_strong/syntax_test: Fail +tests/language_strong/tearoff_basic_test: Fail +tests/language_strong/tearoff_constructor_basic_test: Fail +tests/language_strong/try_catch_on_syntax_test: Fail +tests/language_strong/try_catch_syntax_test: Fail +tests/language_strong/type_variable_bounds2_test: Fail +tests/language_strong/type_variable_static_context_negative_test: Fail +tests/language_strong/unbalanced_brace_test: Fail +tests/language_strong/unresolved_in_factory_negative_test: Fail +tests/language_strong/unresolved_top_level_method_negative_test: Fail +tests/language_strong/unresolved_top_level_var_negative_test: Fail +tests/language_strong/unsigned_right_shift_test: Fail +tests/language_strong/variable_declaration_metadata_test: Fail +tests/lib/async/future_or_bad_type_test: Fail +tests/lib/mirrors/metadata_allowed_values_test: Fail +tests/lib/mirrors/metadata_scope_test: Fail +tests/lib/mirrors/mirror_in_static_init_test: Fail +tests/lib/mirrors/other_declarations_location_test: Fail +tests/lib/mirrors/syntax_error_test: Fail +tests/lib/mirrors/typevariable_mirror_metadata_test: Fail +tests/lib_strong/mirrors/metadata_allowed_values_test: Fail +tests/lib_strong/mirrors/metadata_scope_test: Fail +tests/lib_strong/mirrors/mirror_in_static_init_test: Fail +tests/lib_strong/mirrors/other_declarations_location_test: Fail +tests/lib_strong/mirrors/syntax_error_test: Fail +tests/lib_strong/mirrors/typevariable_mirror_metadata_test: Fail +tests/standalone/io/process_exit_negative_test: Fail +tests/standalone/io/snapshot_fail_script: Fail +tests/standalone/io/test_extension: Fail +tests/standalone/io/test_relative_extension: Fail +tests/standalone/package/sibling_isolate: Fail +third_party/pkg/linter/test/_data/synthetic/synthetic: Fail +third_party/pkg/linter/test/rules/cascade_invocations: Fail +third_party/pkg/resource/test/loader_data_test: Fail +third_party/pkg/resource/test/loader_file_test: Fail +third_party/pkg/resource/test/loader_http_test: Fail diff --git a/pkg/front_end/test/fasta/parser/parser_suite.dart b/pkg/front_end/test/fasta/parser/parser_suite.dart new file mode 100644 index 00000000000..b5c1c03c159 --- /dev/null +++ b/pkg/front_end/test/fasta/parser/parser_suite.dart @@ -0,0 +1,45 @@ +// Copyright (c) 2016, 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.md file. + +import 'package:testing/testing.dart'; + +import 'package:front_end/src/fasta/scanner.dart'; + +import 'package:front_end/src/fasta/scanner/testing/scanner_chain.dart'; + +import 'package:front_end/src/fasta/parser.dart'; + +Future createContext( + Chain suite, Map enviroment) async { + return new ScannerContext(); +} + +class ScannerContext extends ChainContext { + final List steps = const [ + const Read(), + const Scan(), + const Parse(), + ]; +} + +class Parse extends Step { + const Parse(); + + String get name => "parse"; + + Future> run( + ScannerResult result, ChainContext context) async { + try { + List errors = parse(result.tokens); + if (errors.isNotEmpty) { + return fail(null, errors.join("\n")); + } + } on ParserError catch (e, s) { + return fail(null, e, s); + } + return pass(null); + } +} + +main(List arguments) => runMe(arguments, createContext); diff --git a/pkg/front_end/test/fasta/parser/testing.json b/pkg/front_end/test/fasta/parser/testing.json new file mode 100644 index 00000000000..b3ae4c8770c --- /dev/null +++ b/pkg/front_end/test/fasta/parser/testing.json @@ -0,0 +1,31 @@ +{ +"":"Copyright (c) 2016, 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.md file.", + "packages": "../../../../../.packages", + "suites": [ + { + "name": "parser", + "kind": "Chain", + "source": "parser_suite.dart", + "path": "../../", + "status": "parser.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + "README.dart", + "xcodebuild/", + "tools/sdks/" + ] + } + ], + "analyze": { + "uris": [ + "../../../lib/src/fasta/parser/", + "../../../lib/src/fasta/parser/bin/" + ], + "exclude": [ + ] + } +} diff --git a/pkg/front_end/test/fasta/scanner/scanner.status b/pkg/front_end/test/fasta/scanner/scanner.status new file mode 100644 index 00000000000..6dd5db65f06 --- /dev/null +++ b/pkg/front_end/test/fasta/scanner/scanner.status @@ -0,0 +1,373 @@ +# Copyright (c) 2016, 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.md file. + +pkg/dev_compiler/test/codegen/language/application_negative_test: Fail +pkg/dev_compiler/test/codegen/language/assign_instance_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_initializer2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_named_constructor_negative_test: Fail +pkg/dev_compiler/test/codegen/language/bad_raw_string_negative_test: Fail +pkg/dev_compiler/test/codegen/language/body_less_constructor_wrong_arg_negative_test: Fail +pkg/dev_compiler/test/codegen/language/closure_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/const_counter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/const_optional_args_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_redirect1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_redirect2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/constructor_setter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/duplicate_export_negative_test: Fail +pkg/dev_compiler/test/codegen/language/duplicate_interface_negative_test: Fail +pkg/dev_compiler/test/codegen/language/export_ambiguous_main_negative_test: Fail +pkg/dev_compiler/test/codegen/language/extend_type_parameter2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/extend_type_parameter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/factory2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/factory3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/factory_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field3a_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field6a_negative_test: Fail +pkg/dev_compiler/test/codegen/language/field_method4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/function_type_parameter2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/function_type_parameter_negative_test: Fail +pkg/dev_compiler/test/codegen/language/getter_declaration_negative_test: Fail +pkg/dev_compiler/test/codegen/language/import_combinators_negative_test: Fail +pkg/dev_compiler/test/codegen/language/inst_field_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_method2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/instance_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface_injection1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface_injection2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface_static_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/interface_static_non_final_fields_negative_test: Fail +pkg/dev_compiler/test/codegen/language/is_not_class1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/is_not_class4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/issue1578_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/label8_negative_test: Fail +pkg/dev_compiler/test/codegen/language/library_negative_test: Fail +pkg/dev_compiler/test/codegen/language/list_literal2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/list_literal_negative_test: Fail +pkg/dev_compiler/test/codegen/language/map_literal2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/map_literal_negative_test: Fail +pkg/dev_compiler/test/codegen/language/new_expression1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/new_expression2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/new_expression3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/no_such_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/non_const_super_negative_test: Fail +pkg/dev_compiler/test/codegen/language/operator1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/operator2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/override_field_method5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/parameter_initializer6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix10_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix11_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix12_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix13_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix15_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix18_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix7_negative_test: Fail +pkg/dev_compiler/test/codegen/language/prefix8_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/private_member3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/script1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/script2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/setter_declaration2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/setter_declaration_negative_test: Fail +pkg/dev_compiler/test/codegen/language/source_self_negative_test: Fail +pkg/dev_compiler/test/codegen/language/static_call_wrong_argument_count_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_escape4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolate1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolate2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_interpolation6_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode2_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/string_unicode4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch1_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch3_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch4_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch5_negative_test: Fail +pkg/dev_compiler/test/codegen/language/switch7_negative_test: Fail +pkg/dev_compiler/test/codegen/language/test_negative_test: Fail +pkg/dev_compiler/test/codegen/language/type_variable_static_context_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unary_plus_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unhandled_exception_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_in_factory_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_top_level_method_negative_test: Fail +pkg/dev_compiler/test/codegen/language/unresolved_top_level_var_negative_test: Fail +pkg/testing/test/dart_sdk_negative_test: Fail +tests/compiler/dart2js_extra/empty_negative_test: Fail +tests/compiler/dart2js_extra/invalid_length_negative_test: Fail +tests/compiler/dart2js_extra/timer_negative_test: Fail +tests/language/application_negative_test: Fail +tests/language/assign_instance_method_negative_test: Fail +tests/language/bad_initializer1_negative_test: Fail +tests/language/bad_initializer2_negative_test: Fail +tests/language/bad_named_constructor_negative_test: Fail +tests/language/bad_raw_string_negative_test: Fail +tests/language/body_less_constructor_wrong_arg_negative_test: Fail +tests/language/closure_call_wrong_argument_count_negative_test: Fail +tests/language/const_counter_negative_test: Fail +tests/language/const_optional_args_negative_test: Fail +tests/language/constructor3_negative_test: Fail +tests/language/constructor_call_wrong_argument_count_negative_test: Fail +tests/language/constructor_redirect1_negative_test: Fail +tests/language/constructor_redirect2_negative_test: Fail +tests/language/constructor_setter_negative_test: Fail +tests/language/deep_nesting1_negative_test: Fail +tests/language/deep_nesting2_negative_test: Fail +tests/language/duplicate_export_negative_test: Fail +tests/language/duplicate_interface_negative_test: Fail +tests/language/export_ambiguous_main_negative_test: Fail +tests/language/extend_type_parameter2_negative_test: Fail +tests/language/extend_type_parameter_negative_test: Fail +tests/language/factory2_negative_test: Fail +tests/language/factory3_negative_test: Fail +tests/language/factory_negative_test: Fail +tests/language/field1_negative_test: Fail +tests/language/field2_negative_test: Fail +tests/language/field3_negative_test: Fail +tests/language/field3a_negative_test: Fail +tests/language/field4_negative_test: Fail +tests/language/field5_negative_test: Fail +tests/language/field6_negative_test: Fail +tests/language/field6a_negative_test: Fail +tests/language/field_method4_negative_test: Fail +tests/language/function_type_parameter2_negative_test: Fail +tests/language/function_type_parameter_negative_test: Fail +tests/language/getter_declaration_negative_test: Fail +tests/language/import_combinators_negative_test: Fail +tests/language/inst_field_initializer1_negative_test: Fail +tests/language/instance_call_wrong_argument_count_negative_test: Fail +tests/language/instance_method2_negative_test: Fail +tests/language/instance_method_negative_test: Fail +tests/language/interface2_negative_test: Fail +tests/language/interface_injection1_negative_test: Fail +tests/language/interface_injection2_negative_test: Fail +tests/language/interface_static_method_negative_test: Fail +tests/language/interface_static_non_final_fields_negative_test: Fail +tests/language/is_not_class1_negative_test: Fail +tests/language/is_not_class4_negative_test: Fail +tests/language/issue1578_negative_test: Fail +tests/language/label2_negative_test: Fail +tests/language/label3_negative_test: Fail +tests/language/label5_negative_test: Fail +tests/language/label6_negative_test: Fail +tests/language/label8_negative_test: Fail +tests/language/library_negative_test: Fail +tests/language/list_literal2_negative_test: Fail +tests/language/list_literal_negative_test: Fail +tests/language/map_literal2_negative_test: Fail +tests/language/map_literal_negative_test: Fail +tests/language/new_expression1_negative_test: Fail +tests/language/new_expression2_negative_test: Fail +tests/language/new_expression3_negative_test: Fail +tests/language/no_such_method_negative_test: Fail +tests/language/non_const_super_negative_test: Fail +tests/language/operator1_negative_test: Fail +tests/language/operator2_negative_test: Fail +tests/language/override_field_method1_negative_test: Fail +tests/language/override_field_method2_negative_test: Fail +tests/language/override_field_method4_negative_test: Fail +tests/language/override_field_method5_negative_test: Fail +tests/language/parameter_initializer1_negative_test: Fail +tests/language/parameter_initializer2_negative_test: Fail +tests/language/parameter_initializer3_negative_test: Fail +tests/language/parameter_initializer4_negative_test: Fail +tests/language/parameter_initializer5_negative_test: Fail +tests/language/parameter_initializer6_negative_test: Fail +tests/language/prefix10_negative_test: Fail +tests/language/prefix11_negative_test: Fail +tests/language/prefix12_negative_test: Fail +tests/language/prefix13_negative_test: Fail +tests/language/prefix15_negative_test: Fail +tests/language/prefix18_negative_test: Fail +tests/language/prefix1_negative_test: Fail +tests/language/prefix2_negative_test: Fail +tests/language/prefix3_negative_test: Fail +tests/language/prefix4_negative_test: Fail +tests/language/prefix5_negative_test: Fail +tests/language/prefix6_negative_test: Fail +tests/language/prefix7_negative_test: Fail +tests/language/prefix8_negative_test: Fail +tests/language/private_member1_negative_test: Fail +tests/language/private_member2_negative_test: Fail +tests/language/private_member3_negative_test: Fail +tests/language/script1_negative_test: Fail +tests/language/script2_negative_test: Fail +tests/language/setter_declaration2_negative_test: Fail +tests/language/setter_declaration_negative_test: Fail +tests/language/source_self_negative_test: Fail +tests/language/static_call_wrong_argument_count_negative_test: Fail +tests/language/string_escape4_negative_test: Fail +tests/language/string_interpolate1_negative_test: Fail +tests/language/string_interpolate2_negative_test: Fail +tests/language/string_unicode1_negative_test: Fail +tests/language/string_unicode2_negative_test: Fail +tests/language/string_unicode3_negative_test: Fail +tests/language/string_unicode4_negative_test: Fail +tests/language/switch1_negative_test: Fail +tests/language/switch3_negative_test: Fail +tests/language/switch4_negative_test: Fail +tests/language/switch5_negative_test: Fail +tests/language/switch7_negative_test: Fail +tests/language/test_negative_test: Fail +tests/language/type_variable_static_context_negative_test: Fail +tests/language/unary_plus_negative_test: Fail +tests/language/unhandled_exception_negative_test: Fail +tests/language/unresolved_in_factory_negative_test: Fail +tests/language/unresolved_top_level_method_negative_test: Fail +tests/language/unresolved_top_level_var_negative_test: Fail +tests/language_strong/application_negative_test: Fail +tests/language_strong/assign_instance_method_negative_test: Fail +tests/language_strong/bad_initializer1_negative_test: Fail +tests/language_strong/bad_initializer2_negative_test: Fail +tests/language_strong/bad_named_constructor_negative_test: Fail +tests/language_strong/bad_raw_string_negative_test: Fail +tests/language_strong/body_less_constructor_wrong_arg_negative_test: Fail +tests/language_strong/closure_call_wrong_argument_count_negative_test: Fail +tests/language_strong/const_counter_negative_test: Fail +tests/language_strong/const_optional_args_negative_test: Fail +tests/language_strong/constructor3_negative_test: Fail +tests/language_strong/constructor_call_wrong_argument_count_negative_test: Fail +tests/language_strong/constructor_redirect1_negative_test: Fail +tests/language_strong/constructor_redirect2_negative_test: Fail +tests/language_strong/constructor_setter_negative_test: Fail +tests/language_strong/duplicate_export_negative_test: Fail +tests/language_strong/duplicate_interface_negative_test: Fail +tests/language_strong/export_ambiguous_main_negative_test: Fail +tests/language_strong/extend_type_parameter2_negative_test: Fail +tests/language_strong/extend_type_parameter_negative_test: Fail +tests/language_strong/factory2_negative_test: Fail +tests/language_strong/factory3_negative_test: Fail +tests/language_strong/factory_negative_test: Fail +tests/language_strong/field1_negative_test: Fail +tests/language_strong/field2_negative_test: Fail +tests/language_strong/field3_negative_test: Fail +tests/language_strong/field3a_negative_test: Fail +tests/language_strong/field4_negative_test: Fail +tests/language_strong/field5_negative_test: Fail +tests/language_strong/field6_negative_test: Fail +tests/language_strong/field6a_negative_test: Fail +tests/language_strong/field_method4_negative_test: Fail +tests/language_strong/function_type_parameter2_negative_test: Fail +tests/language_strong/function_type_parameter_negative_test: Fail +tests/language_strong/getter_declaration_negative_test: Fail +tests/language_strong/import_combinators_negative_test: Fail +tests/language_strong/inst_field_initializer1_negative_test: Fail +tests/language_strong/instance_call_wrong_argument_count_negative_test: Fail +tests/language_strong/instance_method2_negative_test: Fail +tests/language_strong/instance_method_negative_test: Fail +tests/language_strong/interface2_negative_test: Fail +tests/language_strong/interface_injection1_negative_test: Fail +tests/language_strong/interface_injection2_negative_test: Fail +tests/language_strong/interface_static_method_negative_test: Fail +tests/language_strong/interface_static_non_final_fields_negative_test: Fail +tests/language_strong/is_not_class1_negative_test: Fail +tests/language_strong/is_not_class4_negative_test: Fail +tests/language_strong/issue1578_negative_test: Fail +tests/language_strong/label2_negative_test: Fail +tests/language_strong/label3_negative_test: Fail +tests/language_strong/label5_negative_test: Fail +tests/language_strong/label6_negative_test: Fail +tests/language_strong/label8_negative_test: Fail +tests/language_strong/library_negative_test: Fail +tests/language_strong/list_literal2_negative_test: Fail +tests/language_strong/list_literal_negative_test: Fail +tests/language_strong/map_literal2_negative_test: Fail +tests/language_strong/map_literal_negative_test: Fail +tests/language_strong/new_expression1_negative_test: Fail +tests/language_strong/new_expression2_negative_test: Fail +tests/language_strong/new_expression3_negative_test: Fail +tests/language_strong/no_such_method_negative_test: Fail +tests/language_strong/non_const_super_negative_test: Fail +tests/language_strong/operator1_negative_test: Fail +tests/language_strong/operator2_negative_test: Fail +tests/language_strong/override_field_method1_negative_test: Fail +tests/language_strong/override_field_method2_negative_test: Fail +tests/language_strong/override_field_method4_negative_test: Fail +tests/language_strong/override_field_method5_negative_test: Fail +tests/language_strong/parameter_initializer1_negative_test: Fail +tests/language_strong/parameter_initializer2_negative_test: Fail +tests/language_strong/parameter_initializer3_negative_test: Fail +tests/language_strong/parameter_initializer4_negative_test: Fail +tests/language_strong/parameter_initializer6_negative_test: Fail +tests/language_strong/prefix10_negative_test: Fail +tests/language_strong/prefix11_negative_test: Fail +tests/language_strong/prefix12_negative_test: Fail +tests/language_strong/prefix13_negative_test: Fail +tests/language_strong/prefix15_negative_test: Fail +tests/language_strong/prefix18_negative_test: Fail +tests/language_strong/prefix1_negative_test: Fail +tests/language_strong/prefix2_negative_test: Fail +tests/language_strong/prefix3_negative_test: Fail +tests/language_strong/prefix4_negative_test: Fail +tests/language_strong/prefix5_negative_test: Fail +tests/language_strong/prefix6_negative_test: Fail +tests/language_strong/prefix7_negative_test: Fail +tests/language_strong/prefix8_negative_test: Fail +tests/language_strong/private_member1_negative_test: Fail +tests/language_strong/private_member2_negative_test: Fail +tests/language_strong/private_member3_negative_test: Fail +tests/language_strong/script1_negative_test: Fail +tests/language_strong/script2_negative_test: Fail +tests/language_strong/setter_declaration2_negative_test: Fail +tests/language_strong/setter_declaration_negative_test: Fail +tests/language_strong/source_self_negative_test: Fail +tests/language_strong/static_call_wrong_argument_count_negative_test: Fail +tests/language_strong/string_escape4_negative_test: Fail +tests/language_strong/string_interpolate1_negative_test: Fail +tests/language_strong/string_interpolate2_negative_test: Fail +tests/language_strong/string_interpolation1_negative_test: Fail +tests/language_strong/string_interpolation2_negative_test: Fail +tests/language_strong/string_interpolation3_negative_test: Fail +tests/language_strong/string_interpolation4_negative_test: Fail +tests/language_strong/string_interpolation5_negative_test: Fail +tests/language_strong/string_interpolation6_negative_test: Fail +tests/language_strong/string_unicode1_negative_test: Fail +tests/language_strong/string_unicode2_negative_test: Fail +tests/language_strong/string_unicode3_negative_test: Fail +tests/language_strong/string_unicode4_negative_test: Fail +tests/language_strong/switch1_negative_test: Fail +tests/language_strong/switch3_negative_test: Fail +tests/language_strong/switch4_negative_test: Fail +tests/language_strong/switch5_negative_test: Fail +tests/language_strong/switch7_negative_test: Fail +tests/language_strong/test_negative_test: Fail +tests/language_strong/type_variable_static_context_negative_test: Fail +tests/language_strong/unary_plus_negative_test: Fail +tests/language_strong/unhandled_exception_negative_test: Fail +tests/language_strong/unresolved_in_factory_negative_test: Fail +tests/language_strong/unresolved_top_level_method_negative_test: Fail +tests/language_strong/unresolved_top_level_var_negative_test: Fail +tests/standalone/io/process_exit_negative_test: Fail diff --git a/pkg/front_end/test/fasta/scanner/scanner_suite.dart b/pkg/front_end/test/fasta/scanner/scanner_suite.dart new file mode 100644 index 00000000000..64ee2f08f11 --- /dev/null +++ b/pkg/front_end/test/fasta/scanner/scanner_suite.dart @@ -0,0 +1,21 @@ +// Copyright (c) 2016, 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.md file. + +import 'package:testing/testing.dart'; + +import 'package:front_end/src/fasta/scanner/testing/scanner_chain.dart'; + +Future createContext( + Chain suite, Map enviroment) async { + return new ScannerContext(); +} + +class ScannerContext extends ChainContext { + final List steps = const [ + const Read(), + const Scan(), + ]; +} + +main(List arguments) => runMe(arguments, createContext); diff --git a/pkg/front_end/test/fasta/scanner/testing.json b/pkg/front_end/test/fasta/scanner/testing.json new file mode 100644 index 00000000000..be732cb23d5 --- /dev/null +++ b/pkg/front_end/test/fasta/scanner/testing.json @@ -0,0 +1,29 @@ +{ +"":"Copyright (c) 2016, 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.md file.", + "packages": "../../../../../.packages", + "suites": [ + { + "name": "scanner", + "kind": "Chain", + "source": "scanner_suite.dart", + "path": "../../../../../", + "status": "scanner.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + ] + } + ], + "analyze": { + "uris": [ + "../../../lib/src/fasta/scanner/", + "../../../lib/src/fasta/scanner/bin/", + "../../../lib/src/fasta/scanner/testing/" + ], + "exclude": [ + ] + } +} diff --git a/pkg/front_end/test/fasta/testing.json b/pkg/front_end/test/fasta/testing.json new file mode 100644 index 00000000000..fe1fbd7664a --- /dev/null +++ b/pkg/front_end/test/fasta/testing.json @@ -0,0 +1,122 @@ +{ +"":"Copyright (c) 2016, 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.md file.", + "packages": "../../../../.packages", + "suites": [ + { + "name": "scanner", + "kind": "Chain", + "source": "scanner/scanner_suite.dart", + "path": "../../../../", + "status": "scanner/scanner.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + ] + }, + { + "name": "parser", + "kind": "Chain", + "source": "parser/parser_suite.dart", + "path": "../../../../", + "status": "parser/parser.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + "README.dart", + "/sdk/xcodebuild/", + "/sdk/out/", + "/sdk/build/", + "/sdk/tools/sdks/", + "/sdk/generated/" + ] + }, + { + "name": "outline", + "kind": "Chain", + "source": "outline_test.dart", + "path": "./", + "status": "outline.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + "/test/.*_test\\.dart$" + ] + }, + { + "name": "compile", + "kind": "Chain", + "source": "compile_test.dart", + "path": "./", + "status": "compile.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + "/test/.*_test\\.dart$" + ] + }, + { + "name": "kompile", + "kind": "Chain", + "source": "kompile_test.dart", + "path": "./", + "status": "kompile.status", + "pattern": [ + "\\.dart$" + ], + "exclude": [ + "/test/.*_test\\.dart$" + ] + }, + { + "name": "language", + "kind": "Chain", + "source": "sdk_test.dart", + "path": "../../../../tests/language/", + "status": "language.status", + "process-multitests": true, + "pattern": [ + "_test\\.dart$" + ], + "": "deep_nesting{1,2}_negative_test are ignored because they cause a", + "": "crash that we're ignoring for now (it was fixed in Rasta).", + "": "The other tests are excluded because they try to use 'none' as ", + "": "subtest name in multi test.", + "": "Tracked by: https://github.com/dart-lang/sdk/issues/28436", + "exclude": [ + "/sdk/tests/language/deep_nesting1_negative_test\\.dart$", + "/sdk/tests/language/deep_nesting2_negative_test\\.dart$", + "/sdk/tests/language/async_switch_test\\.dart$", + "/sdk/tests/language/arg_param_trailing_comma_test\\.dart$", + "/sdk/tests/language/assert_initializer_test\\.dart$", + "/sdk/tests/language/deferred_type_dependency_test\\.dart$", + "/sdk/tests/language/mixin_of_mixin_test\\.dart$", + "/sdk/tests/language/regress_23996_test\\.dart$", + "/sdk/tests/language/round_test\\.dart$" + ] + } + ], + "analyze": { + "uris": [ + "../../lib/src/fasta", + "../../lib/src/fasta/parser", + "../../lib/src/fasta/parser/bin", + "../../lib/src/fasta/scanner", + "../../lib/src/fasta/scanner/bin", + "../../lib/src/fasta/scanner/testing", + "../../lib/src/fasta/util", + "../../../../pkg/compiler/lib/src/dart2js.dart", + "dart2js_test.dart", + "parser/parser_suite.dart", + "scanner/scanner_suite.dart" + ], + "exclude": [ + "/third_party/pkg/" + ] + } +} diff --git a/tests/compiler/dart2js/diagnostic_reporter_helper.dart b/tests/compiler/dart2js/diagnostic_reporter_helper.dart index 679ef8c7eeb..0a706f7c3d5 100644 --- a/tests/compiler/dart2js/diagnostic_reporter_helper.dart +++ b/tests/compiler/dart2js/diagnostic_reporter_helper.dart @@ -6,9 +6,10 @@ library dart2js.diagnostic_reporter.helper; import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; import 'package:compiler/src/diagnostics/messages.dart'; -import 'package:compiler/src/diagnostics/spannable.dart'; import 'package:compiler/src/diagnostics/source_span.dart'; +import 'package:compiler/src/diagnostics/spannable.dart'; import 'package:compiler/src/elements/elements.dart'; +import 'package:front_end/src/fasta/scanner.dart'; import 'options_helper.dart'; abstract class DiagnosticReporterWrapper extends DiagnosticReporter { @@ -62,6 +63,9 @@ abstract class DiagnosticReporterWrapper extends DiagnosticReporter { return reporter.spanFromSpannable(node); } + @override + SourceSpan spanFromToken(Token token) => reporter.spanFromToken(token); + @override withCurrentElement(Element element, f()) { return reporter.withCurrentElement(element, f); diff --git a/tests/compiler/dart2js/link_helper.dart b/tests/compiler/dart2js/link_helper.dart index dc0fe6fd7b9..00e82aef622 100644 --- a/tests/compiler/dart2js/link_helper.dart +++ b/tests/compiler/dart2js/link_helper.dart @@ -4,8 +4,8 @@ library link_helper; -import 'package:compiler/src/util/util.dart'; -import 'package:compiler/src/util/util_implementation.dart'; +import 'package:front_end/src/fasta/util/link.dart'; +import 'package:front_end/src/fasta/util/link_implementation.dart'; Link LinkFromList(List list) { switch (list.length) { diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart index 36472bb981b..2dbeced3bbf 100644 --- a/tests/compiler/dart2js/parser_helper.dart +++ b/tests/compiler/dart2js/parser_helper.dart @@ -4,42 +4,38 @@ library parser_helper; -import "package:expect/expect.dart"; +import 'package:expect/expect.dart'; -import "package:compiler/src/elements/elements.dart"; +import 'package:compiler/src/elements/elements.dart'; import 'package:compiler/src/id_generator.dart'; -import "package:compiler/src/tree/tree.dart"; -import "package:compiler/src/parser/element_listener.dart"; -import "package:compiler/src/parser/node_listener.dart"; -import "package:compiler/src/parser/parser.dart"; -import "package:compiler/src/parser/partial_parser.dart"; -import "package:compiler/src/scanner/string_scanner.dart"; -import "package:compiler/src/tokens/token.dart"; -import "package:compiler/src/tokens/token_constants.dart"; -import "package:compiler/src/io/source_file.dart"; -import "package:compiler/src/util/util.dart"; +import 'package:compiler/src/tree/tree.dart'; +import 'package:compiler/src/parser/element_listener.dart'; +import 'package:compiler/src/parser/node_listener.dart'; +import 'package:compiler/src/parser/diet_parser_task.dart'; +import 'package:front_end/src/fasta/parser.dart' hide parse; +import 'package:front_end/src/fasta/scanner.dart' hide scan; +import 'package:compiler/src/io/source_file.dart'; +import 'package:compiler/src/util/util.dart'; -import "package:compiler/src/elements/modelx.dart" +import 'package:compiler/src/elements/modelx.dart' show CompilationUnitElementX, ElementX, LibraryElementX; -import "package:compiler/src/compiler.dart"; +import 'package:compiler/src/compiler.dart'; import 'package:compiler/src/options.dart'; -import "package:compiler/src/diagnostics/source_span.dart"; -import "package:compiler/src/diagnostics/spannable.dart"; -import "package:compiler/src/diagnostics/diagnostic_listener.dart"; -import "package:compiler/src/diagnostics/messages.dart"; -import "package:compiler/src/script.dart"; +import 'package:compiler/src/diagnostics/source_span.dart'; +import 'package:compiler/src/diagnostics/spannable.dart'; +import 'package:compiler/src/diagnostics/diagnostic_listener.dart'; +import 'package:compiler/src/diagnostics/messages.dart'; +import 'package:compiler/src/script.dart'; -import "options_helper.dart"; +import 'options_helper.dart'; -export "package:compiler/src/diagnostics/diagnostic_listener.dart"; -export 'package:compiler/src/parser/listener.dart'; +export 'package:front_end/src/fasta/parser.dart' hide parse; +export 'package:front_end/src/fasta/scanner.dart' hide scan; +export 'package:compiler/src/diagnostics/diagnostic_listener.dart'; export 'package:compiler/src/parser/node_listener.dart'; -export 'package:compiler/src/parser/parser.dart'; -export 'package:compiler/src/parser/partial_parser.dart'; -export 'package:compiler/src/parser/partial_elements.dart'; -export "package:compiler/src/tokens/token.dart"; -export "package:compiler/src/tokens/token_constants.dart"; +export 'package:compiler/src/parser/diet_parser_task.dart'; +export 'package:front_end/src/fasta/scanner/token_constants.dart'; class LoggerCanceler extends DiagnosticReporter { DiagnosticOptions get options => const MockDiagnosticOptions(); @@ -56,6 +52,8 @@ class LoggerCanceler extends DiagnosticReporter { throw 'unsupported operation'; } + SourceSpan spanFromToken(token) => null; + void reportError(DiagnosticMessage message, [List infos = const []]) { log(message); @@ -92,7 +90,7 @@ class LoggerCanceler extends DiagnosticReporter { bool get hasReportedError => false; } -Token scan(String text) => new StringScanner.fromString(text).tokenize(); +Token scan(String text) => new StringScanner(text).tokenize(); Node parseBodyCode(String text, Function parseMethod, {DiagnosticReporter reporter}) { diff --git a/tests/compiler/dart2js/parser_test.dart b/tests/compiler/dart2js/parser_test.dart index 04874509827..4a1fcc75298 100644 --- a/tests/compiler/dart2js/parser_test.dart +++ b/tests/compiler/dart2js/parser_test.dart @@ -306,7 +306,12 @@ class Collector extends DiagnosticReporter { void reportError(DiagnosticMessage message, [List infos = const []]) { - reportFatalError(message.spannable); + assert(token != -1); + throw this; + } + + spanFromToken(Token token) { + this.token = token.kind; } void log(message) { diff --git a/tests/compiler/dart2js/scanner_offset_length_test.dart b/tests/compiler/dart2js/scanner_offset_length_test.dart index 5239f1c7380..f03e393b666 100644 --- a/tests/compiler/dart2js/scanner_offset_length_test.dart +++ b/tests/compiler/dart2js/scanner_offset_length_test.dart @@ -3,12 +3,10 @@ // BSD-style license that can be found in the LICENSE file. import "package:expect/expect.dart"; -import 'package:compiler/src/scanner/string_scanner.dart'; -import 'package:compiler/src/tokens/token.dart'; -import 'package:compiler/src/tokens/token_constants.dart'; +import 'package:front_end/src/fasta/scanner.dart'; Token scan(String text) => - new StringScanner.fromString(text, includeComments: true).tokenize(); + new StringScanner(text, includeComments: true).tokenize(); check(String text) { Token token = scan(text); diff --git a/tests/compiler/dart2js/scanner_test.dart b/tests/compiler/dart2js/scanner_test.dart index ae5dfd3496e..e61af56c4e2 100644 --- a/tests/compiler/dart2js/scanner_test.dart +++ b/tests/compiler/dart2js/scanner_test.dart @@ -3,17 +3,17 @@ // BSD-style license that can be found in the LICENSE file. import "package:expect/expect.dart"; -import 'package:compiler/src/scanner/utf8_bytes_scanner.dart'; -import 'package:compiler/src/tokens/precedence_constants.dart'; -import 'package:compiler/src/tokens/token.dart'; -import 'package:compiler/src/util/characters.dart'; +import 'package:front_end/src/fasta/scanner.dart'; +import 'package:front_end/src/fasta/scanner/characters.dart'; +import 'package:front_end/src/fasta/scanner/precedence.dart'; import 'dart:typed_data'; + Token scan(List bytes) { List zeroTerminated = new Uint8List(bytes.length + 1); zeroTerminated.setRange(0, bytes.length, bytes); zeroTerminated[bytes.length] = 0; - return new Utf8BytesScanner.fromBytes(zeroTerminated).tokenize(); + return new Utf8BytesScanner(zeroTerminated).tokenize(); } Token scanUTF8(List bytes) { @@ -26,7 +26,7 @@ Token scanUTF8(List bytes) { for (int i = 0; i < l; i++) { stringLiteral[i + 1] = bytes[i]; } - return new Utf8BytesScanner.fromBytes(stringLiteral).tokenize(); + return new Utf8BytesScanner(stringLiteral).tokenize(); } bool isRunningOnJavaScript() => identical(1, 1.0); diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart index 820fab7ec91..d3ede31fcae 100644 --- a/tests/compiler/dart2js/unparser2_test.dart +++ b/tests/compiler/dart2js/unparser2_test.dart @@ -5,9 +5,8 @@ import "package:expect/expect.dart"; import "package:compiler/src/parser/element_listener.dart"; import "package:compiler/src/parser/node_listener.dart"; -import "package:compiler/src/parser/parser.dart"; -import "package:compiler/src/scanner/string_scanner.dart"; -import "package:compiler/src/tokens/token.dart"; +import "package:front_end/src/fasta/parser.dart"; +import "package:front_end/src/fasta/scanner.dart"; import "package:compiler/src/tree/tree.dart"; import "package:compiler/src/diagnostics/diagnostic_listener.dart"; @@ -17,8 +16,6 @@ import "package:compiler/src/elements/modelx.dart" show CompilationUnitElementX, LibraryElementX; import "package:compiler/src/script.dart"; -import "options_helper.dart"; - main() { testClassDef(); testClass1Field(); @@ -89,7 +86,7 @@ String doUnparse(String source) { Script script = new Script(null, null, null); LibraryElement lib = new LibraryElementX(script); CompilationUnitElement element = new CompilationUnitElementX(script, lib); - StringScanner scanner = new StringScanner.fromString(source); + StringScanner scanner = new StringScanner(source); Token beginToken = scanner.tokenize(); NodeListener listener = new NodeListener(const ScannerOptions(), diagnosticListener, element);