| // 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: --allow-natives-syntax |
| |
| g = async function() { |
| await 10; |
| }; |
| assertEquals(undefined, g.prototype); |
| g(); |
| assertEquals(undefined, g.prototype); |
| |
| gen = function*() { |
| yield 10; |
| }; |
| assertTrue(gen.prototype != undefined && gen.prototype != null); |
| gen(); |
| assertTrue(gen.prototype != undefined && gen.prototype != null); |
| |
| async_gen = async function*() { |
| yield 10; |
| }; |
| assertTrue(async_gen.prototype != undefined && async_gen.prototype != null); |
| async_gen(); |
| assertTrue(async_gen.prototype != undefined && async_gen.prototype != null); |
| |
| function foo(x) { |
| return x instanceof Proxy; |
| }; |
| %PrepareFunctionForOptimization(foo); |
| function test_for_exception() { |
| caught_exception = false; |
| try { |
| foo({}); |
| } catch (e) { |
| caught_exception = true; |
| assertEquals( |
| 'Function has non-object prototype \'undefined\' in instanceof check', |
| e.message); |
| } finally { |
| assertTrue(caught_exception); |
| } |
| } |
| |
| test_for_exception(); |
| test_for_exception(); |
| %OptimizeFunctionOnNextCall(foo); |
| test_for_exception(); |
| |
| Proxy.__proto__.prototype = Function.prototype; |
| assertTrue((() => {}) instanceof Proxy); |
| |
| assertEquals( |
| new Proxy({}, { |
| get(o, s) { |
| return s; |
| } |
| }).test, |
| 'test'); |
| |
| Proxy.__proto__ = { |
| prototype: {b: 2}, |
| a: 1 |
| }; |
| |
| assertEquals(Proxy.prototype, {b: 2}); |
| |
| (function testProxyCreationContext() { |
| let realm = Realm.create(); |
| let p1 = new Proxy({}, {}); |
| let p2 = Realm.eval(realm, "new Proxy({}, {})"); |
| assertEquals(0, Realm.owner(p1)); |
| assertEquals(1, Realm.owner(p2)); |
| })(); |