17f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Copyright 2010 the V8 project authors. All rights reserved. 27f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Redistribution and use in source and binary forms, with or without 37f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// modification, are permitted provided that the following conditions are 47f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// met: 57f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// 67f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Redistributions of source code must retain the above copyright 77f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// notice, this list of conditions and the following disclaimer. 87f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Redistributions in binary form must reproduce the above 97f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// copyright notice, this list of conditions and the following 107f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// disclaimer in the documentation and/or other materials provided 117f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// with the distribution. 127f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// * Neither the name of Google Inc. nor the names of its 137f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// contributors may be used to endorse or promote products derived 147f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// from this software without specific prior written permission. 157f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// 167f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 177f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 187f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 197f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 207f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 217f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 227f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 237f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 247f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 257f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 267f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 277f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 287f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// idx is a valid array index but is too big to be cached in hash field. 297f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar idx = 10000000; 307f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 317f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Create a JSObject with NumberDictionary as a backing store for elements. 327f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar obj = { }; 337f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfor (var i = 0; i < 100000; i += 100) { obj[i] = "obj" + i; } 347f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 357f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Set value using numeric index. 367f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochobj[idx] = "obj" + idx; 377f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 387f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Make a string from index. 397f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar str = "" + idx; 407f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 417f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Force hash computation for the string representation of index. 427f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfor (var i = 0; i < 10; i++) { ({})[str]; } 437f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch 447f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Try getting value back using string and number representations of 457f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// the same index. 467f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochassertEquals(obj[str], obj[idx]) 47