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

Side by Side Diff: src/runtime/runtime-i18n.cc

Issue 902313002: Enclose break_iterator code with !UCONFIG_NO_BREAK_ITERATOR (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « src/i18n.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/api-natives.h" 9 #include "src/api-natives.h"
10 #include "src/arguments.h" 10 #include "src/arguments.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 const icu::Locale* available_locales = NULL; 82 const icu::Locale* available_locales = NULL;
83 int32_t count = 0; 83 int32_t count = 0;
84 84
85 if (service->IsUtf8EqualTo(CStrVector("collator"))) { 85 if (service->IsUtf8EqualTo(CStrVector("collator"))) {
86 available_locales = icu::Collator::getAvailableLocales(count); 86 available_locales = icu::Collator::getAvailableLocales(count);
87 } else if (service->IsUtf8EqualTo(CStrVector("numberformat"))) { 87 } else if (service->IsUtf8EqualTo(CStrVector("numberformat"))) {
88 available_locales = icu::NumberFormat::getAvailableLocales(count); 88 available_locales = icu::NumberFormat::getAvailableLocales(count);
89 } else if (service->IsUtf8EqualTo(CStrVector("dateformat"))) { 89 } else if (service->IsUtf8EqualTo(CStrVector("dateformat"))) {
90 available_locales = icu::DateFormat::getAvailableLocales(count); 90 available_locales = icu::DateFormat::getAvailableLocales(count);
91 #if !UCONFIG_NO_BREAK_ITERATION
91 } else if (service->IsUtf8EqualTo(CStrVector("breakiterator"))) { 92 } else if (service->IsUtf8EqualTo(CStrVector("breakiterator"))) {
92 available_locales = icu::BreakIterator::getAvailableLocales(count); 93 available_locales = icu::BreakIterator::getAvailableLocales(count);
94 #endif
93 } 95 }
94 96
95 UErrorCode error = U_ZERO_ERROR; 97 UErrorCode error = U_ZERO_ERROR;
96 char result[ULOC_FULLNAME_CAPACITY]; 98 char result[ULOC_FULLNAME_CAPACITY];
97 Handle<JSObject> locales = factory->NewJSObject(isolate->object_function()); 99 Handle<JSObject> locales = factory->NewJSObject(isolate->object_function());
98 100
99 for (int32_t i = 0; i < count; ++i) { 101 for (int32_t i = 0; i < count; ++i) {
100 const char* icu_name = available_locales[i].getName(); 102 const char* icu_name = available_locales[i].getName();
101 103
102 error = U_ZERO_ERROR; 104 error = U_ZERO_ERROR;
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 isolate->factory()->NewStringFromTwoByte(Vector<const uint16_t>( 599 isolate->factory()->NewStringFromTwoByte(Vector<const uint16_t>(
598 reinterpret_cast<const uint16_t*>(result.getBuffer()), 600 reinterpret_cast<const uint16_t*>(result.getBuffer()),
599 result.length()))); 601 result.length())));
600 return *result_str; 602 return *result_str;
601 } 603 }
602 604
603 605
604 RUNTIME_FUNCTION(Runtime_CreateBreakIterator) { 606 RUNTIME_FUNCTION(Runtime_CreateBreakIterator) {
605 HandleScope scope(isolate); 607 HandleScope scope(isolate);
606 608
609 #if !UCONFIG_NO_BREAK_ITERATION
607 DCHECK(args.length() == 3); 610 DCHECK(args.length() == 3);
608 611
609 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); 612 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0);
610 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); 613 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1);
611 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); 614 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2);
612 615
613 Handle<ObjectTemplateInfo> break_iterator_template = 616 Handle<ObjectTemplateInfo> break_iterator_template =
614 I18N::GetTemplate2(isolate); 617 I18N::GetTemplate2(isolate);
615 618
616 // Create an empty object wrapper. 619 // Create an empty object wrapper.
(...skipping 17 matching lines...) Expand all
634 Handle<String> value = factory->NewStringFromStaticChars("valid"); 637 Handle<String> value = factory->NewStringFromStaticChars("valid");
635 JSObject::AddProperty(local_object, key, value, NONE); 638 JSObject::AddProperty(local_object, key, value, NONE);
636 639
637 // Make object handle weak so we can delete the break iterator once GC kicks 640 // Make object handle weak so we can delete the break iterator once GC kicks
638 // in. 641 // in.
639 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); 642 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object);
640 GlobalHandles::MakeWeak(wrapper.location(), 643 GlobalHandles::MakeWeak(wrapper.location(),
641 reinterpret_cast<void*>(wrapper.location()), 644 reinterpret_cast<void*>(wrapper.location()),
642 BreakIterator::DeleteBreakIterator); 645 BreakIterator::DeleteBreakIterator);
643 return *local_object; 646 return *local_object;
647 #else
648 return isolate->heap()->undefined_value();
649 #endif
644 } 650 }
645 651
646 652
647 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) { 653 RUNTIME_FUNCTION(Runtime_BreakIteratorAdoptText) {
648 HandleScope scope(isolate); 654 HandleScope scope(isolate);
649 655
656 #if !UCONFIG_NO_BREAK_ITERATION
650 DCHECK(args.length() == 2); 657 DCHECK(args.length() == 2);
651 658
652 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); 659 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0);
653 CONVERT_ARG_HANDLE_CHECKED(String, text, 1); 660 CONVERT_ARG_HANDLE_CHECKED(String, text, 1);
654 661
655 icu::BreakIterator* break_iterator = 662 icu::BreakIterator* break_iterator =
656 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 663 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
657 if (!break_iterator) return isolate->ThrowIllegalOperation(); 664 if (!break_iterator) return isolate->ThrowIllegalOperation();
658 665
659 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>( 666 icu::UnicodeString* u_text = reinterpret_cast<icu::UnicodeString*>(
660 break_iterator_holder->GetInternalField(1)); 667 break_iterator_holder->GetInternalField(1));
661 delete u_text; 668 delete u_text;
662 669
663 v8::String::Value text_value(v8::Utils::ToLocal(text)); 670 v8::String::Value text_value(v8::Utils::ToLocal(text));
664 u_text = new icu::UnicodeString(reinterpret_cast<const UChar*>(*text_value), 671 u_text = new icu::UnicodeString(reinterpret_cast<const UChar*>(*text_value),
665 text_value.length()); 672 text_value.length());
666 break_iterator_holder->SetInternalField(1, reinterpret_cast<Smi*>(u_text)); 673 break_iterator_holder->SetInternalField(1, reinterpret_cast<Smi*>(u_text));
667 674
668 break_iterator->setText(*u_text); 675 break_iterator->setText(*u_text);
676 #endif
669 677
670 return isolate->heap()->undefined_value(); 678 return isolate->heap()->undefined_value();
671 } 679 }
672 680
673 681
674 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) { 682 RUNTIME_FUNCTION(Runtime_BreakIteratorFirst) {
675 HandleScope scope(isolate); 683 HandleScope scope(isolate);
676 684
685 #if !UCONFIG_NO_BREAK_ITERATION
677 DCHECK(args.length() == 1); 686 DCHECK(args.length() == 1);
678 687
679 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); 688 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0);
680 689
681 icu::BreakIterator* break_iterator = 690 icu::BreakIterator* break_iterator =
682 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 691 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
683 if (!break_iterator) return isolate->ThrowIllegalOperation(); 692 if (!break_iterator) return isolate->ThrowIllegalOperation();
684 693
685 return *isolate->factory()->NewNumberFromInt(break_iterator->first()); 694 return *isolate->factory()->NewNumberFromInt(break_iterator->first());
695 #else
696 return isolate->heap()->undefined_value();
697 #endif
686 } 698 }
687 699
688 700
689 RUNTIME_FUNCTION(Runtime_BreakIteratorNext) { 701 RUNTIME_FUNCTION(Runtime_BreakIteratorNext) {
690 HandleScope scope(isolate); 702 HandleScope scope(isolate);
691 703
704 #if !UCONFIG_NO_BREAK_ITERATION
692 DCHECK(args.length() == 1); 705 DCHECK(args.length() == 1);
693 706
694 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); 707 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0);
695 708
696 icu::BreakIterator* break_iterator = 709 icu::BreakIterator* break_iterator =
697 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 710 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
698 if (!break_iterator) return isolate->ThrowIllegalOperation(); 711 if (!break_iterator) return isolate->ThrowIllegalOperation();
699 712
700 return *isolate->factory()->NewNumberFromInt(break_iterator->next()); 713 return *isolate->factory()->NewNumberFromInt(break_iterator->next());
714 #else
715 return isolate->heap()->undefined_value();
716 #endif
701 } 717 }
702 718
703 719
704 RUNTIME_FUNCTION(Runtime_BreakIteratorCurrent) { 720 RUNTIME_FUNCTION(Runtime_BreakIteratorCurrent) {
705 HandleScope scope(isolate); 721 HandleScope scope(isolate);
706 722
723 #if !UCONFIG_NO_BREAK_ITERATION
707 DCHECK(args.length() == 1); 724 DCHECK(args.length() == 1);
708 725
709 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); 726 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0);
710 727
711 icu::BreakIterator* break_iterator = 728 icu::BreakIterator* break_iterator =
712 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 729 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
713 if (!break_iterator) return isolate->ThrowIllegalOperation(); 730 if (!break_iterator) return isolate->ThrowIllegalOperation();
714 731
715 return *isolate->factory()->NewNumberFromInt(break_iterator->current()); 732 return *isolate->factory()->NewNumberFromInt(break_iterator->current());
733 #else
734 return isolate->heap()->undefined_value();
735 #endif
716 } 736 }
717 737
718 738
719 RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) { 739 RUNTIME_FUNCTION(Runtime_BreakIteratorBreakType) {
720 HandleScope scope(isolate); 740 HandleScope scope(isolate);
721 741
742 #if !UCONFIG_NO_BREAK_ITERATION
722 DCHECK(args.length() == 1); 743 DCHECK(args.length() == 1);
723 744
724 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0); 745 CONVERT_ARG_HANDLE_CHECKED(JSObject, break_iterator_holder, 0);
725 746
726 icu::BreakIterator* break_iterator = 747 icu::BreakIterator* break_iterator =
727 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 748 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
728 if (!break_iterator) return isolate->ThrowIllegalOperation(); 749 if (!break_iterator) return isolate->ThrowIllegalOperation();
729 750
730 // TODO(cira): Remove cast once ICU fixes base BreakIterator class. 751 // TODO(cira): Remove cast once ICU fixes base BreakIterator class.
731 icu::RuleBasedBreakIterator* rule_based_iterator = 752 icu::RuleBasedBreakIterator* rule_based_iterator =
732 static_cast<icu::RuleBasedBreakIterator*>(break_iterator); 753 static_cast<icu::RuleBasedBreakIterator*>(break_iterator);
733 int32_t status = rule_based_iterator->getRuleStatus(); 754 int32_t status = rule_based_iterator->getRuleStatus();
734 // Keep return values in sync with JavaScript BreakType enum. 755 // Keep return values in sync with JavaScript BreakType enum.
735 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) { 756 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) {
736 return *isolate->factory()->NewStringFromStaticChars("none"); 757 return *isolate->factory()->NewStringFromStaticChars("none");
737 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) { 758 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) {
738 return *isolate->factory()->number_string(); 759 return *isolate->factory()->number_string();
739 } else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) { 760 } else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) {
740 return *isolate->factory()->NewStringFromStaticChars("letter"); 761 return *isolate->factory()->NewStringFromStaticChars("letter");
741 } else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) { 762 } else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) {
742 return *isolate->factory()->NewStringFromStaticChars("kana"); 763 return *isolate->factory()->NewStringFromStaticChars("kana");
743 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) { 764 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) {
744 return *isolate->factory()->NewStringFromStaticChars("ideo"); 765 return *isolate->factory()->NewStringFromStaticChars("ideo");
745 } else { 766 } else {
746 return *isolate->factory()->NewStringFromStaticChars("unknown"); 767 return *isolate->factory()->NewStringFromStaticChars("unknown");
747 } 768 }
769 #else
770 return isolate->heap()->undefined_value();
771 #endif
748 } 772 }
749 } 773 }
750 } // namespace v8::internal 774 } // namespace v8::internal
751 775
752 #endif // V8_I18N_SUPPORT 776 #endif // V8_I18N_SUPPORT
OLDNEW
« no previous file with comments | « src/i18n.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698