aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-09-12 12:35:39 +0200
committerMartin Odersky <odersky@gmail.com>2015-09-12 12:35:39 +0200
commit6fc42dd9ea03e30f475e4eaec3e1bf95c35de0d0 (patch)
tree74345d626ce38160db14bd7a4d1fd9974cfd95df /src/dotty/tools/dotc/parsing
parent76d083889d52a5abbf883e5577b1fd21c9a1d903 (diff)
downloaddotty-6fc42dd9ea03e30f475e4eaec3e1bf95c35de0d0.tar.gz
dotty-6fc42dd9ea03e30f475e4eaec3e1bf95c35de0d0.tar.bz2
dotty-6fc42dd9ea03e30f475e4eaec3e1bf95c35de0d0.zip
Add -language:Scala2 option
Avoids having to fix all occurrences of procedure syntax. Will be extended to other backwards compatible features.
Diffstat (limited to 'src/dotty/tools/dotc/parsing')
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala
index 69d7e5233..02a86022e 100644
--- a/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -258,6 +258,9 @@ object Parsers {
} finally inFunReturnType = saved
}
+ /** Cannot use ctx.featureEnabled because accessing the context would force too much */
+ private def scala2mode = ctx.settings.language.value.contains(nme.Scala2.toString)
+
/* ---------- TREE CONSTRUCTION ------------------------------------------- */
/** Convert tree to formal parameter list
@@ -1713,11 +1716,12 @@ object Parsers {
* DefSig ::= id [DefTypeParamClause] ParamClauses
*/
def defDefOrDcl(mods: Modifiers): Tree = atPos(tokenRange) {
+ def atScala2Brace = scala2mode && in.token == LBRACE
if (in.token == THIS) {
in.nextToken()
val vparamss = paramClauses(nme.CONSTRUCTOR)
val rhs = {
- accept(EQUALS)
+ if (!atScala2Brace) accept(EQUALS)
atPos(in.offset) { constrExpr() }
}
makeConstructor(Nil, vparamss, rhs).withMods(mods)
@@ -1725,10 +1729,10 @@ object Parsers {
val name = ident()
val tparams = typeParamClauseOpt(ParamOwner.Def)
val vparamss = paramClauses(name)
- val tpt = fromWithinReturnType(typedOpt())
+ var tpt = fromWithinReturnType(typedOpt())
val rhs =
if (tpt.isEmpty || in.token == EQUALS) {
- accept(EQUALS)
+ if (atScala2Brace) tpt = scalaUnit else accept(EQUALS)
expr()
} else EmptyTree
DefDef(name, tparams, vparamss, tpt, rhs).withMods(mods | Method)