diff options
author | Dmitry Petrashko <dark@d-d.me> | 2016-04-18 14:43:49 +0200 |
---|---|---|
committer | Dmitry Petrashko <dark@d-d.me> | 2016-04-18 14:43:49 +0200 |
commit | 8c9a3f7ce5fa7548f9611dc2a14900a5bd42c105 (patch) | |
tree | 06616b03e5b7f9c195683c4fc93983133e27b5f0 | |
parent | 16b90f7ca501dc87f2c3a12ac2cac1c98da6b7b6 (diff) | |
parent | 371e8a7bf2db6ba17b5655265fbcde62c32de646 (diff) | |
download | dotty-8c9a3f7ce5fa7548f9611dc2a14900a5bd42c105.tar.gz dotty-8c9a3f7ce5fa7548f9611dc2a14900a5bd42c105.tar.bz2 dotty-8c9a3f7ce5fa7548f9611dc2a14900a5bd42c105.zip |
Merge pull request #1205 from dotty-staging/method-check
Ycheck that all methods have method type
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 39f407f9b..007869e06 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -311,6 +311,13 @@ class TreeChecker extends Phase with SymTransformer { tree } + /** Check that all methods have MethodicType */ + def isMethodType(pt: Type)(implicit ctx: Context): Boolean = pt match { + case at: AnnotatedType => isMethodType(at.tpe) + case _: MethodicType => true // MethodType, ExprType, PolyType + case _ => false + } + override def typedIdent(tree: untpd.Ident, pt: Type)(implicit ctx: Context): Tree = { assert(tree.isTerm || !ctx.isAfterTyper, tree.show + " at " + ctx.phase) assert(tree.isType || !needsSelect(tree.tpe), i"bad type ${tree.tpe} for $tree # ${tree.uniqueId}") @@ -369,7 +376,9 @@ class TreeChecker extends Phase with SymTransformer { withDefinedSyms(ddef.tparams) { withDefinedSymss(ddef.vparamss) { if (!sym.isClassConstructor) assert(isValidJVMMethodName(sym.name), s"${sym.fullName} name is invalid on jvm") - super.typedDefDef(ddef, sym) + val tpdTree = super.typedDefDef(ddef, sym) + assert(isMethodType(sym.info), i"wrong type, expect a method type for ${sym.fullName}, but found: ${sym.info}") + tpdTree } } |