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 2500c44175b353e5657af00bf4aab521c029a52f..1ab7882a44e972e3789ff17ba6003de97e324534 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 |
@@ -8,8 +8,7 @@ import '../common.dart'; |
import '../constants/values.dart' as values; |
import '../dart_types.dart' as types; |
import '../elements/elements.dart' as elements; |
-import '../resolution/tree_elements.dart' show |
- TreeElementMapping; |
+import '../resolution/tree_elements.dart' show TreeElementMapping; |
import '../tokens/token.dart'; |
import '../tokens/token_constants.dart'; |
import '../tokens/precedence.dart'; |
@@ -20,8 +19,7 @@ import 'backend_ast_nodes.dart'; |
import 'backend_ast_emitter.dart' show TypeGenerator; |
/// Translates the backend AST to Dart frontend AST. |
-tree.Node emit(TreeElementMapping treeElements, |
- RootNode root) { |
+tree.Node emit(TreeElementMapping treeElements, RootNode root) { |
return new TreePrinter(treeElements).makeDefinition(root); |
} |
@@ -52,10 +50,11 @@ class TreePrinter { |
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), |
+ 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); |
@@ -90,12 +89,12 @@ class TreePrinter { |
return openTok; |
} |
- final BeginGroupToken openParen = makeGroup(OPEN_PAREN_INFO, |
- CLOSE_PAREN_INFO); |
- final BeginGroupToken openBrace = makeGroup(OPEN_CURLY_BRACKET_INFO, |
- CLOSE_CURLY_BRACKET_INFO); |
- final BeginGroupToken openBracket = makeGroup(OPEN_SQUARE_BRACKET_INFO, |
- CLOSE_SQUARE_BRACKET_INFO); |
+ final BeginGroupToken openParen = |
+ makeGroup(OPEN_PAREN_INFO, CLOSE_PAREN_INFO); |
+ final BeginGroupToken openBrace = |
+ makeGroup(OPEN_CURLY_BRACKET_INFO, CLOSE_CURLY_BRACKET_INFO); |
+ final BeginGroupToken openBracket = |
+ makeGroup(OPEN_SQUARE_BRACKET_INFO, CLOSE_SQUARE_BRACKET_INFO); |
final BeginGroupToken lt = makeGroup(LT_INFO, GT_INFO); |
Token get closeParen => openParen.endGroup; |
@@ -116,6 +115,7 @@ class TreePrinter { |
static Token makeIdToken(String text) { |
return new StringToken.fromString(IDENTIFIER_INFO, text, -1); |
} |
+ |
final Token newToken = makeIdToken('new'); |
final Token constToken = makeIdToken('const'); |
final Token throwToken = makeIdToken('throw'); |
@@ -168,27 +168,32 @@ class TreePrinter { |
tree.NodeList blankList() { |
return new tree.NodeList(null, makeLink([]), null, ''); |
} |
+ |
tree.NodeList singleton(tree.Node node) { |
return new tree.NodeList(null, makeLink([node]), null, ''); |
} |
- tree.NodeList makeList(String delimiter, |
- Iterable<tree.Node> nodes, |
- { Token open, |
- Token close }) { |
+ |
+ tree.NodeList makeList(String delimiter, Iterable<tree.Node> nodes, |
+ {Token open, Token close}) { |
return new tree.NodeList(open, makeLink(nodes), close, delimiter); |
} |
+ |
tree.NodeList parenList(String delimiter, Iterable<tree.Node> nodes) { |
return makeList(delimiter, nodes, open: openParen, close: closeParen); |
} |
+ |
tree.NodeList bracketList(String delimiter, Iterable<tree.Node> nodes) { |
return makeList(delimiter, nodes, open: openBracket, close: closeBracket); |
} |
+ |
tree.NodeList braceList(String delimiter, Iterable<tree.Node> nodes) { |
return makeList(delimiter, nodes, open: openBrace, close: closeBrace); |
} |
+ |
tree.NodeList argList(Iterable<tree.Node> nodes) { |
return parenList(',', nodes); |
} |
+ |
tree.NodeList typeArgList(Iterable<tree.Node> nodes) { |
return makeList(',', nodes, open: lt, close: gt); |
} |
@@ -198,7 +203,7 @@ class TreePrinter { |
if (name == null) { |
return null; |
} |
- List<String> names = name.split('.').toList(growable:false); |
+ List<String> names = name.split('.').toList(growable: false); |
tree.Node node = makeIdentifier(names[0]); |
for (int i = 1; i < names.length; i++) { |
node = new tree.Send(node, makeIdentifier(names[i])); |
@@ -208,18 +213,30 @@ class TreePrinter { |
static Token assignmentToken(String operatorName) { |
switch (operatorName) { |
- case '=': return new SymbolToken(EQ_INFO, -1); |
- case '+=': return new SymbolToken(PLUS_EQ_INFO, -1); |
- case '-=': return new SymbolToken(MINUS_EQ_INFO, -1); |
- case '*=': return new SymbolToken(STAR_EQ_INFO, -1); |
- case '/=': return new SymbolToken(SLASH_EQ_INFO, -1); |
- case '~/=': return new SymbolToken(TILDE_SLASH_EQ_INFO, -1); |
- case '%=': return new SymbolToken(PERCENT_EQ_INFO, -1); |
- case '&=': return new SymbolToken(AMPERSAND_EQ_INFO, -1); |
- case '^=': return new SymbolToken(CARET_EQ_INFO, -1); |
- case '|=': return new SymbolToken(BAR_EQ_INFO, -1); |
- case '>>=': return new SymbolToken(GT_GT_EQ_INFO, -1); |
- case '<<=': return new SymbolToken(LT_LT_EQ_INFO, -1); |
+ case '=': |
+ return new SymbolToken(EQ_INFO, -1); |
+ case '+=': |
+ return new SymbolToken(PLUS_EQ_INFO, -1); |
+ case '-=': |
+ return new SymbolToken(MINUS_EQ_INFO, -1); |
+ case '*=': |
+ return new SymbolToken(STAR_EQ_INFO, -1); |
+ case '/=': |
+ return new SymbolToken(SLASH_EQ_INFO, -1); |
+ case '~/=': |
+ return new SymbolToken(TILDE_SLASH_EQ_INFO, -1); |
+ case '%=': |
+ return new SymbolToken(PERCENT_EQ_INFO, -1); |
+ case '&=': |
+ return new SymbolToken(AMPERSAND_EQ_INFO, -1); |
+ case '^=': |
+ return new SymbolToken(CARET_EQ_INFO, -1); |
+ case '|=': |
+ return new SymbolToken(BAR_EQ_INFO, -1); |
+ case '>>=': |
+ return new SymbolToken(GT_GT_EQ_INFO, -1); |
+ case '<<=': |
+ return new SymbolToken(LT_LT_EQ_INFO, -1); |
default: |
throw "Unrecognized assignment operator: $operatorName"; |
} |
@@ -227,25 +244,44 @@ class TreePrinter { |
static Token binopToken(String operatorName) { |
switch (operatorName) { |
- case '+': return new SymbolToken(PLUS_INFO, -1); |
- case '-': return new SymbolToken(MINUS_INFO, -1); |
- case '*': return new SymbolToken(STAR_INFO, -1); |
- case '/': return new SymbolToken(SLASH_INFO, -1); |
- case '~/': return new SymbolToken(TILDE_SLASH_INFO, -1); |
- case '%': return new SymbolToken(PERCENT_INFO, -1); |
- case '&': return new SymbolToken(AMPERSAND_INFO, -1); |
- case '^': return new SymbolToken(CARET_INFO, -1); |
- case '|': return new SymbolToken(BAR_INFO, -1); |
- case '>>': return new SymbolToken(GT_GT_INFO, -1); |
- case '<<': return new SymbolToken(LT_LT_INFO, -1); |
- case '==': return new SymbolToken(EQ_EQ_INFO, -1); |
- case '!=': return new SymbolToken(BANG_EQ_INFO, -1); |
- case '>': return new SymbolToken(GT_INFO, -1); |
- case '>=': return new SymbolToken(GT_EQ_INFO, -1); |
- case '<': return new SymbolToken(LT_INFO, -1); |
- case '<=': return new SymbolToken(LT_EQ_INFO, -1); |
- case '&&': return new SymbolToken(AMPERSAND_AMPERSAND_INFO, -1); |
- case '||': return new SymbolToken(BAR_BAR_INFO, -1); |
+ case '+': |
+ return new SymbolToken(PLUS_INFO, -1); |
+ case '-': |
+ return new SymbolToken(MINUS_INFO, -1); |
+ case '*': |
+ return new SymbolToken(STAR_INFO, -1); |
+ case '/': |
+ return new SymbolToken(SLASH_INFO, -1); |
+ case '~/': |
+ return new SymbolToken(TILDE_SLASH_INFO, -1); |
+ case '%': |
+ return new SymbolToken(PERCENT_INFO, -1); |
+ case '&': |
+ return new SymbolToken(AMPERSAND_INFO, -1); |
+ case '^': |
+ return new SymbolToken(CARET_INFO, -1); |
+ case '|': |
+ return new SymbolToken(BAR_INFO, -1); |
+ case '>>': |
+ return new SymbolToken(GT_GT_INFO, -1); |
+ case '<<': |
+ return new SymbolToken(LT_LT_INFO, -1); |
+ case '==': |
+ return new SymbolToken(EQ_EQ_INFO, -1); |
+ case '!=': |
+ return new SymbolToken(BANG_EQ_INFO, -1); |
+ case '>': |
+ return new SymbolToken(GT_INFO, -1); |
+ case '>=': |
+ return new SymbolToken(GT_EQ_INFO, -1); |
+ case '<': |
+ return new SymbolToken(LT_INFO, -1); |
+ case '<=': |
+ return new SymbolToken(LT_EQ_INFO, -1); |
+ case '&&': |
+ return new SymbolToken(AMPERSAND_AMPERSAND_INFO, -1); |
+ case '||': |
+ return new SymbolToken(BAR_BAR_INFO, -1); |
default: |
throw "Unrecognized binary operator: $operatorName"; |
} |
@@ -253,17 +289,22 @@ class TreePrinter { |
static Token incrementToken(String operatorName) { |
switch (operatorName) { |
- case '++': return new SymbolToken(PLUS_PLUS_INFO, -1); |
- case '--': return new SymbolToken(MINUS_MINUS_INFO, -1); |
+ case '++': |
+ return new SymbolToken(PLUS_PLUS_INFO, -1); |
+ case '--': |
+ return new SymbolToken(MINUS_MINUS_INFO, -1); |
default: |
throw "Unrecognized increment operator: $operatorName"; |
} |
} |
static Token typeOpToken(String operatorName) { |
- switch (operatorName) { // "is!" is not an operator in the frontend AST. |
- case 'is': return new SymbolToken(IS_INFO, -1); |
- case 'as': return new SymbolToken(AS_INFO, -1); |
+ switch (operatorName) { |
+ // "is!" is not an operator in the frontend AST. |
+ case 'is': |
+ return new SymbolToken(IS_INFO, -1); |
+ case 'as': |
+ return new SymbolToken(AS_INFO, -1); |
default: |
throw 'Unrecognized type operator: $operatorName'; |
} |
@@ -271,9 +312,12 @@ class TreePrinter { |
Token unopToken(String operatorName) { |
switch (operatorName) { |
- case '-': return new SymbolToken(MINUS_INFO, -1); |
- case '~': return new SymbolToken(TILDE_INFO, -1); |
- case '!': return bang; |
+ case '-': |
+ return new SymbolToken(MINUS_INFO, -1); |
+ case '~': |
+ return new SymbolToken(TILDE_INFO, -1); |
+ case '!': |
+ return bang; |
default: |
throw "Unrecognized unary operator: $operatorName"; |
} |
@@ -283,9 +327,7 @@ class TreePrinter { |
if (treeElements == null) return null; |
if (element.isStatic) { |
elements.ClassElement enclosingClass = element.enclosingClass; |
- tree.Send send = new tree.Send( |
- null, |
- makeIdentifier(enclosingClass.name)); |
+ tree.Send send = new tree.Send(null, makeIdentifier(enclosingClass.name)); |
treeElements[send] = enclosingClass; |
return send; |
} else { |
@@ -298,9 +340,7 @@ class TreePrinter { |
return makeExpression(arg); |
} else if (arg is NamedArgument) { |
return new tree.NamedArgument( |
- makeIdentifier(arg.name), |
- colon, |
- makeExpression(arg.expression)); |
+ makeIdentifier(arg.name), colon, makeExpression(arg.expression)); |
} else { |
throw "Unrecognized argument type: ${arg}"; |
} |
@@ -338,8 +378,8 @@ class TreePrinter { |
} else if (left is IndexExpression) { |
receiver = makeExp(left.object, PRIMARY, beginStmt: beginStmt); |
selector = new tree.Operator(indexToken); |
- arguments = bracketList(',', |
- [makeExpression(left.index), makeExpression(exp.right)]); |
+ arguments = bracketList( |
+ ',', [makeExpression(left.index), makeExpression(exp.right)]); |
} else { |
throw "Unexpected left-hand side of assignment: ${left}"; |
} |
@@ -358,8 +398,8 @@ class TreePrinter { |
// class B { var x; B() : x = (() {return a;}) {}} |
// Not the invalid: |
// class B { var x; B() : x = () {return a;} {}} |
- result = new tree.SendSet(receiver, selector, op, |
- singleton(makeExp(exp.body, CALLEE))); |
+ result = new tree.SendSet( |
+ receiver, selector, op, singleton(makeExp(exp.body, CALLEE))); |
setElement(result, exp.element, exp); |
} else if (exp is SuperInitializer) { |
precedence = EXPRESSION; |
@@ -369,9 +409,8 @@ class TreePrinter { |
if (exp.target.name == "") { |
result = new tree.Send(null, receiver, arguments); |
} else { |
- result = new tree.Send(receiver, |
- makeIdentifier(exp.target.name), |
- arguments); |
+ result = |
+ new tree.Send(receiver, makeIdentifier(exp.target.name), arguments); |
} |
setElement(result, exp.target, exp); |
} else if (exp is BinaryOperator) { |
@@ -395,9 +434,7 @@ class TreePrinter { |
selector = makeExp(callee, CALLEE, beginStmt: beginStmt); |
} |
result = new tree.Send( |
- receiver, |
- selector, |
- argList(exp.arguments.map(makeArgument))); |
+ receiver, selector, argList(exp.arguments.map(makeArgument))); |
if (callee is Identifier) { |
setElement(result, element, exp); |
} |
@@ -406,31 +443,23 @@ class TreePrinter { |
// TODO(sra): Elide receiver when This, but only if not in a scope that |
// shadows the method (e.g. constructor body). |
tree.Node receiver = makeExp(exp.object, PRIMARY, beginStmt: beginStmt); |
- result = new tree.Send( |
- receiver, |
- makeIdentifier(exp.methodName), |
+ result = new tree.Send(receiver, makeIdentifier(exp.methodName), |
argList(exp.arguments.map(makeArgument))); |
} else if (exp is CallNew) { |
precedence = CALLEE; |
tree.Node selector = makeName(exp.type.name); |
if (exp.type.typeArguments.length > 0) { |
selector = new tree.TypeAnnotation( |
- selector, |
- typeArgList(exp.type.typeArguments.map(makeType))); |
+ selector, typeArgList(exp.type.typeArguments.map(makeType))); |
setType(selector, exp.dartType, exp); |
} |
if (exp.constructorName != null) { |
- selector = new tree.Send( |
- selector, |
- makeIdentifier(exp.constructorName)); |
+ selector = new tree.Send(selector, makeIdentifier(exp.constructorName)); |
} |
tree.Send send = new tree.Send( |
- null, |
- selector, |
- argList(exp.arguments.map(makeArgument))); |
- result = new tree.NewExpression( |
- exp.isConst ? constToken : newToken, |
- send); |
+ null, selector, argList(exp.arguments.map(makeArgument))); |
+ result = |
+ new tree.NewExpression(exp.isConst ? constToken : newToken, send); |
setType(result, exp.dartType, exp); |
setElement(send, exp.constructor, exp); |
} else if (exp is CallStatic) { |
@@ -459,18 +488,19 @@ class TreePrinter { |
tree.NodeList parameters = makeParameters(exp.parameters); |
tree.NodeList initializers = |
exp.initializers == null || exp.initializers.isEmpty |
- ? null |
- : makeList(",", exp.initializers.map(makeExpression).toList()); |
+ ? null |
+ : makeList(",", exp.initializers.map(makeExpression).toList()); |
tree.Node body = exp.isConst || exp.body == null |
? new tree.EmptyStatement(semicolon) |
: makeFunctionBody(exp.body); |
- result = new tree.FunctionExpression(constructorName(exp), |
+ result = new tree.FunctionExpression( |
+ constructorName(exp), |
parameters, |
body, |
- null, // return type |
+ null, // return type |
makeFunctionModifiers(exp), |
initializers, |
- null, // get/set |
+ null, // get/set |
null); // async modifier |
setElement(result, exp.element, exp); |
} else if (exp is FunctionExpression) { |
@@ -478,33 +508,27 @@ class TreePrinter { |
if (beginStmt && exp.name != null) { |
needParen = true; // Do not mistake for function declaration. |
} |
- Token getOrSet = exp.isGetter |
- ? getToken |
- : exp.isSetter |
- ? setToken |
- : null; |
- tree.NodeList parameters = exp.isGetter |
- ? makeList("", []) |
- : makeParameters(exp.parameters); |
+ Token getOrSet = exp.isGetter ? getToken : exp.isSetter ? setToken : null; |
+ tree.NodeList parameters = |
+ exp.isGetter ? makeList("", []) : makeParameters(exp.parameters); |
tree.Node body = makeFunctionBody(exp.body); |
result = new tree.FunctionExpression( |
functionName(exp), |
parameters, |
body, |
exp.returnType == null || exp.element.isConstructor |
- ? null |
- : makeType(exp.returnType), |
+ ? null |
+ : makeType(exp.returnType), |
makeFunctionModifiers(exp), |
- null, // initializers |
- getOrSet, // get/set |
- null); // async modifier |
+ null, // initializers |
+ getOrSet, // get/set |
+ 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( |
- makeStaticReceiver(exp.element), |
- makeIdentifier(exp.name)); |
+ makeStaticReceiver(exp.element), makeIdentifier(exp.name)); |
setElement(result, exp.element, exp); |
} else if (exp is Increment) { |
Expression lvalue = exp.expression; |
@@ -597,8 +621,7 @@ class TreePrinter { |
} else if (exp is LiteralSymbol) { |
precedence = PRIMARY; |
result = new tree.LiteralSymbol( |
- hash, |
- makeList('.', exp.id.split('.').map(makeIdentifier))); |
+ hash, makeList('.', exp.id.split('.').map(makeIdentifier))); |
} else if (exp is LiteralType) { |
precedence = TYPE_LITERAL; |
elements.Element optionalElement = exp.type.element; |
@@ -606,14 +629,13 @@ class TreePrinter { |
optionalElement == null ? null : makeStaticReceiver(optionalElement), |
makeIdentifier(exp.name)); |
treeElements.setType(result, exp.type); |
- if (optionalElement != null) { // dynamic does not have an element |
+ if (optionalElement != null) { |
+ // dynamic does not have an element |
setElement(result, optionalElement, exp); |
} |
} else if (exp is ReifyTypeVar) { |
precedence = PRIMARY; |
- result = new tree.Send( |
- null, |
- makeIdentifier(exp.name)); |
+ result = new tree.Send(null, makeIdentifier(exp.name)); |
setElement(result, exp.element, exp); |
setType(result, exp.element.type, exp); |
} else if (exp is StringConcat) { |
@@ -624,9 +646,7 @@ class TreePrinter { |
result = makeIdentifier('this'); |
} else if (exp is Throw) { |
precedence = EXPRESSION; // ??? |
- result = new tree.Throw( |
- makeExpression(exp.expression), |
- throwToken, |
+ result = new tree.Throw(makeExpression(exp.expression), throwToken, |
throwToken); // endToken not used by unparser |
} else if (exp is TypeOperator) { |
precedence = RELATIONAL; |
@@ -634,10 +654,8 @@ class TreePrinter { |
tree.Node rightOperand = makeType(exp.type); |
if (exp.operator == 'is!') { |
operator = new tree.Operator(typeOpToken('is')); |
- rightOperand = new tree.Send( |
- rightOperand, |
- new tree.Operator(bang), |
- blankList()); |
+ rightOperand = |
+ new tree.Send(rightOperand, new tree.Operator(bang), blankList()); |
} else { |
operator = new tree.Operator(typeOpToken(exp.operator)); |
} |
@@ -647,8 +665,7 @@ class TreePrinter { |
singleton(rightOperand)); |
} else if (exp is UnaryOperator) { |
precedence = UNARY; |
- result = new tree.Send.prefix( |
- makeExp(exp.operand, UNARY), |
+ result = new tree.Send.prefix(makeExp(exp.operand, UNARY), |
new tree.Operator(unopToken(exp.operatorName))); |
} else { |
throw "Unknown expression type: ${exp}"; |
@@ -672,9 +689,7 @@ class TreePrinter { |
tree.LiteralMapEntry makeLiteralMapEntry(LiteralMapEntry en) { |
return new tree.LiteralMapEntry( |
- makeExpression(en.key), |
- colon, |
- makeExpression(en.value)); |
+ makeExpression(en.key), colon, makeExpression(en.value)); |
} |
/// A comment token to be inserted when [INSERT_NEW_BACKEND_COMMENT] is true. |
@@ -684,8 +699,8 @@ class TreePrinter { |
tree.Node makeFunctionBody(Statement stmt) { |
if (INSERT_NEW_BACKEND_COMMENT) { |
- return new tree.Block(makeList('', [makeBlock(stmt)], |
- open: newBackendComment)); |
+ return new tree.Block( |
+ makeList('', [makeBlock(stmt)], open: newBackendComment)); |
} else { |
return makeBlock(stmt); |
} |
@@ -717,7 +732,7 @@ class TreePrinter { |
/// True if [stmt] is equivalent to an empty statement. |
bool isEmptyStatement(Statement stmt) { |
return stmt is EmptyStatement || |
- (stmt is Block && stmt.statements.every(isEmptyStatement)); |
+ (stmt is Block && stmt.statements.every(isEmptyStatement)); |
} |
tree.Node makeStatement(Statement stmt, {bool shortIf: true}) { |
@@ -748,8 +763,7 @@ class TreePrinter { |
return new tree.EmptyStatement(semicolon); |
} else if (stmt is ExpressionStatement) { |
return new tree.ExpressionStatement( |
- makeExp(stmt.expression, EXPRESSION, beginStmt: true), |
- semicolon); |
+ makeExp(stmt.expression, EXPRESSION, beginStmt: true), semicolon); |
} else if (stmt is For) { |
tree.Node initializer; |
if (stmt.initializer is VariableDeclarations) { |
@@ -762,8 +776,7 @@ class TreePrinter { |
tree.Node condition; |
if (stmt.condition != null) { |
condition = new tree.ExpressionStatement( |
- makeExpression(stmt.condition), |
- semicolon); |
+ makeExpression(stmt.condition), semicolon); |
} else { |
condition = new tree.EmptyStatement(semicolon); |
} |
@@ -780,12 +793,8 @@ class TreePrinter { |
} else { |
left = makeVariableDeclarations(stmt.leftHandValue); |
} |
- return new tree.SyncForIn( |
- left, |
- makeExpression(stmt.expression), |
- makeStatement(stmt.body, shortIf: shortIf), |
- forToken, |
- inToken); |
+ return new tree.SyncForIn(left, makeExpression(stmt.expression), |
+ makeStatement(stmt.body, shortIf: shortIf), forToken, inToken); |
} else if (stmt is FunctionDeclaration) { |
tree.FunctionExpression function = new tree.FunctionExpression( |
stmt.name != null ? makeIdentifier(stmt.name) : null, |
@@ -793,8 +802,8 @@ class TreePrinter { |
makeFunctionBody(stmt.body), |
stmt.returnType != null ? makeType(stmt.returnType) : null, |
makeEmptyModifiers(), |
- null, // initializers |
- null, // get/set |
+ null, // initializers |
+ null, // get/set |
null); // async modifier |
setElement(function, stmt.function.element, stmt); |
return new tree.FunctionDeclaration(function); |
@@ -827,14 +836,11 @@ class TreePrinter { |
inner = lbl.statement; |
} |
return new tree.LabeledStatement( |
- makeList('', labels), |
- makeStatement(inner, shortIf: shortIf)); |
+ makeList('', labels), makeStatement(inner, shortIf: shortIf)); |
} else if (stmt is Rethrow) { |
return new tree.Rethrow(rethrowToken, semicolon); |
} else if (stmt is Return) { |
- return new tree.Return( |
- returnToken, |
- semicolon, |
+ return new tree.Return(returnToken, semicolon, |
stmt.expression == null ? null : makeExpression(stmt.expression)); |
} else if (stmt is Switch) { |
return new tree.SwitchStatement( |
@@ -851,10 +857,8 @@ class TreePrinter { |
} else if (stmt is VariableDeclarations) { |
return makeVariableDeclarations(stmt, useVar: true, endToken: semicolon); |
} else if (stmt is While) { |
- return new tree.While( |
- parenthesize(makeExpression(stmt.condition)), |
- makeStatement(stmt.body, shortIf: shortIf), |
- whileToken); |
+ return new tree.While(parenthesize(makeExpression(stmt.condition)), |
+ makeStatement(stmt.body, shortIf: shortIf), whileToken); |
} else { |
throw "Unrecognized statement: ${stmt}"; |
} |
@@ -866,11 +870,8 @@ class TreePrinter { |
if (vd.initializer == null) { |
return id; |
} |
- tree.Node send = new tree.SendSet( |
- null, |
- id, |
- new tree.Operator(eq), |
- singleton(makeExpression(vd.initializer))); |
+ tree.Node send = new tree.SendSet(null, id, new tree.Operator(eq), |
+ singleton(makeExpression(vd.initializer))); |
setElement(send, vd.element, vd); |
return send; |
} |
@@ -879,15 +880,14 @@ class TreePrinter { |
/// if no other modifiers are present. |
/// [endToken] will be used to terminate the declaration list. |
tree.Node makeVariableDeclarations(VariableDeclarations decl, |
- { bool useVar: false, |
- Token endToken: null }) { |
+ {bool useVar: false, Token endToken: null}) { |
return new tree.VariableDefinitions( |
decl.type == null ? null : makeType(decl.type), |
- makeVarModifiers(isConst: decl.isConst, |
- isFinal: decl.isFinal, |
- useVar: useVar && decl.type == null), |
- makeList(',', |
- decl.declarations.map(makeVariableDeclaration), |
+ makeVarModifiers( |
+ isConst: decl.isConst, |
+ isFinal: decl.isFinal, |
+ useVar: useVar && decl.type == null), |
+ makeList(',', decl.declarations.map(makeVariableDeclaration), |
close: endToken)); |
} |
@@ -897,17 +897,13 @@ class TreePrinter { |
tree.Node exceptionName = makeIdentifier(block.exceptionVar.name); |
setElement(exceptionName, block.exceptionVar.element, block.exceptionVar); |
formals.add(new tree.VariableDefinitions( |
- null, |
- makeEmptyModifiers(), |
- singleton(exceptionName))); |
+ null, makeEmptyModifiers(), singleton(exceptionName))); |
} |
if (block.stackVar != null) { |
tree.Node stackTraceName = makeIdentifier(block.stackVar.name); |
setElement(stackTraceName, block.stackVar.element, block.stackVar); |
formals.add(new tree.VariableDefinitions( |
- null, |
- makeEmptyModifiers(), |
- singleton(stackTraceName))); |
+ null, makeEmptyModifiers(), singleton(stackTraceName))); |
} |
return new tree.CatchBlock( |
block.onType == null ? null : makeType(block.onType), |
@@ -958,7 +954,7 @@ class TreePrinter { |
Token open = params.hasNamedParameters ? openBrace : openBracket; |
Token close = params.hasNamedParameters ? closeBrace : closeBracket; |
Iterable<tree.Node> opt = |
- params.optionalParameters.map((p) => makeParameter(p,assign)); |
+ params.optionalParameters.map((p) => makeParameter(p, assign)); |
nodes.add(new tree.NodeList(open, makeLink(opt), close, ',')); |
} |
return argList(nodes); |
@@ -971,10 +967,10 @@ class TreePrinter { |
makeIdentifier(param.name), |
makeParameters(param.parameters), |
null, // body |
- param.type == null ? null : makeType(param.type), |
+ param.type == null ? null : makeType(param.type), |
makeEmptyModifiers(), // TODO: Function parameter modifiers? |
- null, // initializers |
- null, // get/set |
+ null, // initializers |
+ null, // get/set |
null); // async modifier |
if (param.element != null) { |
setElement(definition, param.element, param); |
@@ -987,9 +983,7 @@ class TreePrinter { |
singleton(makeExpression(param.defaultValue))); |
} |
return new tree.VariableDefinitions( |
- null, |
- makeEmptyModifiers(), |
- singleton(definition)); |
+ null, makeEmptyModifiers(), singleton(definition)); |
} else { |
tree.Node definition; |
if (param.defaultValue != null) { |
@@ -1015,13 +1009,14 @@ class TreePrinter { |
return new tree.Modifiers(blankList()); |
} |
- tree.Modifiers makeModifiers({bool isExternal: false, |
- bool isStatic: false, |
- bool isAbstract: false, |
- bool isFactory: false, |
- bool isConst: false, |
- bool isFinal: false, |
- bool isVar: false}) { |
+ tree.Modifiers makeModifiers( |
+ {bool isExternal: false, |
+ bool isStatic: false, |
+ bool isAbstract: false, |
+ bool isFactory: false, |
+ bool isConst: false, |
+ bool isFinal: false, |
+ bool isVar: false}) { |
List<tree.Node> nodes = []; |
if (isExternal) { |
nodes.add(makeIdentifier('external')); |
@@ -1047,22 +1042,25 @@ class TreePrinter { |
return new tree.Modifiers(makeList(' ', nodes)); |
} |
- tree.Modifiers makeVarModifiers({bool isConst: false, |
- bool isFinal: false, |
- bool useVar: false, |
- bool isStatic: false}) { |
- return makeModifiers(isStatic: isStatic, |
- isConst: isConst, |
- isFinal: isFinal, |
- isVar: useVar && !(isConst || isFinal)); |
+ tree.Modifiers makeVarModifiers( |
+ {bool isConst: false, |
+ bool isFinal: false, |
+ bool useVar: false, |
+ bool isStatic: false}) { |
+ return makeModifiers( |
+ isStatic: isStatic, |
+ isConst: isConst, |
+ isFinal: isFinal, |
+ isVar: useVar && !(isConst || isFinal)); |
} |
tree.Modifiers makeFunctionModifiers(FunctionExpression exp) { |
if (exp.element == null) return makeEmptyModifiers(); |
- return makeModifiers(isExternal: exp.element.isExternal, |
- isStatic: exp.element.isStatic, |
- isFactory: exp.element.isFactoryConstructor, |
- isConst: exp.element.isConst); |
+ return makeModifiers( |
+ isExternal: exp.element.isExternal, |
+ isStatic: exp.element.isStatic, |
+ isFactory: exp.element.isFactoryConstructor, |
+ isConst: exp.element.isConst); |
} |
tree.Node makeNodeForClassElement(elements.ClassElement cls) { |
@@ -1089,8 +1087,8 @@ class TreePrinter { |
final Token typedefKeyword = typedefToken; |
final Token endToken = semicolon; |
- return new tree.Typedef(returnType, name, typeParameters, formals, |
- typedefKeyword, endToken); |
+ return new tree.Typedef( |
+ returnType, name, typeParameters, formals, typedefKeyword, endToken); |
} |
/// Create a [tree.NodeList] containing the type variable declarations in |
@@ -1126,17 +1124,17 @@ class TreePrinter { |
/// differs between [tree.NamedMixinApplication] and [tree.ClassNode]. |
// TODO(johnniwinther): Normalize interfaces on[tree.NamedMixinApplication] |
// and [tree.ClassNode]. |
- tree.NodeList makeInterfaces(Link<types.DartType> interfaces, |
- Set<types.DartType> mixinTypes, |
- {bool forNamedMixinApplication: false}) { |
+ tree.NodeList makeInterfaces( |
+ Link<types.DartType> interfaces, Set<types.DartType> mixinTypes, |
+ {bool forNamedMixinApplication: false}) { |
Link<tree.Node> typeAnnotations = const Link<tree.Node>(); |
for (Link<types.DartType> link = interfaces; |
- !link.isEmpty; |
- link = link.tail) { |
+ !link.isEmpty; |
+ link = link.tail) { |
types.DartType interface = link.head; |
if (!mixinTypes.contains(interface)) { |
- typeAnnotations = typeAnnotations.prepend( |
- makeType(TypeGenerator.createType(interface))); |
+ typeAnnotations = typeAnnotations |
+ .prepend(makeType(TypeGenerator.createType(interface))); |
} |
} |
if (typeAnnotations.isEmpty) { |
@@ -1144,7 +1142,9 @@ class TreePrinter { |
} else { |
return new tree.NodeList( |
forNamedMixinApplication ? null : implementsToken, |
- typeAnnotations, null, ','); |
+ typeAnnotations, |
+ null, |
+ ','); |
} |
} |
@@ -1152,11 +1152,10 @@ class TreePrinter { |
// TODO(johnniwinther): Unify creation of mixin lists between |
// [NamedMixinApplicationElement] and [ClassElement]. |
tree.NamedMixinApplication makeNamedMixinApplication( |
- elements.MixinApplicationElement cls) { |
- |
+ elements.MixinApplicationElement cls) { |
assert(invariant(cls, !cls.isUnnamedMixinApplication, |
message: "Cannot create ClassNode for unnamed mixin application " |
- "$cls.")); |
+ "$cls.")); |
tree.Modifiers modifiers = makeModifiers(isAbstract: cls.isAbstract); |
tree.Identifier name = makeIdentifier(cls.name); |
tree.NodeList typeParameters = makeTypeParameters(cls.typeVariables); |
@@ -1183,12 +1182,11 @@ class TreePrinter { |
tree.Node supernode = new tree.MixinApplication( |
superclass, new tree.NodeList(null, mixins, null, ',')); |
- tree.NodeList interfaces = makeInterfaces( |
- cls.interfaces, mixinTypes, forNamedMixinApplication: true); |
+ tree.NodeList interfaces = makeInterfaces(cls.interfaces, mixinTypes, |
+ forNamedMixinApplication: true); |
- return new tree.NamedMixinApplication( |
- name, typeParameters, modifiers, supernode, |
- interfaces, classToken, semicolon); |
+ return new tree.NamedMixinApplication(name, typeParameters, modifiers, |
+ supernode, interfaces, classToken, semicolon); |
} |
tree.Enum makeEnum(elements.EnumClassElement cls) { |
@@ -1196,14 +1194,14 @@ class TreePrinter { |
enumToken, |
makeIdentifier(cls.name), |
makeList(',', cls.enumValues.map((e) => makeIdentifier(e.name)), |
- open: openBrace, close: closeBrace)); |
+ open: openBrace, close: closeBrace)); |
} |
/// Creates a [tree.ClassNode] node for [cls]. |
tree.ClassNode makeClassNode(elements.ClassElement cls) { |
assert(invariant(cls, !cls.isUnnamedMixinApplication, |
message: "Cannot create ClassNode for unnamed mixin application " |
- "$cls.")); |
+ "$cls.")); |
tree.Modifiers modifiers = makeModifiers(isAbstract: cls.isAbstract); |
tree.Identifier name = makeIdentifier(cls.name); |
tree.NodeList typeParameters = makeTypeParameters(cls.typeVariables); |
@@ -1232,13 +1230,17 @@ class TreePrinter { |
supernode = makeType(TypeGenerator.createType(supertype)); |
} |
} |
- tree.NodeList interfaces = makeInterfaces( |
- cls.interfaces, mixinTypes); |
+ tree.NodeList interfaces = makeInterfaces(cls.interfaces, mixinTypes); |
Token extendsKeyword = supernode != null ? extendsToken : null; |
return new tree.ClassNode( |
- modifiers, name, typeParameters, supernode, |
- interfaces, openBrace, extendsKeyword, |
+ modifiers, |
+ name, |
+ typeParameters, |
+ supernode, |
+ interfaces, |
+ openBrace, |
+ extendsKeyword, |
null, // No body. |
closeBrace); |
} |
@@ -1246,9 +1248,8 @@ class TreePrinter { |
tree.Node constructorName(ConstructorDefinition exp) { |
String name = exp.name; |
tree.Identifier className = makeIdentifier(exp.element.enclosingClass.name); |
- tree.Node result = name == "" |
- ? className |
- : new tree.Send(className, makeIdentifier(name)); |
+ tree.Node result = |
+ name == "" ? className : new tree.Send(className, makeIdentifier(name)); |
setElement(result, exp.element, exp); |
return result; |
} |
@@ -1296,9 +1297,8 @@ class TreePrinter { |
// Finish the previous string interpolation, if there is one. |
tree.LiteralString lit = makeVerbatimStringLiteral(sb.toString()); |
if (currentInterpolation != null) { |
- literalParts.add(new tree.StringInterpolationPart( |
- currentInterpolation, |
- lit)); |
+ literalParts.add( |
+ new tree.StringInterpolationPart(currentInterpolation, lit)); |
} else { |
firstLiteral = lit; |
} |
@@ -1322,24 +1322,20 @@ class TreePrinter { |
if (firstLiteral == null) { |
node = lit; |
} else { |
- literalParts.add(new tree.StringInterpolationPart( |
- currentInterpolation, |
- lit)); |
+ literalParts |
+ .add(new tree.StringInterpolationPart(currentInterpolation, lit)); |
node = new tree.StringInterpolation( |
- firstLiteral, |
- makeList('', literalParts)); |
+ firstLiteral, makeList('', literalParts)); |
} |
// Juxtapose with the previous string chunks, if any. |
if (chunk.previous != null) { |
return new tree.StringJuxtaposition( |
- printStringChunk(chunk.previous), |
- node); |
+ printStringChunk(chunk.previous), node); |
} else { |
return node; |
} |
} |
return printStringChunk(output.chunk); |
} |
- |
} |