irgen: introduce ManglePackagePath function
This is useful for clients that need to use llgo's mangling of the package
path to look up a specific function within a given package.
Differential Revision: http://reviews.llvm.org/D6801
llvm-svn: 225027
GitOrigin-RevId: 82a260eaaf36a51e962303ae637fe4aca67b52dd
diff --git a/irgen/typemap.go b/irgen/typemap.go
index 91f4ca4..5e12e41 100644
--- a/irgen/typemap.go
+++ b/irgen/typemap.go
@@ -487,10 +487,10 @@
b.WriteRune('e')
}
-func (ctx *manglerContext) manglePackagePath(pkgpath string, b *bytes.Buffer) {
+func ManglePackagePath(pkgpath string) string {
pkgpath = strings.Replace(pkgpath, "/", "_", -1)
pkgpath = strings.Replace(pkgpath, ".", "_", -1)
- b.WriteString(pkgpath)
+ return pkgpath
}
func (ctx *manglerContext) mangleType(t types.Type, b *bytes.Buffer) {
@@ -499,7 +499,7 @@
var nb bytes.Buffer
ti := ctx.getNamedTypeInfo(t)
if ti.pkgpath != "" {
- ctx.manglePackagePath(ti.pkgpath, &nb)
+ nb.WriteString(ManglePackagePath(ti.pkgpath))
nb.WriteRune('.')
}
if ti.functionName != "" {
@@ -602,7 +602,7 @@
b.WriteString("__go_tdn_")
ti := ctx.getNamedTypeInfo(t)
if ti.pkgpath != "" {
- ctx.manglePackagePath(ti.pkgpath, b)
+ b.WriteString(ManglePackagePath(ti.pkgpath))
b.WriteRune('.')
}
if ti.functionName != "" {
@@ -674,7 +674,7 @@
}
if pkg != nil {
- ctx.manglePackagePath(pkg.Path(), &b)
+ b.WriteString(ManglePackagePath(pkg.Path()))
b.WriteRune('.')
}
@@ -694,7 +694,7 @@
func (ctx *manglerContext) mangleGlobalName(g *ssa.Global) string {
var b bytes.Buffer
- ctx.manglePackagePath(g.Pkg.Object.Path(), &b)
+ b.WriteString(ManglePackagePath(g.Pkg.Object.Path()))
b.WriteRune('.')
b.WriteString(g.Name())
@@ -814,7 +814,7 @@
ti := tm.mc.getNamedTypeInfo(t)
if ti.pkgpath != "" {
b.WriteByte('\t')
- tm.mc.manglePackagePath(ti.pkgpath, b)
+ b.WriteString(ManglePackagePath(ti.pkgpath))
b.WriteByte('\t')
b.WriteString(ti.pkgname)
b.WriteByte('.')