diff options
author | dos-reis <gdr@axiomatics.org> | 2011-12-05 17:03:42 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-12-05 17:03:42 +0000 |
commit | 8463a17556bf5cbc2911f4c880a6322d718c2f52 (patch) | |
tree | 7f4abf766e9bf943c83b04326d15213416f6418e /src/interp/g-opt.boot | |
parent | a92d137e0a0de4abb7d680608b32e83b1b92ed9f (diff) | |
download | open-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.boot | 14 |
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 |