Change WASM generators from classes to functions.

PiperOrigin-RevId: 836257289
Change-Id: I7a3c1d7bb545353a3d278330582e33c0551792cb
This commit is contained in:
Google DeepMind
2025-11-24 09:35:06 -08:00
committed by Copybara-Service
parent 1c910875d2
commit 217317ccba
5 changed files with 105 additions and 125 deletions
+17 -21
View File
@@ -21,26 +21,22 @@ from introspect import ast_nodes
from wasm.codegen.generators import code_builder
class Generator:
"""Generates Embind code for MuJoCo enums."""
def generate(
enums: Mapping[str, ast_nodes.EnumDecl],
) -> list[tuple[str, list[str]]]:
"""Generates all Embind code for the provided enums."""
def __init__(self, enums: Mapping[str, ast_nodes.EnumDecl]):
self.enums = enums
builder = code_builder.CodeBuilder()
with builder.block('EMSCRIPTEN_BINDINGS(mujoco_enums)'):
for e in 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()
def generate(self) -> list[tuple[str, list[str]]]:
"""Generates all Embind code for the provided enums."""
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 = builder.to_string()
marker = '// {{ ENUM_BINDINGS }}'
return [(marker, [content])]
content = builder.to_string()
marker = '// {{ ENUM_BINDINGS }}'
return [(marker, [content])]