diff options
Diffstat (limited to 'js/src/jit-test/tests/cacheir/shape-teleporting-2.js')
-rw-r--r-- | js/src/jit-test/tests/cacheir/shape-teleporting-2.js | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/cacheir/shape-teleporting-2.js b/js/src/jit-test/tests/cacheir/shape-teleporting-2.js new file mode 100644 index 0000000000..1b103d7ec3 --- /dev/null +++ b/js/src/jit-test/tests/cacheir/shape-teleporting-2.js @@ -0,0 +1,47 @@ +function A(name) { this.name = name; } +function B() { } +function C() { } + +B.prototype = A0 = new A("0"); +C.prototype = B0 = new B(); + +var A1 = new A("1"); +var A2 = new A("2"); + +var B1 = new B(); +var B2 = new B(); + +var C1 = new C(); +var C2 = new C(); + +// Object <-+- A0 <-+- B0 <-+ +// | | | +// +- A1 +- B1 +- C1 +// | | | +// +- A2 +- B2 +- C2 + +Object.setPrototypeOf(C1, B1); +Object.setPrototypeOf(C2, B2); + +Object.setPrototypeOf(B1, A1); +Object.setPrototypeOf(B2, A2); + +// Object <-+- A0 <--- B0 +// | +// +- A1 <--- B1 <--- C1 +// | +// +- A2 <--- B2 <--- C2 + + +function getName(o) { return o.name; } + +// Warm up JIT +for (var i = 0; i < 100; i++) { + getName(C1); +} + +assertEq(B1.name, "1"); +assertEq(B2.name, "2"); + +assertEq(getName(B1), "1"); +assertEq(getName(B2), "2"); |