Sweep the monitor list.

Change-Id: I343261206f8bbabd245b404dd95d532255e5d870
diff --git a/src/intern_table.cc b/src/intern_table.cc
index aa27ace..53208fd 100644
--- a/src/intern_table.cc
+++ b/src/intern_table.cc
@@ -119,11 +119,12 @@
   return found == s;
 }
 
-void InternTable::RemoveWeakIf(const Predicate& predicate) {
+void InternTable::SweepInternTableWeaks(Heap::IsMarkedTester is_marked, void* arg) {
   MutexLock mu(intern_table_lock_);
   typedef Table::const_iterator It; // TODO: C++0x auto
   for (It it = weak_interns_.begin(), end = weak_interns_.end(); it != end;) {
-    if (predicate(it->second)) {
+    Object* object = it->second;
+    if (!is_marked(object, arg)) {
       weak_interns_.erase(it++);
     } else {
       ++it;