aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/transform/ExplicitOuter.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-03-11 16:14:35 +0100
committerMartin Odersky <odersky@gmail.com>2015-03-11 16:17:19 +0100
commit72dd9ea1ccbb98ee2dc4bf080772e8d9f13f3d75 (patch)
treea734f0862ceb8f8a177d45045e47afef7df91f8d /src/dotty/tools/dotc/transform/ExplicitOuter.scala
parent8195baf78b3305710174fca6f0e3ba58e60ca156 (diff)
downloaddotty-72dd9ea1ccbb98ee2dc4bf080772e8d9f13f3d75.tar.gz
dotty-72dd9ea1ccbb98ee2dc4bf080772e8d9f13f3d75.tar.bz2
dotty-72dd9ea1ccbb98ee2dc4bf080772e8d9f13f3d75.zip
Fixes to class field initialization
Class fields were not initialized from constructor parameters before. This is now fixed. The fix uncovered some problems with the treatement of outer parameters which are now also corrected.
Diffstat (limited to 'src/dotty/tools/dotc/transform/ExplicitOuter.scala')
-rw-r--r--src/dotty/tools/dotc/transform/ExplicitOuter.scala9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/transform/ExplicitOuter.scala b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
index ba74de0a3..13462693b 100644
--- a/src/dotty/tools/dotc/transform/ExplicitOuter.scala
+++ b/src/dotty/tools/dotc/transform/ExplicitOuter.scala
@@ -297,5 +297,14 @@ object ExplicitOuter {
case ex: ClassCastException =>
throw new ClassCastException(i"no path exists from ${ctx.owner.enclosingClass} to $toCls")
}
+
+ /** The outer parameter definition of a constructor if it needs one */
+ def paramDefs(constr: Symbol): List[ValDef] =
+ if (constr.isConstructor && hasOuterParam(constr.owner.asClass)) {
+ val MethodType(outerName :: _, outerType :: _) = constr.info
+ val outerSym = ctx.newSymbol(constr, outerName, Param, outerType)
+ ValDef(outerSym) :: Nil
+ }
+ else Nil
}
} \ No newline at end of file