summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2003-12-03 15:40:59 +0000
committerburaq <buraq@epfl.ch>2003-12-03 15:40:59 +0000
commitbdb4c6d897d5f5a21c530e8ee553b2d1826693db (patch)
treed6314d1c3d30f5f79a981248dae279885ce3189c
parent3743c70592f744056b048f52dcab33918df19cb4 (diff)
downloadscala-bdb4c6d897d5f5a21c530e8ee553b2d1826693db.tar.gz
scala-bdb4c6d897d5f5a21c530e8ee553b2d1826693db.tar.bz2
scala-bdb4c6d897d5f5a21c530e8ee553b2d1826693db.zip
a possible fix of bug#246
-rw-r--r--sources/scala/tools/scalac/ast/parser/Parser.scala16
-rw-r--r--sources/scalac/ast/parser/Parser.java19
2 files changed, 33 insertions, 2 deletions
diff --git a/sources/scala/tools/scalac/ast/parser/Parser.scala b/sources/scala/tools/scalac/ast/parser/Parser.scala
index 0c2452579b..1572fe87ec 100644
--- a/sources/scala/tools/scalac/ast/parser/Parser.scala
+++ b/sources/scala/tools/scalac/ast/parser/Parser.scala
@@ -741,7 +741,6 @@ class Parser(unit: Unit) {
/** Exprs ::= Expr {`,' Expr}
* | Expr `:' `_' `*'
- */
def exprs(): Array[Tree] = { val ts = new myTreeList();
ts.append(expr(true, false));
while (s.token == COMMA) {
@@ -750,6 +749,19 @@ class Parser(unit: Unit) {
}
ts.toArray()
}
+ */
+
+ /** Exprs ::= Expr {`,' Expr} [ `:' `_' `*' ]
+ */
+ def exprs(): Array[Tree] = {
+ val ts = new myTreeList();
+ ts.append(expr(true, false));
+ while (s.token == COMMA) {
+ s.nextToken();
+ ts.append(expr(true, false));
+ }
+ ts.toArray()
+ }
/** Expr ::= Bindings `=>' Expr
* | Expr1
@@ -850,6 +862,8 @@ class Parser(unit: Unit) {
val pos1 = s.skipToken();
if (s.token == IDENTIFIER && s.name == Names.STAR) {
s.nextToken();
+ if( s.token != RPAREN )
+ syntaxError(s.pos, " escaping sequences only allowed for last argument", true);
t = make.Typed(
pos, t, make.Ident(pos1, TypeNames.WILDCARD_STAR));
} else {
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java
index 0f5a0b6a1f..5b698764ad 100644
--- a/sources/scalac/ast/parser/Parser.java
+++ b/sources/scalac/ast/parser/Parser.java
@@ -794,7 +794,6 @@ public class Parser implements Tokens {
/** Exprs ::= Expr {`,' Expr}
* | Expr `:' `_' `*'
- */
Tree[] exprs() {
TreeList ts = new TreeList();
ts.append(expr(true));
@@ -804,6 +803,19 @@ public class Parser implements Tokens {
}
return ts.toArray();
}
+ */
+
+ /** Exprs ::= Expr {`,' Expr}
+ */
+ Tree[] exprs() {
+ TreeList ts = new TreeList();
+ ts.append(expr(true));
+ while (s.token == COMMA) {
+ s.nextToken();
+ ts.append(expr(true));
+ }
+ return ts.toArray();
+ }
/** Expr ::= Bindings `=>' Expr
* | if `(' Expr `)' Expr [[`;'] else Expr]
@@ -912,6 +924,11 @@ public class Parser implements Tokens {
int pos1 = s.skipToken();
if (s.token == IDENTIFIER && s.name == Names.STAR) {
s.nextToken();
+ /* this hack new */
+ if( s.token != RPAREN ) {
+ syntaxError(s.pos, " escaping sequences only allowed for last argument", true);
+ }
+ /* end hack */
t = make.Typed(
pos, t, make.Ident(pos1, TypeNames.WILDCARD_STAR));
} else {