// run //go:build !wasm // +build !wasm // Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "fmt" ) type toobig struct { a, b, c string } //go:registerparams //go:noinline func (x *toobig) MagicMethodNameForTestingRegisterABI(y toobig, z toobig) toobig { return toobig{x.a, y.b, z.c} } type AnInterface interface { MagicMethodNameForTestingRegisterABI(y toobig, z toobig) toobig } //go:registerparams //go:noinline func I(a, b, c string) toobig { return toobig{a, b, c} } // AnIid prevents the compiler from figuring out what the interface really is. //go:noinline func AnIid(x AnInterface) AnInterface { return x } var tmp toobig func main() { x := I("Ahoy", "1,", "2") y := I("3", "there,", "4") z := I("5", "6,", "Matey") tmp = x.MagicMethodNameForTestingRegisterABI(y, z) fmt.Println(tmp.a, tmp.b, tmp.c) tmp = AnIid(&x).MagicMethodNameForTestingRegisterABI(y, z) fmt.Println(tmp.a, tmp.b, tmp.c) }