mirror of
https://github.com/nim-lang/Nim.git
synced 2026-09-08 22:47:27 +00:00
fixes #3338
This commit is contained in:
@@ -239,14 +239,20 @@ proc generateInstance(c: PContext, fn: PSym, pt: TIdTable,
|
||||
pushInfoContext(info)
|
||||
var entry = TInstantiation.new
|
||||
entry.sym = result
|
||||
newSeq(entry.concreteTypes, gp.len)
|
||||
# we need to compare both the generic types and the concrete types:
|
||||
# generic[void](), generic[int]()
|
||||
# see ttypeor.nim test.
|
||||
var i = 0
|
||||
newSeq(entry.concreteTypes, fn.typ.len+gp.len)
|
||||
for s in instantiateGenericParamList(c, gp, pt):
|
||||
addDecl(c, s)
|
||||
entry.concreteTypes[i] = s.typ
|
||||
inc i
|
||||
pushProcCon(c, result)
|
||||
instantiateProcType(c, pt, result, info)
|
||||
for j in 0 .. result.typ.len-1:
|
||||
entry.concreteTypes[i] = result.typ.sons[j]
|
||||
inc i
|
||||
if tfTriggersCompileTime in result.typ.flags:
|
||||
incl(result.flags, sfCompileTime)
|
||||
n.sons[genericParamsPos] = ast.emptyNode
|
||||
|
||||
@@ -75,8 +75,12 @@ proc searchInstTypes*(key: PType): PType =
|
||||
proc cacheTypeInst*(inst: PType) =
|
||||
# XXX: add to module's generics
|
||||
# update the refcount
|
||||
let genericTyp = inst.sons[0]
|
||||
genericTyp.sym.typeInstCache.safeAdd(inst)
|
||||
let gt = inst.sons[0]
|
||||
let t = if gt.kind == tyGenericBody: gt.lastSon else: gt
|
||||
if t.kind in {tyStatic, tyGenericParam, tyIter} + tyTypeClasses:
|
||||
return
|
||||
gt.sym.typeInstCache.safeAdd(inst)
|
||||
|
||||
|
||||
type
|
||||
TReplTypeVars* {.final.} = object
|
||||
|
||||
@@ -991,7 +991,9 @@ proc compareTypes*(x, y: PType,
|
||||
var c = initSameTypeClosure()
|
||||
c.cmp = cmp
|
||||
c.flags = flags
|
||||
result = sameTypeAux(x, y, c)
|
||||
if x == y: result = true
|
||||
elif x.isNil or y.isNil: result = false
|
||||
else: result = sameTypeAux(x, y, c)
|
||||
|
||||
proc inheritanceDiff*(a, b: PType): int =
|
||||
# | returns: 0 iff `a` == `b`
|
||||
|
||||
Reference in New Issue
Block a user