Error TypeDumpVisitor::visitKnownRecord(CVType &CVR, PointerRecord &Ptr) { printTypeIndex("PointeeType", Ptr.getReferentType()); W->printEnum("PtrType", unsigned(Ptr.getPointerKind()), makeArrayRef(PtrKindNames)); W->printEnum("PtrMode", unsigned(Ptr.getMode()), makeArrayRef(PtrModeNames)); W->printNumber("IsFlat", Ptr.isFlat()); W->printNumber("IsConst", Ptr.isConst()); W->printNumber("IsVolatile", Ptr.isVolatile()); W->printNumber("IsUnaligned", Ptr.isUnaligned()); W->printNumber("IsRestrict", Ptr.isRestrict()); W->printNumber("IsThisPtr&", Ptr.isLValueReferenceThisPtr()); W->printNumber("IsThisPtr&&", Ptr.isRValueReferenceThisPtr()); W->printNumber("SizeOf", Ptr.getSize()); if (Ptr.isPointerToMember()) { const MemberPointerInfo &MI = Ptr.getMemberInfo(); printTypeIndex("ClassType", MI.getContainingType()); W->printEnum("Representation", uint16_t(MI.getRepresentation()), makeArrayRef(PtrMemberRepNames)); } return Error::success(); }
TypeIndex TypeTableBuilder::writeKnownType(const PointerRecord &Record) { TypeRecordBuilder Builder(Record.getKind()); Builder.writeTypeIndex(Record.getReferentType()); uint32_t flags = static_cast<uint32_t>(Record.getOptions()) | (Record.getSize() << PointerRecord::PointerSizeShift) | (static_cast<uint32_t>(Record.getMode()) << PointerRecord::PointerModeShift) | (static_cast<uint32_t>(Record.getPointerKind()) << PointerRecord::PointerKindShift); Builder.writeUInt32(flags); if (Record.isPointerToMember()) { const MemberPointerInfo &M = Record.getMemberInfo(); Builder.writeTypeIndex(M.getContainingType()); Builder.writeUInt16(static_cast<uint16_t>(M.getRepresentation())); } return writeRecord(Builder); }