diff options
author | dos-reis <gdr@axiomatics.org> | 2011-12-04 11:03:44 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2011-12-04 11:03:44 +0000 |
commit | 25235d1ab4b8841e10e62414cea75294055375f9 (patch) | |
tree | cff4841844e3c5e8c09514811f1e0f21ad9909af /src/interp | |
parent | 7742d5b84a00366b4345d1c472c4b0f4b850a848 (diff) | |
download | open-axiom-25235d1ab4b8841e10e62414cea75294055375f9.tar.gz |
* interp/g-util.boot (splitAssignments): New.
(spliceSeqArgs): Use it.
Diffstat (limited to 'src/interp')
-rw-r--r-- | src/interp/g-util.boot | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/interp/g-util.boot b/src/interp/g-util.boot index 236076c0..f4f8ba00 100644 --- a/src/interp/g-util.boot +++ b/src/interp/g-util.boot @@ -68,6 +68,13 @@ mkBind(inits,expr) == mkBind([:inits,:inits'],expr') ['%bind,inits,expr] +splitAssignments u == main(u,nil) where + main(u,l) == + u is ['%LET,x,v] => + v is ['%LET,y,.] => main(v,[['%LET,x,y],:l]) + [u,:l] + nil + ++ 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 @@ -79,6 +86,10 @@ spliceSeqArgs l == stmts = nil => spliceSeqArgs rest l lastNode(stmts).rest := spliceSeqArgs rest l stmts + s := first l + s is ['%LET,x,y] and (stmts := splitAssignments y) => + lastNode(stmts).rest := [['%LET,x,second y],:spliceSeqArgs rest l] + stmts rest l = nil => l l.rest := spliceSeqArgs rest l l |