From 7359873b60b425efad4f56a12df00c9bfd1189bf Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Sun, 24 Aug 2008 01:21:23 -0500
Subject: [PATCH] Minor compiler tweaks

---
 basis/compiler/tree/checker/checker.factor               | 6 ++++--
 basis/compiler/tree/cleanup/cleanup-tests.factor         | 5 +++++
 basis/compiler/tree/optimizer/optimizer.factor           | 6 +++---
 basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor | 4 +++-
 4 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/basis/compiler/tree/checker/checker.factor b/basis/compiler/tree/checker/checker.factor
index 632412a6af..0f81e3805a 100644
--- a/basis/compiler/tree/checker/checker.factor
+++ b/basis/compiler/tree/checker/checker.factor
@@ -126,7 +126,9 @@ M: #r> check-stack-flow* [ check-in-r ] [ check-out-d ] bi ;
     retainstack get empty? [ "Retain stack not empty" throw ] unless ;
 
 M: #return check-stack-flow*
-    check-in-d assert-datastack-empty assert-retainstack-empty ;
+    check-in-d
+    assert-datastack-empty
+    terminated? get [ assert-retainstack-empty ] unless ;
 
 M: #enter-recursive check-stack-flow*
     check-out-d ;
@@ -157,7 +159,7 @@ SYMBOL: branch-out
         datastack [ clone ] change
         V{ } clone retainstack set
         (check-stack-flow)
-        assert-retainstack-empty
+        terminated? get [ assert-retainstack-empty ] unless
         terminated? get f datastack get ?
     ] with-scope ;
 
diff --git a/basis/compiler/tree/cleanup/cleanup-tests.factor b/basis/compiler/tree/cleanup/cleanup-tests.factor
index 437112625c..8072a4229e 100644
--- a/basis/compiler/tree/cleanup/cleanup-tests.factor
+++ b/basis/compiler/tree/cleanup/cleanup-tests.factor
@@ -456,3 +456,8 @@ cell-bits 32 = [
     [ [ 2array ] [ 0 3array ] if first ]
     { nth-unsafe < <= > >= } inlined?
 ] unit-test
+
+[ ] [
+    [ [ >r "A" throw r> ] [ "B" throw ] if ]
+    cleaned-up-tree drop
+] unit-test
diff --git a/basis/compiler/tree/optimizer/optimizer.factor b/basis/compiler/tree/optimizer/optimizer.factor
index 9dd2b9ec4c..5d0b8d089b 100644
--- a/basis/compiler/tree/optimizer/optimizer.factor
+++ b/basis/compiler/tree/optimizer/optimizer.factor
@@ -26,7 +26,7 @@ IN: compiler.tree.optimizer
     compute-def-use
     remove-dead-code
     ! strength-reduce
-    USE: kernel
-    compute-def-use
-    dup check-nodes
+    ! USE: kernel
+    ! compute-def-use
+    ! dup check-nodes
     ;
diff --git a/basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor b/basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor
index 6abf323aed..97b4e2aee2 100644
--- a/basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor
+++ b/basis/compiler/tree/tuple-unboxing/tuple-unboxing.factor
@@ -134,4 +134,6 @@ M: #alien-indirect unbox-tuples* dup in-d>> assert-not-unboxed ;
 
 M: #alien-callback unbox-tuples* ;
 
-: unbox-tuples ( nodes -- nodes ) [ unbox-tuples* ] map-nodes ;
+: unbox-tuples ( nodes -- nodes )
+    allocations get escaping-allocations get assoc-diff assoc-empty?
+    [ [ unbox-tuples* ] map-nodes ] unless ;