diff --git a/integration_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt index c3b8a68dbd..c265eec763 100644 --- a/integration_tests/CMakeLists.txt +++ b/integration_tests/CMakeLists.txt @@ -590,6 +590,7 @@ RUN(NAME structs_27 LABELS cpython llvm c) RUN(NAME structs_28 LABELS cpython llvm c) RUN(NAME structs_29 LABELS cpython llvm) RUN(NAME structs_30 LABELS cpython llvm c) +RUN(NAME structs_31 LABELS cpython c) RUN(NAME symbolics_01 LABELS cpython_sym c_sym) RUN(NAME symbolics_02 LABELS cpython_sym c_sym) diff --git a/integration_tests/structs_31.py b/integration_tests/structs_31.py new file mode 100644 index 0000000000..197aed33d4 --- /dev/null +++ b/integration_tests/structs_31.py @@ -0,0 +1,45 @@ +from lpython import ccallback, ccall, packed, dataclass, i32, c_p_pointer, Pointer, CPtr, u16, pointer, InOut + + +@packed +@dataclass +class inner_struct: + a: i32 + + +@packed +@dataclass +class outer_struct: + b: inner_struct = inner_struct(0) + + +def update_my_inner_struct(my_inner_struct: InOut[inner_struct]) -> None: + my_inner_struct.a = 99999 + + +def update_my_outer_struct(my_outer_struct: InOut[outer_struct]) -> None: + my_outer_struct.b.a = 12345 + + +def main() -> None: + my_outer_struct: outer_struct = outer_struct() + my_inner_struct: inner_struct = my_outer_struct.b + + assert my_outer_struct.b.a == 0 + + my_outer_struct.b.a = 12345 + assert my_outer_struct.b.a == 12345 + + my_outer_struct.b.a = 0 + assert my_outer_struct.b.a == 0 + + update_my_outer_struct(my_outer_struct) + assert my_outer_struct.b.a == 12345 + + my_inner_struct.a = 1111 + assert my_inner_struct.a == 1111 + + update_my_inner_struct(my_inner_struct) + assert my_inner_struct.a == 99999 + +main()