diff options
author | Tiark Rompf <tiark.rompf@epfl.ch> | 2008-11-10 20:31:12 +0000 |
---|---|---|
committer | Tiark Rompf <tiark.rompf@epfl.ch> | 2008-11-10 20:31:12 +0000 |
commit | 8a69a88c9a72aaf9971fb4feb92b1c25c106ff3d (patch) | |
tree | c2cf883e6759ee6749ec0160b5ac7ab83cb5177e /test/files/run/t1500.scala | |
parent | 5d6c2cb4c663f4351f5eacb6c9f6f9b0cedf4966 (diff) | |
download | scala-8a69a88c9a72aaf9971fb4feb92b1c25c106ff3d.tar.gz scala-8a69a88c9a72aaf9971fb4feb92b1c25c106ff3d.tar.bz2 scala-8a69a88c9a72aaf9971fb4feb92b1c25c106ff3d.zip |
fixed #1500 and #1501
Diffstat (limited to 'test/files/run/t1500.scala')
-rw-r--r-- | test/files/run/t1500.scala | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/test/files/run/t1500.scala b/test/files/run/t1500.scala new file mode 100644 index 0000000000..a2f4192130 --- /dev/null +++ b/test/files/run/t1500.scala @@ -0,0 +1,44 @@ +import scala.tools.nsc._ + +object Test { + + /** + * Type inference overlooks constraints posed by type parameters in annotations on types. + */ + + val testCode = <code> + + class posingAs[A] extends TypeConstraint + + def resolve[A,B](x: A @posingAs[B]): B = x.asInstanceOf[B] + + val x = resolve(7: @posingAs[Any]) + + </code>.text + + def main(args: Array[String]) = { + + val tool = new Interpreter(new Settings()) + val global = tool.compiler + + import global._ + import definitions._ + + object checker extends AnnotationChecker { + + /** Check annotations to decide whether tpe1 <:< tpe2 */ + def annotationsConform(tpe1: Type, tpe2: Type): Boolean = { + + tpe1.attributes.forall(a1 => tpe2.attributes.forall(a2 => a1.atp <:< a2.atp)) + + } + } + + global.addAnnotationChecker(checker) + + tool.interpret(testCode) + + } + +} + |