fix #6462
This commit is contained in:
parent
057d5789ba
commit
2ceee884fe
3 changed files with 27 additions and 2 deletions
|
|
@ -683,9 +683,10 @@ proc genDeref(p: BProc, e: PNode, d: var TLoc; enforceDeref=false) =
|
||||||
d.storage = OnHeap
|
d.storage = OnHeap
|
||||||
else:
|
else:
|
||||||
var a: TLoc
|
var a: TLoc
|
||||||
var typ = skipTypes(e.sons[0].typ, abstractInst)
|
var typ = e.sons[0].typ
|
||||||
if typ.kind in {tyUserTypeClass, tyUserTypeClassInst} and typ.isResolvedUserTypeClass:
|
if typ.kind in {tyUserTypeClass, tyUserTypeClassInst} and typ.isResolvedUserTypeClass:
|
||||||
typ = typ.lastSon
|
typ = typ.lastSon
|
||||||
|
typ = typ.skipTypes(abstractInst)
|
||||||
if typ.kind == tyVar and tfVarIsPtr notin typ.flags and p.module.compileToCpp and e.sons[0].kind == nkHiddenAddr:
|
if typ.kind == tyVar and tfVarIsPtr notin typ.flags and p.module.compileToCpp and e.sons[0].kind == nkHiddenAddr:
|
||||||
initLocExprSingleUse(p, e[0][0], d)
|
initLocExprSingleUse(p, e[0][0], d)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -441,9 +441,10 @@ proc hasEmpty(typ: PType): bool =
|
||||||
result = result or hasEmpty(s)
|
result = result or hasEmpty(s)
|
||||||
|
|
||||||
proc makeDeref(n: PNode): PNode =
|
proc makeDeref(n: PNode): PNode =
|
||||||
var t = skipTypes(n.typ, {tyGenericInst, tyAlias})
|
var t = n.typ
|
||||||
if t.kind in tyUserTypeClasses and t.isResolvedUserTypeClass:
|
if t.kind in tyUserTypeClasses and t.isResolvedUserTypeClass:
|
||||||
t = t.lastSon
|
t = t.lastSon
|
||||||
|
t = skipTypes(t, {tyGenericInst, tyAlias})
|
||||||
result = n
|
result = n
|
||||||
if t.kind == tyVar:
|
if t.kind == tyVar:
|
||||||
result = newNodeIT(nkHiddenDeref, n.info, t.sons[0])
|
result = newNodeIT(nkHiddenDeref, n.info, t.sons[0])
|
||||||
|
|
|
||||||
23
tests/concepts/t6462.nim
Normal file
23
tests/concepts/t6462.nim
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
discard """
|
||||||
|
output: "true"
|
||||||
|
"""
|
||||||
|
|
||||||
|
import future
|
||||||
|
|
||||||
|
type
|
||||||
|
FilterMixin*[T] = ref object
|
||||||
|
test*: (T) -> bool
|
||||||
|
trans*: (T) -> T
|
||||||
|
|
||||||
|
SeqGen*[T] = ref object
|
||||||
|
fil*: FilterMixin[T]
|
||||||
|
|
||||||
|
WithFilter[T] = concept a
|
||||||
|
a.fil is FilterMixin[T]
|
||||||
|
|
||||||
|
proc test*[T](a: WithFilter[T]): (T) -> bool =
|
||||||
|
a.fil.test
|
||||||
|
|
||||||
|
var s = SeqGen[int](fil: FilterMixin[int](test: nil, trans: nil))
|
||||||
|
echo s.test() == nil
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue