Simplified struct field handling in the WASM bindings

PiperOrigin-RevId: 829003969
Change-Id: I139f9c0dad96e1664b1bd054f09fcdf58aff260e
This commit is contained in:
Matija Kecman
2025-11-06 10:09:06 -08:00
committed by Copybara-Service
parent 06ecdd6ba1
commit 7dfd92098f
5 changed files with 266 additions and 409 deletions
+18 -26
View File
@@ -349,9 +349,9 @@ void MjsElement::set(mjsElement* ptr) {
),
doc="",
)
wrapped_field_data = structs.StructFieldHandler(
wrapped_field_data = structs._generate_field_data(
field_with_init, "MjsTexture"
).generate()
)
self.assertEqual(
structs.build_struct_source(
"mjsTexture",
@@ -573,8 +573,7 @@ class StructFieldCodeBuilderTest(absltest.TestCase):
type=ast_nodes.ValueType(name="int"),
doc="number of geoms",
)
self.assertEqual(
structs.build_primitive_type_definition(field),
self.assertEqual(structs._generate_field_data(field, "ngeom").definition,
"""
int ngeom() const {
return ptr_->ngeom;
@@ -595,9 +594,7 @@ void set_ngeom(int value) {
array_extent=("ngeom", 4),
)
self.assertEqual(
structs.build_memory_view_definition(
field, "ptr_->ngeom * 4", "ptr_->geom_rgba"
),
structs._generate_field_data(field, "geom_rgba").definition,
"""
emscripten::val geom_rgba() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->ngeom * 4, ptr_->geom_rgba));
@@ -614,7 +611,7 @@ emscripten::val geom_rgba() const {
doc="rgba when material is omitted",
)
self.assertEqual(
structs.build_string_field_definition(field),
structs._generate_field_data(field, "MjString").definition,
"""
mjString string_field() const {
return (ptr_ && ptr_->string_field) ? *(ptr_->string_field) : "";
@@ -636,7 +633,7 @@ void set_string_field(const mjString& value) {
doc="",
)
self.assertEqual(
structs.build_mjvec_pointer_definition(field, "mjDoubleVec"),
structs._generate_field_data(field, "mjDoubleVec").definition,
"""
mjDoubleVec &vector_field() const {
return *(ptr_->vector_field);
@@ -652,7 +649,7 @@ mjDoubleVec &vector_field() const {
doc="",
)
self.assertEqual(
structs.build_mjvec_pointer_definition(field, "mjByteVec"),
structs._generate_field_data(field, "mjByteVec").definition,
"""
std::vector<uint8_t> &vector_field() const {
return *(reinterpret_cast<std::vector<uint8_t>*>(ptr_->vector_field));
@@ -666,7 +663,7 @@ std::vector<uint8_t> &vector_field() const {
doc="number of geoms",
)
self.assertEqual(
structs.build_simple_property_binding(field, "MjModel"),
structs._simple_property_binding(field, "MjModel"),
'.property("ngeom", &MjModel::ngeom)',
)
@@ -677,7 +674,7 @@ std::vector<uint8_t> &vector_field() const {
doc="",
)
self.assertEqual(
structs.build_simple_property_binding(field, "MjModel", True),
structs._simple_property_binding(field, "MjModel", True),
'.property("ngeom", &MjModel::ngeom, &MjModel::set_ngeom)',
)
@@ -688,11 +685,11 @@ std::vector<uint8_t> &vector_field() const {
doc="",
)
self.assertEqual(
structs.build_simple_property_binding(
structs._simple_property_binding(
field,
"MjModel",
add_setter=True,
add_return_value_policy_as_ref=True,
setter=True,
reference=True,
),
'.property("ngeom", &MjModel::ngeom, &MjModel::set_ngeom, reference())',
)
@@ -708,8 +705,7 @@ class StructFieldHandlerTest(absltest.TestCase):
doc="number of geoms",
)
field_handler_scalar = structs.StructFieldHandler(field_scalar, "MjModel")
wrapped_field_data = field_handler_scalar.generate()
wrapped_field_data = structs._generate_field_data(field_scalar, "MjModel")
self.assertEqual(
wrapped_field_data.definition,
"""
@@ -736,7 +732,7 @@ void set_ngeom(int value) {
doc="rgba when material is omitted",
array_extent=("ngeom", 4),
)
wrapped_field_data = structs.StructFieldHandler(field, "MjModel").generate()
wrapped_field_data = structs._generate_field_data(field, "MjModel")
self.assertEqual(
wrapped_field_data.definition,
@@ -761,7 +757,7 @@ emscripten::val geom_rgba() const {
),
doc="main buffer; all pointers point in it (nbuffer bytes)",
)
wrapped_field_data = structs.StructFieldHandler(field, "MjData").generate()
wrapped_field_data = structs._generate_field_data(field, "MjData")
self.assertEqual(
wrapped_field_data.definition,
@@ -782,9 +778,7 @@ emscripten::val buffer() const {
),
doc="",
)
wrapped_field_data = structs.StructFieldHandler(
field, "MjsTexture"
).generate()
wrapped_field_data = structs._generate_field_data(field, "MjsTexture")
self.assertEqual(wrapped_field_data.definition, "MjsElement element;")
self.assertEqual(
@@ -806,9 +800,7 @@ emscripten::val buffer() const {
),
doc="gravitational acceleration",
)
wrapped_field_data = structs.StructFieldHandler(
field, "MjOption"
).generate()
wrapped_field_data = structs._generate_field_data(field, "MjOption")
self.assertEqual(
wrapped_field_data.definition,
@@ -833,7 +825,7 @@ emscripten::val gravity() const {
),
doc="description",
)
wrapped_field_data = structs.StructFieldHandler(field, "MjModel").generate()
wrapped_field_data = structs._generate_field_data(field, "MjModel")
self.assertEqual(
wrapped_field_data.definition,
"""