1
Fork 0

Make LLVM symbol visibility FFI types more stable.

This commit is contained in:
Michael Woerister 2016-11-28 17:44:51 -05:00
parent 692d7cfb0c
commit d1a6d47f94
3 changed files with 54 additions and 9 deletions

View file

@ -1408,3 +1408,45 @@ extern "C" void LLVMRustSetLinkage(LLVMValueRef V, LLVMRustLinkage RustLinkage)
extern "C" LLVMContextRef LLVMRustGetValueContext(LLVMValueRef V) {
return wrap(&unwrap(V)->getContext());
}
enum class LLVMRustVisibility {
Default = 0,
Hidden = 1,
Protected = 2,
};
static LLVMRustVisibility to_rust(LLVMVisibility vis) {
switch (vis) {
case LLVMDefaultVisibility:
return LLVMRustVisibility::Default;
case LLVMHiddenVisibility:
return LLVMRustVisibility::Hidden;
case LLVMProtectedVisibility:
return LLVMRustVisibility::Protected;
default:
llvm_unreachable("Invalid LLVMRustVisibility value!");
}
}
static LLVMVisibility from_rust(LLVMRustVisibility vis) {
switch (vis) {
case LLVMRustVisibility::Default:
return LLVMDefaultVisibility;
case LLVMRustVisibility::Hidden:
return LLVMHiddenVisibility;
case LLVMRustVisibility::Protected:
return LLVMProtectedVisibility;
default:
llvm_unreachable("Invalid LLVMRustVisibility value!");
}
}
extern "C" LLVMRustVisibility LLVMRustGetVisibility(LLVMValueRef V) {
return to_rust(LLVMGetVisibility(V));
}
extern "C" void LLVMRustSetVisibility(LLVMValueRef V, LLVMRustVisibility RustVisibility) {
LLVMSetVisibility(V, from_rust(RustVisibility));
}