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

Unified Diff: frog/leg/tree/nodes.dart

Issue 9632018: Switch-implementation. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Finished implementation Created 8 years, 9 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: frog/leg/tree/nodes.dart
diff --git a/frog/leg/tree/nodes.dart b/frog/leg/tree/nodes.dart
index 35e3098e153ee55400402fb763e87d44776cc838..a4c6322106c3ed17d29d2893644d2e6de9e5de5d 100644
--- a/frog/leg/tree/nodes.dart
+++ b/frog/leg/tree/nodes.dart
@@ -146,6 +146,9 @@ class Node implements Hashable {
Typedef asTypedef() => null;
VariableDefinitions asVariableDefinitions() => null;
While asWhile() => null;
+
+ bool isValidBreakTarget() => false;
+ bool isValidContinueTarget() => false;
}
class ClassNode extends Node {
@@ -200,7 +203,7 @@ class Statement extends Node {
// TODO(ahe): make class abstract instead of adding an abstract method.
abstract accept(Visitor visitor);
- bool isValidContinueTarget() => false;
+ bool isValidBreakTarget() => true;
}
/**
@@ -748,7 +751,7 @@ class DartString implements Iterable<int> {
}
return true;
}
- String toString() => "DartString#${length()}:${slowToString()}";
+ String toString() => "DartString#${length}:${slowToString()}";
abstract SourceString get source();
}
@@ -1407,64 +1410,35 @@ class SwitchStatement extends Statement {
class SwitchCase extends Node {
final Identifier label;
- final Expression expression;
+ final NodeList expressions;
+ final Token defaultKeyword;
final NodeList statements;
- final Token caseKeyword;
+ final Token startToken;
- SwitchCase(this.label, this.expression, this.statements, this.caseKeyword);
+ SwitchCase(this.label, this.expressions, this.defaultKeyword,
+ this.statements, this.startToken);
SwitchCase asSwitchCase() => this;
+ bool get isDefaultCase() => defaultKeyword !== null;
+
accept(Visitor visitor) => visitor.visitSwitchCase(this);
visitChildren(Visitor visitor) {
if (label !== null) label.accept(visitor);
- expression.accept(visitor);
+ expressions.accept(visitor);
statements.accept(visitor);
}
Token getBeginToken() {
- if (label !== null) return label.getBeginToken();
- return caseKeyword;
+ return startToken;
}
Token getEndToken() {
if (statements.nodes.isEmpty()) {
// The colon after the expression.
- return expression.getEndToken().next;
- } else {
- return statements.getEndToken();
- }
- }
-}
-
-class DefaultCase extends Node {
- final Identifier label;
- final NodeList statements;
-
- final Token defaultKeyword;
-
- DefaultCase(this.label, this.statements, this.defaultKeyword);
-
- DefaultCase asDefaultCase() => this;
-
- accept(Visitor visitor) => visitor.visitDefaultCase(this);
-
- visitChildren(Visitor visitor) {
- if (label !== null) label.accept(visitor);
- statements.accept(visitor);
- }
-
- Token getBeginToken() {
- if (label !== null) return label.getBeginToken();
- return defaultKeyword;
- }
-
- Token getEndToken() {
- if (statements.nodes.isEmpty()) {
- // The colon after default.
- return defaultKeyword.next;
+ return expressions.getEndToken().next;
} else {
return statements.getEndToken();
}

Powered by Google App Engine
This is Rietveld 408576698