-
-
Notifications
You must be signed in to change notification settings - Fork 24
/
Copy pathfuncs_test.go
69 lines (62 loc) · 850 Bytes
/
funcs_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package cxgo
import "testing"
var casesTranslateFuncs = []parseCase{
{
name: "func ptr",
src: `
int foo() {
int (*a)();
a = &foo;
return a != 0;
}
`,
exp: `
func foo() int32 {
var a func() int32
a = foo
return libc.BoolToInt(a != nil)
}
`,
},
{
name: "wrong func ptr",
src: `
void foo() {
int (*a)();
a = &foo;
return 1;
}
`,
exp: `
func foo() {
var a func() int32
_ = a
a = foo
return 1
}
`,
},
{
name: "call func from array",
src: `
void foo(void) {}
static void (*functions[1])(void) = {
foo,
};
void foo2() {
functions[0]();
}
`,
exp: `
func foo() {
}
var functions [1]*func() = [1]*func(){(*func())(unsafe.Pointer(libc.FuncAddr(foo)))}
func foo2() {
libc.AsFunc(functions[0], (*func())(nil)).(func())()
}
`,
},
}
func TestFunctions(t *testing.T) {
runTestTranslate(t, casesTranslateFuncs)
}