interp: fix closure in a struct field

Functions in a struct fields are always wrapped (as potentially
used by the runtime), so generate a function wrapper also for
closure when assigned to a struct field.

When such a function is called from the interpreter, ensure that
interface arguments are also wrapped so method and receiver resolution
can be performed.

Fixes partially #1043.
This commit is contained in:
Marc Vertes
2021-03-11 15:26:04 +01:00
committed by GitHub
parent fdfcb9c1df
commit 7d8fdbc1fc
5 changed files with 70 additions and 10 deletions

View File

@@ -1631,6 +1631,13 @@ func defRecvType(n *node) *itype {
return nil
}
func wrappedType(n *node) *itype {
if n.typ.cat != valueT {
return nil
}
return n.typ.val
}
func isShiftNode(n *node) bool {
switch n.action {
case aShl, aShr, aShlAssign, aShrAssign: