Simplify enum WASM bindings generator

PiperOrigin-RevId: 834725472
Change-Id: I278447145cd8dcdd145f0d50bc3bae649ea2b440
This commit is contained in:
Matija Kecman
2025-11-20 05:50:55 -08:00
committed by Copybara-Service
parent a0d49ade1b
commit ee8dbd4347
4 changed files with 17 additions and 20 deletions
+12 -16
View File
@@ -27,24 +27,20 @@ class Generator:
def __init__(self, enums: Mapping[str, ast_nodes.EnumDecl]):
self.enums = enums
def _generate_enum_binding(self, enum: ast_nodes.EnumDecl) -> str:
"""Generates the Embind code for a single enum."""
code = f'{code_builder.INDENT}enum_<{enum.name}>("{enum.name}")'
for value_name in enum.values:
code += f'\n{2*code_builder.INDENT}.value("{value_name}", {value_name})'
code += ";"
return code
def generate(self) -> list[tuple[str, list[str]]]:
"""Generates all Embind code for the provided enums."""
code = []
for enum in self.enums.values():
code.append(self._generate_enum_binding(enum))
builder = code_builder.CodeBuilder()
with builder.block('EMSCRIPTEN_BINDINGS(mujoco_enums)'):
for e in self.enums.values():
if e.values: # Skip empty enums.
with builder.block(f'enum_<{e.name}>("{e.name}")', braces=False):
names = list(e.values.keys())
for name in names[:-1]:
builder.line(f'.value("{name}", {name})')
builder.line(f'.value("{names[-1]}", {names[-1]});')
builder.newline()
content = "\n\n".join(code)
marker = "// {{ ENUM_BINDINGS }}"
content = builder.to_string()
marker = '// {{ ENUM_BINDINGS }}'
return [(marker, [content])]