v8/test/mjsunit/harmony/async-await-no-constructor.js
littledan 7826bfa789 [promise] Async/await edge case spec compliance fix
- Don't read .constructor when returning a Promise from an async function.
  Instead, call out to the internals of Promise.resolve directly.
  This is done by adding back in an "optimization" from an earlier form of
  the async/await code written by Caitlin Potter.
- Async functions always return a new Promise with a distinct identity,
  even if they simply return another Promise.

R=caitp@igalia.com
BUG=v8:4483

Review-Url: https://codereview.chromium.org/2219623002
Cr-Commit-Position: refs/heads/master@{#38404}
2016-08-06 01:00:47 +00:00

28 lines
564 B
JavaScript

// Copyright 2016 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: --harmony-async-await --allow-natives-syntax
'use strict';
var resolved = Promise.resolve();
var count = 0;
Object.defineProperty(Promise.prototype, 'constructor',
{ get() { count++; return Promise; } })
async function foo() {
await resolved;
return resolved;
}
async function bar() {
throw 1;
}
foo();
bar();
%RunMicrotasks();
assertEquals(0, count);