diff options
author | liu fengyun <liufengyunchina@gmail.com> | 2016-04-06 13:25:07 +0200 |
---|---|---|
committer | liu fengyun <liufengyunchina@gmail.com> | 2016-04-15 13:22:15 +0200 |
commit | 371e8a7bf2db6ba17b5655265fbcde62c32de646 (patch) | |
tree | e41f6c9928f6d91e7ca1d85c0dd149864f751be3 /src/dotty/tools | |
parent | 8af61ab2df46456fb943ce614c4d22b22a297239 (diff) | |
download | dotty-371e8a7bf2db6ba17b5655265fbcde62c32de646.tar.gz dotty-371e8a7bf2db6ba17b5655265fbcde62c32de646.tar.bz2 dotty-371e8a7bf2db6ba17b5655265fbcde62c32de646.zip |
Ycheck that all methods have method type
Diffstat (limited to 'src/dotty/tools')
-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 } } |