Cannot run embedded + generic code
zbysir opened this issue · comments
bysir commented
The following program sample.go
triggers an unexpected result
package main
type A struct {
*b[string]
}
type b[T any] struct {
data T
}
func main() {
a := &A{
b: &b[string]{},
}
_ = a
}
Expected result
// Nothing happend, it works fine.
Got
run: ./sample.go:13:3: unknown field b in struct literal
Yaegi Version
0.15.1
Additional Notes
Cannot run embedded + generic code, although they work in isolation.
bysir commented
Additional Note:
Both of the following pieces of code work fine:
type A struct {
B *B[string]
}
type B[T any] struct {
data T
}
a := &A{
B: &B[string]{},
}
type A struct {
*B
}
type B struct {
}
a := &A{
B: &B{},
}
bysir commented
This can be quickly fixed by modifying the fieldName method:
func fieldName(n *node) string {
switch n.kind {
case selectorExpr:
return fieldName(n.child[1])
case starExpr:
return fieldName(n.child[0])
case identExpr:
return n.ident
+ case indexExpr:
+ return fieldName(n.child[0])
default:
return ""
}
}
But maybe this is not the most correct, because indexExpr seems to be the wrong kind.
Update: indexExpr
is correct because go/ast is defined that way.