From e7f30db1a682208f2e5026ee299f07a3f23958e3 Mon Sep 17 00:00:00 2001 From: Franziska Hinkelmann Date: Thu, 9 Nov 2017 05:58:41 +0100 Subject: [PATCH] deps: cherry-pick 3c8195d from V8 upstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: [map] Fix map constructor to correctly throw. We need to throw before rethrowing, otherwise the exception does not trigger a debugger event and is not reported if uncaught. R=gsathya@chromium.org, jgruber@chromium.org Bug: v8:7047 Change-Id: I7ce0253883a21d6059e4e0ed0fc56dc55a0dcba6 Reviewed-on: https://chromium-review.googlesource.com/758372 Reviewed-by: Jakob Gruber Reviewed-by: Sathya Gunasekaran Commit-Queue: Yang Guo Cr-Commit-Position: refs/heads/master@{#49237} PR-URL: https://github.com/nodejs/node/pull/16897 Fixes: https://github.com/nodejs/node/issues/16856 Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Michaƫl Zasso --- common.gypi | 2 +- .../src/builtins/builtins-collections-gen.cc | 9 ++++---- .../caught-uncaught-exceptions-expected.txt | 8 +++++++ .../debugger/caught-uncaught-exceptions.js | 23 ++++++++++++++++++- 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/common.gypi b/common.gypi index ba441781698841..302d494e9e35e2 100644 --- a/common.gypi +++ b/common.gypi @@ -27,7 +27,7 @@ # Reset this number to 0 on major V8 upgrades. # Increment by one for each non-official patch applied to deps/v8. - 'v8_embedder_string': '-node.10', + 'v8_embedder_string': '-node.11', # Enable disassembler for `--print-code` v8 options 'v8_enable_disassembler': 1, diff --git a/deps/v8/src/builtins/builtins-collections-gen.cc b/deps/v8/src/builtins/builtins-collections-gen.cc index 3cb20cd8df11a5..acb4c949ae11a8 100644 --- a/deps/v8/src/builtins/builtins-collections-gen.cc +++ b/deps/v8/src/builtins/builtins-collections-gen.cc @@ -302,10 +302,11 @@ TF_BUILTIN(MapConstructor, CollectionsBuiltinsAssembler) { BIND(&if_notobject); { - Node* const exception = MakeTypeError( - MessageTemplate::kIteratorValueNotAnObject, context, next_value); - var_exception.Bind(exception); - Goto(&if_exception); + Node* ret = CallRuntime( + Runtime::kThrowTypeError, context, + SmiConstant(MessageTemplate::kIteratorValueNotAnObject), next_value); + GotoIfException(ret, &if_exception, &var_exception); + Unreachable(); } } diff --git a/deps/v8/test/inspector/debugger/caught-uncaught-exceptions-expected.txt b/deps/v8/test/inspector/debugger/caught-uncaught-exceptions-expected.txt index b784fa549e3ba9..9c40b1c5561c94 100644 --- a/deps/v8/test/inspector/debugger/caught-uncaught-exceptions-expected.txt +++ b/deps/v8/test/inspector/debugger/caught-uncaught-exceptions-expected.txt @@ -3,3 +3,11 @@ paused in throwCaught uncaught: false paused in throwUncaught uncaught: true +paused in throwInPromiseCaught +uncaught: false +paused in promiseUncaught +uncaught: true +paused in throwInMapConstructor +uncaught: true +paused in throwInAsyncIterator +uncaught: true \ No newline at end of file diff --git a/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js b/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js index 38b622d3dba0ff..b7c4bd4ab784ee 100644 --- a/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js +++ b/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js @@ -7,6 +7,19 @@ let {session, contextGroup, Protocol} = InspectorTest.start("Check that inspecto contextGroup.addScript( `function throwCaught() { try { throw new Error(); } catch (_) {} } function throwUncaught() { throw new Error(); } + function throwInPromiseCaught() { + var reject; + new Promise(function(res, rej) { reject = rej; }).catch(() => {}); + reject(); + } + function throwInPromiseUncaught() { + new Promise(function promiseUncaught() { throw new Error(); }); + } + function throwInMapConstructor() { new Map('a'); } + function throwInAsyncIterator() { + let it = (async function*() {})(); + it.next.call({}); + } function schedule(f) { setTimeout(f, 0); } `); @@ -22,4 +35,12 @@ Protocol.Debugger.onPaused(message => { Protocol.Runtime.evaluate({ "expression": "schedule(throwCaught);" }) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwUncaught);" })) - .then(() => InspectorTest.completeTest()); + .then(() => Protocol.Runtime.evaluate( + { "expression": "schedule(throwInPromiseCaught);"})) + .then(() => Protocol.Runtime.evaluate( + { "expression": "schedule(throwInPromiseUncaught);"})) + .then(() => Protocol.Runtime.evaluate( + { "expression": "schedule(throwInMapConstructor);"})) + .then(() => Protocol.Runtime.evaluate( + { "expression": "schedule(throwInAsyncIterator);"})) + .then(() => InspectorTest.completeTest());