Skip to content

Commit 347e5ee

Browse files
committed
Make demangling more generalized
1 parent b12fdd3 commit 347e5ee

3 files changed

Lines changed: 15 additions & 16 deletions

File tree

sources/LLVMSharp.Interop/llvmsharp/llvmsharp.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,6 @@ public static unsafe partial class llvmsharp
358358
[DllImport("libLLVMSharp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "llvmsharp_PassManager_add", ExactSpelling = true)]
359359
public static extern void PassManager_add([NativeTypeName("LLVMPassManagerRef")] LLVMOpaquePassManager* pass_manager, [NativeTypeName("LLVMPassRef")] LLVMOpaquePass* pass);
360360

361-
[DllImport("libLLVMSharp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "llvmsharp_Value_getDemangledName", ExactSpelling = true)]
362-
[return: NativeTypeName("int32_t")]
363-
public static extern int Value_getDemangledName([NativeTypeName("LLVMValueRef")] LLVMOpaqueValue* value, [NativeTypeName("char *")] sbyte* buffer, [NativeTypeName("int32_t")] int buffer_size);
364-
365361
[DllImport("libLLVMSharp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "llvmsharp_createDeadCodeEliminationPass", ExactSpelling = true)]
366362
[return: NativeTypeName("LLVMPassRef")]
367363
public static extern LLVMOpaquePass* createDeadCodeEliminationPass();
@@ -426,6 +422,10 @@ public static unsafe partial class llvmsharp
426422
[return: NativeTypeName("LLVMPassRef")]
427423
public static extern LLVMOpaquePass* createUnifyLoopExitsPass();
428424

425+
[DllImport("libLLVMSharp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "llvmsharp_Demangle", ExactSpelling = true)]
426+
[return: NativeTypeName("int32_t")]
427+
public static extern int Demangle([NativeTypeName("const char *")] sbyte* mangled_string, [NativeTypeName("int32_t")] int mangled_string_size, [NativeTypeName("char *")] sbyte* buffer, [NativeTypeName("int32_t")] int buffer_size);
428+
429429
[DllImport("libLLVMSharp", CallingConvention = CallingConvention.Cdecl, EntryPoint = "llvmsharp_Free", ExactSpelling = true)]
430430
public static extern void Free(void* obj);
431431
}

sources/libLLVMSharp/LLVMSharp.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -445,16 +445,6 @@ void llvmsharp_PassManager_add(LLVMPassManagerRef pass_manager, LLVMPassRef pass
445445
unwrap(pass_manager)->add(unwrap(pass));
446446
}
447447

448-
int32_t llvmsharp_Value_getDemangledName(LLVMValueRef value, char* buffer, int32_t buffer_size)
449-
{
450-
const char* mangled = LLVMGetValueName(value);
451-
std::string result = llvm::demangle(std::string_view(mangled));
452-
int32_t length = (int32_t)result.length();
453-
int32_t size = length < buffer_size ? length : buffer_size;
454-
memcpy(buffer, result.c_str(), size);
455-
return length;
456-
}
457-
458448
LLVMPassRef llvmsharp_createDeadCodeEliminationPass()
459449
{
460450
return wrap((Pass*)createDeadCodeEliminationPass());
@@ -535,6 +525,15 @@ LLVMPassRef llvmsharp_createUnifyLoopExitsPass()
535525
return wrap((Pass*)createUnifyLoopExitsPass());
536526
}
537527

528+
int32_t llvmsharp_Demangle(const char* mangled_string, int32_t mangled_string_size, char* buffer, int32_t buffer_size)
529+
{
530+
std::string result = llvm::demangle(std::string_view(mangled_string, mangled_string_size));
531+
int32_t length = (int32_t)result.length();
532+
int32_t size = length < buffer_size ? length : buffer_size;
533+
memcpy(buffer, result.c_str(), size);
534+
return length;
535+
}
536+
538537
void llvmsharp_Free(void* obj)
539538
{
540539
free(obj);

sources/libLLVMSharp/LLVMSharp.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,6 @@ LLVMSHARP_LINKAGE void llvmsharp_Module_GetIdentifiedStructTypes(LLVMModuleRef m
179179

180180
LLVMSHARP_LINKAGE void llvmsharp_PassManager_add(LLVMPassManagerRef pass_manager, LLVMPassRef pass);
181181

182-
LLVMSHARP_LINKAGE int32_t llvmsharp_Value_getDemangledName(LLVMValueRef value, char* buffer, int32_t buffer_size);
183-
184182
LLVMSHARP_LINKAGE LLVMPassRef llvmsharp_createDeadCodeEliminationPass();
185183

186184
LLVMSHARP_LINKAGE LLVMPassRef llvmsharp_createSROAPass(uint8_t PreserveCFG);
@@ -213,6 +211,8 @@ LLVMSHARP_LINKAGE LLVMPassRef llvmsharp_createLoopSimplifyPass();
213211

214212
LLVMSHARP_LINKAGE LLVMPassRef llvmsharp_createUnifyLoopExitsPass();
215213

214+
LLVMSHARP_LINKAGE int32_t llvmsharp_Demangle(const char* mangled_string, int32_t mangled_string_size, char* buffer, int32_t buffer_size);
215+
216216
LLVMSHARP_LINKAGE void llvmsharp_Free(void* obj);
217217

218218
LLVM_CLANG_C_EXTERN_C_END

0 commit comments

Comments
 (0)