proc: support interface type resolution for packages containing a dot
If the last entry of the package path contains a '.' the corresponding DIEs for its types will replace the '.' character with '%2e'. We must do the same when resolving the package path of the concrete type of an interface variable. Fixes #1137
This commit is contained in:
parent
4da05d62cd
commit
dc7a4ccb16
15
_fixtures/dotpackagesiface.go
Normal file
15
_fixtures/dotpackagesiface.go
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"dir.io"
|
||||||
|
"dir.io/io.io"
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var iface interface{} = &dirio.SomeType{}
|
||||||
|
var iface2 interface{} = &ioio.SomeOtherType{}
|
||||||
|
runtime.Breakpoint()
|
||||||
|
fmt.Println(iface, iface2)
|
||||||
|
}
|
5
_fixtures/vendor/dir.io/dir.go
generated
vendored
Normal file
5
_fixtures/vendor/dir.io/dir.go
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package dirio
|
||||||
|
|
||||||
|
type SomeType struct {
|
||||||
|
X int
|
||||||
|
}
|
5
_fixtures/vendor/dir.io/io.io/io.go
generated
vendored
Normal file
5
_fixtures/vendor/dir.io/io.io/io.go
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package ioio
|
||||||
|
|
||||||
|
type SomeOtherType struct {
|
||||||
|
Y int
|
||||||
|
}
|
@ -3400,3 +3400,13 @@ func TestDeclLine(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestIssue1137(t *testing.T) {
|
||||||
|
withTestProcess("dotpackagesiface", t, func(p proc.Process, fixture protest.Fixture) {
|
||||||
|
assertNoError(proc.Continue(p), t, "Continue()")
|
||||||
|
v := evalVariable(p, t, "iface")
|
||||||
|
assertNoError(v.Unreadable, t, "iface unreadable")
|
||||||
|
v2 := evalVariable(p, t, "iface2")
|
||||||
|
assertNoError(v2.Unreadable, t, "iface2 unreadable")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -435,6 +435,12 @@ func nameOfNamedRuntimeType(_type *Variable, kind, tflag int64) (typename string
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
if slash := strings.LastIndex(pkgPath, "/"); slash >= 0 {
|
||||||
|
fixedName := strings.Replace(pkgPath[slash+1:], ".", "%2e", -1)
|
||||||
|
if fixedName != pkgPath[slash+1:] {
|
||||||
|
pkgPath = pkgPath[:slash+1] + fixedName
|
||||||
|
}
|
||||||
|
}
|
||||||
typename = pkgPath + "." + typename
|
typename = pkgPath + "." + typename
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user