aboutsummaryrefslogtreecommitdiff
path: root/src/interp/g-util.boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/g-util.boot')
-rw-r--r--src/interp/g-util.boot9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/interp/g-util.boot b/src/interp/g-util.boot
index ed134390..bf4a02ee 100644
--- a/src/interp/g-util.boot
+++ b/src/interp/g-util.boot
@@ -227,11 +227,16 @@ expandEq ["%eq",:args] ==
["EQ",:expandToVMForm args]
-- Local variable bindings
-expandBind ["%bind",inits,body] ==
+expandBind ['%bind,inits,body] ==
body := expandToVMForm body
inits := [[first x,expandToVMForm second x] for x in inits]
+ n := #inits
+ n = 0 => body
-- FIXME: we should consider turning LET* into LET or direct inlining.
- ["LET*",inits,body]
+ op :=
+ n = 1 => 'LET
+ 'LET_*
+ [op,inits,body]
-- Memory load/store