fix #931 and few more tests

This commit is contained in:
Zahary Karadjov
2014-02-18 20:04:58 +02:00
parent f13a836972
commit 0bbf6081d0
4 changed files with 17 additions and 17 deletions

View File

@@ -705,7 +705,6 @@ proc liftParamType(c: PContext, procKind: TSymKind, genericParams: PNode,
# result.rawAddSon(copyType(paramType.sons[i], getCurrOwner(), true))
result = instGenericContainer(c, paramType.sym.info, result,
allowMetaTypes = true)
result.lastSon.shouldHaveMeta
result = newTypeWithSons(c, tyCompositeTypeClass, @[paramType, result])
result = addImplicitGeneric(result)

View File

@@ -220,7 +220,7 @@ proc handleGenericInvokation(cl: var TReplTypeVars, t: PType): PType =
# is difficult to handle:
var body = t.sons[0]
if body.kind != tyGenericBody: internalError(cl.info, "no generic body")
var header: PType = nil
var header: PType = t
# search for some instantiation here:
if cl.allowMetaTypes:
result = PType(idTableGet(cl.localCache, t))
@@ -232,11 +232,13 @@ proc handleGenericInvokation(cl: var TReplTypeVars, t: PType): PType =
if x.kind == tyGenericParam:
x = lookupTypeVar(cl, x)
if x != nil:
if header == nil: header = instCopyType(cl, t)
if header == t: header = instCopyType(cl, t)
header.sons[i] = x
propagateToOwner(header, x)
else:
propagateToOwner(header, x)
if header != nil:
if header != t:
# search again after first pass:
result = searchInstTypes(header)
if result != nil: return
@@ -244,6 +246,7 @@ proc handleGenericInvokation(cl: var TReplTypeVars, t: PType): PType =
header = instCopyType(cl, t)
result = newType(tyGenericInst, t.sons[0].owner)
result.flags = header.flags
# be careful not to propagate unnecessary flags here (don't use rawAddSon)
result.sons = @[header.sons[0]]
# ugh need another pass for deeply recursive generic types (e.g. PActor)

View File

@@ -1,10 +1,10 @@
discard """
msg: '''
int
float
TFoo
TFoo
'''
msg: '''int int
float float
int int
TFoo TFoo
int float
TFoo TFoo'''
"""
import typetraits
@@ -24,9 +24,8 @@ template reject(e: expr) =
proc genericParamRepeated[T: typedesc](a: T, b: T) =
static:
echo a.name
echo b.name
echo a.name, " ", b.name
accept genericParamRepeated(int, int)
accept genericParamRepeated(float, float)
@@ -35,8 +34,7 @@ reject genericParamRepeated(int, float)
proc genericParamOnce[T: typedesc](a, b: T) =
static:
echo a.name
echo b.name
echo a.name, " ", b.name
accept genericParamOnce(int, int)
accept genericParamOnce(TFoo, TFoo)
@@ -68,8 +66,7 @@ reject typePairs2(string, int, TBAR, TBAR)
proc dontBind(a: typedesc, b: typedesc) =
static:
echo a.name
echo b.name
echo a.name, " ", b.name
accept dontBind(int, float)
accept dontBind(TFoo, TFoo)

1
tests/threads/nimrod.cfg Normal file
View File

@@ -0,0 +1 @@
threads:on