From 6555d89c2c7f403a45800903457ee62a62ff327a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arne=20D=C3=B6ring?= Date: Thu, 24 Jan 2019 11:33:44 +0100 Subject: [PATCH] free some registers after usage, allows more complex macros (#10443) --- compiler/vmgen.nim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index e7993dfb2..f87821da4 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -326,8 +326,14 @@ proc genWhile(c: PCtx; n: PNode) = c.patch(L2) proc genBlock(c: PCtx; n: PNode; dest: var TDest) = + let oldRegisterCount = c.prc.maxSlots withBlock(n.sons[0].sym): c.gen(n.sons[1], dest) + + for i in oldRegisterCount ..< c.prc.maxSlots: + if c.prc.slots[i].kind in {slotFixedVar, slotFixedLet}: + c.prc.slots[i] = (inUse: false, kind: slotEmpty) + c.clearDest(n, dest) proc genBreak(c: PCtx; n: PNode) =