1fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright 2013 the V8 project authors. All rights reserved. 2fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 4fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// Redistribution and use in source and binary forms, with or without 5fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// modification, are permitted provided that the following conditions 6fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// are met: 7fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 1. Redistributions of source code must retain the above copyright 8fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// notice, this list of conditions and the following disclaimer. 9fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 2. Redistributions in binary form must reproduce the above copyright 10fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// notice, this list of conditions and the following disclaimer in the 11fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// documentation and/or other materials provided with the distribution. 12fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// 13fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 14fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 15fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 16fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 17fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 18fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 19fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 20fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 22fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 24fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgdescription( 25fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org"This page tests for assertion failures in edge cases of property lookup on primitive values." 26fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org); 27fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 28fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar didNotCrash = true; 29fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 30fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () { 31fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete String.prototype.constructor; 32fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org for (var i = 0; i < 3; ++i) 33fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "".replace; 34fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})(); 35fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 36fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () { 37fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org String.prototype.__proto__ = { x: 1, y: 1 }; 38fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete String.prototype.__proto__.x; 39fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org for (var i = 0; i < 3; ++i) 40fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "".y; 41fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})(); 42fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 43fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org(function () { 44fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org function f(x) { 45fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.y; 46fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org } 47fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 48fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org String.prototype.x = 1; 49fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org String.prototype.y = 1; 50fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete String.prototype.x; 51fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 52fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Number.prototype.x = 1; 53fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Number.prototype.y = 1; 54fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete Number.prototype.x; 55fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 56fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org for (var i = 0; i < 3; ++i) 57fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org f(""); 58fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 59fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org for (var i = 0; i < 3; ++i) 60fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org f(.5); 61fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org})(); 62fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 63fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 64fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgvar checkOkay; 65fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 66fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkGet(x, constructor) 67fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 68fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 69fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, "foo", { get: function() { checkOkay = typeof this === 'object'; }, configurable: true }); 70fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo; 71fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype.foo; 72fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 73fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 74fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 75fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkSet(x, constructor) 76fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 77fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 78fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, "foo", { set: function() { checkOkay = typeof this === 'object'; }, configurable: true }); 79fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo = null; 80fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype.foo; 81fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 82fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 83fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 84fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkGetStrict(x, constructor) 85fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 86fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 87fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, "foo", { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true }); 88fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo; 89fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype.foo; 90fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 91fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 92fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 93fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkSetStrict(x, constructor) 94fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 95fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 96fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, "foo", { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true }); 97fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo = null; 98fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype.foo; 99fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 100fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 101fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 102fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet(1, Number)"); 103fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet('hello', String)"); 104fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGet(true, Boolean)"); 105fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet(1, Number)"); 106fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet('hello', String)"); 107fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSet(true, Boolean)"); 108fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict(1, Number)"); 109fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict('hello', String)"); 110fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkGetStrict(true, Boolean)"); 111fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict(1, Number)"); 112fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict('hello', String)"); 113fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkSetStrict(true, Boolean)"); 114fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 115fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkRead(x, constructor) 116fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 117fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x.foo === undefined; 118fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 119fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 120fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkWrite(x, constructor) 121fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 122fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo = null; 123fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x.foo === undefined; 124fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 125fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 126fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkReadStrict(x, constructor) 127fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 128fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "use strict"; 129fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x.foo === undefined; 130fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 131fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 132fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkWriteStrict(x, constructor) 133fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 134fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "use strict"; 135fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x.foo = null; 136fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x.foo === undefined; 137fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 138fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 139fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead(1, Number)"); 140fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead('hello', String)"); 141fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkRead(true, Boolean)"); 142fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite(1, Number)"); 143fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite('hello', String)"); 144fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkWrite(true, Boolean)"); 145fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict(1, Number)"); 146fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict('hello', String)"); 147fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkReadStrict(true, Boolean)"); 148fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict(1, Number)"); 149fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict('hello', String)"); 150fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkWriteStrict(true, Boolean)"); 151fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 152fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericGet(x, constructor) 153fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 154fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 155fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, 42, { get: function() { checkOkay = typeof this === 'object'; }, configurable: true }); 156fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42]; 157fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype[42]; 158fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 159fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 160fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 161fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericSet(x, constructor) 162fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 163fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 164fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, 42, { set: function() { checkOkay = typeof this === 'object'; }, configurable: true }); 165fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42] = null; 166fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype[42]; 167fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 168fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 169fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 170fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericGetStrict(x, constructor) 171fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 172fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 173fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, 42, { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true }); 174fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42]; 175fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype[42]; 176fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 177fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 178fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 179fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericSetStrict(x, constructor) 180fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 181fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org checkOkay = false; 182fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org Object.defineProperty(constructor.prototype, 42, { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true }); 183fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42] = null; 184fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org delete constructor.prototype[42]; 185fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return checkOkay; 186fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 187fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 188fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet(1, Number)"); 189fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet('hello', String)"); 190fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGet(true, Boolean)"); 191fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet(1, Number)"); 192fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet('hello', String)"); 193fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSet(true, Boolean)"); 194fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict(1, Number)"); 195fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict('hello', String)"); 196fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericGetStrict(true, Boolean)"); 197fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict(1, Number)"); 198fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict('hello', String)"); 199fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericSetStrict(true, Boolean)"); 200fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 201fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericRead(x, constructor) 202fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 203fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x[42] === undefined; 204fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 205fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 206fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericWrite(x, constructor) 207fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 208fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42] = null; 209fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x[42] === undefined; 210fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 211fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 212fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericReadStrict(x, constructor) 213fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 214fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "use strict"; 215fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x[42] === undefined; 216fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 217fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 218fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgfunction checkNumericWriteStrict(x, constructor) 219fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org{ 220fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org "use strict"; 221fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org x[42] = null; 222fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org return x[42] === undefined; 223fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org} 224fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 225fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead(1, Number)"); 226fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead('hello', String)"); 227fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericRead(true, Boolean)"); 228fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite(1, Number)"); 229fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite('hello', String)"); 230fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericWrite(true, Boolean)"); 231fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict(1, Number)"); 232fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict('hello', String)"); 233fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("checkNumericReadStrict(true, Boolean)"); 234fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict(1, Number)"); 235fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict('hello', String)"); 236fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldThrow("checkNumericWriteStrict(true, Boolean)"); 237fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.org 238fb732b17922ea75830be4db6b80534c4827d8a55jkummerow@chromium.orgshouldBeTrue("didNotCrash"); 239