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

Unified Diff: compiler/java/com/google/dart/compiler/parser/DartParser.java

Issue 10913197: Convert throw from a statement to an expression (issue 4872) (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 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: compiler/java/com/google/dart/compiler/parser/DartParser.java
===================================================================
--- compiler/java/com/google/dart/compiler/parser/DartParser.java (revision 12211)
+++ compiler/java/com/google/dart/compiler/parser/DartParser.java (working copy)
@@ -82,7 +82,7 @@
import com.google.dart.compiler.ast.DartSyntheticErrorIdentifier;
import com.google.dart.compiler.ast.DartSyntheticErrorStatement;
import com.google.dart.compiler.ast.DartThisExpression;
-import com.google.dart.compiler.ast.DartThrowStatement;
+import com.google.dart.compiler.ast.DartThrowExpression;
import com.google.dart.compiler.ast.DartTryStatement;
import com.google.dart.compiler.ast.DartTypeExpression;
import com.google.dart.compiler.ast.DartTypeNode;
@@ -2252,6 +2252,9 @@
*/
@VisibleForTesting
public DartExpression parseExpression() {
+ if (peek(0) == Token.THROW) {
+ return parseThrowExpression(true);
+ }
beginExpression();
if (looksLikeTopLevelKeyword() || peek(0).equals(Token.RBRACE)) {
// Allow recovery back to the top level.
@@ -2290,6 +2293,9 @@
* @return an expression matching the {@code expression} production above
*/
private DartExpression parseExpressionWithoutCascade() {
+ if (peek(0) == Token.THROW) {
+ return parseThrowExpression(false);
+ }
beginExpression();
if (looksLikeTopLevelKeyword() || peek(0).equals(Token.RBRACE)) {
// Allow recovery back to the top level.
@@ -3953,15 +3959,18 @@
return done(new DartReturnStatement(value));
}
- private DartThrowStatement parseThrowStatement() {
- beginThrowStatement();
+ private DartThrowExpression parseThrowExpression(boolean allowCascade) {
+ beginThrowExpression();
expect(Token.THROW);
DartExpression exception = null;
- if (peek(0) != Token.SEMICOLON) {
- exception = parseExpression();
+ if (peek(0) != Token.SEMICOLON && peek(0) != Token.RPAREN) {
+ if (allowCascade) {
+ exception = parseExpression();
+ } else {
+ exception = parseExpressionWithoutCascade();
+ }
}
- expectStatmentTerminator();
- return done(new DartThrowStatement(exception));
+ return done(new DartThrowExpression(exception));
}
/**
@@ -4112,7 +4121,7 @@
return parseReturnStatement();
case THROW:
- return parseThrowStatement();
+ return parseExpressionStatement();
case TRY:
return parseTryStatement();

Powered by Google App Engine
This is Rietveld 408576698