Esempio n. 1
0
Error TypeNameComputer::visitKnownRecord(CVType &CVR, PointerRecord &Ptr) {

  if (Ptr.isPointerToMember()) {
    const MemberPointerInfo &MI = Ptr.getMemberInfo();

    StringRef Pointee = Types.getTypeName(Ptr.getReferentType());
    StringRef Class = Types.getTypeName(MI.getContainingType());
    Name = formatv("{0} {1}::*", Pointee, Class);
  } else {
    if (Ptr.isConst())
      Name.append("const ");
    if (Ptr.isVolatile())
      Name.append("volatile ");
    if (Ptr.isUnaligned())
      Name.append("__unaligned ");

    Name.append(Types.getTypeName(Ptr.getReferentType()));

    if (Ptr.getMode() == PointerMode::LValueReference)
      Name.append("&");
    else if (Ptr.getMode() == PointerMode::RValueReference)
      Name.append("&&");
    else if (Ptr.getMode() == PointerMode::Pointer)
      Name.append("*");
  }
  return Error::success();
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
void CVTypeDumperImpl::visitPointer(TypeLeafKind Leaf, PointerRecord &Ptr) {
    printTypeIndex("PointeeType", Ptr.getReferentType());
    W.printHex("PointerAttributes", uint32_t(Ptr.getOptions()));
    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());

    if (Ptr.isPointerToMember()) {
        const MemberPointerInfo &MI = Ptr.getMemberInfo();

        printTypeIndex("ClassType", MI.getContainingType());
        W.printEnum("Representation", uint16_t(MI.getRepresentation()),
                    makeArrayRef(PtrMemberRepNames));

        StringRef PointeeName = getTypeName(Ptr.getReferentType());
        StringRef ClassName = getTypeName(MI.getContainingType());
        SmallString<256> TypeName(PointeeName);
        TypeName.push_back(' ');
        TypeName.append(ClassName);
        TypeName.append("::*");
        Name = CVTD.saveName(TypeName);
    } else {
        SmallString<256> TypeName;
        if (Ptr.isConst())
            TypeName.append("const ");
        if (Ptr.isVolatile())
            TypeName.append("volatile ");
        if (Ptr.isUnaligned())
            TypeName.append("__unaligned ");

        TypeName.append(getTypeName(Ptr.getReferentType()));

        if (Ptr.getMode() == PointerMode::LValueReference)
            TypeName.append("&");
        else if (Ptr.getMode() == PointerMode::RValueReference)
            TypeName.append("&&");
        else if (Ptr.getMode() == PointerMode::Pointer)
            TypeName.append("*");

        Name = CVTD.saveName(TypeName);
    }
}
Esempio n. 4
0
Error TypeDumpVisitor::visitKnownRecord(CVType &CVR, PointerRecord &Ptr) {
  printTypeIndex("PointeeType", Ptr.getReferentType());
  W->printHex("PointerAttributes", uint32_t(Ptr.getOptions()));
  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("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();
}