Chromium Code Reviews| Index: pkg/compiler/lib/src/tree/nodes.dart |
| diff --git a/pkg/compiler/lib/src/tree/nodes.dart b/pkg/compiler/lib/src/tree/nodes.dart |
| index 04d46f54c28a4c8ac003abe471bc0673d9572a1b..88a698f4e84717df4acc9beef3525f0cf85a5ad8 100644 |
| --- a/pkg/compiler/lib/src/tree/nodes.dart |
| +++ b/pkg/compiler/lib/src/tree/nodes.dart |
| @@ -147,6 +147,12 @@ abstract class Node extends NullTreeElementMixin implements Spannable { |
| Token getBeginToken(); |
| + /// Returns the token that ends the 'prefix' of this node. |
| + /// |
| + /// For instance the end of the parameters in a [FunctionExpression] or the |
| + /// last token before the start of a class body for a [ClassNode]. |
| + Token getPrefixEndToken() => getEndToken(); |
| + |
| Token getEndToken(); |
| Assert asAssert() => null; |
| @@ -263,6 +269,25 @@ class ClassNode extends Node { |
| Token getBeginToken() => beginToken; |
| + @override |
| + Token getPrefixEndToken() { |
| + Token token; |
| + if (interfaces != null) { |
| + token = interfaces.getEndToken(); |
| + } |
| + if (token == null && superclass != null) { |
| + token = superclass.getEndToken(); |
| + } |
| + if (token == null && typeParameters != null) { |
| + token == typeParameters.getEndToken(); |
| + } |
| + if (token == null) { |
| + token = name.getEndToken(); |
| + } |
| + assert(token != null); |
|
ahe
2016/02/08 14:40:13
assert invariant using beginToken?
Johnni Winther
2016/02/09 11:59:58
Done.
|
| + return token; |
| + } |
| + |
| Token getEndToken() => endToken; |
| } |
| @@ -738,6 +763,10 @@ class FunctionDeclaration extends Statement { |
| visitChildren(Visitor visitor) => function.accept(visitor); |
| Token getBeginToken() => function.getBeginToken(); |
| + |
| + @override |
| + Token getPrefixEndToken() => function.getPrefixEndToken(); |
| + |
| Token getEndToken() => function.getEndToken(); |
| } |
| @@ -826,6 +855,11 @@ class FunctionExpression extends Expression with StoredTreeElementMixin { |
| return firstBeginToken(name, parameters); |
| } |
| + @override |
| + Token getPrefixEndToken() { |
| + return parameters != null ? parameters.getEndToken() : name.getEndToken(); |
| + } |
| + |
| Token getEndToken() { |
| Token token = (body == null) ? null : body.getEndToken(); |
| token = (token == null) ? parameters.getEndToken() : token; |
| @@ -1300,7 +1334,10 @@ class TypeAnnotation extends Node { |
| Token getBeginToken() => typeName.getBeginToken(); |
| - Token getEndToken() => typeName.getEndToken(); |
| + Token getEndToken() { |
| + if (typeArguments != null) return typeArguments.getEndToken(); |
| + return typeName.getEndToken(); |
| + } |
| } |
| class TypeVariable extends Node { |