OLD | NEW |
1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/json-stringifier.h" | 5 #include "src/json-stringifier.h" |
6 | 6 |
7 #include "src/conversions.h" | 7 #include "src/conversions.h" |
8 #include "src/lookup.h" | 8 #include "src/lookup.h" |
9 #include "src/messages.h" | 9 #include "src/messages.h" |
10 #include "src/objects-inl.h" | 10 #include "src/objects-inl.h" |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 int length = Smi::cast(stack_->length())->value(); | 267 int length = Smi::cast(stack_->length())->value(); |
268 stack_->set_length(Smi::FromInt(length - 1)); | 268 stack_->set_length(Smi::FromInt(length - 1)); |
269 } | 269 } |
270 | 270 |
271 template <bool deferred_string_key> | 271 template <bool deferred_string_key> |
272 JsonStringifier::Result JsonStringifier::Serialize_(Handle<Object> object, | 272 JsonStringifier::Result JsonStringifier::Serialize_(Handle<Object> object, |
273 bool comma, | 273 bool comma, |
274 Handle<Object> key) { | 274 Handle<Object> key) { |
275 StackLimitCheck interrupt_check(isolate_); | 275 StackLimitCheck interrupt_check(isolate_); |
276 if (interrupt_check.InterruptRequested() && | 276 if (interrupt_check.InterruptRequested() && |
277 isolate_->stack_guard()->HandleInterrupts()->IsException()) { | 277 isolate_->stack_guard()->HandleInterrupts()->IsException(isolate_)) { |
278 return EXCEPTION; | 278 return EXCEPTION; |
279 } | 279 } |
280 if (object->IsJSReceiver()) { | 280 if (object->IsJSReceiver()) { |
281 ASSIGN_RETURN_ON_EXCEPTION_VALUE( | 281 ASSIGN_RETURN_ON_EXCEPTION_VALUE( |
282 isolate_, object, ApplyToJsonFunction(object, key), EXCEPTION); | 282 isolate_, object, ApplyToJsonFunction(object, key), EXCEPTION); |
283 } | 283 } |
284 if (!replacer_function_.is_null()) { | 284 if (!replacer_function_.is_null()) { |
285 ASSIGN_RETURN_ON_EXCEPTION_VALUE( | 285 ASSIGN_RETURN_ON_EXCEPTION_VALUE( |
286 isolate_, object, ApplyReplacerFunction(object, key), EXCEPTION); | 286 isolate_, object, ApplyReplacerFunction(object, key), EXCEPTION); |
287 } | 287 } |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 SerializeString(Handle<String>::cast(value)); | 353 SerializeString(Handle<String>::cast(value)); |
354 } else if (class_name == isolate_->heap()->Number_string()) { | 354 } else if (class_name == isolate_->heap()->Number_string()) { |
355 Handle<Object> value; | 355 Handle<Object> value; |
356 ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate_, value, Object::ToNumber(object), | 356 ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate_, value, Object::ToNumber(object), |
357 EXCEPTION); | 357 EXCEPTION); |
358 if (value->IsSmi()) return SerializeSmi(Smi::cast(*value)); | 358 if (value->IsSmi()) return SerializeSmi(Smi::cast(*value)); |
359 SerializeHeapNumber(Handle<HeapNumber>::cast(value)); | 359 SerializeHeapNumber(Handle<HeapNumber>::cast(value)); |
360 } else if (class_name == isolate_->heap()->Boolean_string()) { | 360 } else if (class_name == isolate_->heap()->Boolean_string()) { |
361 Object* value = JSValue::cast(*object)->value(); | 361 Object* value = JSValue::cast(*object)->value(); |
362 DCHECK(value->IsBoolean()); | 362 DCHECK(value->IsBoolean()); |
363 builder_.AppendCString(value->IsTrue() ? "true" : "false"); | 363 builder_.AppendCString(value->IsTrue(isolate_) ? "true" : "false"); |
364 } else { | 364 } else { |
365 // ES6 24.3.2.1 step 10.c, serialize as an ordinary JSObject. | 365 // ES6 24.3.2.1 step 10.c, serialize as an ordinary JSObject. |
366 return SerializeJSObject(object); | 366 return SerializeJSObject(object); |
367 } | 367 } |
368 return SUCCESS; | 368 return SUCCESS; |
369 } | 369 } |
370 | 370 |
371 JsonStringifier::Result JsonStringifier::SerializeSmi(Smi* object) { | 371 JsonStringifier::Result JsonStringifier::SerializeSmi(Smi* object) { |
372 static const int kBufferSize = 100; | 372 static const int kBufferSize = 100; |
373 char chars[kBufferSize]; | 373 char chars[kBufferSize]; |
(...skipping 26 matching lines...) Expand all Loading... |
400 Indent(); | 400 Indent(); |
401 uint32_t i = 0; | 401 uint32_t i = 0; |
402 if (replacer_function_.is_null()) { | 402 if (replacer_function_.is_null()) { |
403 switch (object->GetElementsKind()) { | 403 switch (object->GetElementsKind()) { |
404 case FAST_SMI_ELEMENTS: { | 404 case FAST_SMI_ELEMENTS: { |
405 Handle<FixedArray> elements(FixedArray::cast(object->elements()), | 405 Handle<FixedArray> elements(FixedArray::cast(object->elements()), |
406 isolate_); | 406 isolate_); |
407 StackLimitCheck interrupt_check(isolate_); | 407 StackLimitCheck interrupt_check(isolate_); |
408 while (i < length) { | 408 while (i < length) { |
409 if (interrupt_check.InterruptRequested() && | 409 if (interrupt_check.InterruptRequested() && |
410 isolate_->stack_guard()->HandleInterrupts()->IsException()) { | 410 isolate_->stack_guard()->HandleInterrupts()->IsException( |
| 411 isolate_)) { |
411 return EXCEPTION; | 412 return EXCEPTION; |
412 } | 413 } |
413 Separator(i == 0); | 414 Separator(i == 0); |
414 SerializeSmi(Smi::cast(elements->get(i))); | 415 SerializeSmi(Smi::cast(elements->get(i))); |
415 i++; | 416 i++; |
416 } | 417 } |
417 break; | 418 break; |
418 } | 419 } |
419 case FAST_DOUBLE_ELEMENTS: { | 420 case FAST_DOUBLE_ELEMENTS: { |
420 // Empty array is FixedArray but not FixedDoubleArray. | 421 // Empty array is FixedArray but not FixedDoubleArray. |
421 if (length == 0) break; | 422 if (length == 0) break; |
422 Handle<FixedDoubleArray> elements( | 423 Handle<FixedDoubleArray> elements( |
423 FixedDoubleArray::cast(object->elements()), isolate_); | 424 FixedDoubleArray::cast(object->elements()), isolate_); |
424 StackLimitCheck interrupt_check(isolate_); | 425 StackLimitCheck interrupt_check(isolate_); |
425 while (i < length) { | 426 while (i < length) { |
426 if (interrupt_check.InterruptRequested() && | 427 if (interrupt_check.InterruptRequested() && |
427 isolate_->stack_guard()->HandleInterrupts()->IsException()) { | 428 isolate_->stack_guard()->HandleInterrupts()->IsException( |
| 429 isolate_)) { |
428 return EXCEPTION; | 430 return EXCEPTION; |
429 } | 431 } |
430 Separator(i == 0); | 432 Separator(i == 0); |
431 SerializeDouble(elements->get_scalar(i)); | 433 SerializeDouble(elements->get_scalar(i)); |
432 i++; | 434 i++; |
433 } | 435 } |
434 break; | 436 break; |
435 } | 437 } |
436 case FAST_ELEMENTS: { | 438 case FAST_ELEMENTS: { |
437 Handle<Object> old_length(object->length(), isolate_); | 439 Handle<Object> old_length(object->length(), isolate_); |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
699 if (object->IsOneByteRepresentationUnderneath()) { | 701 if (object->IsOneByteRepresentationUnderneath()) { |
700 SerializeString_<uint8_t, uc16>(object); | 702 SerializeString_<uint8_t, uc16>(object); |
701 } else { | 703 } else { |
702 SerializeString_<uc16, uc16>(object); | 704 SerializeString_<uc16, uc16>(object); |
703 } | 705 } |
704 } | 706 } |
705 } | 707 } |
706 | 708 |
707 } // namespace internal | 709 } // namespace internal |
708 } // namespace v8 | 710 } // namespace v8 |
OLD | NEW |