mirror of
https://github.com/AdaCore/langkit.git
synced 2026-02-12 12:28:12 -08:00
Unwrapping an array of structs is meant to take the ownership share for these structs, and thus to clear them. This means that the destructor of Python wrappers for structs must handle the case where they no longer have the ownership of a struct value: they didn't so far, which triggered crashes. TN: UA05-027
32 lines
775 B
Python
32 lines
775 B
Python
"""
|
|
Check that the Python bindings to wrap/unwrap arrays of structs of arrays work
|
|
as expected.
|
|
"""
|
|
|
|
from langkit.dsl import ASTNode, Struct, T, UserField
|
|
from langkit.expressions import Entity, langkit_property
|
|
|
|
from utils import build_and_run
|
|
|
|
|
|
class FooNode(ASTNode):
|
|
pass
|
|
|
|
|
|
class ExampleHolder(Struct):
|
|
examples = UserField(type=T.Example.entity.array)
|
|
|
|
|
|
class Example(FooNode):
|
|
@langkit_property(return_type=ExampleHolder.array, public=True)
|
|
def example_holders():
|
|
return ExampleHolder.new(examples=Entity.singleton).singleton
|
|
|
|
@langkit_property(return_type=ExampleHolder.array, public=True)
|
|
def identity(a=ExampleHolder.array):
|
|
return a
|
|
|
|
|
|
build_and_run(lkt_file='expected_concrete_syntax.lkt', py_script='main.py')
|
|
print('Done')
|