Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: sdk/lib/_internal/compiler/implementation/tree/nodes.dart

Issue 14211008: Add support for rethrow and start treating throw <expr> as an expression. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Use ?:. Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698