summaryrefslogtreecommitdiff
path: root/sources/scalac/ast/parser
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/ast/parser')
-rw-r--r--sources/scalac/ast/parser/Parser.java12
-rw-r--r--sources/scalac/ast/parser/Scanner.java1
-rw-r--r--sources/scalac/ast/parser/Tokens.java2
3 files changed, 13 insertions, 2 deletions
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java
index af165b22ea..7a6cd2b3db 100644
--- a/sources/scalac/ast/parser/Parser.java
+++ b/sources/scalac/ast/parser/Parser.java
@@ -159,7 +159,7 @@ public class Parser implements Tokens {
case SYMBOLLIT: case TRUE: case FALSE: case NULL: case IDENTIFIER:
case THIS: case SUPER: case IF:
case FOR: case NEW: case USCORE:
- case TRY: case WHILE: case DO:
+ case TRY: case WHILE: case DO: case RETURN: case THROW:
case LPAREN: case LBRACE:
return true;
default:
@@ -812,6 +812,8 @@ public class Parser implements Tokens {
* | while `(' Expr `)' Expr
* | do Expr [`;'] while `(' Expr `)'
* | for `(' Enumerators `)' (do | yield) Expr
+ * | throw Expr
+ * | return [Expr]
* | [SimpleExpr `.'] Id `=' Expr
* | SimpleExpr ArgumentExprs `=' Expr
* | PostfixExpr [`:' Type1 | as Type1 | is Type1]
@@ -885,6 +887,14 @@ public class Parser implements Tokens {
} else {
return syntaxError("`do' or `yield' expected", true);
}
+ } else if (s.token == RETURN) {
+ int pos = s.skipToken();
+ Tree e = (isExprIntro()) ? expr()
+ : make.Block(pos, Tree.EMPTY_ARRAY);
+ return make.Return(pos, e);
+ } else if (s.token == THROW) {
+ int pos = s.skipToken();
+ return make.Throw(pos, expr());
// } else if (s.token == ARROW) {
// return make.Function(s.skipToken(), new ValDef[]{}, expr());
} else {
diff --git a/sources/scalac/ast/parser/Scanner.java b/sources/scalac/ast/parser/Scanner.java
index 7ae8840697..62109eacb0 100644
--- a/sources/scalac/ast/parser/Scanner.java
+++ b/sources/scalac/ast/parser/Scanner.java
@@ -834,6 +834,7 @@ public class Scanner extends TokenData {
enterKeyword("sealed", SEALED);
enterKeyword("super", SUPER);
enterKeyword("this", THIS);
+ enterKeyword("throw", THROW);
enterKeyword("trait", TRAIT);
enterKeyword("true", TRUE);
enterKeyword("try", TRY);
diff --git a/sources/scalac/ast/parser/Tokens.java b/sources/scalac/ast/parser/Tokens.java
index 3153d4a78d..485ce6a465 100644
--- a/sources/scalac/ast/parser/Tokens.java
+++ b/sources/scalac/ast/parser/Tokens.java
@@ -59,7 +59,7 @@ public interface Tokens {
DO = 49,
TRAIT = 50,
SEALED = 51,
- /* THROW = 54, */
+ THROW = 52,
TRY = 53,
CATCH = 54,
FINALLY = 55,