PHP: Ensures that ExitStatus error thrown by Emscripten has a stack trace attached #470
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Overrides Emscripten's default ExitStatus object which gets thrown on failure. Unfortunately, the default object is not a subclass of Error and does not provide any stack trace.
This is a deliberate behavior on Emscripten's end to prevent memory leaks after the program exits. See:
emscripten-core/emscripten#9108
In case of WordPress Playground, the worker in which the PHP runs will typically exit after the PHP program finishes, so we don't have to worry about memory leaks.
As for assigning to a previously undeclared ExitStatus variable here, the Emscripten module declares
ExitStatus
asfunction ExitStatus
which means it gets hoisted to the top of the scope and can be reassigned here – before the actual declaration is reached.If that sounds weird, try this example:
Testing instructions
Confirm the CI tests passed
Related: #416
cc @wojtekn