diff options
author | Martin Odersky <odersky@gmail.com> | 2016-12-02 16:43:09 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2016-12-02 16:43:09 +0100 |
commit | 131fcf26e65d45bea89989ced209f394457a6d12 (patch) | |
tree | 7b167ec7b02d7dec99431c622fae8e41371413ea /compiler | |
parent | af39d28ed9a30274efaadd26573f43891550dc6d (diff) | |
download | dotty-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')
-rw-r--r-- | compiler/src/dotty/tools/dotc/transform/Memoize.scala | 8 |
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 { |