| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| var AsyncFunctionPrototype = async function() {}.__proto__; |
| |
| function testAsyncFunctionExpression() |
| { |
| return async function() |
| { |
| await 42; |
| return 1; |
| }; |
| } |
| noInline(testAsyncFunctionExpression); |
| |
| function testAsyncFunctionDeclaration() |
| { |
| async function asyncFn() |
| { |
| await 42; |
| return 1; |
| } |
| |
| return asyncFn; |
| } |
| noInline(testAsyncFunctionDeclaration); |
| |
| function testAsyncArrowFunction() |
| { |
| return async() => |
| { |
| await 42; |
| return 1; |
| }; |
| } |
| noInline(testAsyncArrowFunction); |
| |
| for (var i = 0; i < 1e4; ++i) { |
| shouldBe(testAsyncFunctionExpression().__proto__, AsyncFunctionPrototype); |
| shouldBe(testAsyncFunctionDeclaration().__proto__, AsyncFunctionPrototype); |
| shouldBe(testAsyncArrowFunction().__proto__, AsyncFunctionPrototype); |
| } |