summary refs log tree commit diff stats
path: root/compiler
diff options
context:
space:
mode:
authorZahary Karadjov <zahary@gmail.com>2013-05-26 15:12:09 +0300
committerZahary Karadjov <zahary@gmail.com>2013-05-26 15:12:09 +0300
commitd82a032566de1612ff1ed2d82cc7ec2bd58267d7 (patch)
treed404952f36be4a51dee51111212588b359b76e50 /compiler
parent46813bbe4e1423181521d4792b9af7593f48fa1f (diff)
downloadNim-d82a032566de1612ff1ed2d82cc7ec2bd58267d7.tar.gz
fix tforwardgeneric
Diffstat (limited to 'compiler')
-rw-r--r--compiler/ast.nim4
-rw-r--r--compiler/lambdalifting.nim3
-rw-r--r--compiler/seminst.nim2
3 files changed, 5 insertions, 4 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 174c3f94b..5f3ce2613 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -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}
diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim
index 8d4946ab5..163ea4136 100644
--- a/compiler/lambdalifting.nim
+++ b/compiler/lambdalifting.nim
@@ -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'
diff --git a/compiler/seminst.nim b/compiler/seminst.nim
index 35ed00965..431635b9c 100644
--- a/compiler/seminst.nim
+++ b/compiler/seminst.nim
@@ -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()