cb08942d2d
Array spread syntax `[...obj]` is compiled to a special bytecode that tries to take fast-paths for values special kinds of `obj`s, including Set, Map, and Array iterator instances. But these fast-paths skip the side-effect checks of `Runtime.evaluate` and friends, and thus lead to surprises for developers. This CL alters the behavior to always call the `next()` builtins when the debugger is active to make sure we catch the side effects correctly. Fixed: chromium:1255896 Change-Id: If3fc48a119cfa791c4fde7b5c586acc22dd973e7 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3226329 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Commit-Queue: Simon Zünd <szuend@chromium.org> Auto-Submit: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Simon Zünd <szuend@chromium.org> Cr-Commit-Position: refs/heads/main@{#77409}
43 lines
1.1 KiB
Plaintext
43 lines
1.1 KiB
Plaintext
Tests side-effect-free evaluation
|
|
|
|
Running test: basicTest
|
|
Paused on "debugger;"
|
|
f() returns 1
|
|
g() returns 2
|
|
f() returns 1
|
|
g() throws EvalError
|
|
|
|
Running test: testAsyncFunctions
|
|
testAsyncFunction("resolve") : ok
|
|
testAsyncFunction("reject") : throws
|
|
|
|
Running test: testDate
|
|
someGlobalDate.setDate(10) : throws
|
|
new Date().setDate(10) : ok
|
|
someGlobalDate.setFullYear(1991) : throws
|
|
new Date().setFullYear(1991) : ok
|
|
someGlobalDate.setHours(0) : throws
|
|
new Date().setHours(0) : ok
|
|
someGlobalDate.getDate() : ok
|
|
new Date().getDate() : ok
|
|
someGlobalDate.getFullYear() : ok
|
|
new Date().getFullYear() : ok
|
|
someGlobalDate.getHours() : ok
|
|
new Date().getHours() : ok
|
|
|
|
Running test: testPromiseReject
|
|
Promise.reject() : throws
|
|
|
|
Running test: testSpread
|
|
[...someGlobalArray] : ok
|
|
[...someGlobalArray.values()] : ok
|
|
[...someGlobalArrayIterator] : throws
|
|
[...someGlobalMap] : ok
|
|
[...someGlobalMap.keys()] : ok
|
|
[...someGlobalMap.values()] : ok
|
|
[...someGlobalMapKeysIterator] : throws
|
|
[...someGlobalMapValuesIterator] : throws
|
|
[...someGlobalSet] : ok
|
|
[...someGlobalSet.values()] : ok
|
|
[...someGlobalSetIterator] : throws
|