| Index: sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| index 7bd2eba1c7fbe073fe781f802d0e910abcbd335d..604ef462f7c4b4741371755d9c754b08464c936e 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| @@ -64,6 +64,7 @@ abstract class Visitor<R> {
|
| R visitPartOf(PartOf node) => visitNode(node);
|
| R visitPostfix(Postfix node) => visitNodeList(node);
|
| R visitPrefix(Prefix node) => visitNodeList(node);
|
| + R visitRethrow(Rethrow node) => visitStatement(node);
|
| R visitReturn(Return node) => visitStatement(node);
|
| R visitScriptTag(ScriptTag node) => visitNode(node);
|
| R visitSend(Send node) => visitExpression(node);
|
| @@ -76,7 +77,7 @@ abstract class Visitor<R> {
|
| }
|
| R visitSwitchCase(SwitchCase node) => visitNode(node);
|
| R visitSwitchStatement(SwitchStatement node) => visitStatement(node);
|
| - R visitThrow(Throw node) => visitStatement(node);
|
| + R visitThrow(Throw node) => visitExpression(node);
|
| R visitTryStatement(TryStatement node) => visitStatement(node);
|
| R visitTypeAnnotation(TypeAnnotation node) => visitNode(node);
|
| R visitTypedef(Typedef node) => visitNode(node);
|
| @@ -178,6 +179,7 @@ abstract class Node extends TreeElementMixin implements Spannable {
|
| ParenthesizedExpression asParenthesizedExpression() => null;
|
| Part asPart() => null;
|
| PartOf asPartOf() => null;
|
| + Rethrow asRethrow() => null;
|
| Return asReturn() => null;
|
| ScriptTag asScriptTag() => null;
|
| Send asSend() => null;
|
| @@ -1004,7 +1006,7 @@ class ExpressionStatement extends Statement {
|
| Token getEndToken() => endToken;
|
| }
|
|
|
| -class Throw extends Statement {
|
| +class Throw extends Expression {
|
| final Expression expression;
|
|
|
| final Token throwToken;
|
| @@ -1017,7 +1019,7 @@ class Throw extends Statement {
|
| accept(Visitor visitor) => visitor.visitThrow(this);
|
|
|
| visitChildren(Visitor visitor) {
|
| - if (expression != null) expression.accept(visitor);
|
| + expression.accept(visitor);
|
| }
|
|
|
| Token getBeginToken() => throwToken;
|
| @@ -1025,6 +1027,21 @@ class Throw extends Statement {
|
| Token getEndToken() => endToken;
|
| }
|
|
|
| +class Rethrow extends Statement {
|
| + final Token throwToken;
|
| + final Token endToken;
|
| +
|
| + Rethrow(this.throwToken, this.endToken);
|
| +
|
| + Rethrow asRethrow() => this;
|
| +
|
| + accept(Visitor visitor) => visitor.visitRethrow(this);
|
| + visitChildren(Visitor visitor) { }
|
| +
|
| + Token getBeginToken() => throwToken;
|
| + Token getEndToken() => endToken;
|
| +}
|
| +
|
| class TypeAnnotation extends Node {
|
| final Expression typeName;
|
| final NodeList typeArguments;
|
|
|