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