From cae6703847ef237b6c1f65d51d3d467b1ea5c9cb Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Wed, 8 Nov 2017 13:06:37 +0100 Subject: [PATCH] deps: backport 3c8195d from V8 upstream MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original commit message: 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} Fixes: https://github.com/nodejs/node/issues/17270 PR-URL: https://github.com/nodejs/node/pull/17383 Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: Michaƫl Zasso Reviewed-By: Refael Ackermann Reviewed-By: Yang Guo Reviewed-By: Michael Dawson --- common.gypi | 2 +- .../v8/src/builtins/builtins-collections-gen.cc | 9 +++++---- .../caught-uncaught-exceptions-expected.txt | 6 ++++++ .../debugger/caught-uncaught-exceptions.js | 17 ++++++++++++++++- 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/common.gypi b/common.gypi index 1e6d9ac0b0fe0e..3b53721cd493e0 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.13', + 'v8_embedder_string': '-node.14', # 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..039b8bd9125f43 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,9 @@ 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 \ 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..8789943a892572 100644 --- a/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js +++ b/deps/v8/test/inspector/debugger/caught-uncaught-exceptions.js @@ -7,6 +7,15 @@ 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 schedule(f) { setTimeout(f, 0); } `); @@ -22,4 +31,10 @@ 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(() => InspectorTest.completeTest());