Skip to content

Conversation

@kripken
Copy link
Member

@kripken kripken commented Apr 2, 2024

This removes the hard-coded generation of a switch and cases, and allows the user
to define the boilerplate at the start and end of the main output, and of what is
generated for each expression. By default we still emit a switch and cases.

Also standardize the output by never emitting ; unnecessarily, which we were
inconsistent about.

This serves two goals: First, it will make using embind on Binaryen simpler as
embind needs to generate C++ template logic for each expression, and not a
switch (and we cannot have extra ; in embind notation). Second, this makes
the format much simple to parse, which is a stepping stone for #6460, e.g.
before we had

  case Expression::Id::LoopId: {
    DELEGATE_START(Loop);
    DELEGATE_FIELD_CHILD(Loop, body);
    DELEGATE_FIELD_SCOPE_NAME_DEF(Loop, name);
    DELEGATE_END(Loop);
    break;
  }

and now we have

DELEGATE_FIELD_CASE_START(Loop)
DELEGATE_FIELD_CHILD(Loop, body)
DELEGATE_FIELD_SCOPE_NAME_DEF(Loop, name)
DELEGATE_FIELD_CASE_END(Loop)

The main part of this diff was autogenerated by this python:

for l in x.splitlines():
  if l.startswith('  case'):
    id = l.split(':')[4][:-2]
    print(f'DELEGATE_FIELD_CASE_START({id})')
  if l.startswith('    DELEGATE_FIELD'):
    print(l)
  if l.startswith('    DELEGATE_END'):
    id = l[17:-2]
    print(f'DELEGATE_FIELD_CASE_END({id})')
    print()

@kripken kripken requested a review from tlively April 2, 2024 23:20
@kripken
Copy link
Member Author

kripken commented Apr 3, 2024

Fuzzer found no issues here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants