@@ -14,12 +14,13 @@ func callWrapper()
14
14
type funcStorage struct {
15
15
code uintptr
16
16
argsize uintptr
17
+ retsize uintptr
17
18
value int
18
19
}
19
20
20
- func fake (s * funcStorage , i * [2 ]int ) int {
21
+ func fake (s * funcStorage , i * [2 ]int ) int64 {
21
22
fmt .Println ("in fake: " , s .value , i [0 ], i [1 ])
22
- return i [0 ] + 100 + s .value
23
+ return int64 ( i [0 ] + 100 + s .value )
23
24
}
24
25
25
26
var alignSize = unsafe .Sizeof (uintptr (0 ))
@@ -35,15 +36,20 @@ func emulate(x reflect.Value) {
35
36
size = (size + alignSize - 1 ) &^ (alignSize - 1 )
36
37
toassign .argsize += size
37
38
}
39
+ for i := 0 ; i < ftype .NumOut (); i ++ {
40
+ size := ftype .Out (i ).Size ()
41
+ size = (size + alignSize - 1 ) &^ (alignSize - 1 )
42
+ toassign .retsize += size
43
+ }
38
44
toassign .value = - 5
39
45
* (* unsafe .Pointer )(unsafe .Pointer (fptr )) = unsafe .Pointer (toassign )
40
46
fmt .Println (toassign )
41
47
}
42
48
43
49
func main () {
44
- var test func (int , byte , int ) int
45
- var test1 func (int , int ) int
46
- var test2 func (int , string ) int
50
+ var test func (int , byte , int ) int64
51
+ var test1 func (int , int ) int64
52
+ var test2 func (int , string ) int64
47
53
48
54
emulate (reflect .ValueOf (& test ))
49
55
emulate (reflect .ValueOf (& test1 ))
@@ -60,5 +66,4 @@ func main() {
60
66
fmt .Println ("test2 1: " , test2 (10 , "1, 2" ))
61
67
fmt .Println ("test2 2: " , test2 (11 , "2, 3" ))
62
68
fmt .Println ("test2 3: " , test2 (12 , "3, 4" ))
63
-
64
69
}
0 commit comments