@@ -86,6 +86,7 @@ data BC =
86 -- | reserve n more stack items (i.e. check there's space, grow if
86 -- | reserve n more stack items (i.e. check there's space, grow if
87 -- necessary)
87 -- necessary)
88 | RESERVE Int
88 | RESERVE Int
90 -- | move the top of stack up
91 -- | move the top of stack up
91 | ADDTOP Int
92 | ADDTOP Int
@@ -127,13 +128,13 @@ bc reg (SV (Loc i)) r = assign reg (L i) ++ clean r
127bc reg (SApp False f vs) r =
128bc reg (SApp False f vs) r =
128 if argCount == 0
129 if argCount == 0
129 then moveReg 0 vs ++ [STOREOLD, BASETOP 0, CALL f] ++ ret
130 then moveReg 0 vs ++ [STOREOLD, BASETOP 0, CALL f] ++ ret
130− else RESERVE argCount : moveReg 0 vs ++
131+ else RESERVENOALLOC argCount : moveReg 0 vs ++
131 [STOREOLD, BASETOP 0, ADDTOP argCount, CALL f] ++ ret
132 [STOREOLD, BASETOP 0, ADDTOP argCount, CALL f] ++ ret
133 ret = assign reg RVal ++ clean r
134 ret = assign reg RVal ++ clean r
134 argCount = length vs
135 argCount = length vs
135bc reg (SApp True f vs) r
136bc reg (SApp True f vs) r
136− = RESERVE (length vs) : moveReg 0 vs
137+ = RESERVENOALLOC (length vs) : moveReg 0 vs
137 ++ [SLIDE (length vs), TOPBASE (length vs), TAILCALL f]
138 ++ [SLIDE (length vs), TOPBASE (length vs), TAILCALL f]
138bc reg (SForeign t fname args) r
139bc reg (SForeign t fname args) r
139 = FOREIGNCALL reg t fname (map farg args) : clean r
140 = FOREIGNCALL reg t fname (map farg args) : clean r