aboutsummaryrefslogtreecommitdiff
path: root/src/interp/g-util.boot
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2011-12-03 21:20:44 +0000
committerdos-reis <gdr@axiomatics.org>2011-12-03 21:20:44 +0000
commitec43e3cc2d75109541316df701d495f8a32c3800 (patch)
treec59066bd0edd2d6b3e2db88aa93b5e53d39a6f0e /src/interp/g-util.boot
parent58be7603436e7a9680c9d9eedef361c0c4e175d8 (diff)
downloadopen-axiom-ec43e3cc2d75109541316df701d495f8a32c3800.tar.gz
* interp/compiler.boot: Use %seq in lieu of PROGN.
* interp/g-util.boot (spliceSeqArgs): New. * interp/g-opt.boot (changeVariableDefinitionToStore): Call it before recursing on %seq forms.
Diffstat (limited to 'src/interp/g-util.boot')
-rw-r--r--src/interp/g-util.boot16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/interp/g-util.boot b/src/interp/g-util.boot
index c305a9bf..236076c0 100644
--- a/src/interp/g-util.boot
+++ b/src/interp/g-util.boot
@@ -45,6 +45,7 @@ module g_-util where
usedSymbol?: (%Symbol,%Code) -> %Boolean
isDefaultPackageName: %Symbol -> %Boolean
makeDefaultPackageName: %String -> %Symbol
+ spliceSeqArgs: %List %Code -> %Code
--%
@@ -67,7 +68,20 @@ mkBind(inits,expr) ==
mkBind([:inits,:inits'],expr')
['%bind,inits,expr]
-
+++ We have a list `l' of expressions to be executed sequentially.
+++ Splice in any directly-embedded sequence of expressions.
+++ NOTES: This function should not be called on any program with
+++ an %exit-form in it. In particular, it should be called
+++ (if at all) before any call to simplifyVMForm.
+spliceSeqArgs l ==
+ atomic? l => l
+ l is [['%seq,:stmts],:.] =>
+ stmts = nil => spliceSeqArgs rest l
+ lastNode(stmts).rest := spliceSeqArgs rest l
+ stmts
+ rest l = nil => l
+ l.rest := spliceSeqArgs rest l
+ l
--%