Skip to content

Commit d322907

Browse files
committed
Fix bindc_09
1 parent c4d1a64 commit d322907

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

integration_tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ RUN(NAME bindc_04 LABELS llvm c NOFAST)
374374
RUN(NAME bindc_07 LABELS cpython llvm c NOFAST)
375375
RUN(NAME bindc_08 LABELS cpython llvm c)
376376
RUN(NAME bindc_09 LABELS cpython llvm c)
377+
RUN(NAME bindc_09b LABELS cpython llvm c)
377378
RUN(NAME bindc_10 LABELS cpython llvm c NOFAST)
378379
RUN(NAME bindc_11 LABELS cpython) # This is CPython test only
379380
RUN(NAME exit_01 LABELS cpython llvm c NOFAST)

integration_tests/bindc_09.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
from enum import Enum
22

3-
from lpython import CPtr, c_p_pointer, p_c_pointer, dataclass, empty_c_void_p, pointer, Pointer, i32, ccallable
3+
from lpython import (CPtr, c_p_pointer, p_c_pointer, dataclass, empty_c_void_p,
4+
pointer, Pointer, i32, ccallable, InOut)
45

56
class Value(Enum):
67
TEN: i32 = 10
78
TWO: i32 = 2
89
ONE: i32 = 1
910
FIVE: i32 = 5
1011

11-
@ccallable
1212
@dataclass
1313
class Foo:
1414
value: Value
@@ -18,8 +18,7 @@ class Foo:
1818
class FooC:
1919
value: Value
2020

21-
def bar(foo_ptr: CPtr) -> None:
22-
foo: Pointer[Foo] = c_p_pointer(foo_ptr, Foo)
21+
def bar(foo: InOut[Foo]) -> None:
2322
foo.value = Value.FIVE
2423

2524
def barc(foo_ptr: CPtr) -> None:
@@ -31,8 +30,7 @@ def main() -> None:
3130
fooc: FooC = FooC(Value.TWO)
3231
foo_ptr: CPtr = empty_c_void_p()
3332

34-
p_c_pointer(pointer(foo), foo_ptr)
35-
bar(foo_ptr)
33+
bar(foo)
3634
print(foo.value, foo.value.name)
3735
assert foo.value == Value.FIVE
3836

integration_tests/bindc_09b.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
from enum import Enum
2+
3+
from lpython import CPtr, c_p_pointer, p_c_pointer, dataclass, empty_c_void_p, pointer, Pointer, i32, ccallable
4+
5+
class Value(Enum):
6+
TEN: i32 = 10
7+
TWO: i32 = 2
8+
ONE: i32 = 1
9+
FIVE: i32 = 5
10+
11+
@ccallable
12+
@dataclass
13+
class Foo:
14+
value: Value
15+
16+
@ccallable
17+
@dataclass
18+
class FooC:
19+
value: Value
20+
21+
def bar(foo_ptr: CPtr) -> None:
22+
foo: Pointer[Foo] = c_p_pointer(foo_ptr, Foo)
23+
foo.value = Value.FIVE
24+
25+
def barc(foo_ptr: CPtr) -> None:
26+
foo: Pointer[FooC] = c_p_pointer(foo_ptr, FooC)
27+
foo.value = Value.ONE
28+
29+
def main() -> None:
30+
foo: Foo = Foo(Value.TEN)
31+
fooc: FooC = FooC(Value.TWO)
32+
foo_ptr: CPtr = empty_c_void_p()
33+
34+
p_c_pointer(pointer(foo), foo_ptr)
35+
bar(foo_ptr)
36+
print(foo.value)
37+
assert foo.value == Value.FIVE.value
38+
39+
p_c_pointer(pointer(fooc), foo_ptr)
40+
barc(foo_ptr)
41+
print(fooc.value)
42+
assert fooc.value == Value.ONE.value
43+
44+
main()

0 commit comments

Comments
 (0)