1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2014 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Flags: --allow-natives-syntax 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochObject.prototype["10"] = "unreachable"; 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochObject.prototype["7"] = "unreachable"; 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochObject.prototype["-1"] = "unreachable"; 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochObject.prototype["-0"] = "unreachable"; 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochObject.prototype["4294967295"] = "unreachable"; 12014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvar array = new Int32Array(10); 14014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 15014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction check() { 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch for (var i = 0; i < 4; i++) { 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals(undefined, array["-1"]); 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals(undefined, array["-0"]); 19014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals(undefined, array["10"]); 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals(undefined, array["4294967295"]); 21014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals("unreachable", array.__proto__["-1"]); 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals("unreachable", array.__proto__["-0"]); 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals("unreachable", array.__proto__["10"]); 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals("unreachable", array.__proto__["4294967295"]); 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochcheck(); 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdocharray["-1"] = "unreachable"; 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdocharray["-0"] = "unreachable"; 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdocharray["10"] = "unreachable"; 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdocharray["4294967295"] = "unreachable"; 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochcheck(); 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochdelete array["-0"]; 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochdelete array["-1"]; 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochdelete array["10"]; 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochdelete array["4294967295"]; 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(undefined, Object.getOwnPropertyDescriptor(array, "-1")); 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(undefined, Object.getOwnPropertyDescriptor(array, "-0")); 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(undefined, Object.getOwnPropertyDescriptor(array, "10")); 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(undefined, Object.getOwnPropertyDescriptor(array, "4294967295")); 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(10, Object.keys(array).length); 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochcheck(); 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfunction f() { return array["-1"]; } 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochfor (var i = 0; i < 3; i++) { 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch assertEquals(undefined, f()); 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch%OptimizeFunctionOnNextCall(f); 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertEquals(undefined, f()); 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 58014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertThrows('Object.defineProperty(new Int32Array(100), -1, {value: 1})'); 59014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// -0 gets converted to the string "0", so use "-0" instead. 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertThrows('Object.defineProperty(new Int32Array(100), "-0", {value: 1})'); 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertThrows('Object.defineProperty(new Int32Array(100), -10, {value: 1})'); 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochassertThrows('Object.defineProperty(new Int32Array(), 4294967295, {value: 1})'); 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochcheck(); 65