This commit is contained in:
Zahary Karadjov
2017-10-06 16:36:26 +03:00
committed by Araq
parent 057d5789ba
commit 2ceee884fe
3 changed files with 27 additions and 2 deletions

View File

@@ -683,9 +683,10 @@ proc genDeref(p: BProc, e: PNode, d: var TLoc; enforceDeref=false) =
d.storage = OnHeap
else:
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:
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:
initLocExprSingleUse(p, e[0][0], d)
return

View File

@@ -441,9 +441,10 @@ proc hasEmpty(typ: PType): bool =
result = result or hasEmpty(s)
proc makeDeref(n: PNode): PNode =
var t = skipTypes(n.typ, {tyGenericInst, tyAlias})
var t = n.typ
if t.kind in tyUserTypeClasses and t.isResolvedUserTypeClass:
t = t.lastSon
t = skipTypes(t, {tyGenericInst, tyAlias})
result = n
if t.kind == tyVar:
result = newNodeIT(nkHiddenDeref, n.info, t.sons[0])

23
tests/concepts/t6462.nim Normal file
View 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