summaryrefslogtreecommitdiff
path: root/sources/scalac/ast
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-09-18 10:00:06 +0000
committerMartin Odersky <odersky@gmail.com>2003-09-18 10:00:06 +0000
commitc0de8fd882c937b7d05368ce0dd5548edea7f839 (patch)
tree5c744cef4bb771689c8e81c896b337bd43199fa9 /sources/scalac/ast
parent5b9b5356411cbd5e4de94d6c84832f99cd10b5de (diff)
downloadscala-c0de8fd882c937b7d05368ce0dd5548edea7f839.tar.gz
scala-c0de8fd882c937b7d05368ce0dd5548edea7f839.tar.bz2
scala-c0de8fd882c937b7d05368ce0dd5548edea7f839.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac/ast')
-rw-r--r--sources/scalac/ast/parser/Parser.java26
1 files changed, 21 insertions, 5 deletions
diff --git a/sources/scalac/ast/parser/Parser.java b/sources/scalac/ast/parser/Parser.java
index cbceab76f4..4f105b5369 100644
--- a/sources/scalac/ast/parser/Parser.java
+++ b/sources/scalac/ast/parser/Parser.java
@@ -573,7 +573,7 @@ public class Parser implements Tokens {
}
}
- /** MixinQualifier ::= `(' Id `)'
+ /** MixinQualifier ::= `[' Id `]'
*/
Name mixinQualifierOpt() {
if (s.token == LBRACKET) {
@@ -795,10 +795,11 @@ public class Parser implements Tokens {
}
/** Exprs ::= Expr {`,' Expr}
+ * | Expr `:' `_' `*'
*/
Tree[] exprs() {
TreeList ts = new TreeList();
- ts.append(expr());
+ ts.append(expr(true));
while (s.token == COMMA) {
s.nextToken();
ts.append(expr());
@@ -816,12 +817,16 @@ public class Parser implements Tokens {
* | return [Expr]
* | [SimpleExpr `.'] Id `=' Expr
* | SimpleExpr ArgumentExprs `=' Expr
- * | PostfixExpr [`:' Type1 | as Type1 | is Type1]
+ * | PostfixExpr [`:' Type1]
* Bindings ::= Id [`:' Type1]
* | `(' [Binding {`,' Binding}] `)'
* Binding ::= Id [`:' Type]
*/
Tree expr() {
+ return expr(false);
+ }
+
+ Tree expr(boolean isArgument) {
if (s.token == IF) {
int pos = s.skipToken();
accept(LPAREN);
@@ -908,8 +913,19 @@ public class Parser implements Tokens {
}
} else if (s.token == COLON) {
int pos = s.skipToken();
- Tree tp = type1();
- t = make.Typed(pos, t, tp);
+ if (isArgument && s.token == USCORE) {
+ int pos1 = s.skipToken();
+ if (s.token == IDENTIFIER && s.name == Names.STAR) {
+ s.nextToken();
+ t = make.Typed(
+ pos, t, make.Ident(pos1, TypeNames.WILDCARD_STAR));
+ } else {
+ syntaxError(s.pos, "`*' expected", true);
+ }
+ } else {
+ Tree tp = type1();
+ t = make.Typed(pos, t, tp);
+ }
}
if (s.token == ARROW) {
t = make.Function(s.skipToken(), convertToParams(t), expr());