-
Notifications
You must be signed in to change notification settings - Fork 167
/
Copy pathbindc_09b.py
44 lines (34 loc) · 920 Bytes
/
bindc_09b.py
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
from enum import Enum
from lpython import CPtr, c_p_pointer, p_c_pointer, dataclass, empty_c_void_p, pointer, Pointer, i32, ccallable
class Value(Enum):
TEN: i32 = 10
TWO: i32 = 2
ONE: i32 = 1
FIVE: i32 = 5
@ccallable
@dataclass
class Foo:
value: Value
@ccallable
@dataclass
class FooC:
value: Value
def bar(foo_ptr: CPtr) -> None:
foo: Pointer[Foo] = c_p_pointer(foo_ptr, Foo)
foo.value = Value.FIVE
def barc(foo_ptr: CPtr) -> None:
foo: Pointer[FooC] = c_p_pointer(foo_ptr, FooC)
foo.value = Value.ONE
def main() -> None:
foo: Foo = Foo(Value.TEN)
fooc: FooC = FooC(Value.TWO)
foo_ptr: CPtr = empty_c_void_p()
p_c_pointer(pointer(foo), foo_ptr)
bar(foo_ptr)
print(foo.value)
assert foo.value == Value.FIVE.value
p_c_pointer(pointer(fooc), foo_ptr)
barc(foo_ptr)
print(fooc.value)
assert fooc.value == Value.ONE.value
main()