[LLVM-C] Add an accessor for the kind of a Metadata Node
Summary: Allows for retrieving the type of a metadata node. Has the added benefit of ensuring that the C and C++ kind APIs stay in sync as a failure to add a corresponding LLVMMetadataKind will result in the switch in the accessor being semantically malformed. Reviewers: whitequark, deadalnix Reviewed By: whitequark Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D52693 llvm-svn: 343469
This commit is contained in:
parent
a982236e59
commit
abda7ee8e7
|
@ -126,6 +126,44 @@ typedef enum {
|
|||
LLVMDWARFEmissionLineTablesOnly
|
||||
} LLVMDWARFEmissionKind;
|
||||
|
||||
/**
|
||||
* The kind of metadata nodes.
|
||||
*/
|
||||
enum {
|
||||
LLVMMDStringMetadataKind,
|
||||
LLVMConstantAsMetadataMetadataKind,
|
||||
LLVMLocalAsMetadataMetadataKind,
|
||||
LLVMDistinctMDOperandPlaceholderMetadataKind,
|
||||
LLVMMDTupleMetadataKind,
|
||||
LLVMDILocationMetadataKind,
|
||||
LLVMDIExpressionMetadataKind,
|
||||
LLVMDIGlobalVariableExpressionMetadataKind,
|
||||
LLVMGenericDINodeMetadataKind,
|
||||
LLVMDISubrangeMetadataKind,
|
||||
LLVMDIEnumeratorMetadataKind,
|
||||
LLVMDIBasicTypeMetadataKind,
|
||||
LLVMDIDerivedTypeMetadataKind,
|
||||
LLVMDICompositeTypeMetadataKind,
|
||||
LLVMDISubroutineTypeMetadataKind,
|
||||
LLVMDIFileMetadataKind,
|
||||
LLVMDICompileUnitMetadataKind,
|
||||
LLVMDISubprogramMetadataKind,
|
||||
LLVMDILexicalBlockMetadataKind,
|
||||
LLVMDILexicalBlockFileMetadataKind,
|
||||
LLVMDINamespaceMetadataKind,
|
||||
LLVMDIModuleMetadataKind,
|
||||
LLVMDITemplateTypeParameterMetadataKind,
|
||||
LLVMDITemplateValueParameterMetadataKind,
|
||||
LLVMDIGlobalVariableMetadataKind,
|
||||
LLVMDILocalVariableMetadataKind,
|
||||
LLVMDILabelMetadataKind,
|
||||
LLVMDIObjCPropertyMetadataKind,
|
||||
LLVMDIImportedEntityMetadataKind,
|
||||
LLVMDIMacroMetadataKind,
|
||||
LLVMDIMacroFileMetadataKind
|
||||
};
|
||||
typedef unsigned LLVMMetadataKind;
|
||||
|
||||
/**
|
||||
* An LLVM DWARF type encoding.
|
||||
*/
|
||||
|
@ -1153,6 +1191,13 @@ LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
|
|||
*/
|
||||
void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
|
||||
|
||||
/**
|
||||
* Obtain the enumerated type of a Metadata instance.
|
||||
*
|
||||
* @see llvm::Metadata::getMetadataID()
|
||||
*/
|
||||
LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end extern "C" */
|
||||
#endif
|
||||
|
|
|
@ -1354,3 +1354,14 @@ LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func) {
|
|||
void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP) {
|
||||
unwrap<Function>(Func)->setSubprogram(unwrap<DISubprogram>(SP));
|
||||
}
|
||||
|
||||
LLVMMetadataKind LLVMGetMetadataKind(LLVMMetadataRef Metadata) {
|
||||
switch(unwrap(Metadata)->getMetadataID()) {
|
||||
#define HANDLE_METADATA_LEAF(CLASS) \
|
||||
case Metadata::CLASS##Kind: \
|
||||
return (LLVMMetadataKind)LLVM##CLASS##MetadataKind;
|
||||
#include "llvm/IR/Metadata.def"
|
||||
default:
|
||||
return (LLVMMetadataKind)LLVMGenericDINodeMetadataKind;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue