int SharedVariant::countReachable() const { int count = 1; if (getType() == KindOfArray) { int size = arrSize(); if (!isPacked()) { count += size; // for keys } for (int i = 0; i < size; i++) { SharedVariant* p = getValue(i); count += p->countReachable(); // for values } } return count; }