- MDType *get() const { return cast_or_null<MDType>(DIDescriptor::get()); }
- operator MDType *() const { return get(); }
- MDType *operator->() const { return get(); }
- MDType &operator*() const { return *get(); }
-
- DIScopeRef getContext() const { return get()->getScope(); }
- StringRef getName() const { return get()->getName(); }
- unsigned getLineNumber() const { return get()->getLine(); }
- uint64_t getSizeInBits() const { return get()->getSizeInBits(); }
- uint64_t getAlignInBits() const { return get()->getAlignInBits(); }
- // FIXME: Offset is only used for DW_TAG_member nodes. Making every type
- // carry this is just plain insane.
- uint64_t getOffsetInBits() const { return get()->getOffsetInBits(); }
- unsigned getFlags() const { return get()->getFlags(); }
-
- bool isPrivate() const { return get()->isPrivate(); }
- bool isProtected() const { return get()->isProtected(); }
- bool isPublic() const { return get()->isPublic(); }
- bool isForwardDecl() const { return get()->isForwardDecl(); }
- bool isAppleBlockExtension() const { return get()->isAppleBlockExtension(); }
- bool isBlockByrefStruct() const { return get()->isBlockByrefStruct(); }
- bool isVirtual() const { return get()->isVirtual(); }
- bool isArtificial() const { return get()->isArtificial(); }
- bool isObjectPointer() const { return get()->isObjectPointer(); }
- bool isObjcClassComplete() const { return get()->isObjcClassComplete(); }
- bool isVector() const { return get()->isVector(); }
- bool isStaticMember() const { return get()->isStaticMember(); }
- bool isLValueReference() const { return get()->isLValueReference(); }
- bool isRValueReference() const { return get()->isRValueReference(); }
-};
-
-/// \brief A basic type, like 'int' or 'float'.
-class DIBasicType : public DIType {