diff options
author | Dmitry Petrashko <dark@d-d.me> | 2016-06-30 14:09:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-06-30 14:09:11 +0200 |
commit | 7e6968cbcad9eaaacf625d3e781be4b6fae4da33 (patch) | |
tree | be73d7adef1de84f82a3b19a6a5b0fdd5aaee35e /src | |
parent | a69d1b37dc56e6d615fcc0db86ca7c73970029f6 (diff) | |
parent | f7a995791506935304a7f976be4791b32d41ca40 (diff) | |
download | dotty-7e6968cbcad9eaaacf625d3e781be4b6fae4da33.tar.gz dotty-7e6968cbcad9eaaacf625d3e781be4b6fae4da33.tar.bz2 dotty-7e6968cbcad9eaaacf625d3e781be4b6fae4da33.zip |
Merge pull request #1338 from dotty-jvican/non-deferred-ycheck
Check non-deferred declarations are implemented
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/transform/Memoize.scala | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/transform/Memoize.scala b/src/dotty/tools/dotc/transform/Memoize.scala index 1e4f8831b..01c240e3a 100644 --- a/src/dotty/tools/dotc/transform/Memoize.scala +++ b/src/dotty/tools/dotc/transform/Memoize.scala @@ -36,6 +36,27 @@ import Decorators._ override def phaseName = "memoize" + /* Makes sure that, after getters and constructors gen, there doesn't + * exist non-deferred definitions that are not implemented. */ + override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = { + def errorLackImplementation(t: Tree) = { + val firstPhaseId = t.symbol.initial.validFor.firstPhaseId + val definingPhase = ctx.withPhase(firstPhaseId).phase.prev + throw new AssertionError( + i"Non-deferred definition introduced by $definingPhase lacks implementation: $t") + } + tree match { + case ddef: DefDef + if !ddef.symbol.is(Deferred) && ddef.rhs == EmptyTree => + errorLackImplementation(ddef) + case tdef: TypeDef + if tdef.symbol.isClass && !tdef.symbol.is(Deferred) && tdef.rhs == EmptyTree => + errorLackImplementation(tdef) + case _ => + } + super.checkPostCondition(tree) + } + /** Should run after mixin so that fields get generated in the * class that contains the concrete getter rather than the trait * that defines it. |