diff options
author | Araq <rumpf_a@web.de> | 2012-01-13 15:17:43 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-01-13 15:17:43 +0100 |
commit | 69997af8e9c02f855ce7728a471c2be915e798d6 (patch) | |
tree | 6bf3bbc5f8acaeb5671fda073a541d5b7783b364 | |
parent | c682a1da2b4f364718aaa5e895885043a6f7b873 (diff) | |
download | Nim-69997af8e9c02f855ce7728a471c2be915e798d6.tar.gz |
bugfix: endless recursion in 'semAfterMacroCall'
-rwxr-xr-x | compiler/sem.nim | 5 | ||||
-rwxr-xr-x | lib/system/alloc.nim | 1 |
2 files changed, 5 insertions, 1 deletions
diff --git a/compiler/sem.nim b/compiler/sem.nim index 37eedc384..99eca848b 100755 --- a/compiler/sem.nim +++ b/compiler/sem.nim @@ -99,6 +99,10 @@ proc semAndEvalConstExpr(c: PContext, n: PNode): PNode = include seminst, semcall proc semAfterMacroCall(c: PContext, n: PNode, s: PSym): PNode = + inc(evalTemplateCounter) + if evalTemplateCounter > 100: + GlobalError(s.info, errTemplateInstantiationTooNested) + result = n case s.typ.sons[0].kind of tyExpr: @@ -115,6 +119,7 @@ proc semAfterMacroCall(c: PContext, n: PNode, s: PSym): PNode = result = semExpr(c, result) result = fitNode(c, s.typ.sons[0], result) #GlobalError(s.info, errInvalidParamKindX, typeToString(s.typ.sons[0])) + dec(evalTemplateCounter) proc semMacroExpr(c: PContext, n: PNode, sym: PSym, semCheck: bool = true): PNode = diff --git a/lib/system/alloc.nim b/lib/system/alloc.nim index f2603586e..95fe2542d 100755 --- a/lib/system/alloc.nim +++ b/lib/system/alloc.nim @@ -562,7 +562,6 @@ proc rawAlloc0(a: var TMemRegion, requestedSize: int): pointer = proc rawDealloc(a: var TMemRegion, p: pointer) = sysAssert(allocInv(a), "rawDealloc: begin") - sysAssert(isAllocatedPtr(a, p), "rawDealloc: no allocated pointer!") var c = pageAddr(p) if isSmallChunk(c): # `p` is within a small chunk: |