cpp/llvm; os.Args; build: add llvm.BinDir to PATH
This commit is contained in:
34
cpp/llvm/_demo/demangle/demangle.go
Normal file
34
cpp/llvm/_demo/demangle/demangle.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
"github.com/goplus/llgo/cpp/llvm"
|
||||
)
|
||||
|
||||
func Demangle(mangledName string) *c.Char {
|
||||
if ret := llvm.ItaniumDemangle(mangledName, true); ret != nil {
|
||||
return ret
|
||||
}
|
||||
if ret := llvm.RustDemangle(mangledName); ret != nil {
|
||||
return ret
|
||||
}
|
||||
return llvm.MicrosoftDemangle(mangledName, nil, nil, 0)
|
||||
}
|
||||
|
||||
func main() {
|
||||
if len(os.Args) != 2 {
|
||||
fmt.Fprintln(os.Stderr, "Usage: demangle symbol")
|
||||
return
|
||||
}
|
||||
mangledName := os.Args[1]
|
||||
if name := Demangle(mangledName); name != nil {
|
||||
c.Printf(c.Str("%s\n"), name)
|
||||
c.Free(unsafe.Pointer(name))
|
||||
} else {
|
||||
fmt.Fprintln(os.Stderr, "Failed to demangle")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user