// Copyright 2018 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. var sentinel = {}; Object.defineProperty(Promise, Symbol.species, { value: function(f) { f(function() {}, function() {}) return sentinel; } }); // According to the WebAssembly JavaScript API spec, WebAssembly.instantiate is // using the initial value of the Promise constructor. Specifically it ignores // the Promise species constructor installed above. var promise = WebAssembly.instantiate(new ArrayBuffer()); assertInstanceof(promise, Promise); assertNotSame(promise, sentinel); // All further uses of the returned Promise, like using Promise.prototype.then, // will respect the Promise species constructor installed above however. var monkey = promise.then(r => { print(r) }, e => { print(e) }); assertSame(monkey, sentinel);