summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-01-13 15:17:43 +0100
committerAraq <rumpf_a@web.de>2012-01-13 15:17:43 +0100
commit69997af8e9c02f855ce7728a471c2be915e798d6 (patch)
tree6bf3bbc5f8acaeb5671fda073a541d5b7783b364
parentc682a1da2b4f364718aaa5e895885043a6f7b873 (diff)
downloadNim-69997af8e9c02f855ce7728a471c2be915e798d6.tar.gz
bugfix: endless recursion in 'semAfterMacroCall'
-rwxr-xr-xcompiler/sem.nim5
-rwxr-xr-xlib/system/alloc.nim1
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: