+
+inline void ListImp::markValues()
+{
+ int inlineSize = MIN(size, inlineValuesSize);
+ for (int i = 0; i != inlineSize; ++i) {
+ if (!values[i]->marked()) {
+ values[i]->mark();
+ }
+ }
+
+ int overflowSize = size - inlineSize;
+ for (int i = 0; i != overflowSize; ++i) {
+ if (!overflow[i]->marked()) {
+ overflow[i]->mark();
+ }
+ }
+}
+
+void List::markProtectedLists()
+{
+#if TEST_CONSERVATIVE_GC || USE_CONSERVATIVE_GC
+ int seen = 0;
+ for (int i = 0; i < poolSize; i++) {
+ if (seen >= poolUsed)
+ break;
+
+ if (pool[i].state == usedInPool) {
+ seen++;
+ if (pool[i].valueRefCount > 0) {
+ pool[i].markValues();
+ }
+ }
+ }
+
+ for (ListImp *l = outsidePoolList; l; l = l->nextInOutsideList) {
+ if (l->valueRefCount > 0) {
+ l->markValues();
+ }
+ }
+#endif
+}
+
+