| Index: lib/compiler/implementation/dart_backend/backend.dart
|
| diff --git a/lib/compiler/implementation/dart_backend/backend.dart b/lib/compiler/implementation/dart_backend/backend.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a7beccf9b31163e01aa369a16265ca5726af570a
|
| --- /dev/null
|
| +++ b/lib/compiler/implementation/dart_backend/backend.dart
|
| @@ -0,0 +1,102 @@
|
| +// Copyright (c) 2012, 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.
|
| +
|
| +/**
|
| + * Visitor to gather conservative estimate of functions which
|
| + * can be invoked and classes which can be instantiated.
|
| + */
|
| +class ReachabilityVisitor implements Visitor {
|
| + visitBlock(Block node) {}
|
| + visitBreakStatement(BreakStatement node) {}
|
| + visitCascade(Cascade node) {}
|
| + visitCascadeReceiver(CascadeReceiver node) {}
|
| + visitCaseMatch(CaseMatch node) {}
|
| + visitCatchBlock(CatchBlock node) {}
|
| + visitClassNode(ClassNode node) {
|
| + internalError('should not reach ClassNode');
|
| + }
|
| + visitConditional(Conditional node) {}
|
| + visitContinueStatement(ContinueStatement node) {}
|
| + visitDoWhile(DoWhile node) {}
|
| + visitEmptyStatement(EmptyStatement node) {}
|
| + visitExpressionStatement(ExpressionStatement node) {}
|
| + visitFor(For node) {}
|
| + visitForIn(ForIn node) {}
|
| + visitFunctionDeclaration(FunctionDeclaration node) {}
|
| + visitFunctionExpression(FunctionExpression node) {
|
| + // TODO(antonm): add a closure to working queue.
|
| + unimplemented('FunctionExpression is not supported');
|
| + }
|
| + visitIdentifier(Identifier node) {}
|
| + visitIf(If node) {}
|
| + visitLabel(Label node) {}
|
| + visitLabeledStatement(LabeledStatement node) {}
|
| + visitLiteralBool(LiteralBool node) {}
|
| + visitLiteralDouble(LiteralDouble node) {}
|
| + visitLiteralInt(LiteralInt node) {}
|
| + visitLiteralList(LiteralList node) {}
|
| + visitLiteralMap(LiteralMap node) {}
|
| + visitLiteralMapEntry(LiteralMapEntry node) {}
|
| + visitLiteralNull(LiteralNull node) {}
|
| + visitLiteralString(LiteralString node) {}
|
| + visitModifiers(Modifiers node) {}
|
| + visitNamedArgument(NamedArgument node) {}
|
| + visitNewExpression(NewExpression node) {
|
| + // TODO(antonm): update set of instantiated classes.
|
| + unimplemented('NewExpression is not supported');
|
| + }
|
| + visitNodeList(NodeList node) {}
|
| + visitOperator(Operator node) {}
|
| + visitParenthesizedExpression(ParenthesizedExpression node) {}
|
| + visitReturn(Return node) {}
|
| + visitScriptTag(ScriptTag node) {}
|
| + visitSend(Send node) {
|
| + // TODO(antonm): update working queue.
|
| + unimplemented('Send is not supported');
|
| + }
|
| + visitSendSet(SendSet node) {
|
| + // TODO(antonm): update working queue.
|
| + unimplemented('SendSet is not supported');
|
| + }
|
| + visitStringInterpolation(StringInterpolation node) {}
|
| + visitStringInterpolationPart(StringInterpolationPart node) {}
|
| + visitStringJuxtaposition(StringJuxtaposition node) {}
|
| + visitSwitchCase(SwitchCase node) {}
|
| + visitSwitchStatement(SwitchStatement node) {}
|
| + visitThrow(Throw node) {}
|
| + visitTryStatement(TryStatement node) {}
|
| + visitTypeAnnotation(TypeAnnotation node) {}
|
| + visitTypedef(Typedef node) {}
|
| + visitTypeVariable(TypeVariable node) {}
|
| + visitVariableDefinitions(VariableDefinitions node) {}
|
| + visitWhile(While node) {}
|
| +
|
| + unimplemented(String reason) {
|
| + throw new CompilerCancelledException('not implemented: $reason');
|
| + }
|
| +
|
| + internalError(String reason) {
|
| + throw new CompilerCancelledException('internal error: $reason');
|
| + }
|
| +}
|
| +
|
| +class DartBackend extends Backend {
|
| + final ReachabilityVisitor reachabilityVisitor;
|
| + final List<CompilerTask> tasks = const <CompilerTask>[];
|
| +
|
| + DartBackend(Compiler compiler)
|
| + : reachabilityVisitor = new ReachabilityVisitor(),
|
| + super(compiler);
|
| +
|
| + String codegen(WorkItem work) {
|
| + // Traverse AST to populate sets of reachable classes and functions.
|
| + FunctionExpression function = work.element.parseNode(compiler);
|
| + function.body.accept(new TraversingVisitor(reachabilityVisitor));
|
| + }
|
| +
|
| + void processNativeClasses(world, libraries) {}
|
| + void assembleProgram() {
|
| + compiler.assembledCode = '';
|
| + }
|
| +}
|
|
|