From 53e254b7151df0521b834c34e2f94c49831186bc Mon Sep 17 00:00:00 2001 From: Matias Manevi Date: Fri, 14 Nov 2025 10:02:20 -0800 Subject: [PATCH] Generate `using` declarations for anonymous structs in WASM bindings. PiperOrigin-RevId: 832359379 Change-Id: Ie5913c584c5605f512dbe423524a829043179b6f --- wasm/codegen/generated/bindings.cc | 5 ++--- wasm/codegen/generators/structs.py | 11 +++++++++++ wasm/codegen/templates/bindings.cc | 8 +------- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/wasm/codegen/generated/bindings.cc b/wasm/codegen/generated/bindings.cc index 2dcc0132..c7939ede 100644 --- a/wasm/codegen/generated/bindings.cc +++ b/wasm/codegen/generated/bindings.cc @@ -105,13 +105,12 @@ std::vector InitWrapperArray(ArrayType* array, SizeType size) { return result; } -// Create the types for anonymous structs using mjVisualGlobal = decltype(::mjVisual::global); -using mjVisualQuality = decltype(::mjVisual::quality); using mjVisualHeadlight = decltype(::mjVisual::headlight); using mjVisualMap = decltype(::mjVisual::map); -using mjVisualScale = decltype(::mjVisual::scale); +using mjVisualQuality = decltype(::mjVisual::quality); using mjVisualRgba = decltype(::mjVisual::rgba); +using mjVisualScale = decltype(::mjVisual::scale); struct MjContact { explicit MjContact(mjContact *ptr); diff --git a/wasm/codegen/generators/structs.py b/wasm/codegen/generators/structs.py index 5c09e8c7..aa1fe966 100644 --- a/wasm/codegen/generators/structs.py +++ b/wasm/codegen/generators/structs.py @@ -699,6 +699,17 @@ class Generator: autogenned_struct_definitions = [] markers_and_content = [] + typedefs = [] + for type_name in sorted(constants.ANONYMOUS_STRUCTS): + s = constants.ANONYMOUS_STRUCTS[type_name] + typedefs.append( + f"using {type_name} = decltype(::{s['parent']}::{s['field_name']});" + ) + markers_and_content.append(( + "// {{ ANONYMOUS_STRUCT_TYPEDEFS }}", + typedefs, + )) + # Sort by struct name by dependency to ensure deterministic output order sorted_struct_names = sort_structs_by_dependency(self.structs_to_bind_data) diff --git a/wasm/codegen/templates/bindings.cc b/wasm/codegen/templates/bindings.cc index 1de0922e..6e1494e9 100644 --- a/wasm/codegen/templates/bindings.cc +++ b/wasm/codegen/templates/bindings.cc @@ -105,13 +105,7 @@ std::vector InitWrapperArray(ArrayType* array, SizeType size) { return result; } -// Create the types for anonymous structs -using mjVisualGlobal = decltype(::mjVisual::global); -using mjVisualQuality = decltype(::mjVisual::quality); -using mjVisualHeadlight = decltype(::mjVisual::headlight); -using mjVisualMap = decltype(::mjVisual::map); -using mjVisualScale = decltype(::mjVisual::scale); -using mjVisualRgba = decltype(::mjVisual::rgba); +// {{ ANONYMOUS_STRUCT_TYPEDEFS }} // {{ AUTOGENNED_STRUCTS_HEADER }}