| Index: test/mjsunit/regress/regress-2595.js
|
| diff --git a/test/mjsunit/regress/regress-2596.js b/test/mjsunit/regress/regress-2595.js
|
| similarity index 66%
|
| copy from test/mjsunit/regress/regress-2596.js
|
| copy to test/mjsunit/regress/regress-2595.js
|
| index 1d327fe0f8b756242da8b5f5798cbf9c6691adb1..5bb5f6d16aed581966ce28a73190fdc95ee60d01 100644
|
| --- a/test/mjsunit/regress/regress-2596.js
|
| +++ b/test/mjsunit/regress/regress-2595.js
|
| @@ -27,30 +27,31 @@
|
|
|
| // Flags: --allow-natives-syntax
|
|
|
| -var bytes = new Uint8Array([
|
| - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f]); // kHoleNaN
|
| -var doubles = new Float64Array(bytes.buffer);
|
| -assertTrue(isNaN(doubles[0]));
|
| +var p = { f: function () { return "p"; } };
|
| +var o = Object.create(p);
|
| +o.x = true;
|
| +delete o.x; // slow case object
|
|
|
| -var prototype = [2.5, 2.5];
|
| -var array = [3.5, 3.5];
|
| -array.__proto__ = prototype;
|
| -assertTrue(%HasFastDoubleElements(array));
|
| +var u = { x: 0, f: function () { return "u"; } }; // object with some other map
|
|
|
| -function boom(index) {
|
| - array[index] = doubles[0];
|
| - return array[index];
|
| +function F(x) {
|
| + return x.f();
|
| }
|
|
|
| -assertTrue(isNaN(boom(0)));
|
| -assertTrue(isNaN(boom(0)));
|
| -assertTrue(isNaN(boom(0)));
|
| -
|
| -// Test hydrogen
|
| -%OptimizeFunctionOnNextCall(boom);
|
| -assertTrue(isNaN(boom(0)));
|
| -assertTrue(isNaN(boom(0)));
|
| -assertTrue(isNaN(boom(0)));
|
| -
|
| -
|
| -
|
| +// First make CALL IC in F go MEGAMORPHIC and ensure that we put the stub
|
| +// that calls p.f (guarded by a negative dictionary lookup on the reciever)
|
| +// into the stub cache
|
| +assertEquals("p", F(o));
|
| +assertEquals("p", F(o));
|
| +assertEquals("u", F(u));
|
| +assertEquals("p", F(o));
|
| +assertEquals("u", F(u));
|
| +
|
| +// Optimize F. We will inline p.f into F guarded by map checked against
|
| +// receiver which does not work for slow case objects.
|
| +%OptimizeFunctionOnNextCall(F);
|
| +assertEquals("p", F(o));
|
| +
|
| +// Add f to o. o's map will *not* change.
|
| +o.f = function () { return "o"; };
|
| +assertEquals("o", F(o));
|
|
|