fe702abc55
- introduces ElementEnvironment and uses it to implement most of CommonElements and BackendHelpers R=sigmund@google.com Review-Url: https://codereview.chromium.org/2675103003 .
48 lines
1.5 KiB
Dart
48 lines
1.5 KiB
Dart
// 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.task;
|
|
|
|
import '../common.dart';
|
|
import '../common/tasks.dart' show CompilerTask;
|
|
import '../compiler.dart' show Compiler;
|
|
import '../elements/modelx.dart' show ElementX;
|
|
import 'package:front_end/src/fasta/scanner.dart' show Token;
|
|
import '../tree/tree.dart' show Node;
|
|
import 'element_listener.dart' show ScannerOptions;
|
|
import 'package:front_end/src/fasta/parser.dart' show Parser, ParserError;
|
|
import 'node_listener.dart' show NodeListener;
|
|
|
|
class ParserTask extends CompilerTask {
|
|
final Compiler compiler;
|
|
|
|
ParserTask(Compiler compiler)
|
|
: compiler = compiler,
|
|
super(compiler.measurer);
|
|
|
|
String get name => 'Parser';
|
|
|
|
Node parse(ElementX element) {
|
|
return measure(() => element.parseNode(compiler.parsingContext));
|
|
}
|
|
|
|
Node parseCompilationUnit(Token token) {
|
|
return measure(() {
|
|
NodeListener listener =
|
|
new NodeListener(const ScannerOptions(), compiler.reporter, null);
|
|
Parser parser = new Parser(listener);
|
|
try {
|
|
parser.parseUnit(token);
|
|
} on ParserError catch (_) {
|
|
assert(invariant(compiler.reporter.spanFromToken(token),
|
|
compiler.compilationFailed));
|
|
return listener.makeNodeList(0, null, null, '\n');
|
|
}
|
|
Node result = listener.popNode();
|
|
assert(listener.nodes.isEmpty);
|
|
return result;
|
|
});
|
|
}
|
|
}
|