Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use quoted identifiers in wasmprinter by default #1615

Merged
merged 3 commits into from
Jun 12, 2024

Conversation

alexcrichton
Copy link
Member

This commit updates wasmprinter to use quoted identifiers of the form $"foo" when necessary instead of synthesizing identifiers such as $#func4<foo>. This helps produce more readable modules by default when names are synthesized since if a name is unique but otherwise has non-identifier characters then the quoted string form can be used.

While here I've additionally changed the way that non-printable characters in strings are printed to using \u{XXX} syntax instead of \NN syntax. This makes it a bit more obvious in unicode contexts that a single character is present and not multiple.

For a module I was looking at the "before" was:

;; ...
    (func $#func73<undefined_weak:thread-local_initialization_routine_for_errno> (@name "undefined_weak:thread-local initialization routine for errno") (;73;) (type 13)
;; ...
    )
    (func $_initialize (;74;) (type 13)
;; ...
    )
    (func $#func75<initialize_char_const*_> (@name "initialize(char const*)") (;75;) (type 0) (param i32) (result i32)
;; ...

and the "after" is:

;; ...
    (func $"undefined_weak:thread-local initialization routine for errno" (;73;) (type 13)
;; ...
    )
    (func $_initialize (;74;) (type 13)
;; ...
    )
    (func $"initialize(char const*)" (;75;) (type 0) (param i32) (result i32)
;; ...,

Notably $"initialize(char const*)" is much nicer to raed

This commit updates `wasmprinter` to use quoted identifiers of the form
`$"foo"` when necessary instead of synthesizing identifiers such as
`$#func4<foo>`. This helps produce more readable modules by default when
names are synthesized since if a name is unique but otherwise has
non-identifier characters then the quoted string form can be used.

While here I've additionally changed the way that non-printable
characters in strings are printed to using `\u{XXX}` syntax instead of
`\NN` syntax. This makes it a bit more obvious in unicode contexts that
a single character is present and not multiple.
This makes them easier to update as the output changes over time and
additionally easier to add new files here too.
Copy link
Member

@fitzgen fitzgen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

@fitzgen fitzgen added this pull request to the merge queue Jun 12, 2024
Merged via the queue into bytecodealliance:main with commit d643603 Jun 12, 2024
27 checks passed
@alexcrichton alexcrichton deleted the print-dollar-names branch June 13, 2024 00:14
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