aboutsummaryrefslogtreecommitdiff
path: root/src/interp
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2010-06-09 11:48:18 +0000
committerdos-reis <gdr@axiomatics.org>2010-06-09 11:48:18 +0000
commit4e8ea57821d8deaccd9ffb47ff7a4a7f505880c5 (patch)
treef7e96a404123b94dba4dba2b164d3293a37445b1 /src/interp
parentddd0d01eed235ef965e622c982667eeb2eb528c8 (diff)
downloadopen-axiom-4e8ea57821d8deaccd9ffb47ff7a4a7f505880c5.tar.gz
* interp/g-opt.boot (removeNeedlessThrow): Tidy.
Diffstat (limited to 'src/interp')
-rw-r--r--src/interp/g-opt.boot6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/interp/g-opt.boot b/src/interp/g-opt.boot
index ad2cff91..3557f554 100644
--- a/src/interp/g-opt.boot
+++ b/src/interp/g-opt.boot
@@ -145,13 +145,17 @@ changeThrowToGo(s,g) ==
++ Change any `(THROW tag (%return expr))' in x to just
++ `(%return expr) since a return-operator transfer control
-++ out of the function body anyway.
+++ out of the function body anyway. Similarly, transform
+++ reudant `(THROW tag (THROW tag expr))' to `(THROW tag expr)'.
removeNeedlessThrow x ==
isAtomicForm x => x
x is ['THROW,.,y] and y is ['%return,:.] =>
removeNeedlessThrow third y
x.op := y.op
x.args := y.args
+ x is ['THROW,g,y] and y is ['THROW,=g,z] =>
+ removeNeedlessThrow z
+ second(x.args) := z
for x' in x repeat
removeNeedlessThrow x'