Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(235)

Side by Side Diff: src/json-stringifier.h

Issue 12300018: Made Isolate a mandatory parameter for everything Handle-related. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fixed CreateCode calls. Be nicer to MIPS. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/json-parser.h ('k') | src/jsregexp.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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_
OLDNEW
« no previous file with comments | « src/json-parser.h ('k') | src/jsregexp.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698