fix: emit source_loc around iterator_close so for/of return() stack traces report correct line#1473
Open
mvanhorn wants to merge 1 commit into
Conversation
…races report correct line Fixes quickjs-ng#1266
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
When a
for/ofloop early-exits (break/return inside the body) saghul'siterator_closeop runs to release the iterator. Any error thrown from the iterator'sreturn()method was reported with the source_loc of the bytecode AFTER the loop, not the line of the actualfor/of. Fix is to emit asource_locop arounditerator_closeso the stack trace points at the loop.Why this matters
Reporter pinpointed the exact OP and gave a minimal repro. The misleading line number made these errors very hard to diagnose, especially in generators where the iterator's
return()can fail far from the call site.Changes
quickjs.c::js_for_of_close_callback(and the bytecode emitter) - bracketiterator_closewithsource_locops carrying the line of the originatingfor/of.Testing
make all && ./run-test262 -c tests/test262.confclean. Added a script case undertests/bugsthat asserts the stack trace line matches the for/of source line.Fixes #1266