void MainVisitor::Inspect() { #define Dump(coll) dump(#coll, _##coll) Dump(pointerClasses); Dump(barrieredClasses); Log::outs() << "Recycler allocations\n"; for (auto item : _allocatorTypeMap) { dump(item.first.c_str(), item.second); } std::queue<const Type*> queue; // queue of types to check std::unordered_set<const Type*> barrierTypes; // set of types queued auto pushBarrierType = [&](const Type* type) -> bool { if (barrierTypes.insert(type).second) { queue.push(type); return true; } return false; }; for (auto item : _allocationTypes) { if (item.second & AllocationTypes::WriteBarrier) { pushBarrierType(item.first); } } dump("WriteBarrier allocation types", barrierTypes); // Examine all barrierd types. They should be fully wb annotated. while (!queue.empty()) { auto type = queue.front(); queue.pop(); auto r = type->getCanonicalTypeInternal()->getAsCXXRecordDecl(); if (r) { auto typeName = r->getQualifiedNameAsString(); ProcessUnbarrieredFields(r, pushBarrierType); // queue the type's base classes for (const auto& base: r->bases()) { if (pushBarrierType(base.getType().getTypePtr())) { Log::outs() << "Queue base type: " << base.getType().getAsString() << " (base of " << typeName << ")\n"; } } } } #undef Dump }
const NAString QualifiedName::getQualifiedNameAsAnsiString(NABoolean formatForDisplay, NABoolean externalDisplay) const { formatAsAnsiIdentifier = TRUE; NAString result(getQualifiedNameAsString(formatForDisplay, externalDisplay), CmpCommon::statementHeap()); formatAsAnsiIdentifier = FALSE; return result; }
// See ANSI 6.3. // Fabricated names do not get exposed. const NAString CorrName::getExposedNameAsString (NABoolean debug, NABoolean formatForDisplay) const { if (isFabricated() AND NOT debug) return ""; else if (NOT getCorrNameAsString().isNull()) return getCorrNameAsString(); else return getQualifiedNameAsString(formatForDisplay); //##forceAnsi }