aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/transform/Memoize.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-12-02 16:43:09 +0100
committerMartin Odersky <odersky@gmail.com>2016-12-02 16:43:09 +0100
commit131fcf26e65d45bea89989ced209f394457a6d12 (patch)
tree7b167ec7b02d7dec99431c622fae8e41371413ea /compiler/src/dotty/tools/dotc/transform/Memoize.scala
parentaf39d28ed9a30274efaadd26573f43891550dc6d (diff)
downloaddotty-131fcf26e65d45bea89989ced209f394457a6d12.tar.gz
dotty-131fcf26e65d45bea89989ced209f394457a6d12.tar.bz2
dotty-131fcf26e65d45bea89989ced209f394457a6d12.zip
Fine-tune post-conditions.
The previous post-condition failed if a Ycheck was introduced between memoize and constructors.
Diffstat (limited to 'compiler/src/dotty/tools/dotc/transform/Memoize.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/transform/Memoize.scala8
1 files changed, 5 insertions, 3 deletions
diff --git a/compiler/src/dotty/tools/dotc/transform/Memoize.scala b/compiler/src/dotty/tools/dotc/transform/Memoize.scala
index 01c240e3a..0314d4ec4 100644
--- a/compiler/src/dotty/tools/dotc/transform/Memoize.scala
+++ b/compiler/src/dotty/tools/dotc/transform/Memoize.scala
@@ -47,7 +47,9 @@ import Decorators._
}
tree match {
case ddef: DefDef
- if !ddef.symbol.is(Deferred) && ddef.rhs == EmptyTree =>
+ if !ddef.symbol.is(Deferred) &&
+ !ddef.symbol.isConstructor && // constructors bodies are added later at phase Constructors
+ ddef.rhs == EmptyTree =>
errorLackImplementation(ddef)
case tdef: TypeDef
if tdef.symbol.isClass && !tdef.symbol.is(Deferred) && tdef.rhs == EmptyTree =>
@@ -89,10 +91,10 @@ import Decorators._
}
lazy val field = sym.field.orElse(newField).asTerm
-
+
def adaptToField(tree: Tree) =
if (tree.isEmpty) tree else tree.ensureConforms(field.info.widen)
-
+
if (sym.is(Accessor, butNot = NoFieldNeeded))
if (sym.isGetter) {
def skipBlocks(t: Tree): Tree = t match {