| Index: pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
|
| diff --git a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
|
| index 96dbcbc5b12a6c691be27ca4d4215f3c7d3914d8..e0c50d261dd6ecb320569840c9d7068b80edf8ad 100644
|
| --- a/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
|
| +++ b/pkg/compiler/lib/src/dart_backend/backend_ast_to_frontend_ast.dart
|
| @@ -15,9 +15,9 @@ import 'backend_ast_nodes.dart';
|
| import 'backend_ast_emitter.dart' show createTypeAnnotation;
|
|
|
| /// Translates the backend AST to Dart frontend AST.
|
| -tree.FunctionExpression emit(dart2js.TreeElementMapping treeElements,
|
| - Node definition) {
|
| - return new TreePrinter(treeElements).makeExpression(definition);
|
| +tree.Node emit(dart2js.TreeElementMapping treeElements,
|
| + ExecutableDefinition definition) {
|
| + return new TreePrinter(treeElements).makeDefinition(definition);
|
| }
|
|
|
| /// If true, the unparser will insert a coment in front of every function
|
| @@ -32,6 +32,34 @@ class TreePrinter {
|
|
|
| TreePrinter([this.treeElements]);
|
|
|
| + tree.Node makeDefinition(ExecutableDefinition node) {
|
| + if (node is FieldDefinition) {
|
| + tree.Node definition;
|
| + if (node.initializer == null) {
|
| + definition = makeIdentifier(node.element.name);
|
| + } else {
|
| + definition = new tree.SendSet(
|
| + null,
|
| + makeIdentifier(node.element.name),
|
| + new tree.Operator(assignmentToken("=")),
|
| + singleton(makeExpression(node.initializer)));
|
| + }
|
| + setElement(definition, node.element, node);
|
| + return new tree.VariableDefinitions(
|
| + null, // TODO(sigurdm): Type
|
| + makeVarModifiers(useVar: true,
|
| + isFinal: node.element.isFinal,
|
| + isStatic: node.element.isStatic,
|
| + isConst: node.element.isConst),
|
| + makeList(null, [definition], close: semicolon));
|
| + } else if (node is FunctionExpression) {
|
| + return makeExpression(node);
|
| + } else {
|
| + assert(false);
|
| + return null;
|
| + }
|
| + }
|
| +
|
| void setElement(tree.Node node, elements.Element element, source) {
|
| if (treeElements != null) {
|
| if (element == null) {
|
| @@ -418,8 +446,9 @@ class TreePrinter {
|
| makeFunctionModifiers(exp),
|
| null, // initializers
|
| getOrSet, // get/set
|
| - null); // async modifier
|
| - setElement(result, exp.element, exp);
|
| + null); // async modifier
|
| + elements.Element element = exp.element;
|
| + if (element != null) setElement(result, element, exp);
|
| } else if (exp is Identifier) {
|
| precedence = CALLEE;
|
| result = new tree.Send(
|
| @@ -962,13 +991,15 @@ class TreePrinter {
|
| if (isVar) {
|
| nodes.add(makeIdentifier('var'));
|
| }
|
| - return new tree.Modifiers(makeList('', nodes));
|
| + return new tree.Modifiers(makeList(' ', nodes));
|
| }
|
|
|
| tree.Modifiers makeVarModifiers({bool isConst: false,
|
| bool isFinal: false,
|
| - bool useVar: false}) {
|
| - return makeModifiers(isConst: isConst,
|
| + bool useVar: false,
|
| + bool isStatic: false}) {
|
| + return makeModifiers(isStatic: isStatic,
|
| + isConst: isConst,
|
| isFinal: isFinal,
|
| isVar: useVar && !(isConst || isFinal));
|
| }
|
|
|