diff options
author | Paul Phillips <paulp@improving.org> | 2010-10-27 21:08:48 +0000 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2010-10-27 21:08:48 +0000 |
commit | 683af5895e3dead6a6dac3c9939a7bcd2c7bad18 (patch) | |
tree | 21eb75593208fb124c29393b680044616c8ccfde /test/files/run/bug3964.scala | |
parent | ba6fbcef841743e5e8690a7be8f86148a9513557 (diff) | |
download | scala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.tar.gz scala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.tar.bz2 scala-683af5895e3dead6a6dac3c9939a7bcd2c7bad18.zip |
A double goodness whammy involving type inferen...
A double goodness whammy involving type inference at the borders.
1) Implicit search preserves singleton type fidelity. 2) Unification of
parent bounds is (closer to) correct.
Result of 1: "implicit def f(x: Foo.type)" will convert object Foo.
Result of 2: "new Trait[Int] { }" may enjoy its type constructor being
inferred, no longer foiled by the anonymous class.
Also included are some clarity-enhnancing renamings and refactorings.
Performance note: I heavily benchmarked the change to isSubArgs and it
is reproducibly faster than the previous implementation. Numbers and
methodology available upon request.
Closes #2693, #3964. Review by moors, who wrote most of this patch but
might like to review the comments.
Diffstat (limited to 'test/files/run/bug3964.scala')
-rw-r--r-- | test/files/run/bug3964.scala | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/test/files/run/bug3964.scala b/test/files/run/bug3964.scala new file mode 100644 index 0000000000..df1eb716e8 --- /dev/null +++ b/test/files/run/bug3964.scala @@ -0,0 +1,16 @@ +object Test { + class Base + object Bob extends Base + class Foo { def bippy = 42 } + class Oof { def bippy = -21 } + + // I am more specific than you + implicit def f1(x: Bob.type): Foo = new Foo + implicit def f2(x: Base): Oof = new Oof + + def main(args: Array[String]): Unit = { + // this would of course print an unambiguous 42 + println(Bob.bippy) + println((new Base).bippy) + } +} |