cmd/go: update -DGOPKGPATH to use current pkgpath encoding
This will need to be done in the gc version too, probably more cleverly. This version will ensure that the next GCC release works correctly when using the GCC version of the go tool. Updates golang/go#37272 Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/219817
This commit is contained in:
parent
ce7b39d0fc
commit
855b4aaeab
@ -1,4 +1,4 @@
|
||||
8505defaa91ecc5b42afd02eb335981e8b02b288
|
||||
d5d00d310ec33aeb18f33f807956ec0c4eeea6bb
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
@ -596,14 +596,28 @@ func gccgoPkgpath(p *load.Package) string {
|
||||
return p.ImportPath
|
||||
}
|
||||
|
||||
// gccgoCleanPkgpath returns the form of p's pkgpath that gccgo uses
|
||||
// for symbol names. This is like gccgoPkgpathToSymbolNew in cmd/cgo/out.go.
|
||||
func gccgoCleanPkgpath(p *load.Package) string {
|
||||
clean := func(r rune) rune {
|
||||
ppath := gccgoPkgpath(p)
|
||||
bsl := []byte{}
|
||||
changed := false
|
||||
for _, c := range []byte(ppath) {
|
||||
switch {
|
||||
case 'A' <= r && r <= 'Z', 'a' <= r && r <= 'z',
|
||||
'0' <= r && r <= '9':
|
||||
return r
|
||||
case 'A' <= c && c <= 'Z', 'a' <= c && c <= 'z',
|
||||
'0' <= c && c <= '9', c == '_':
|
||||
bsl = append(bsl, c)
|
||||
case c == '.':
|
||||
bsl = append(bsl, ".x2e"...)
|
||||
changed = true
|
||||
default:
|
||||
encbytes := []byte(fmt.Sprintf("..z%02x", c))
|
||||
bsl = append(bsl, encbytes...)
|
||||
changed = true
|
||||
}
|
||||
return '_'
|
||||
}
|
||||
return strings.Map(clean, gccgoPkgpath(p))
|
||||
if !changed {
|
||||
return ppath
|
||||
}
|
||||
return string(bsl)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user