| // 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 |
| |
| let target = {0: 42, a: 42}; |
| |
| let proxy = new Proxy(target, { |
| has: function() { |
| return false; |
| } |
| }); |
| |
| Object.preventExtensions(target); |
| |
| function testLookupElementInProxy() { |
| 0 in proxy; |
| } |
| |
| // 9.5.7 [[HasProperty]] 9. states that if the trap returns false, and the |
| // target hasOwnProperty, and the target is non-extensible, throw a type error. |
| ; |
| %PrepareFunctionForOptimization(testLookupElementInProxy); |
| assertThrows(testLookupElementInProxy, TypeError); |
| assertThrows(testLookupElementInProxy, TypeError); |
| %OptimizeFunctionOnNextCall(testLookupElementInProxy); |
| assertThrows(testLookupElementInProxy, TypeError); |
| |
| function testLookupPropertyInProxy() { |
| "a" in proxy; |
| }; |
| %PrepareFunctionForOptimization(testLookupPropertyInProxy); |
| assertThrows(testLookupPropertyInProxy, TypeError); |
| assertThrows(testLookupPropertyInProxy, TypeError); |
| %OptimizeFunctionOnNextCall(testLookupPropertyInProxy); |
| assertThrows(testLookupPropertyInProxy, TypeError); |