swig -go: treat non-const references as pointers

Also clean up the handling of int* and int& to convert between the C
type int and the Go type int, which are often different sizes.

Fixes #2210
This commit is contained in:
Ian Lance Taylor 2022-03-05 21:57:36 -08:00
commit 27bdbc1f05
4 changed files with 115 additions and 19 deletions

View file

@ -14,6 +14,26 @@ func (p *GoMyClass) Adjust(m map[string]interface{}) wrap.GoRetStruct {
return wrap.GoRetStruct{s}
}
func (p *GoMyClass) S1(s string) {
if s != "S1" {
panic(s)
}
}
func (p *GoMyClass) S2(s *string) {
if *s != "S2" {
panic(s)
}
*s = "R2"
}
func (p *GoMyClass) S3(s *string) {
if *s != "S3" {
panic(s)
}
*s = "R3"
}
func main() {
a := wrap.NewDirectorMyClass(&GoMyClass{})
m := map[string]interface{}{
@ -24,6 +44,18 @@ func main() {
panic(s)
}
a.S1("S1")
str := "S2"
a.S2(&str)
if str != "R2" {
panic(str)
}
str = "S3"
a.S3(&str)
if str != "R3" {
panic(str)
}
a = wrap.NewDirectorMyClass(nil)
s = a.Adjust(m)
if s.Str != `{"first":"second"}` {