diff options
author | Martin Odersky <odersky@gmail.com> | 2015-09-12 12:35:39 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-09-12 12:35:39 +0200 |
commit | 6fc42dd9ea03e30f475e4eaec3e1bf95c35de0d0 (patch) | |
tree | 74345d626ce38160db14bd7a4d1fd9974cfd95df | |
parent | 76d083889d52a5abbf883e5577b1fd21c9a1d903 (diff) | |
download | dotty-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.
-rw-r--r-- | src/dotty/tools/dotc/core/StdNames.scala | 1 | ||||
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 10 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/StdNames.scala b/src/dotty/tools/dotc/core/StdNames.scala index 577e1ebf3..52318a386 100644 --- a/src/dotty/tools/dotc/core/StdNames.scala +++ b/src/dotty/tools/dotc/core/StdNames.scala @@ -332,6 +332,7 @@ object StdNames { val Ref: N = "Ref" val RootPackage: N = "RootPackage" val RootClass: N = "RootClass" + val Scala2: N = "Scala2" val Select: N = "Select" val StringContext: N = "StringContext" val This: N = "This" 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) |