Revision: 12834 Author: [email protected] Date: Tue Oct 30 08:29:34 2012 Log: Fix handling arrays with holes in JSON.stringify.
[email protected] BUG= Review URL: https://chromiumcodereview.appspot.com/11273112 http://code.google.com/p/v8/source/detail?r=12834 Added: /branches/bleeding_edge/test/mjsunit/json2.js Modified: /branches/bleeding_edge/src/json-stringifier.h ======================================= --- /dev/null +++ /branches/bleeding_edge/test/mjsunit/json2.js Tue Oct 30 08:29:34 2012 @@ -0,0 +1,48 @@ +// Copyright 2012 the V8 project authors. All rights reserved. +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Flags: --allow-natives-syntax + +var fast_smi = [1, 2, 3, 4]; +fast_smi.__proto__ = [7, 7, 7, 7]; +delete fast_smi[2]; +assertTrue(%HasFastSmiElements(fast_smi)); +assertEquals("[1,2,7,4]", JSON.stringify(fast_smi)); + +var fast_double = [1.1, 2, 3, 4]; +fast_double.__proto__ = [7, 7, 7, 7]; + +delete fast_double[2]; +assertTrue(%HasFastDoubleElements(fast_double)); +assertEquals("[1.1,2,7,4]", JSON.stringify(fast_double)); + +var fast_obj = [1, 2, {}, {}]; +fast_obj.__proto__ = [7, 7, 7, 7]; + +delete fast_obj[2]; +assertTrue(%HasFastObjectElements(fast_obj)); +assertEquals("[1,2,7,{}]", JSON.stringify(fast_obj)); ======================================= --- /branches/bleeding_edge/src/json-stringifier.h Thu Oct 25 05:18:24 2012 +++ /branches/bleeding_edge/src/json-stringifier.h Tue Oct 30 08:29:34 2012 @@ -413,20 +413,6 @@ } break; } - case FAST_HOLEY_SMI_ELEMENTS: { - Handle<FixedArray> elements = Handle<FixedArray>( - FixedArray::cast(object->elements())); - for (int i = 0; i < length; i++) { - if (i > 0) Append(','); - if (elements->is_the_hole(i)) { - Append("null"); - } else { - SerializeSmi(Smi::cast(elements->get(i))); - } - } - break; - } - case FAST_HOLEY_DOUBLE_ELEMENTS: case FAST_DOUBLE_ELEMENTS: { Handle<FixedDoubleArray> elements = Handle<FixedDoubleArray>( FixedDoubleArray::cast(object->elements())); @@ -436,7 +422,6 @@ } break; } - case FAST_HOLEY_ELEMENTS: case FAST_ELEMENTS: { Handle<FixedArray> elements = Handle<FixedArray>( FixedArray::cast(object->elements())); -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
