@@ -86,6 +86,7 @@ data BC =
8686 -- | reserve n more stack items (i.e. check there's space, grow if
8787 -- necessary)
8888 | RESERVE Int
89+ | RESERVENOALLOC Int
8990
9091 -- | move the top of stack up
9192 | ADDTOP Int
@@ -127,13 +128,13 @@ bc reg (SV (Loc i)) r = assign reg (L i) ++ clean r
127128bc reg (SApp False f vs) r =
128129 if argCount == 0
129130 then moveReg 0 vs ++ [STOREOLD, BASETOP 0, CALL f] ++ ret
130− else RESERVE argCount : moveReg 0 vs ++
131+ else RESERVENOALLOC argCount : moveReg 0 vs ++
131132 [STOREOLD, BASETOP 0, ADDTOP argCount, CALL f] ++ ret
132133 where
133134 ret = assign reg RVal ++ clean r
134135 argCount = length vs
135136bc reg (SApp True f vs) r
136− = RESERVE (length vs) : moveReg 0 vs
137+ = RESERVENOALLOC (length vs) : moveReg 0 vs
137138 ++ [SLIDE (length vs), TOPBASE (length vs), TAILCALL f]
138139bc reg (SForeign t fname args) r
139140 = FOREIGNCALL reg t fname (map farg args) : clean r