//===----------------------------------------------------------------------===//
#include "llvm-c/Core.h"
-#include "llvm/ADT/StringSwitch.h"
-#include "AttributeImpl.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/CallSite.h"
return LLVMGetMDKindIDInContext(LLVMGetGlobalContext(), Name, SLen);
}
-#define GET_ATTR_KIND_FROM_NAME
-#include "AttributesCompatFunc.inc"
-
-unsigned LLVMGetAttrKindIDInContext(LLVMContextRef C, const char *Name,
- size_t SLen) {
- auto K = getAttrKindFromName(StringRef(Name, SLen));
- assert(K != Attribute::None && "Invalid attribute");
- return AttributeImpl::getAttrMask(K);
-}
-
char *LLVMGetDiagInfoDescription(LLVMDiagnosticInfoRef DI) {
std::string MsgStorage;
raw_string_ostream Stream(MsgStorage);
private:
void emitTargetIndependentEnums(raw_ostream &OS);
- void emitConversionFn(raw_ostream &OS);
void emitFnAttrCompatCheck(raw_ostream &OS, bool IsStringAttr);
void printEnumAttrClasses(raw_ostream &OS,
OS << "#endif\n";
}
-void Attributes::emitConversionFn(raw_ostream &OS) {
- OS << "#ifdef GET_ATTR_KIND_FROM_NAME\n";
- OS << "#undef GET_ATTR_KIND_FROM_NAME\n";
-
- std::vector<Record*> Attrs =
- Records.getAllDerivedDefinitions("EnumAttr");
-
- OS << "static Attribute::AttrKind getAttrKindFromName(StringRef AttrName) {\n";
- OS << " return StringSwitch<Attribute::AttrKind>(AttrName)\n";
-
- for (auto A : Attrs) {
- OS << " .Case(\"" << A->getValueAsString("AttrString");
- OS << "\", Attribute::" << A->getName() << ")\n";
- }
-
- OS << " .Default(Attribute::None);\n";
- OS << "}\n\n";
-
- OS << "#endif\n";
-}
-
void Attributes::emitFnAttrCompatCheck(raw_ostream &OS, bool IsStringAttr) {
OS << "#ifdef GET_ATTR_COMPAT_FUNC\n";
OS << "#undef GET_ATTR_COMPAT_FUNC\n";
void Attributes::emit(raw_ostream &OS) {
emitTargetIndependentEnums(OS);
- emitConversionFn(OS);
emitFnAttrCompatCheck(OS, false);
}