aboutsummaryrefslogtreecommitdiff
path: root/src/interp/g-opt.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-11-29 19:19:54 +0000
committerdos-reis <gdr@axiomatics.org>2011-11-29 19:19:54 +0000
commit63df59e7ab921baff00e47e915b4df1c441b2381 (patch)
tree8c9905242ddb37483821c772a381d17fb7f8dfdd /src/interp/g-opt.boot
parent53e9355c2e91561b71c89a0b79eb3f3d2645b02f (diff)
downloadopen-axiom-63df59e7ab921baff00e47e915b4df1c441b2381.tar.gz
* boot/tokens.boot (absKind, absParms, absBody): New selectors.
* interp/compiler.boot (canReturn): Handle %lambda forms. (compUnnamedMapping): Generate %lambda forms. Don't optimize them yet. * interp/g-opt.boot: %lambda forms are side-effect free. * interp/lisp-backend.boot: Translate them.
Diffstat (limited to 'src/interp/g-opt.boot')
-rw-r--r--src/interp/g-opt.boot8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot
index a859c67a..c92e326e 100644
--- a/src/interp/g-opt.boot
+++ b/src/interp/g-opt.boot
@@ -95,7 +95,7 @@ changeVariableDefinitionToStore(form,vars) ==
changeVariableDefinitionToStore(third form,vars')
vars
abstractionOperator? form.op =>
- changeVariableDefinitionToStore(third form,[:second form,:vars])
+ changeVariableDefinitionToStore(form.absBody,[:form.absParms,:vars])
vars
for x in form repeat
vars := changeVariableDefinitionToStore(x,vars)
@@ -180,8 +180,8 @@ simplifyVMForm x ==
atomic? x => x
x.op is 'CLOSEDFN => x
x.op isnt [.,:.] =>
- x is [op,vars,body] and abstractionOperator? op =>
- third(x) := simplifyVMForm body
+ symbol? x.op and abstractionOperator? x.op =>
+ x.absBody := simplifyVMForm x.absBody
x
if x.op is 'IF then
resetTo(x,optIF2COND x)
@@ -455,7 +455,7 @@ $VMsideEffectFreeOperators ==
%bitveccopy %bitvecconc %bitveclength %bitvecref %bitveceq %bitveclt
%before? %equal %sptreq %ident? %property %tref
%writeString %writeNewline %writeLine
- %void %retract %pullback)
+ %void %retract %pullback %lambda %closure)
++ List of simple VM operators
$simpleVMoperators ==