| //------------------------------------------------------------------------------------------------------- |
| // Copyright (C) Microsoft. All rights reserved. |
| // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information. |
| //------------------------------------------------------------------------------------------------------- |
| |
| // Make sure we invalidate missing property caches, if the property is shadowed on the proto chain. Also verify it all works with object type specialization. |
| var SimpleObject = function () { |
| this.a = 1; |
| this.b = 2; |
| } |
| |
| var p = {}; |
| SimpleObject.prototype = p; |
| |
| var o = new SimpleObject(); |
| |
| function test() { |
| var a = o.a; |
| var b = o.b; |
| var m = o.m; |
| WScript.Echo("o.m = " + m); |
| } |
| |
| // Run once, walk the proto chain on the slow path not finding property v anywhere, cache it. |
| test(); |
| // Time to do simple JIT |
| // From JIT-ed code retrieve the value of v (undefined) from the missing property cache. |
| test(); |
| // Time to do full JIT (including object type specialization). |
| // From JIT-ed code retrieve the value of v (undefined) from the missing property cache. |
| test(); |
| // Now add the property to the prototype, which should invalidate the cache, and force bailout from JIT-ed code. |
| p.m = 0; |
| // Verify we get the new value now. |
| test(); |
| |