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 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol(); | 286 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol(); |
287 Handle<Object> tag = JSReceiver::GetDataProperty(obj, marker); | 287 Handle<Object> tag = JSReceiver::GetDataProperty(obj, marker); |
288 return isolate->heap()->ToBoolean(tag->IsString() && | 288 return isolate->heap()->ToBoolean(tag->IsString() && |
289 String::cast(*tag)->Equals(*expected_type)); | 289 String::cast(*tag)->Equals(*expected_type)); |
290 } | 290 } |
291 | 291 |
292 | 292 |
293 RUNTIME_FUNCTION(Runtime_MarkAsInitializedIntlObjectOfType) { | 293 RUNTIME_FUNCTION(Runtime_MarkAsInitializedIntlObjectOfType) { |
294 HandleScope scope(isolate); | 294 HandleScope scope(isolate); |
295 | 295 |
296 DCHECK_EQ(3, args.length()); | 296 DCHECK_EQ(2, args.length()); |
297 | 297 |
298 CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); | 298 CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); |
299 CONVERT_ARG_HANDLE_CHECKED(String, type, 1); | 299 CONVERT_ARG_HANDLE_CHECKED(String, type, 1); |
300 CONVERT_ARG_HANDLE_CHECKED(JSObject, impl, 2); | |
301 | 300 |
302 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol(); | 301 Handle<Symbol> marker = isolate->factory()->intl_initialized_marker_symbol(); |
303 JSObject::SetProperty(input, marker, type, STRICT).Assert(); | 302 JSObject::SetProperty(input, marker, type, STRICT).Assert(); |
304 | 303 |
305 marker = isolate->factory()->intl_impl_object_symbol(); | |
306 JSObject::SetProperty(input, marker, impl, STRICT).Assert(); | |
307 | |
308 return isolate->heap()->undefined_value(); | 304 return isolate->heap()->undefined_value(); |
309 } | 305 } |
310 | 306 |
311 | 307 |
312 RUNTIME_FUNCTION(Runtime_GetImplFromInitializedIntlObject) { | |
313 HandleScope scope(isolate); | |
314 | |
315 DCHECK_EQ(1, args.length()); | |
316 | |
317 CONVERT_ARG_HANDLE_CHECKED(JSObject, input, 0); | |
318 | |
319 if (!input->IsJSObject()) { | |
320 THROW_NEW_ERROR_RETURN_FAILURE( | |
321 isolate, NewTypeError(MessageTemplate::kNotIntlObject, input)); | |
322 } | |
323 | |
324 Handle<JSObject> obj = Handle<JSObject>::cast(input); | |
325 | |
326 Handle<Symbol> marker = isolate->factory()->intl_impl_object_symbol(); | |
327 | |
328 Handle<Object> impl = JSReceiver::GetDataProperty(obj, marker); | |
329 if (!impl->IsJSObject()) { | |
330 THROW_NEW_ERROR_RETURN_FAILURE( | |
331 isolate, NewTypeError(MessageTemplate::kNotIntlObject, obj)); | |
332 } | |
333 return *impl; | |
334 } | |
335 | |
336 | |
337 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { | 308 RUNTIME_FUNCTION(Runtime_CreateDateTimeFormat) { |
338 HandleScope scope(isolate); | 309 HandleScope scope(isolate); |
339 | 310 |
340 DCHECK_EQ(3, args.length()); | 311 DCHECK_EQ(3, args.length()); |
341 | 312 |
342 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 313 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
343 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 314 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
344 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 315 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
345 | 316 |
346 Handle<ObjectTemplateInfo> date_format_template = I18N::GetTemplate(isolate); | 317 Handle<JSFunction> constructor( |
| 318 isolate->native_context()->intl_date_time_format_function()); |
347 | 319 |
348 // Create an empty object wrapper. | |
349 Handle<JSObject> local_object; | 320 Handle<JSObject> local_object; |
350 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 321 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
351 isolate, local_object, | 322 JSObject::New(constructor, constructor)); |
352 ApiNatives::InstantiateObject(date_format_template)); | |
353 | 323 |
354 // Set date time formatter as internal field of the resulting JS object. | 324 // Set date time formatter as internal field of the resulting JS object. |
355 icu::SimpleDateFormat* date_format = | 325 icu::SimpleDateFormat* date_format = |
356 DateFormat::InitializeDateTimeFormat(isolate, locale, options, resolved); | 326 DateFormat::InitializeDateTimeFormat(isolate, locale, options, resolved); |
357 | 327 |
358 if (!date_format) return isolate->ThrowIllegalOperation(); | 328 if (!date_format) return isolate->ThrowIllegalOperation(); |
359 | 329 |
360 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); | 330 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); |
361 | 331 |
362 // Make object handle weak so we can delete the data format once GC kicks in. | 332 // Make object handle weak so we can delete the data format once GC kicks in. |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 | 497 |
528 RUNTIME_FUNCTION(Runtime_CreateNumberFormat) { | 498 RUNTIME_FUNCTION(Runtime_CreateNumberFormat) { |
529 HandleScope scope(isolate); | 499 HandleScope scope(isolate); |
530 | 500 |
531 DCHECK_EQ(3, args.length()); | 501 DCHECK_EQ(3, args.length()); |
532 | 502 |
533 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 503 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
534 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 504 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
535 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 505 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
536 | 506 |
537 Handle<ObjectTemplateInfo> number_format_template = | 507 Handle<JSFunction> constructor( |
538 I18N::GetTemplate(isolate); | 508 isolate->native_context()->intl_number_format_function()); |
539 | 509 |
540 // Create an empty object wrapper. | |
541 Handle<JSObject> local_object; | 510 Handle<JSObject> local_object; |
542 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 511 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
543 isolate, local_object, | 512 JSObject::New(constructor, constructor)); |
544 ApiNatives::InstantiateObject(number_format_template)); | |
545 | 513 |
546 // Set number formatter as internal field of the resulting JS object. | 514 // Set number formatter as internal field of the resulting JS object. |
547 icu::DecimalFormat* number_format = | 515 icu::DecimalFormat* number_format = |
548 NumberFormat::InitializeNumberFormat(isolate, locale, options, resolved); | 516 NumberFormat::InitializeNumberFormat(isolate, locale, options, resolved); |
549 | 517 |
550 if (!number_format) return isolate->ThrowIllegalOperation(); | 518 if (!number_format) return isolate->ThrowIllegalOperation(); |
551 | 519 |
552 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); | 520 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); |
553 | 521 |
554 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 522 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 | 554 |
587 RUNTIME_FUNCTION(Runtime_CreateCollator) { | 555 RUNTIME_FUNCTION(Runtime_CreateCollator) { |
588 HandleScope scope(isolate); | 556 HandleScope scope(isolate); |
589 | 557 |
590 DCHECK_EQ(3, args.length()); | 558 DCHECK_EQ(3, args.length()); |
591 | 559 |
592 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 560 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
593 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 561 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
594 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 562 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
595 | 563 |
596 Handle<ObjectTemplateInfo> collator_template = I18N::GetTemplate(isolate); | 564 Handle<JSFunction> constructor( |
| 565 isolate->native_context()->intl_collator_function()); |
597 | 566 |
598 // Create an empty object wrapper. | |
599 Handle<JSObject> local_object; | 567 Handle<JSObject> local_object; |
600 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 568 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
601 isolate, local_object, ApiNatives::InstantiateObject(collator_template)); | 569 JSObject::New(constructor, constructor)); |
602 | 570 |
603 // Set collator as internal field of the resulting JS object. | 571 // Set collator as internal field of the resulting JS object. |
604 icu::Collator* collator = | 572 icu::Collator* collator = |
605 Collator::InitializeCollator(isolate, locale, options, resolved); | 573 Collator::InitializeCollator(isolate, locale, options, resolved); |
606 | 574 |
607 if (!collator) return isolate->ThrowIllegalOperation(); | 575 if (!collator) return isolate->ThrowIllegalOperation(); |
608 | 576 |
609 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); | 577 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); |
610 | 578 |
611 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 579 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
712 | 680 |
713 RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { | 681 RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { |
714 HandleScope scope(isolate); | 682 HandleScope scope(isolate); |
715 | 683 |
716 DCHECK_EQ(3, args.length()); | 684 DCHECK_EQ(3, args.length()); |
717 | 685 |
718 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 686 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
719 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 687 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
720 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 688 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
721 | 689 |
722 Handle<ObjectTemplateInfo> break_iterator_template = | 690 Handle<JSFunction> constructor( |
723 I18N::GetTemplate2(isolate); | 691 isolate->native_context()->intl_v8_break_iterator_function()); |
724 | 692 |
725 // Create an empty object wrapper. | |
726 Handle<JSObject> local_object; | 693 Handle<JSObject> local_object; |
727 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( | 694 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, local_object, |
728 isolate, local_object, | 695 JSObject::New(constructor, constructor)); |
729 ApiNatives::InstantiateObject(break_iterator_template)); | |
730 | 696 |
731 // Set break iterator as internal field of the resulting JS object. | 697 // Set break iterator as internal field of the resulting JS object. |
732 icu::BreakIterator* break_iterator = BreakIterator::InitializeBreakIterator( | 698 icu::BreakIterator* break_iterator = V8BreakIterator::InitializeBreakIterator( |
733 isolate, locale, options, resolved); | 699 isolate, locale, options, resolved); |
734 | 700 |
735 if (!break_iterator) return isolate->ThrowIllegalOperation(); | 701 if (!break_iterator) return isolate->ThrowIllegalOperation(); |
736 | 702 |
737 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); | 703 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); |
738 // Make sure that the pointer to adopted text is NULL. | 704 // Make sure that the pointer to adopted text is NULL. |
739 local_object->SetInternalField(1, static_cast<Smi*>(nullptr)); | 705 local_object->SetInternalField(1, static_cast<Smi*>(nullptr)); |
740 | 706 |
741 // Make object handle weak so we can delete the break iterator once GC kicks | 707 // Make object handle weak so we can delete the break iterator once GC kicks |
742 // in. | 708 // in. |
743 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); | 709 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); |
744 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), | 710 GlobalHandles::MakeWeak(wrapper.location(), wrapper.location(), |
745 BreakIterator::DeleteBreakIterator, | 711 V8BreakIterator::DeleteBreakIterator, |
746 WeakCallbackType::kInternalFields); | 712 WeakCallbackType::kInternalFields); |
747 return *local_object; | 713 return *local_object; |
748 } | 714 } |
749 | 715 |
750 | 716 |
751 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { | 717 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { |
752 HandleScope scope(isolate); | 718 HandleScope scope(isolate); |
753 | 719 |
754 DCHECK_EQ(2, args.length()); | 720 DCHECK_EQ(2, args.length()); |
755 | 721 |
756 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 722 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
757 CONVERT_ARG_HANDLE_CHECKED(String, text, 1); | 723 CONVERT_ARG_HANDLE_CHECKED(String, text, 1); |
758 | 724 |
759 icu::BreakIterator* break_iterator = | 725 icu::BreakIterator* break_iterator = |
760 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 726 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
761 CHECK_NOT_NULL(break_iterator); | 727 CHECK_NOT_NULL(break_iterator); |
762 | 728 |
763 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( | 729 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( |
764 break_iterator_holder->GetInternalField(1)); | 730 break_iterator_holder->GetInternalField(1)); |
765 delete u_text; | 731 delete u_text; |
766 | 732 |
767 int length = text->length(); | 733 int length = text->length(); |
768 text = String::Flatten(text); | 734 text = String::Flatten(text); |
769 DisallowHeapAllocation no_gc; | 735 DisallowHeapAllocation no_gc; |
770 String::FlatContent flat = text->GetFlatContent(); | 736 String::FlatContent flat = text->GetFlatContent(); |
771 std::unique_ptr<uc16[]> sap; | 737 std::unique_ptr<uc16[]> sap; |
772 const UChar* text_value = GetUCharBufferFromFlat(flat, &sap, length); | 738 const UChar* text_value = GetUCharBufferFromFlat(flat, &sap, length); |
773 u_text = new icu::UnicodeString(text_value, length); | 739 u_text = new icu::UnicodeString(text_value, length); |
774 break_iterator_holder->SetInternalField(1, reinterpret_cast<Smi*>(u_text)); | 740 break_iterator_holder->SetInternalField(1, reinterpret_cast<Smi*>(u_text)); |
775 | 741 |
776 break_iterator->setText(*u_text); | 742 break_iterator->setText(*u_text); |
777 | 743 |
778 return isolate->heap()->undefined_value(); | 744 return isolate->heap()->undefined_value(); |
779 } | 745 } |
780 | 746 |
781 | 747 |
782 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { | 748 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { |
783 HandleScope scope(isolate); | 749 HandleScope scope(isolate); |
784 | 750 |
785 DCHECK_EQ(1, args.length()); | 751 DCHECK_EQ(1, args.length()); |
786 | 752 |
787 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 753 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
788 | 754 |
789 icu::BreakIterator* break_iterator = | 755 icu::BreakIterator* break_iterator = |
790 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 756 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
791 CHECK_NOT_NULL(break_iterator); | 757 CHECK_NOT_NULL(break_iterator); |
792 | 758 |
793 return *isolate->factory()->NewNumberFromInt(break_iterator->first()); | 759 return *isolate->factory()->NewNumberFromInt(break_iterator->first()); |
794 } | 760 } |
795 | 761 |
796 | 762 |
797 RUNTIME_FUNCTION(Runtime_BreakIteratorNext) { | 763 RUNTIME_FUNCTION(Runtime_BreakIteratorNext) { |
798 HandleScope scope(isolate); | 764 HandleScope scope(isolate); |
799 | 765 |
800 DCHECK_EQ(1, args.length()); | 766 DCHECK_EQ(1, args.length()); |
801 | 767 |
802 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 768 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
803 | 769 |
804 icu::BreakIterator* break_iterator = | 770 icu::BreakIterator* break_iterator = |
805 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 771 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
806 CHECK_NOT_NULL(break_iterator); | 772 CHECK_NOT_NULL(break_iterator); |
807 | 773 |
808 return *isolate->factory()->NewNumberFromInt(break_iterator->next()); | 774 return *isolate->factory()->NewNumberFromInt(break_iterator->next()); |
809 } | 775 } |
810 | 776 |
811 | 777 |
812 RUNTIME_FUNCTION(Runtime_BreakIteratorCurrent) { | 778 RUNTIME_FUNCTION(Runtime_BreakIteratorCurrent) { |
813 HandleScope scope(isolate); | 779 HandleScope scope(isolate); |
814 | 780 |
815 DCHECK_EQ(1, args.length()); | 781 DCHECK_EQ(1, args.length()); |
816 | 782 |
817 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 783 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
818 | 784 |
819 icu::BreakIterator* break_iterator = | 785 icu::BreakIterator* break_iterator = |
820 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 786 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
821 CHECK_NOT_NULL(break_iterator); | 787 CHECK_NOT_NULL(break_iterator); |
822 | 788 |
823 return *isolate->factory()->NewNumberFromInt(break_iterator->current()); | 789 return *isolate->factory()->NewNumberFromInt(break_iterator->current()); |
824 } | 790 } |
825 | 791 |
826 | 792 |
827 RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) { | 793 RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) { |
828 HandleScope scope(isolate); | 794 HandleScope scope(isolate); |
829 | 795 |
830 DCHECK_EQ(1, args.length()); | 796 DCHECK_EQ(1, args.length()); |
831 | 797 |
832 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); | 798 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); |
833 | 799 |
834 icu::BreakIterator* break_iterator = | 800 icu::BreakIterator* break_iterator = |
835 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); | 801 V8BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); |
836 CHECK_NOT_NULL(break_iterator); | 802 CHECK_NOT_NULL(break_iterator); |
837 | 803 |
838 // TODO(cira): Remove cast once ICU fixes base BreakIterator class. | 804 // TODO(cira): Remove cast once ICU fixes base BreakIterator class. |
839 icu::RuleBasedBreakIterator* rule_based_iterator = | 805 icu::RuleBasedBreakIterator* rule_based_iterator = |
840 static_cast<icu::RuleBasedBreakIterator*>(break_iterator); | 806 static_cast<icu::RuleBasedBreakIterator*>(break_iterator); |
841 int32_t status = rule_based_iterator->getRuleStatus(); | 807 int32_t status = rule_based_iterator->getRuleStatus(); |
842 // Keep return values in sync with JavaScript BreakType enum. | 808 // Keep return values in sync with JavaScript BreakType enum. |
843 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) { | 809 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) { |
844 return *isolate->factory()->NewStringFromStaticChars("none"); | 810 return *isolate->factory()->NewStringFromStaticChars("none"); |
845 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) { | 811 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) { |
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1209 Handle<FixedArray> date_cache_version = | 1175 Handle<FixedArray> date_cache_version = |
1210 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( | 1176 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( |
1211 EternalHandles::DATE_CACHE_VERSION)); | 1177 EternalHandles::DATE_CACHE_VERSION)); |
1212 return date_cache_version->get(0); | 1178 return date_cache_version->get(0); |
1213 } | 1179 } |
1214 | 1180 |
1215 } // namespace internal | 1181 } // namespace internal |
1216 } // namespace v8 | 1182 } // namespace v8 |
1217 | 1183 |
1218 #endif // V8_I18N_SUPPORT | 1184 #endif // V8_I18N_SUPPORT |
OLD | NEW |