aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Petrashko <dark@d-d.me>2016-04-18 14:43:49 +0200
committerDmitry Petrashko <dark@d-d.me>2016-04-18 14:43:49 +0200
commit8c9a3f7ce5fa7548f9611dc2a14900a5bd42c105 (patch)
tree06616b03e5b7f9c195683c4fc93983133e27b5f0
parent16b90f7ca501dc87f2c3a12ac2cac1c98da6b7b6 (diff)
parent371e8a7bf2db6ba17b5655265fbcde62c32de646 (diff)
downloaddotty-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.scala11
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
}
}