| 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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 bool deferred_comma, | 84 bool deferred_comma, |
| 85 bool deferred_key); | 85 bool deferred_key); |
| 86 | 86 |
| 87 // Entry point to serialize the object. | 87 // Entry point to serialize the object. |
| 88 INLINE(Result SerializeObject(Handle<Object> obj)) { | 88 INLINE(Result SerializeObject(Handle<Object> obj)) { |
| 89 return Serialize_<false>(obj, false, factory_->empty_string()); | 89 return Serialize_<false>(obj, false, factory_->empty_string()); |
| 90 } | 90 } |
| 91 | 91 |
| 92 // Serialize an array element. | 92 // Serialize an array element. |
| 93 // The index may serve as argument for the toJSON function. | 93 // The index may serve as argument for the toJSON function. |
| 94 INLINE(Result SerializeElement(Handle<Object> object, int i)) { | 94 INLINE(Result SerializeElement(Isolate* isolate, |
| 95 return Serialize_<false>(object, false, Handle<Object>(Smi::FromInt(i))); | 95 Handle<Object> object, |
| 96 int i)) { |
| 97 return Serialize_<false>(object, |
| 98 false, |
| 99 Handle<Object>(Smi::FromInt(i), isolate)); |
| 96 } | 100 } |
| 97 | 101 |
| 98 // Serialize a object property. | 102 // Serialize a object property. |
| 99 // The key may or may not be serialized depending on the property. | 103 // The key may or may not be serialized depending on the property. |
| 100 // The key may also serve as argument for the toJSON function. | 104 // The key may also serve as argument for the toJSON function. |
| 101 INLINE(Result SerializeProperty(Handle<Object> object, | 105 INLINE(Result SerializeProperty(Handle<Object> object, |
| 102 bool deferred_comma, | 106 bool deferred_comma, |
| 103 Handle<String> deferred_key)) { | 107 Handle<String> deferred_key)) { |
| 104 ASSERT(!deferred_key.is_null()); | 108 ASSERT(!deferred_key.is_null()); |
| 105 return Serialize_<true>(object, deferred_comma, deferred_key); | 109 return Serialize_<true>(object, deferred_comma, deferred_key); |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 SerializeDouble(elements->get_scalar(i)); | 501 SerializeDouble(elements->get_scalar(i)); |
| 498 } | 502 } |
| 499 break; | 503 break; |
| 500 } | 504 } |
| 501 case FAST_ELEMENTS: { | 505 case FAST_ELEMENTS: { |
| 502 Handle<FixedArray> elements( | 506 Handle<FixedArray> elements( |
| 503 FixedArray::cast(object->elements()), isolate_); | 507 FixedArray::cast(object->elements()), isolate_); |
| 504 for (int i = 0; i < length; i++) { | 508 for (int i = 0; i < length; i++) { |
| 505 if (i > 0) Append(','); | 509 if (i > 0) Append(','); |
| 506 Result result = | 510 Result result = |
| 507 SerializeElement(Handle<Object>(elements->get(i), isolate_), i); | 511 SerializeElement(isolate_, |
| 512 Handle<Object>(elements->get(i), isolate_), |
| 513 i); |
| 508 if (result == SUCCESS) continue; | 514 if (result == SUCCESS) continue; |
| 509 if (result == UNCHANGED) { | 515 if (result == UNCHANGED) { |
| 510 AppendAscii("null"); | 516 AppendAscii("null"); |
| 511 } else { | 517 } else { |
| 512 return result; | 518 return result; |
| 513 } | 519 } |
| 514 } | 520 } |
| 515 break; | 521 break; |
| 516 } | 522 } |
| 517 // TODO(yangguo): The FAST_HOLEY_* cases could be handled in a faster way. | 523 // TODO(yangguo): The FAST_HOLEY_* cases could be handled in a faster way. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 531 | 537 |
| 532 | 538 |
| 533 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow( | 539 BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSArraySlow( |
| 534 Handle<JSArray> object, int length) { | 540 Handle<JSArray> object, int length) { |
| 535 for (int i = 0; i < length; i++) { | 541 for (int i = 0; i < length; i++) { |
| 536 if (i > 0) Append(','); | 542 if (i > 0) Append(','); |
| 537 Handle<Object> element = Object::GetElement(object, i); | 543 Handle<Object> element = Object::GetElement(object, i); |
| 538 if (element->IsUndefined()) { | 544 if (element->IsUndefined()) { |
| 539 AppendAscii("null"); | 545 AppendAscii("null"); |
| 540 } else { | 546 } else { |
| 541 Result result = SerializeElement(element, i); | 547 Result result = SerializeElement(object->GetIsolate(), element, i); |
| 542 if (result == SUCCESS) continue; | 548 if (result == SUCCESS) continue; |
| 543 if (result == UNCHANGED) { | 549 if (result == UNCHANGED) { |
| 544 AppendAscii("null"); | 550 AppendAscii("null"); |
| 545 } else { | 551 } else { |
| 546 return result; | 552 return result; |
| 547 } | 553 } |
| 548 } | 554 } |
| 549 } | 555 } |
| 550 return SUCCESS; | 556 return SUCCESS; |
| 551 } | 557 } |
| (...skipping 22 matching lines...) Expand all Loading... |
| 574 Handle<String> key(map->instance_descriptors()->GetKey(i), isolate_); | 580 Handle<String> key(map->instance_descriptors()->GetKey(i), isolate_); |
| 575 PropertyDetails details = map->instance_descriptors()->GetDetails(i); | 581 PropertyDetails details = map->instance_descriptors()->GetDetails(i); |
| 576 if (details.IsDontEnum() || details.IsDeleted()) continue; | 582 if (details.IsDontEnum() || details.IsDeleted()) continue; |
| 577 Handle<Object> property; | 583 Handle<Object> property; |
| 578 if (details.type() == FIELD && *map == object->map()) { | 584 if (details.type() == FIELD && *map == object->map()) { |
| 579 property = Handle<Object>( | 585 property = Handle<Object>( |
| 580 object->FastPropertyAt( | 586 object->FastPropertyAt( |
| 581 map->instance_descriptors()->GetFieldIndex(i)), | 587 map->instance_descriptors()->GetFieldIndex(i)), |
| 582 isolate_); | 588 isolate_); |
| 583 } else { | 589 } else { |
| 584 property = GetProperty(object, key); | 590 property = GetProperty(isolate_, object, key); |
| 585 if (property.is_null()) return EXCEPTION; | 591 if (property.is_null()) return EXCEPTION; |
| 586 } | 592 } |
| 587 Result result = SerializeProperty(property, comma, key); | 593 Result result = SerializeProperty(property, comma, key); |
| 588 if (!comma && result == SUCCESS) comma = true; | 594 if (!comma && result == SUCCESS) comma = true; |
| 589 if (result >= EXCEPTION) return result; | 595 if (result >= EXCEPTION) return result; |
| 590 } | 596 } |
| 591 } else { | 597 } else { |
| 592 bool has_exception = false; | 598 bool has_exception = false; |
| 593 Handle<FixedArray> contents = | 599 Handle<FixedArray> contents = |
| 594 GetKeysInFixedArrayFor(object, LOCAL_ONLY, &has_exception); | 600 GetKeysInFixedArrayFor(object, LOCAL_ONLY, &has_exception); |
| 595 if (has_exception) return EXCEPTION; | 601 if (has_exception) return EXCEPTION; |
| 596 | 602 |
| 597 for (int i = 0; i < contents->length(); i++) { | 603 for (int i = 0; i < contents->length(); i++) { |
| 598 Object* key = contents->get(i); | 604 Object* key = contents->get(i); |
| 599 Handle<String> key_handle; | 605 Handle<String> key_handle; |
| 600 Handle<Object> property; | 606 Handle<Object> property; |
| 601 if (key->IsString()) { | 607 if (key->IsString()) { |
| 602 key_handle = Handle<String>(String::cast(key), isolate_); | 608 key_handle = Handle<String>(String::cast(key), isolate_); |
| 603 property = GetProperty(object, key_handle); | 609 property = GetProperty(isolate_, object, key_handle); |
| 604 } else { | 610 } else { |
| 605 ASSERT(key->IsNumber()); | 611 ASSERT(key->IsNumber()); |
| 606 key_handle = factory_->NumberToString(Handle<Object>(key, isolate_)); | 612 key_handle = factory_->NumberToString(Handle<Object>(key, isolate_)); |
| 607 uint32_t index; | 613 uint32_t index; |
| 608 if (key->IsSmi()) { | 614 if (key->IsSmi()) { |
| 609 property = Object::GetElement(object, Smi::cast(key)->value()); | 615 property = Object::GetElement(object, Smi::cast(key)->value()); |
| 610 } else if (key_handle->AsArrayIndex(&index)) { | 616 } else if (key_handle->AsArrayIndex(&index)) { |
| 611 property = Object::GetElement(object, index); | 617 property = Object::GetElement(object, index); |
| 612 } else { | 618 } else { |
| 613 property = GetProperty(object, key_handle); | 619 property = GetProperty(isolate_, object, key_handle); |
| 614 } | 620 } |
| 615 } | 621 } |
| 616 if (property.is_null()) return EXCEPTION; | 622 if (property.is_null()) return EXCEPTION; |
| 617 Result result = SerializeProperty(property, comma, key_handle); | 623 Result result = SerializeProperty(property, comma, key_handle); |
| 618 if (!comma && result == SUCCESS) comma = true; | 624 if (!comma && result == SUCCESS) comma = true; |
| 619 if (result >= EXCEPTION) return result; | 625 if (result >= EXCEPTION) return result; |
| 620 } | 626 } |
| 621 } | 627 } |
| 622 | 628 |
| 623 Append('}'); | 629 Append('}'); |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 773 SerializeString_<false, uint8_t>(object); | 779 SerializeString_<false, uint8_t>(object); |
| 774 } else { | 780 } else { |
| 775 SerializeString_<false, uc16>(object); | 781 SerializeString_<false, uc16>(object); |
| 776 } | 782 } |
| 777 } | 783 } |
| 778 } | 784 } |
| 779 | 785 |
| 780 } } // namespace v8::internal | 786 } } // namespace v8::internal |
| 781 | 787 |
| 782 #endif // V8_JSON_STRINGIFIER_H_ | 788 #endif // V8_JSON_STRINGIFIER_H_ |
| OLD | NEW |