diff options
author | Michaël Zasso <targos@protonmail.com> | 2019-08-16 11:32:46 +0200 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2019-08-19 09:25:23 +0200 |
commit | e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4 (patch) | |
tree | 6c6bed9804be9df6162b2483f0a56f371f66464d /deps/v8/test/mjsunit/async-stack-traces-realms.js | |
parent | ec16fdae540adaf710b1a86c620170b2880088f0 (diff) | |
download | android-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.tar.gz android-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.tar.bz2 android-node-v8-e31f0a7d25668d3c1531294d2ef44a9f3bde4ef4.zip |
deps: update V8 to 7.7.299.4
PR-URL: https://github.com/nodejs/node/pull/28918
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Rich Trott <rtrott@gmail.com>
Diffstat (limited to 'deps/v8/test/mjsunit/async-stack-traces-realms.js')
-rw-r--r-- | deps/v8/test/mjsunit/async-stack-traces-realms.js | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/async-stack-traces-realms.js b/deps/v8/test/mjsunit/async-stack-traces-realms.js new file mode 100644 index 0000000000..9145b93377 --- /dev/null +++ b/deps/v8/test/mjsunit/async-stack-traces-realms.js @@ -0,0 +1,115 @@ +// Copyright 2019 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --allow-natives-syntax --async-stack-traces + +// Basic test with an explicit throw. +(function() { + const realm = Realm.createAllowCrossRealmAccess(); + + async function one(x) { + await two(x); + } + + const two = Realm.eval(realm, `(async function two(x) { + await x; + throw new Error(); + })`); + + async function test(f) { + try { + await f(new Promise(resolve => setTimeout(resolve))); + assertUnreachable(); + } catch (e) { + assertInstanceof(e, Realm.global(realm).Error); + assertMatches(/Error.+at two.+at async one.+at async test/ms, e.stack); + } + } + + assertPromiseResult((async () => { + %PrepareFunctionForOptimization(one); + %PrepareFunctionForOptimization(two); + await test(one); + await test(one); + %OptimizeFunctionOnNextCall(two); + await test(one); + %OptimizeFunctionOnNextCall(one); + await test(one); + Realm.dispose(realm); + })()); +})(); + +// Basic test with an implicit throw (via ToNumber on Symbol). +(function() { + const realm = Realm.createAllowCrossRealmAccess(); + + async function one(x) { + return await two(x); + } + + const two = Realm.eval(realm, `(async function two(x) { + await x; + return +Symbol(); // This will raise a TypeError. + })`); + + async function test(f) { + try { + await f(new Promise(resolve => setTimeout(resolve))); + assertUnreachable(); + } catch (e) { + assertInstanceof(e, Realm.global(realm).TypeError); + assertMatches(/TypeError.+at two.+at async one.+at async test/ms, e.stack); + } + } + + assertPromiseResult((async() => { + %PrepareFunctionForOptimization(one); + %PrepareFunctionForOptimization(two); + await test(one); + await test(one); + %OptimizeFunctionOnNextCall(two); + await test(one); + %OptimizeFunctionOnNextCall(one); + await test(one); + Realm.dispose(realm); + })()); +})(); + +// Basic test with async functions and promises chained via +// Promise.prototype.then(), which should still work following +// the generic chain upwards. +(function() { + const realm = Realm.createAllowCrossRealmAccess(); + + async function one(x) { + return await two(x).then(x => x); + } + + const two = Realm.eval(realm, `(async function two(x) { + await x.then(x => x); + throw new Error(); + })`); + + async function test(f) { + try { + await f(new Promise(resolve => setTimeout(resolve))); + assertUnreachable(); + } catch (e) { + assertInstanceof(e, Realm.global(realm).Error); + assertMatches(/Error.+at two.+at async one.+at async test/ms, e.stack); + } + } + + assertPromiseResult((async() => { + %PrepareFunctionForOptimization(one); + %PrepareFunctionForOptimization(two); + await test(one); + await test(one); + %OptimizeFunctionOnNextCall(two); + await test(one); + %OptimizeFunctionOnNextCall(one); + await test(one); + Realm.dispose(realm); + })()); +})(); |