From 131fcf26e65d45bea89989ced209f394457a6d12 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 2 Dec 2016 16:43:09 +0100 Subject: Fine-tune post-conditions. The previous post-condition failed if a Ycheck was introduced between memoize and constructors. --- compiler/src/dotty/tools/dotc/transform/Memoize.scala | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'compiler/src/dotty/tools/dotc/transform/Memoize.scala') 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 { -- cgit v1.2.3