| // Copyright 2014 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 |
| |
| var s = %CreatePrivateOwnSymbol("s"); |
| var s1 = %CreatePrivateOwnSymbol("s1"); |
| |
| function TestSimple() { |
| var p = {} |
| p[s] = "moo"; |
| |
| var o = Object.create(p); |
| |
| assertEquals(undefined, o[s]); |
| assertEquals("moo", p[s]); |
| |
| o[s] = "bow-wow"; |
| assertEquals("bow-wow", o[s]); |
| assertEquals("moo", p[s]); |
| } |
| |
| TestSimple(); |
| |
| |
| function TestICs() { |
| var p = {} |
| p[s] = "moo"; |
| |
| |
| var o = Object.create(p); |
| o[s1] = "bow-wow"; |
| function checkNonOwn(o) { |
| assertEquals(undefined, o[s]); |
| assertEquals("bow-wow", o[s1]); |
| } |
| |
| checkNonOwn(o); |
| |
| // Test monomorphic/optimized. |
| for (var i = 0; i < 1000; i++) { |
| checkNonOwn(o); |
| } |
| |
| // Test non-monomorphic. |
| for (var i = 0; i < 1000; i++) { |
| var oNew = Object.create(p); |
| oNew["s" + i] = i; |
| oNew[s1] = "bow-wow"; |
| checkNonOwn(oNew); |
| } |
| } |
| |
| TestICs(); |