fix tforwardgeneric

This commit is contained in:
Zahary Karadjov
2013-05-26 15:12:09 +03:00
parent 46813bbe4e
commit d82a032566
4 changed files with 8 additions and 6 deletions

View File

@@ -1285,9 +1285,9 @@ proc getStrOrChar*(a: PNode): string =
proc isGenericRoutine*(s: PSym): bool =
case s.kind
of skProc, skTemplate, skMacro, skIterator, skMethod, skConverter:
result = s.ast != nil and s.ast[genericParamsPos].kind != nkEmpty
result = sfFromGeneric in s.flags
else: nil
proc isRoutine*(s: PSym): bool {.inline.} =
result = s.kind in {skProc, skTemplate, skMacro, skIterator, skMethod,
skConverter}

View File

@@ -288,6 +288,9 @@ proc interestingVar(s: PSym): bool {.inline.} =
proc semCaptureSym*(s, owner: PSym) =
if interestingVar(s) and owner.id != s.owner.id and s.kind != skResult:
if owner.typ != nil and not isGenericRoutine(owner):
# XXX: is this really safe?
# if we capture a var from another generic routine,
# it won't be consider captured.
owner.typ.callConv = ccClosure
#echo "semCaptureSym ", owner.name.s, owner.id, " ", s.name.s, s.id
# since the analysis is not entirely correct, we don't set 'tfCapturesEnv'

View File

@@ -125,8 +125,6 @@ proc fixupInstantiatedSymbols(c: PContext, s: PSym) =
openScope(c)
var n = oldPrc.ast
n.sons[bodyPos] = copyTree(s.getBody)
if n.sons[paramsPos].kind != nkEmpty:
addParams(c, oldPrc.typ.n, oldPrc.kind)
instantiateBody(c, n, oldPrc)
closeScope(c)
popInfoContext()

View File

@@ -1,5 +1,5 @@
discard """
output: "1.0000000000000000e+00 10"
output: "1.1000000000000001e+00 11"
ccodecheck: "!@'ClEnv'"
"""
@@ -8,5 +8,6 @@ proc p[T](a, b: T): T
echo p(0.9, 0.1), " ", p(9, 1)
proc p[T](a, b: T): T =
result = a + b
let c = b
result = a + b + c