diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2012-10-02 21:01:10 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2012-10-02 21:18:01 +0200 |
commit | 0720157cd7d82db6c1efea615c2e78565b4ada0e (patch) | |
tree | 6bb7c0f165e3c1977b1c5537f9da22aa27de901d /test/files | |
parent | be49f36154efa78c3dcbeba394aa6ec2b5e764ec (diff) | |
download | scala-0720157cd7d82db6c1efea615c2e78565b4ada0e.tar.gz scala-0720157cd7d82db6c1efea615c2e78565b4ada0e.tar.bz2 scala-0720157cd7d82db6c1efea615c2e78565b4ada0e.zip |
SI-6436 Handle ambiguous string processors
Before, we got in an inifinite loop by chasing
the error typed result of adaptToMemberWithArgs.
One point of befuddlement remains: why did t6436 and t6436b
behave differently before this change?
Diffstat (limited to 'test/files')
-rw-r--r-- | test/files/neg/t6436.check | 10 | ||||
-rw-r--r-- | test/files/neg/t6436.scala | 9 | ||||
-rw-r--r-- | test/files/neg/t6436b.check | 10 | ||||
-rw-r--r-- | test/files/neg/t6436b.scala | 9 |
4 files changed, 38 insertions, 0 deletions
diff --git a/test/files/neg/t6436.check b/test/files/neg/t6436.check new file mode 100644 index 0000000000..ecb28f9100 --- /dev/null +++ b/test/files/neg/t6436.check @@ -0,0 +1,10 @@ +t6436.scala:8: error: type mismatch; + found : StringContext + required: ?{def q: ?} +Note that implicit conversions are not applicable because they are ambiguous: + both method foo1 in object quasiquotes of type (ctx: StringContext)Object{def q: Nothing} + and method foo2 in object quasiquotes of type (ctx: StringContext)Object{def q: Nothing} + are possible conversion functions from StringContext to ?{def q: ?} + println(q"a") + ^ +one error found diff --git a/test/files/neg/t6436.scala b/test/files/neg/t6436.scala new file mode 100644 index 0000000000..2c40502538 --- /dev/null +++ b/test/files/neg/t6436.scala @@ -0,0 +1,9 @@ +object quasiquotes { + implicit def foo1(ctx: StringContext) = new { def q = ??? } + implicit def foo2(ctx: StringContext) = new { def q = ??? } +} + +object Test extends App { + import quasiquotes._ + println(q"a") +} diff --git a/test/files/neg/t6436b.check b/test/files/neg/t6436b.check new file mode 100644 index 0000000000..b3c2d73739 --- /dev/null +++ b/test/files/neg/t6436b.check @@ -0,0 +1,10 @@ +t6436b.scala:8: error: type mismatch; + found : StringContext + required: ?{def q: ?} +Note that implicit conversions are not applicable because they are ambiguous: + both method foo1 in object quasiquotes of type (ctx: StringContext)Object{def q: Nothing} + and method foo2 in object quasiquotes of type (ctx: StringContext)Object{def q: Nothing} + are possible conversion functions from StringContext to ?{def q: ?} + println(StringContext("a").q()) + ^ +one error found diff --git a/test/files/neg/t6436b.scala b/test/files/neg/t6436b.scala new file mode 100644 index 0000000000..8023329e90 --- /dev/null +++ b/test/files/neg/t6436b.scala @@ -0,0 +1,9 @@ +object quasiquotes { + implicit def foo1(ctx: StringContext) = new { def q = ??? } + implicit def foo2(ctx: StringContext) = new { def q = ??? } +} + +object Test extends App { + import quasiquotes._ + println(StringContext("a").q()) +} |