diff options
author | Simon Hafner <hafnersimon@gmail.com> | 2015-05-13 12:06:05 -0500 |
---|---|---|
committer | Simon Hafner <hafnersimon@gmail.com> | 2015-05-13 12:06:05 -0500 |
commit | 9c4a74637db266c3cfcffcfb1e65bae982c6e4bf (patch) | |
tree | 495f50a989d7ab696ddb0b7b0e815c572ab27f3c /compiler/seminst.nim | |
parent | c55f884b5c0ebc0b637138a8de446ba1fd05acdf (diff) | |
parent | 0b184f2584221543a7dec9c8ae4a700533919e0c (diff) | |
download | Nim-9c4a74637db266c3cfcffcfb1e65bae982c6e4bf.tar.gz |
Merge branch 'devel' into jpoirier-realtimeGCTest
Diffstat (limited to 'compiler/seminst.nim')
-rw-r--r-- | compiler/seminst.nim | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/seminst.nim b/compiler/seminst.nim index dc36ecf34..b2aef63a8 100644 --- a/compiler/seminst.nim +++ b/compiler/seminst.nim @@ -176,7 +176,9 @@ proc instantiateProcType(c: PContext, pt: TIdTable, for i in 1 .. <result.len: # twrong_field_caching requires these 'resetIdTable' calls: - if i > 1: resetIdTable(cl.symMap) + if i > 1: + resetIdTable(cl.symMap) + resetIdTable(cl.localCache) result.sons[i] = replaceTypeVarsT(cl, result.sons[i]) propagateToOwner(result, result.sons[i]) internalAssert originalParams[i].kind == nkSym @@ -185,7 +187,9 @@ proc instantiateProcType(c: PContext, pt: TIdTable, let param = copySym(oldParam) param.owner = prc param.typ = result.sons[i] - param.ast = oldParam.ast.copyTree + if oldParam.ast != nil: + param.ast = fitNode(c, param.typ, oldParam.ast) + # don't be lazy here and call replaceTypeVarsN(cl, originalParams[i])! result.n.sons[i] = newSymNode(param) addDecl(c, param) @@ -196,6 +200,7 @@ proc instantiateProcType(c: PContext, pt: TIdTable, addDecl(c, result.n.sons[i].sym) resetIdTable(cl.symMap) + resetIdTable(cl.localCache) result.sons[0] = replaceTypeVarsT(cl, result.sons[0]) result.n.sons[0] = originalParams[0].copyTree |