fixes #2220; #2219; breaks #2022; for #2022 callsite needs to be used

This commit is contained in:
Araq 2015-03-09 15:02:28 +01:00
commit 1efb5174f2
12 changed files with 290 additions and 171 deletions

View file

@ -1,17 +1,42 @@
discard """
output: "Version 2 was called."
disabled: true
output: '''Version 2 was called.
This has the highest precedence.
This has the second-highest precedence.
This has the lowest precedence.'''
"""
# bug #2220
when true:
type A[T] = object
type B = A[int]
type A[T] = object
type B = A[int]
proc q[X](x: X) =
echo "Version 1 was called."
proc p[X](x: X) =
echo "Version 1 was called."
proc q(x: B) =
echo "Version 2 was called."
proc p(x: B) =
echo "Version 2 was called."
q(B()) # This call reported as ambiguous.
p(B()) # This call reported as ambiguous.
# bug #2219
template testPred(a: expr) =
block:
type A = object of RootObj
type B = object of A
type SomeA = A|A # A hack to make "A" a typeclass.
when a >= 3:
proc p[X](x: X) =
echo "This has the highest precedence."
when a >= 2:
proc p[X: A](x: X) =
echo "This has the second-highest precedence."
when a >= 1:
proc p[X: SomeA](x: X) =
echo "This has the lowest precedence."
p(B())
testPred(3)
testPred(2)
testPred(1)