Reset typedescMatched before paramTypesMatch (#8250)
The flag should not be carried out across different parameters. Fixes #7794
This commit is contained in:
parent
dec97924a4
commit
c6671776a1
2 changed files with 18 additions and 0 deletions
|
|
@ -2231,6 +2231,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode,
|
||||||
m.state = csNoMatch
|
m.state = csNoMatch
|
||||||
return
|
return
|
||||||
m.baseTypeMatch = false
|
m.baseTypeMatch = false
|
||||||
|
m.typedescMatched = false
|
||||||
n.sons[a].sons[1] = prepareOperand(c, formal.typ, n.sons[a].sons[1])
|
n.sons[a].sons[1] = prepareOperand(c, formal.typ, n.sons[a].sons[1])
|
||||||
n.sons[a].typ = n.sons[a].sons[1].typ
|
n.sons[a].typ = n.sons[a].sons[1].typ
|
||||||
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
||||||
|
|
@ -2266,6 +2267,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode,
|
||||||
# beware of the side-effects in 'prepareOperand'! So only do it for
|
# beware of the side-effects in 'prepareOperand'! So only do it for
|
||||||
# varargs matching. See tests/metatype/tstatic_overloading.
|
# varargs matching. See tests/metatype/tstatic_overloading.
|
||||||
m.baseTypeMatch = false
|
m.baseTypeMatch = false
|
||||||
|
m.typedescMatched = false
|
||||||
incl(marker, formal.position)
|
incl(marker, formal.position)
|
||||||
n.sons[a] = prepareOperand(c, formal.typ, n.sons[a])
|
n.sons[a] = prepareOperand(c, formal.typ, n.sons[a])
|
||||||
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
||||||
|
|
@ -2300,6 +2302,7 @@ proc matchesAux(c: PContext, n, nOrig: PNode,
|
||||||
addSon(container, n.sons[a])
|
addSon(container, n.sons[a])
|
||||||
else:
|
else:
|
||||||
m.baseTypeMatch = false
|
m.baseTypeMatch = false
|
||||||
|
m.typedescMatched = false
|
||||||
n.sons[a] = prepareOperand(c, formal.typ, n.sons[a])
|
n.sons[a] = prepareOperand(c, formal.typ, n.sons[a])
|
||||||
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
var arg = paramTypesMatch(m, formal.typ, n.sons[a].typ,
|
||||||
n.sons[a], nOrig.sons[a])
|
n.sons[a], nOrig.sons[a])
|
||||||
|
|
|
||||||
15
tests/generics/t7794.nim
Normal file
15
tests/generics/t7794.nim
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
discard """
|
||||||
|
output: '''
|
||||||
|
10
|
||||||
|
2.0
|
||||||
|
'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
type
|
||||||
|
Data*[T:SomeNumber, U:SomeReal] = ref object
|
||||||
|
x*: T
|
||||||
|
value*: U
|
||||||
|
|
||||||
|
var d = Data[int, float64](x:10.int, value:2'f64)
|
||||||
|
echo d.x
|
||||||
|
echo d.value
|
||||||
Loading…
Add table
Add a link
Reference in a new issue