| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 Result SerializeDouble(double number); | 135 Result SerializeDouble(double number); |
| 136 INLINE(Result SerializeHeapNumber(Handle<HeapNumber> object)) { | 136 INLINE(Result SerializeHeapNumber(Handle<HeapNumber> object)) { |
| 137 return SerializeDouble(object->value()); | 137 return SerializeDouble(object->value()); |
| 138 } | 138 } |
| 139 | 139 |
| 140 Result SerializeJSValue(Handle<JSValue> object); | 140 Result SerializeJSValue(Handle<JSValue> object); |
| 141 | 141 |
| 142 INLINE(Result SerializeJSArray(Handle<JSArray> object)); | 142 INLINE(Result SerializeJSArray(Handle<JSArray> object)); |
| 143 INLINE(Result SerializeJSObject(Handle<JSObject> object)); | 143 INLINE(Result SerializeJSObject(Handle<JSObject> object)); |
| 144 | 144 |
| 145 Result SerializeJSArraySlow(Handle<JSArray> object, int length); | 145 Result SerializeJSArraySlow(Handle<JSArray> object, uint32_t length); |
| 146 | 146 |
| 147 void SerializeString(Handle<String> object); | 147 void SerializeString(Handle<String> object); |
| 148 | 148 |
| 149 template <typename SrcChar, typename DestChar> | 149 template <typename SrcChar, typename DestChar> |
| 150 INLINE(static int SerializeStringUnchecked_(const SrcChar* src, | 150 INLINE(static int SerializeStringUnchecked_(const SrcChar* src, |
| 151 DestChar* dest, | 151 DestChar* dest, |
| 152 int length)); | 152 int length)); |
| 153 | 153 |
| 154 template <bool is_ascii, typename Char> | 154 template <bool is_ascii, typename Char> |
| 155 INLINE(void SerializeString_(Handle<String> string)); | 155 INLINE(void SerializeString_(Handle<String> string)); |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 AppendAscii(DoubleToCString(number, buffer)); | 562 AppendAscii(DoubleToCString(number, buffer)); |
| 563 return SUCCESS; | 563 return SUCCESS; |
| 564 } | 564 } |
| 565 | 565 |
| 566 | 566 |
| 567 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( | 567 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArray( |
| 568 Handle<JSArray> object) { | 568 Handle<JSArray> object) { |
| 569 HandleScope handle_scope(isolate_); | 569 HandleScope handle_scope(isolate_); |
| 570 Result stack_push = StackPush(object); | 570 Result stack_push = StackPush(object); |
| 571 if (stack_push != SUCCESS) return stack_push; | 571 if (stack_push != SUCCESS) return stack_push; |
| 572 int length = Smi::cast(object->length())->value(); | 572 uint32_t length = 0; |
| 573 CHECK(object->length()->ToArrayIndex(&length)); |
| 573 Append('['); | 574 Append('['); |
| 574 switch (object->GetElementsKind()) { | 575 switch (object->GetElementsKind()) { |
| 575 case FAST_SMI_ELEMENTS: { | 576 case FAST_SMI_ELEMENTS: { |
| 576 Handle<FixedArray> elements( | 577 Handle<FixedArray> elements( |
| 577 FixedArray::cast(object->elements()), isolate_); | 578 FixedArray::cast(object->elements()), isolate_); |
| 578 for (int i = 0; i < length; i++) { | 579 for (uint32_t i = 0; i < length; i++) { |
| 579 if (i > 0) Append(','); | 580 if (i > 0) Append(','); |
| 580 SerializeSmi(Smi::cast(elements->get(i))); | 581 SerializeSmi(Smi::cast(elements->get(i))); |
| 581 } | 582 } |
| 582 break; | 583 break; |
| 583 } | 584 } |
| 584 case FAST_DOUBLE_ELEMENTS: { | 585 case FAST_DOUBLE_ELEMENTS: { |
| 585 Handle<FixedDoubleArray> elements( | 586 Handle<FixedDoubleArray> elements( |
| 586 FixedDoubleArray::cast(object->elements()), isolate_); | 587 FixedDoubleArray::cast(object->elements()), isolate_); |
| 587 for (int i = 0; i < length; i++) { | 588 for (uint32_t i = 0; i < length; i++) { |
| 588 if (i > 0) Append(','); | 589 if (i > 0) Append(','); |
| 589 SerializeDouble(elements->get_scalar(i)); | 590 SerializeDouble(elements->get_scalar(i)); |
| 590 } | 591 } |
| 591 break; | 592 break; |
| 592 } | 593 } |
| 593 case FAST_ELEMENTS: { | 594 case FAST_ELEMENTS: { |
| 594 Handle<FixedArray> elements( | 595 Handle<FixedArray> elements( |
| 595 FixedArray::cast(object->elements()), isolate_); | 596 FixedArray::cast(object->elements()), isolate_); |
| 596 for (int i = 0; i < length; i++) { | 597 for (uint32_t i = 0; i < length; i++) { |
| 597 if (i > 0) Append(','); | 598 if (i > 0) Append(','); |
| 598 Result result = | 599 Result result = |
| 599 SerializeElement(isolate_, | 600 SerializeElement(isolate_, |
| 600 Handle<Object>(elements->get(i), isolate_), | 601 Handle<Object>(elements->get(i), isolate_), |
| 601 i); | 602 i); |
| 602 if (result == SUCCESS) continue; | 603 if (result == SUCCESS) continue; |
| 603 if (result == UNCHANGED) { | 604 if (result == UNCHANGED) { |
| 604 AppendAscii("null"); | 605 AppendAscii("null"); |
| 605 } else { | 606 } else { |
| 606 return result; | 607 return result; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 618 } | 619 } |
| 619 } | 620 } |
| 620 Append(']'); | 621 Append(']'); |
| 621 StackPop(); | 622 StackPop(); |
| 622 current_part_ = handle_scope.CloseAndEscape(current_part_); | 623 current_part_ = handle_scope.CloseAndEscape(current_part_); |
| 623 return SUCCESS; | 624 return SUCCESS; |
| 624 } | 625 } |
| 625 | 626 |
| 626 | 627 |
| 627 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow( | 628 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow( |
| 628 Handle<JSArray> object, int length) { | 629 Handle<JSArray> object, uint32_t length) { |
| 629 for (int i = 0; i < length; i++) { | 630 for (uint32_t i = 0; i < length; i++) { |
| 630 if (i > 0) Append(','); | 631 if (i > 0) Append(','); |
| 631 Handle<Object> element; | 632 Handle<Object> element; |
| 632 ASSIGN_RETURN_ON_EXCEPTION_VALUE( | 633 ASSIGN_RETURN_ON_EXCEPTION_VALUE( |
| 633 isolate_, element, | 634 isolate_, element, |
| 634 Object::GetElement(isolate_, object, i), | 635 Object::GetElement(isolate_, object, i), |
| 635 EXCEPTION); | 636 EXCEPTION); |
| 636 if (element->IsUndefined()) { | 637 if (element->IsUndefined()) { |
| 637 AppendAscii("null"); | 638 AppendAscii("null"); |
| 638 } else { | 639 } else { |
| 639 Result result = SerializeElement(isolate_, element, i); | 640 Result result = SerializeElement(isolate_, element, i); |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 897 SerializeString_<false, uint8_t>(object); | 898 SerializeString_<false, uint8_t>(object); |
| 898 } else { | 899 } else { |
| 899 SerializeString_<false, uc16>(object); | 900 SerializeString_<false, uc16>(object); |
| 900 } | 901 } |
| 901 } | 902 } |
| 902 } | 903 } |
| 903 | 904 |
| 904 } } // namespace v8::internal | 905 } } // namespace v8::internal |
| 905 | 906 |
| 906 #endif // V8_JSON_STRINGIFIER_H_ | 907 #endif // V8_JSON_STRINGIFIER_H_ |
| OLD | NEW |