diff options
author | Martin Odersky <odersky@gmail.com> | 2014-12-03 14:46:40 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-12-03 14:46:40 +0100 |
commit | c16e4b2bd8948be3a250373fb9eac98bb990e43a (patch) | |
tree | efc8cb734a2b017fe4ae9a19845094e27b52daca /src/dotty/tools/dotc/transform/Memoize.scala | |
parent | 5ff3d0fe4370c525c8d29f6483892d0bf59cd4c0 (diff) | |
download | dotty-c16e4b2bd8948be3a250373fb9eac98bb990e43a.tar.gz dotty-c16e4b2bd8948be3a250373fb9eac98bb990e43a.tar.bz2 dotty-c16e4b2bd8948be3a250373fb9eac98bb990e43a.zip |
Make sure all non-deferred methods are implemented
Checked by a new post condition after memoize.
Two bugs were detected and fixed by the condition
(1) Memoize did not implement getters and setters of ParamAccessors
(2) ResolveSuper did not implement super accessors in non-trait classes.
Diffstat (limited to 'src/dotty/tools/dotc/transform/Memoize.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/Memoize.scala | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/transform/Memoize.scala b/src/dotty/tools/dotc/transform/Memoize.scala index f4b00d6a5..17a84484a 100644 --- a/src/dotty/tools/dotc/transform/Memoize.scala +++ b/src/dotty/tools/dotc/transform/Memoize.scala @@ -43,6 +43,12 @@ import Decorators._ */ override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Mixin]) + override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = tree match { + case tree: DefDef if !tree.symbol.is(Lazy | Deferred) => + assert(!tree.rhs.isEmpty, i"unimplemented: $tree") + case _ => + } + override def prepareForDefDef(tree: DefDef)(implicit ctx: Context) = { val sym = tree.symbol if (sym.isGetter && !sym.is(NoFieldNeeded)) { @@ -74,7 +80,7 @@ import Decorators._ Thicket(fieldDef, getterDef) } else if (sym.isSetter) { - val Literal(Constant(())) = tree.rhs + if (!sym.is(ParamAccessor)) { val Literal(Constant(())) = tree.rhs } val initializer = Assign(ref(field), ref(tree.vparamss.head.head.symbol)) cpy.DefDef(tree)(rhs = transformFollowingDeep(initializer)) } @@ -82,5 +88,5 @@ import Decorators._ // neither getters nor setters else tree } - private val NoFieldNeeded = Lazy | Deferred | ParamAccessor | JavaDefined + private val NoFieldNeeded = Lazy | Deferred | JavaDefined }
\ No newline at end of file |