diff options
author | Martin Odersky <odersky@gmail.com> | 2008-06-17 17:44:30 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2008-06-17 17:44:30 +0000 |
commit | 9077de63b9f5d596b8ea3df5baeac3f87835e7a2 (patch) | |
tree | 1fda0912e5bb534366478dc0cba91ea1475ba767 /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | |
parent | d34d51d220bd24e54f38e069250db8b692dc0178 (diff) | |
download | scala-9077de63b9f5d596b8ea3df5baeac3f87835e7a2.tar.gz scala-9077de63b9f5d596b8ea3df5baeac3f87835e7a2.tar.bz2 scala-9077de63b9f5d596b8ea3df5baeac3f87835e7a2.zip |
fixed some bugs; disabled devirtualize; desiabl...
fixed some bugs; disabled devirtualize; desiabled bells in JLineReader;
fixed Gilles problems with GADTs
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala index c2e1bd1e7e..96a550179f 100644 --- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala +++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala @@ -394,10 +394,15 @@ trait Parsers extends NewScanners with MarkupParsers { */ def convertToParam(tree: Tree): ValDef = atPos(tree.pos) { + def removeAsPlaceholder(name: Name) { + placeholderParams = placeholderParams filter (_.name != name) + } tree match { case Ident(name) => + removeAsPlaceholder(name) ValDef(Modifiers(Flags.PARAM), name, TypeTree(), EmptyTree) case Typed(tree @ Ident(name), tpe) if (tpe.isType) => // get the ident! + removeAsPlaceholder(name) ValDef(Modifiers(Flags.PARAM), name, tpe, EmptyTree).setPos(tree.pos) case _ => syntaxError(tree.pos, "not a legal formal parameter", false) @@ -919,7 +924,7 @@ trait Parsers extends NewScanners with MarkupParsers { } - /** Expr ::= (Bindings | Id) `=>' Expr + /** Expr ::= (Bindings | Id | `_') `=>' Expr * | Expr1 * ResultExpr ::= (Bindings | Id `:' CompoundType) `=>' Block * | Expr1 @@ -935,7 +940,7 @@ trait Parsers extends NewScanners with MarkupParsers { * | PostfixExpr Ascription * | PostfixExpr match `{' CaseClauses `}' * Bindings ::= `(' [Binding {`,' Binding}] `)' - * Binding ::= Id [`:' Type] + * Binding ::= (Id | `_') [`:' Type] * Ascription ::= `:' CompoundType * | `:' Annotation {Annotation} * | `:' `_' `*' @@ -957,7 +962,6 @@ trait Parsers extends NewScanners with MarkupParsers { var res = inToken match { case IF => val pos = inSkipToken - val cond = surround(LPAREN,RPAREN)(expr(),Literal(true)) newLinesOpt() val thenp = expr() @@ -2162,10 +2166,7 @@ trait Parsers extends NewScanners with MarkupParsers { if (mods.hasFlag(Flags.TRAIT)) (Modifiers(Flags.TRAIT), List()) else (accessModifierOpt(), paramClauses(name, implicitClassViews, mods.hasFlag(Flags.CASE))) val thistpe = requiresTypeOpt() - var mods1 = mods - if (settings.Xexperimental.value) { - if (inToken == SUBTYPE) mods1 = mods | Flags.DEFERRED - } + var mods1 = if (inToken == SUBTYPE) mods | Flags.DEFERRED else mods var template = templateOpt(mods1, name, constrMods withAnnotations constrAnnots, vparamss) if (!thistpe.isEmpty) { if (template.self.isEmpty) { @@ -2188,8 +2189,7 @@ trait Parsers extends NewScanners with MarkupParsers { val name = ident().toTermName if (name != nme.ERROR) pos = namePos atPos(pos) { - var mods1 = mods - if (inToken == SUBTYPE) mods1 = mods | Flags.DEFERRED + val mods1 = if (inToken == SUBTYPE) mods | Flags.DEFERRED else mods val template = templateOpt(mods1, name, NoMods, List()) ModuleDef(mods1, name, template) } @@ -2254,7 +2254,7 @@ trait Parsers extends NewScanners with MarkupParsers { def templateOpt(mods: Modifiers, name: Name, constrMods: Modifiers, vparamss: List[List[ValDef]]): Template = { val pos = inCurrentPos; val (parents0, argss, self, body) = - if (inToken == EXTENDS || inToken == SUBTYPE) { + if (inToken == EXTENDS || settings.Xexperimental.value && (mods hasFlag TRAIT) && inToken == SUBTYPE) { inNextToken template(mods hasFlag Flags.TRAIT) } else { |