summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scalac/ast/parser/Parser.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java
index a6831ea6f8..1073f8222f 100644
--- a/sources/scalac/ast/parser/Parser.java
+++ b/sources/scalac/ast/parser/Parser.java
@@ -1024,6 +1024,7 @@ public class Parser implements Tokens {
{
if ( s.name == STAR ) /* p* becomes z@( |(p,z)) */
{
+ s.nextToken();
Name zname= fresh();
Tree zvar = make.Ident( s.pos, zname );
@@ -1037,6 +1038,7 @@ public class Parser implements Tokens {
}
else if ( s.name == PLUS ) /* p+ becomes z@(p,(z| )) */
{
+ s.nextToken();
Name zname= fresh();
Tree zvar = make.Ident( s.pos, zname );
@@ -1050,6 +1052,7 @@ public class Parser implements Tokens {
}
else if ( s.name == OPT ) /* p? becomes (p| ) */
{
+ s.nextToken();
return make.Alternative( s.pos, new Tree[] {
top,
make.Subsequence( s.pos, Tree.EMPTY_ARRAY )});
@@ -1070,17 +1073,19 @@ public class Parser implements Tokens {
* | literal
* | null
* | StableId {ArgumentPatterns}
- * | `(' Pattern `)'
+ * | `(' Patterns `)'
* | ((nothing))
*/
Tree simplePattern() {
switch (s.token) {
+ case COMMA:
+ return make.Subsequence( s.pos, Tree.EMPTY_ARRAY ); // ((nothing))
case IDENTIFIER:
if( s.name == BAR )
{
return make.Subsequence( s.pos, Tree.EMPTY_ARRAY ); // ((nothing))
}
-
+ // else fall through to case THIS
case THIS:
Tree t = stableId();
switch( t ) {
@@ -1110,8 +1115,14 @@ public class Parser implements Tokens {
case NULL:
return literal(true);
case LPAREN:
+ int p = s.pos;
s.nextToken();
- Tree t = pattern();
+ Tree[] ts = patterns();
+ Tree t;
+ if( ts.length == 1 )
+ t = ts[ 0 ];
+ else
+ t = make.Subsequence( s.pos, ts );
accept(RPAREN);
return t;
default: