diff options
Diffstat (limited to 'deps/v8/test/mjsunit/prototype-changes.js')
-rw-r--r-- | deps/v8/test/mjsunit/prototype-changes.js | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/prototype-changes.js b/deps/v8/test/mjsunit/prototype-changes.js new file mode 100644 index 0000000000..e7fcc7ee95 --- /dev/null +++ b/deps/v8/test/mjsunit/prototype-changes.js @@ -0,0 +1,56 @@ +// Copyright 2015 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 + +function A() { + this.a = "a"; +} +var a = new A(); + +function B() { + this.b = "b"; +} +B.prototype = a; + +function C() { + this.c = "c"; +} +C.prototype = new B(); + +var c = new C(); + +function f(expected) { + var result = c.z; + assertEquals(expected, result); +} +f(undefined); +f(undefined); +%OptimizeFunctionOnNextCall(f); +f(undefined); +a.z = "z"; +f("z"); +f("z"); + +// Test updating .__proto__ pointers. +var p1 = {foo: 1.5}; +var p2 = {}; p2.__proto__ = p1; +var p3 = {}; p3.__proto__ = p2; +var o = {}; o.__proto__ = p3; + +for (var i = 0; i < 2; i++) o.foo; // Force registration. + +var p1a = {foo: 1.7}; +p2.__proto__ = p1a; + +function g(o, expected) { + var result = o.foo; + assertEquals(expected, result); +} + +g(o, 1.7); +g(o, 1.7); +g(o, 1.7); +Object.defineProperty(p1a, "foo", {get: function() { return "foo"}}); +g(o, "foo"); |