aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing/Parsers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-05-17 11:53:46 +0200
committerMartin Odersky <odersky@gmail.com>2013-05-17 11:53:46 +0200
commitd2261b37cf23ccd04e9029f3556c2dc9e2bdf077 (patch)
tree693013265bf7dce1dc602453caebbd54c954bdef /src/dotty/tools/dotc/parsing/Parsers.scala
parent6746b644e94036f84d40f9a125e04cb37131f196 (diff)
downloaddotty-d2261b37cf23ccd04e9029f3556c2dc9e2bdf077.tar.gz
dotty-d2261b37cf23ccd04e9029f3556c2dc9e2bdf077.tar.bz2
dotty-d2261b37cf23ccd04e9029f3556c2dc9e2bdf077.zip
Some fixes to parsers.
Diffstat (limited to 'src/dotty/tools/dotc/parsing/Parsers.scala')
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala
index d76553dd1..1379df446 100644
--- a/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -549,12 +549,12 @@ object Parsers {
}
private def interpolatedString(inPattern: Boolean = false): Tree = atPos(in.offset) {
- val partsBuf = new ListBuffer[Tree]
+ val partsBuf = new ListBuffer[Literal]
val exprBuf = new ListBuffer[Tree]
val interpolator = in.name
in.nextToken()
while (in.token == STRINGPART) {
- partsBuf += literal()
+ partsBuf += literal().asInstanceOf[Literal]
exprBuf += atPos(in.offset) {
if (in.token == IDENTIFIER)
termIdent()
@@ -571,7 +571,7 @@ object Parsers {
}
}
}
- if (in.token == STRINGLIT) partsBuf += literal()
+ if (in.token == STRINGLIT) partsBuf += literal().asInstanceOf[Literal]
InterpolatedString(interpolator, partsBuf.toList, exprBuf.toList)
}
@@ -1430,8 +1430,9 @@ object Parsers {
* DefParams ::= DefParam {`,' DefParam}
* DefParam ::= {Annotation} id `:' ParamType [`=' Expr]
*/
- def paramClauses(owner: Name): List[List[ValDef]] = {
+ def paramClauses(owner: Name, ofCaseClass: Boolean = false): List[List[ValDef]] = {
var implicitFlag = EmptyFlags
+ var firstClauseOfCaseClass = ofCaseClass
var implicitOffset = -1 // use once
def param(): ValDef = {
val modStart = in.offset
@@ -1448,7 +1449,7 @@ object Parsers {
addFlag(mods | Param, Mutable)
} else {
if (mods.hasFlags) syntaxError("`val' or `var' expected")
- mods | Param | PrivateLocal
+ if (firstClauseOfCaseClass) mods | Param else mods | Param | PrivateLocal
}
}
}
@@ -1491,7 +1492,10 @@ object Parsers {
def clauses(): List[List[ValDef]] = {
newLineOptWhenFollowedBy(LPAREN)
if (in.token == LPAREN)
- paramClause() :: (if (implicitFlag == EmptyFlags) clauses() else Nil)
+ paramClause() :: {
+ firstClauseOfCaseClass = false
+ if (implicitFlag == EmptyFlags) clauses() else Nil
+ }
else Nil
}
val start = in.offset
@@ -1726,7 +1730,7 @@ object Parsers {
val tparams = typeParamClauseOpt(ParamOwner.Class)
val constr = atPos(in.offset) {
val cmods = constrModsOpt()
- val vparamss = paramClauses(name)
+ val vparamss = paramClauses(name, mods is Case)
ugen.constructor(cmods, vparamss)
}
val templ = templateOpt(constr)