<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -60,10 +60,26 @@ namespace rubinius {
       if(slot) obj-&gt;ivars(object_memory_, slot);
     }
 
-    TypeInfo* ti = object_memory_-&gt;type_info[obj-&gt;type_id()];
+    // Handle Tuple directly, because it's so common
+    if(Tuple* tup = try_as&lt;Tuple&gt;(obj)) {
+      int size = tup-&gt;num_fields();
+
+      for(int i = 0; i &lt; size; i++) {
+        slot = tup-&gt;field[i];
+        if(slot-&gt;reference_p()) {
+          slot = saw_object(tup-&gt;field[i]);
+          if(slot) {
+            tup-&gt;field[i] = slot;
+            object_memory_-&gt;write_barrier(tup, slot);
+          }
+        }
+      }
+    } else {
+      TypeInfo* ti = object_memory_-&gt;type_info[obj-&gt;type_id()];
 
-    ObjectMark mark(this);
-    ti-&gt;mark(obj, mark);
+      ObjectMark mark(this);
+      ti-&gt;mark(obj, mark);
+    }
   }
 
   void GarbageCollector::delete_object(Object* obj) {</diff>
      <filename>vm/gc/gc.cpp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e99908e9a3f5aa8247fbeae59de1047b894e7305</id>
    </parent>
  </parents>
  <author>
    <name>Evan Phoenix</name>
    <email>ephoenix@engineyard.com</email>
  </author>
  <url>http://github.com/evanphx/rubinius/commit/b704c2a624b9d89993005b1707dbd6f86b74238c</url>
  <id>b704c2a624b9d89993005b1707dbd6f86b74238c</id>
  <committed-date>2009-11-06T17:42:36-08:00</committed-date>
  <authored-date>2009-11-06T17:41:48-08:00</authored-date>
  <message>Teach GC::scan_object about Tuples specificly</message>
  <tree>c4d33223a7447808b172df08a911a89e0c5d820c</tree>
  <committer>
    <name>Evan Phoenix</name>
    <email>ephoenix@engineyard.com</email>
  </committer>
</commit>
