aboutsummaryrefslogtreecommitdiff
path: root/src/interp/g-opt.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-12-05 17:03:42 +0000
committerdos-reis <gdr@axiomatics.org>2011-12-05 17:03:42 +0000
commit8463a17556bf5cbc2911f4c880a6322d718c2f52 (patch)
tree7f4abf766e9bf943c83b04326d15213416f6418e /src/interp/g-opt.boot
parenta92d137e0a0de4abb7d680608b32e83b1b92ed9f (diff)
downloadopen-axiom-8463a17556bf5cbc2911f4c880a6322d718c2f52.tar.gz
* interp/g-opt.boot (changeVariableDefinitionToStore): Separately
handle %bind and LET forms. * interp/g-util.boot (spliceSeqArgs): Recurse into %seq forms.
Diffstat (limited to 'src/interp/g-opt.boot')
-rw-r--r--src/interp/g-opt.boot14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot
index 5299fc74..d5eaa8be 100644
--- a/src/interp/g-opt.boot
+++ b/src/interp/g-opt.boot
@@ -115,7 +115,7 @@ changeVariableDefinitionToStore(form,vars) ==
changeVariableDefinitionToStore(s1,vars')
changeVariableDefinitionToStore(s2,vars')
vars
- form.op is '%when =>
+ form is ['%when,:.] =>
for clause in form.args repeat
-- variable defined in clause predicates are visible
-- in subsequent predicates. See the case for IF forms.
@@ -123,14 +123,22 @@ changeVariableDefinitionToStore(form,vars) ==
-- but those defined in branches are local.
changeVariableDefinitionToStore(rest clause,vars)
vars
- -- local bindings are, well, local.
- form.op in '(%bind LET) =>
+ -- recursive binding
+ form is ['%bind,:.] =>
vars' := vars
for [v,init] in second form repeat
vars' := changeVariableDefinitionToStore(init,vars')
vars' := [v,:vars']
changeVariableDefinitionToStore(third form,vars')
vars
+ -- non-recursive binding.
+ form is ['LET,:.] =>
+ vars' := nil
+ for [v,init] in second form repeat
+ changeVariableDefinitionToStore(init,vars')
+ vars' := [v,:vars']
+ changeVariableDefinitionToStore(third form,[:vars',:vars])
+ vars
ident? form.op and abstractionOperator? form.op =>
changeVariableDefinitionToStore(form.absBody,[:form.absParms,:vars])
vars