DescriptionEnsure IteratorClose is called for errors in non-declaring assignments
There was a bug in for-of loops without newly declared variables: If,
in performing the assignment, an exception were thrown, then
IteratorClose would not be called. The problem was that the assignment
is done as part of assign_each, which happens before the loop is put
back in the state which is recognized to be breaking/throwing/returning
early.
This patch modifies the for-of desugaring by setting the loop state
before, rather than after, evaluating the assign_each portion, which is
responsible for evaluating the assignment in for-of loops which do not
have a declaration.
This patch, together with https://codereview.chromium.org/1728973002 ,
allow all test262 iterator return-related tests to pass.
R=rossberg
BUG=v8:4776
LOG=Y
Committed: https://crrev.com/1aee75551ea3237ab653a998e492110e50f18cdd
Cr-Commit-Position: refs/heads/master@{#34262}
Patch Set 1 #Patch Set 2 : Fixed the issue where I forgot to allocate the 'each' variable #Patch Set 3 : Rebase and fix test262 expectation #
Messages
Total messages: 18 (9 generated)
|