| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 | 5 |
| 6 #ifdef V8_I18N_SUPPORT | 6 #ifdef V8_I18N_SUPPORT |
| 7 #include "src/runtime/runtime-utils.h" | 7 #include "src/runtime/runtime-utils.h" |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 315 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 316 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 316 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 317 | 317 |
| 318 Handle<JSFunction> constructor( | 318 Handle<JSFunction> constructor( |
| 319 isolate->native_context()->intl_date_time_format_function()); | 319 isolate->native_context()->intl_date_time_format_function()); |
| 320 | 320 |
| 321 Handle<JSObject> local_object; | 321 Handle<JSObject> local_object; |
| 322 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 322 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
| 323 JSObject::New(constructor, constructor)); | 323 JSObject::New(constructor, constructor)); |
| 324 | 324 |
| 325 // Set date time formatter as internal field of the resulting JS object. | 325 // Set date time formatter as embedder field of the resulting JS object. |
| 326 icu::SimpleDateFormat* date_format = | 326 icu::SimpleDateFormat* date_format = |
| 327 DateFormat::InitializeDateTimeFormat(isolate, locale, options, resolved); | 327 DateFormat::InitializeDateTimeFormat(isolate, locale, options, resolved); |
| 328 | 328 |
| 329 if (!date_format) return isolate->ThrowIllegalOperation(); | 329 if (!date_format) return isolate->ThrowIllegalOperation(); |
| 330 | 330 |
| 331 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); | 331 local_object->SetEmbedderField(0, reinterpret_cast<Smi*>(date_format)); |
| 332 | 332 |
| 333 // Make object handle weak so we can delete the data format once GC kicks in. | 333 // Make object handle weak so we can delete the data format once GC kicks in. |
| 334 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 334 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
| 335 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 335 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), |
| 336 DateFormat::DeleteDateFormat, | 336 DateFormat::DeleteDateFormat, |
| 337 WeakCallbackType::kInternalFields); | 337 WeakCallbackType::kEmbedderFields); |
| 338 return *local_object; | 338 return *local_object; |
| 339 } | 339 } |
| 340 | 340 |
| 341 | 341 |
| 342 RUNTIME_FUNCTION(Runtime_InternalDateFormat) { | 342 RUNTIME_FUNCTION(Runtime_InternalDateFormat) { |
| 343 HandleScope scope(isolate); | 343 HandleScope scope(isolate); |
| 344 | 344 |
| 345 DCHECK_EQ(2, args.length()); | 345 DCHECK_EQ(2, args.length()); |
| 346 | 346 |
| 347 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0); | 347 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0); |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 505 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 506 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 506 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 507 | 507 |
| 508 Handle<JSFunction> constructor( | 508 Handle<JSFunction> constructor( |
| 509 isolate->native_context()->intl_number_format_function()); | 509 isolate->native_context()->intl_number_format_function()); |
| 510 | 510 |
| 511 Handle<JSObject> local_object; | 511 Handle<JSObject> local_object; |
| 512 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 512 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
| 513 JSObject::New(constructor, constructor)); | 513 JSObject::New(constructor, constructor)); |
| 514 | 514 |
| 515 // Set number formatter as internal field of the resulting JS object. | 515 // Set number formatter as embedder field of the resulting JS object. |
| 516 icu::DecimalFormat* number_format = | 516 icu::DecimalFormat* number_format = |
| 517 NumberFormat::InitializeNumberFormat(isolate, locale, options, resolved); | 517 NumberFormat::InitializeNumberFormat(isolate, locale, options, resolved); |
| 518 | 518 |
| 519 if (!number_format) return isolate->ThrowIllegalOperation(); | 519 if (!number_format) return isolate->ThrowIllegalOperation(); |
| 520 | 520 |
| 521 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); | 521 local_object->SetEmbedderField(0, reinterpret_cast<Smi*>(number_format)); |
| 522 | 522 |
| 523 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 523 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
| 524 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 524 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), |
| 525 NumberFormat::DeleteNumberFormat, | 525 NumberFormat::DeleteNumberFormat, |
| 526 WeakCallbackType::kInternalFields); | 526 WeakCallbackType::kEmbedderFields); |
| 527 return *local_object; | 527 return *local_object; |
| 528 } | 528 } |
| 529 | 529 |
| 530 | 530 |
| 531 RUNTIME_FUNCTION(Runtime_InternalNumberFormat) { | 531 RUNTIME_FUNCTION(Runtime_InternalNumberFormat) { |
| 532 HandleScope scope(isolate); | 532 HandleScope scope(isolate); |
| 533 | 533 |
| 534 DCHECK_EQ(2, args.length()); | 534 DCHECK_EQ(2, args.length()); |
| 535 | 535 |
| 536 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); | 536 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 562 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 562 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 563 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 563 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 564 | 564 |
| 565 Handle<JSFunction> constructor( | 565 Handle<JSFunction> constructor( |
| 566 isolate->native_context()->intl_collator_function()); | 566 isolate->native_context()->intl_collator_function()); |
| 567 | 567 |
| 568 Handle<JSObject> local_object; | 568 Handle<JSObject> local_object; |
| 569 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 569 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
| 570 JSObject::New(constructor, constructor)); | 570 JSObject::New(constructor, constructor)); |
| 571 | 571 |
| 572 // Set collator as internal field of the resulting JS object. | 572 // Set collator as embedder field of the resulting JS object. |
| 573 icu::Collator* collator = | 573 icu::Collator* collator = |
| 574 Collator::InitializeCollator(isolate, locale, options, resolved); | 574 Collator::InitializeCollator(isolate, locale, options, resolved); |
| 575 | 575 |
| 576 if (!collator) return isolate->ThrowIllegalOperation(); | 576 if (!collator) return isolate->ThrowIllegalOperation(); |
| 577 | 577 |
| 578 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); | 578 local_object->SetEmbedderField(0, reinterpret_cast<Smi*>(collator)); |
| 579 | 579 |
| 580 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 580 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
| 581 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 581 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), |
| 582 Collator::DeleteCollator, | 582 Collator::DeleteCollator, |
| 583 WeakCallbackType::kInternalFields); | 583 WeakCallbackType::kEmbedderFields); |
| 584 return *local_object; | 584 return *local_object; |
| 585 } | 585 } |
| 586 | 586 |
| 587 | 587 |
| 588 RUNTIME_FUNCTION(Runtime_InternalCompare) { | 588 RUNTIME_FUNCTION(Runtime_InternalCompare) { |
| 589 HandleScope scope(isolate); | 589 HandleScope scope(isolate); |
| 590 | 590 |
| 591 DCHECK_EQ(3, args.length()); | 591 DCHECK_EQ(3, args.length()); |
| 592 | 592 |
| 593 CONVERT_ARG_HANDLE_CHECKED(JSObject, collator_holder, 0); | 593 CONVERT_ARG_HANDLE_CHECKED(JSObject, collator_holder, 0); |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 689 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 689 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 690 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 690 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 691 | 691 |
| 692 Handle<JSFunction> constructor( | 692 Handle<JSFunction> constructor( |
| 693 isolate->native_context()->intl_v8_break_iterator_function()); | 693 isolate->native_context()->intl_v8_break_iterator_function()); |
| 694 | 694 |
| 695 Handle<JSObject> local_object; | 695 Handle<JSObject> local_object; |
| 696 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, | 696 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
| 697 JSObject::New(constructor, constructor)); | 697 JSObject::New(constructor, constructor)); |
| 698 | 698 |
| 699 // Set break iterator as internal field of the resulting JS object. | 699 // Set break iterator as embedder field of the resulting JS object. |
| 700 icu::BreakIterator* break_iterator = V8BreakIterator::InitializeBreakIterator( | 700 icu::BreakIterator* break_iterator = V8BreakIterator::InitializeBreakIterator( |
| 701 isolate, locale, options, resolved); | 701 isolate, locale, options, resolved); |
| 702 | 702 |
| 703 if (!break_iterator) return isolate->ThrowIllegalOperation(); | 703 if (!break_iterator) return isolate->ThrowIllegalOperation(); |
| 704 | 704 |
| 705 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); | 705 local_object->SetEmbedderField(0, reinterpret_cast<Smi*>(break_iterator)); |
| 706 // Make sure that the pointer to adopted text is NULL. | 706 // Make sure that the pointer to adopted text is NULL. |
| 707 local_object->SetInternalField(1, static_cast<Smi*>(nullptr)); | 707 local_object->SetEmbedderField(1, static_cast<Smi*>(nullptr)); |
| 708 | 708 |
| 709 // Make object handle weak so we can delete the break iterator once GC kicks | 709 // Make object handle weak so we can delete the break iterator once GC kicks |
| 710 // in. | 710 // in. |
| 711 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 711 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
| 712 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 712 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), |
| 713 V8BreakIterator::DeleteBreakIterator, | 713 V8BreakIterator::DeleteBreakIterator, |
| 714 WeakCallbackType::kInternalFields); | 714 WeakCallbackType::kEmbedderFields); |
| 715 return *local_object; | 715 return *local_object; |
| 716 } | 716 } |
| 717 | 717 |
| 718 | 718 |
| 719 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { | 719 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { |
| 720 HandleScope scope(isolate); | 720 HandleScope scope(isolate); |
| 721 | 721 |
| 722 DCHECK_EQ(2, args.length()); | 722 DCHECK_EQ(2, args.length()); |
| 723 | 723 |
| 724 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 724 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
| 725 CONVERT_ARG_HANDLE_CHECKED(String, text, 1); | 725 CONVERT_ARG_HANDLE_CHECKED(String, text, 1); |
| 726 | 726 |
| 727 icu::BreakIterator* break_iterator = | 727 icu::BreakIterator* break_iterator = |
| 728 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 728 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
| 729 CHECK_NOT_NULL(break_iterator); | 729 CHECK_NOT_NULL(break_iterator); |
| 730 | 730 |
| 731 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( | 731 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( |
| 732 break_iterator_holder->GetInternalField(1)); | 732 break_iterator_holder->GetEmbedderField(1)); |
| 733 delete u_text; | 733 delete u_text; |
| 734 | 734 |
| 735 int length = text->length(); | 735 int length = text->length(); |
| 736 text = String::Flatten(text); | 736 text = String::Flatten(text); |
| 737 DisallowHeapAllocation no_gc; | 737 DisallowHeapAllocation no_gc; |
| 738 String::FlatContent flat = text->GetFlatContent(); | 738 String::FlatContent flat = text->GetFlatContent(); |
| 739 std::unique_ptr<uc16[]> sap; | 739 std::unique_ptr<uc16[]> sap; |
| 740 const UChar* text_value = GetUCharBufferFromFlat(flat, &sap, length); | 740 const UChar* text_value = GetUCharBufferFromFlat(flat, &sap, length); |
| 741 u_text = new icu::UnicodeString(text_value, length); | 741 u_text = new icu::UnicodeString(text_value, length); |
| 742 break_iterator_holder->SetInternalField(1, reinterpret_cast<Smi*>(u_text)); | 742 break_iterator_holder->SetEmbedderField(1, reinterpret_cast<Smi*>(u_text)); |
| 743 | 743 |
| 744 break_iterator->setText(*u_text); | 744 break_iterator->setText(*u_text); |
| 745 | 745 |
| 746 return isolate->heap()->undefined_value(); | 746 return isolate->heap()->undefined_value(); |
| 747 } | 747 } |
| 748 | 748 |
| 749 | 749 |
| 750 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { | 750 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { |
| 751 HandleScope scope(isolate); | 751 HandleScope scope(isolate); |
| 752 | 752 |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1182 Handle<FixedArray> date_cache_version = | 1182 Handle<FixedArray> date_cache_version = |
| 1183 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( | 1183 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( |
| 1184 EternalHandles::DATE_CACHE_VERSION)); | 1184 EternalHandles::DATE_CACHE_VERSION)); |
| 1185 return date_cache_version->get(0); | 1185 return date_cache_version->get(0); |
| 1186 } | 1186 } |
| 1187 | 1187 |
| 1188 } // namespace internal | 1188 } // namespace internal |
| 1189 } // namespace v8 | 1189 } // namespace v8 |
| 1190 | 1190 |
| 1191 #endif // V8_I18N_SUPPORT | 1191 #endif // V8_I18N_SUPPORT |
| OLD | NEW |