Skip to content

Commit 35e9106

Browse files
authored
Merge pull request #598 from certik/c17
Implement passing enums to and from C
2 parents dbf8ea7 + a319a9c commit 35e9106

File tree

3 files changed

+33
-0
lines changed

3 files changed

+33
-0
lines changed

integration_tests/test_c_interop_05.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ def f_pi32_i32(x: CPtr) -> i32:
1212
def f_pstruct_i32(x: CPtr) -> i32:
1313
pass
1414

15+
@ccall
16+
def f_enum_i32(x: i32) -> i32:
17+
pass
18+
1519
@ccall
1620
def driver1() -> i32:
1721
pass
@@ -28,6 +32,10 @@ def driver3() -> i32:
2832
def driver4() -> i32:
2933
pass
3034

35+
@ccall
36+
def driver5() -> i32:
37+
pass
38+
3139
@ccallback
3240
def callback1() -> i32:
3341
xi32: i32
@@ -48,12 +56,17 @@ def callback3(p: CPtr) -> i32:
4856
def callback4(p: CPtr) -> i32:
4957
return f_pstruct_i32(p)
5058

59+
@ccallback
60+
def callback5(x: i32) -> i32:
61+
return f_enum_i32(x)
62+
5163

5264
def test_c_callbacks():
5365
assert driver1() == 4
5466
assert driver2() == 4
5567
assert driver3() == 4
5668
assert driver4() == 4
69+
assert driver5() == 4
5770

5871

5972
test_c_callbacks()

integration_tests/test_c_interop_05b.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ int32_t f_pstruct_i32(struct Data *x) {
1212
return x->a+1;
1313
}
1414

15+
int32_t f_enum_i32(enum MyEnum x) {
16+
return (int32_t)x + 2;
17+
}
18+
1519
int32_t driver1() {
1620
return callback1();
1721
}
@@ -33,3 +37,9 @@ int32_t driver4() {
3337
x.a = 3;
3438
return callback4(&x);
3539
}
40+
41+
int32_t driver5() {
42+
enum MyEnum x;
43+
x = M_c;
44+
return callback5(x);
45+
}

integration_tests/test_c_interop_05b.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,29 @@ struct Data {
1010
char name[25];
1111
};
1212

13+
enum MyEnum {
14+
M_a = 0,
15+
M_b = 1,
16+
M_c = 2,
17+
M_d = 3,
18+
};
19+
1320
int32_t f_i32_i32(int32_t x);
1421
int32_t f_pi32_i32(int32_t *x);
1522
int32_t f_pstruct_i32(struct Data *x);
23+
int32_t f_enum_i32(enum MyEnum x);
1624

1725
int32_t callback1();
1826
int32_t callback2(int32_t x);
1927
int32_t callback3(int32_t *x);
2028
int32_t callback4(struct Data *x);
29+
int32_t callback5(enum MyEnum x);
2130

2231
int32_t driver1();
2332
int32_t driver2();
2433
int32_t driver3();
2534
int32_t driver4();
35+
int32_t driver5();
2636

2737

2838
#endif // TEST_C_INTEROP_05B

0 commit comments

Comments
 (0)