From 25235d1ab4b8841e10e62414cea75294055375f9 Mon Sep 17 00:00:00 2001 From: dos-reis Date: Sun, 4 Dec 2011 11:03:44 +0000 Subject: * interp/g-util.boot (splitAssignments): New. (spliceSeqArgs): Use it. --- src/ChangeLog | 5 +++++ src/interp/g-util.boot | 11 +++++++++++ 2 files changed, 16 insertions(+) (limited to 'src') diff --git a/src/ChangeLog b/src/ChangeLog index 1898d80a..d9594223 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2011-12-04 Gabriel Dos Reis + + * interp/g-util.boot (splitAssignments): New. + (spliceSeqArgs): Use it. + 2011-12-03 Gabriel Dos Reis * interp/lisp-backend.boot (hasNoExit?): New. 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 -- cgit v1.2.3