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

Side by Side Diff: src/runtime.cc

Issue 239243018: Heap::AllocateStringFromOneByte() and major part of its callers handlified. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 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
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 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 // Array index (uint32). 308 // Array index (uint32).
309 maybe_result = JSObject::SetOwnElement( 309 maybe_result = JSObject::SetOwnElement(
310 boilerplate, element_index, value, SLOPPY); 310 boilerplate, element_index, value, SLOPPY);
311 } else { 311 } else {
312 // Non-uint32 number. 312 // Non-uint32 number.
313 ASSERT(key->IsNumber()); 313 ASSERT(key->IsNumber());
314 double num = key->Number(); 314 double num = key->Number();
315 char arr[100]; 315 char arr[100];
316 Vector<char> buffer(arr, ARRAY_SIZE(arr)); 316 Vector<char> buffer(arr, ARRAY_SIZE(arr));
317 const char* str = DoubleToCString(num, buffer); 317 const char* str = DoubleToCString(num, buffer);
318 Handle<String> name = 318 Handle<String> name = isolate->factory()->NewStringFromAsciiChecked(str);
319 isolate->factory()->NewStringFromAscii(CStrVector(str));
320 maybe_result = JSObject::SetLocalPropertyIgnoreAttributes( 319 maybe_result = JSObject::SetLocalPropertyIgnoreAttributes(
321 boilerplate, name, value, NONE, 320 boilerplate, name, value, NONE,
322 Object::OPTIMAL_REPRESENTATION, mode); 321 Object::OPTIMAL_REPRESENTATION, mode);
323 } 322 }
324 // If setting the property on the boilerplate throws an 323 // If setting the property on the boilerplate throws an
325 // exception, the exception is converted to an empty handle in 324 // exception, the exception is converted to an empty handle in
326 // the handle based operations. In that case, we need to 325 // the handle based operations. In that case, we need to
327 // convert back to an exception. 326 // convert back to an exception.
328 RETURN_ON_EXCEPTION(isolate, maybe_result, Object); 327 RETURN_ON_EXCEPTION(isolate, maybe_result, Object);
329 } 328 }
(...skipping 1688 matching lines...) Expand 10 before | Expand all | Expand 10 after
2018 return isolate->heap()->ToBoolean(obj->map()->is_extensible()); 2017 return isolate->heap()->ToBoolean(obj->map()->is_extensible());
2019 } 2018 }
2020 2019
2021 2020
2022 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) { 2021 RUNTIME_FUNCTION(MaybeObject*, Runtime_RegExpCompile) {
2023 HandleScope scope(isolate); 2022 HandleScope scope(isolate);
2024 ASSERT(args.length() == 3); 2023 ASSERT(args.length() == 3);
2025 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0); 2024 CONVERT_ARG_HANDLE_CHECKED(JSRegExp, re, 0);
2026 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1); 2025 CONVERT_ARG_HANDLE_CHECKED(String, pattern, 1);
2027 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2); 2026 CONVERT_ARG_HANDLE_CHECKED(String, flags, 2);
2028 Handle<Object> result = RegExpImpl::Compile(re, pattern, flags); 2027 Handle<Object> result;
2029 RETURN_IF_EMPTY_HANDLE(isolate, result); 2028 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
2029 isolate, result, RegExpImpl::Compile(re, pattern, flags));
2030 return *result; 2030 return *result;
2031 } 2031 }
2032 2032
2033 2033
2034 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateApiFunction) { 2034 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateApiFunction) {
2035 HandleScope scope(isolate); 2035 HandleScope scope(isolate);
2036 ASSERT(args.length() == 1); 2036 ASSERT(args.length() == 1);
2037 CONVERT_ARG_HANDLE_CHECKED(FunctionTemplateInfo, data, 0); 2037 CONVERT_ARG_HANDLE_CHECKED(FunctionTemplateInfo, data, 0);
2038 return *isolate->factory()->CreateApiFunction(data); 2038 return *isolate->factory()->CreateApiFunction(data);
2039 } 2039 }
(...skipping 2754 matching lines...) Expand 10 before | Expand all | Expand 10 after
4794 if (std::isnan(value)) { 4794 if (std::isnan(value)) {
4795 return isolate->heap()->nan_string(); 4795 return isolate->heap()->nan_string();
4796 } 4796 }
4797 if (std::isinf(value)) { 4797 if (std::isinf(value)) {
4798 if (value < 0) { 4798 if (value < 0) {
4799 return isolate->heap()->minus_infinity_string(); 4799 return isolate->heap()->minus_infinity_string();
4800 } 4800 }
4801 return isolate->heap()->infinity_string(); 4801 return isolate->heap()->infinity_string();
4802 } 4802 }
4803 char* str = DoubleToRadixCString(value, radix); 4803 char* str = DoubleToRadixCString(value, radix);
4804 Handle<String> result = 4804 Handle<String> result;
4805 isolate->factory()->NewStringFromOneByte(OneByteVector(str)); 4805 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
4806 isolate, result,
4807 isolate->factory()->NewStringFromOneByte(OneByteVector(str)));
4806 DeleteArray(str); 4808 DeleteArray(str);
4807 return *result; 4809 return *result;
4808 } 4810 }
4809 4811
4810 4812
4811 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToFixed) { 4813 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToFixed) {
4812 HandleScope scope(isolate); 4814 HandleScope scope(isolate);
4813 ASSERT(args.length() == 2); 4815 ASSERT(args.length() == 2);
4814 4816
4815 CONVERT_DOUBLE_ARG_CHECKED(value, 0); 4817 CONVERT_DOUBLE_ARG_CHECKED(value, 0);
4816 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1); 4818 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1);
4817 int f = FastD2IChecked(f_number); 4819 int f = FastD2IChecked(f_number);
4818 RUNTIME_ASSERT(f >= 0); 4820 RUNTIME_ASSERT(f >= 0);
4819 char* str = DoubleToFixedCString(value, f); 4821 char* str = DoubleToFixedCString(value, f);
4820 Handle<String> result = 4822 Handle<String> result;
4821 isolate->factory()->NewStringFromOneByte(OneByteVector(str)); 4823 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
4824 isolate, result,
4825 isolate->factory()->NewStringFromOneByte(OneByteVector(str)));
4822 DeleteArray(str); 4826 DeleteArray(str);
4823 return *result; 4827 return *result;
4824 } 4828 }
4825 4829
4826 4830
4827 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToExponential) { 4831 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToExponential) {
4828 HandleScope scope(isolate); 4832 HandleScope scope(isolate);
4829 ASSERT(args.length() == 2); 4833 ASSERT(args.length() == 2);
4830 4834
4831 CONVERT_DOUBLE_ARG_CHECKED(value, 0); 4835 CONVERT_DOUBLE_ARG_CHECKED(value, 0);
4832 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1); 4836 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1);
4833 int f = FastD2IChecked(f_number); 4837 int f = FastD2IChecked(f_number);
4834 RUNTIME_ASSERT(f >= -1 && f <= 20); 4838 RUNTIME_ASSERT(f >= -1 && f <= 20);
4835 char* str = DoubleToExponentialCString(value, f); 4839 char* str = DoubleToExponentialCString(value, f);
4836 Handle<String> result = 4840 Handle<String> result;
4837 isolate->factory()->NewStringFromOneByte(OneByteVector(str)); 4841 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
4842 isolate, result,
4843 isolate->factory()->NewStringFromOneByte(OneByteVector(str)));
4838 DeleteArray(str); 4844 DeleteArray(str);
4839 return *result; 4845 return *result;
4840 } 4846 }
4841 4847
4842 4848
4843 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToPrecision) { 4849 RUNTIME_FUNCTION(MaybeObject*, Runtime_NumberToPrecision) {
4844 HandleScope scope(isolate); 4850 HandleScope scope(isolate);
4845 ASSERT(args.length() == 2); 4851 ASSERT(args.length() == 2);
4846 4852
4847 CONVERT_DOUBLE_ARG_CHECKED(value, 0); 4853 CONVERT_DOUBLE_ARG_CHECKED(value, 0);
4848 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1); 4854 CONVERT_DOUBLE_ARG_CHECKED(f_number, 1);
4849 int f = FastD2IChecked(f_number); 4855 int f = FastD2IChecked(f_number);
4850 RUNTIME_ASSERT(f >= 1 && f <= 21); 4856 RUNTIME_ASSERT(f >= 1 && f <= 21);
4851 char* str = DoubleToPrecisionCString(value, f); 4857 char* str = DoubleToPrecisionCString(value, f);
4852 Handle<String> result = 4858 Handle<String> result;
4853 isolate->factory()->NewStringFromOneByte(OneByteVector(str)); 4859 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
4860 isolate, result,
4861 isolate->factory()->NewStringFromOneByte(OneByteVector(str)));
4854 DeleteArray(str); 4862 DeleteArray(str);
4855 return *result; 4863 return *result;
4856 } 4864 }
4857 4865
4858 4866
4859 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsValidSmi) { 4867 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsValidSmi) {
4860 SealHandleScope shs(isolate); 4868 SealHandleScope shs(isolate);
4861 ASSERT(args.length() == 1); 4869 ASSERT(args.length() == 1);
4862 4870
4863 CONVERT_NUMBER_CHECKED(int32_t, number, Int32, args[0]); 4871 CONVERT_NUMBER_CHECKED(int32_t, number, Int32, args[0]);
(...skipping 4565 matching lines...) Expand 10 before | Expand all | Expand 10 after
9429 } 9437 }
9430 9438
9431 9439
9432 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_ThrowMessage) { 9440 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_ThrowMessage) {
9433 HandleScope scope(isolate); 9441 HandleScope scope(isolate);
9434 ASSERT(args.length() == 1); 9442 ASSERT(args.length() == 1);
9435 CONVERT_SMI_ARG_CHECKED(message_id, 0); 9443 CONVERT_SMI_ARG_CHECKED(message_id, 0);
9436 const char* message = GetBailoutReason( 9444 const char* message = GetBailoutReason(
9437 static_cast<BailoutReason>(message_id)); 9445 static_cast<BailoutReason>(message_id));
9438 Handle<String> message_handle = 9446 Handle<String> message_handle =
9439 isolate->factory()->NewStringFromAscii(CStrVector(message)); 9447 isolate->factory()->NewStringFromAsciiChecked(message);
9440 RETURN_IF_EMPTY_HANDLE(isolate, message_handle);
9441 return isolate->Throw(*message_handle); 9448 return isolate->Throw(*message_handle);
9442 } 9449 }
9443 9450
9444 9451
9445 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_StackGuard) { 9452 RUNTIME_FUNCTION(MaybeObject*, RuntimeHidden_StackGuard) {
9446 SealHandleScope shs(isolate); 9453 SealHandleScope shs(isolate);
9447 ASSERT(args.length() == 0); 9454 ASSERT(args.length() == 0);
9448 9455
9449 // First check if this is a real stack overflow. 9456 // First check if this is a real stack overflow.
9450 if (isolate->stack_guard()->IsStackOverflow()) { 9457 if (isolate->stack_guard()->IsStackOverflow()) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
9612 } 9619 }
9613 9620
9614 9621
9615 RUNTIME_FUNCTION(MaybeObject*, Runtime_DateLocalTimezone) { 9622 RUNTIME_FUNCTION(MaybeObject*, Runtime_DateLocalTimezone) {
9616 HandleScope scope(isolate); 9623 HandleScope scope(isolate);
9617 ASSERT(args.length() == 1); 9624 ASSERT(args.length() == 1);
9618 9625
9619 CONVERT_DOUBLE_ARG_CHECKED(x, 0); 9626 CONVERT_DOUBLE_ARG_CHECKED(x, 0);
9620 const char* zone = 9627 const char* zone =
9621 isolate->date_cache()->LocalTimezone(static_cast<int64_t>(x)); 9628 isolate->date_cache()->LocalTimezone(static_cast<int64_t>(x));
9622 return *isolate->factory()->NewStringFromUtf8(CStrVector(zone)); 9629 Handle<String> result;
9630 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
9631 isolate, result,
9632 isolate->factory()->NewStringFromUtf8(CStrVector(zone)));
9633 return *result;
9623 } 9634 }
9624 9635
9625 9636
9626 RUNTIME_FUNCTION(MaybeObject*, Runtime_DateToUTC) { 9637 RUNTIME_FUNCTION(MaybeObject*, Runtime_DateToUTC) {
9627 HandleScope scope(isolate); 9638 HandleScope scope(isolate);
9628 ASSERT(args.length() == 1); 9639 ASSERT(args.length() == 1);
9629 9640
9630 CONVERT_DOUBLE_ARG_CHECKED(x, 0); 9641 CONVERT_DOUBLE_ARG_CHECKED(x, 0);
9631 int64_t time = isolate->date_cache()->ToUTC(static_cast<int64_t>(x)); 9642 int64_t time = isolate->date_cache()->ToUTC(static_cast<int64_t>(x));
9632 9643
(...skipping 4000 matching lines...) Expand 10 before | Expand all | Expand 10 after
13633 RUNTIME_FUNCTION(MaybeObject*, Runtime_CanonicalizeLanguageTag) { 13644 RUNTIME_FUNCTION(MaybeObject*, Runtime_CanonicalizeLanguageTag) {
13634 HandleScope scope(isolate); 13645 HandleScope scope(isolate);
13635 Factory* factory = isolate->factory(); 13646 Factory* factory = isolate->factory();
13636 13647
13637 ASSERT(args.length() == 1); 13648 ASSERT(args.length() == 1);
13638 CONVERT_ARG_HANDLE_CHECKED(String, locale_id_str, 0); 13649 CONVERT_ARG_HANDLE_CHECKED(String, locale_id_str, 0);
13639 13650
13640 v8::String::Utf8Value locale_id(v8::Utils::ToLocal(locale_id_str)); 13651 v8::String::Utf8Value locale_id(v8::Utils::ToLocal(locale_id_str));
13641 13652
13642 // Return value which denotes invalid language tag. 13653 // Return value which denotes invalid language tag.
13643 const char* const kInvalidTag = "invalid-tag"; 13654 #define kInvalidTag "invalid-tag"
13644 13655
13645 UErrorCode error = U_ZERO_ERROR; 13656 UErrorCode error = U_ZERO_ERROR;
13646 char icu_result[ULOC_FULLNAME_CAPACITY]; 13657 char icu_result[ULOC_FULLNAME_CAPACITY];
13647 int icu_length = 0; 13658 int icu_length = 0;
13648 13659
13649 uloc_forLanguageTag(*locale_id, icu_result, ULOC_FULLNAME_CAPACITY, 13660 uloc_forLanguageTag(*locale_id, icu_result, ULOC_FULLNAME_CAPACITY,
13650 &icu_length, &error); 13661 &icu_length, &error);
13651 if (U_FAILURE(error) || icu_length == 0) { 13662 if (U_FAILURE(error) || icu_length == 0) {
13652 return *factory->NewStringFromOneByte(OneByteVector(kInvalidTag)); 13663 return *factory->NewStringFromStaticAscii(kInvalidTag);
13653 } 13664 }
13654 13665
13655 char result[ULOC_FULLNAME_CAPACITY]; 13666 char result[ULOC_FULLNAME_CAPACITY];
13656 13667
13657 // Force strict BCP47 rules. 13668 // Force strict BCP47 rules.
13658 uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, TRUE, &error); 13669 uloc_toLanguageTag(icu_result, result, ULOC_FULLNAME_CAPACITY, TRUE, &error);
13659 13670
13660 if (U_FAILURE(error)) { 13671 if (U_FAILURE(error)) {
13661 return *factory->NewStringFromOneByte(OneByteVector(kInvalidTag)); 13672 return *factory->NewStringFromStaticAscii(kInvalidTag);
13662 } 13673 }
13674 #undef kInvalidTag
13663 13675
13664 return *factory->NewStringFromOneByte(OneByteVector(result)); 13676 return *factory->NewStringFromOneByte(
13677 OneByteVector(result)).ToHandleChecked();
13665 } 13678 }
13666 13679
13667 13680
13668 RUNTIME_FUNCTION(MaybeObject*, Runtime_AvailableLocalesOf) { 13681 RUNTIME_FUNCTION(MaybeObject*, Runtime_AvailableLocalesOf) {
13669 HandleScope scope(isolate); 13682 HandleScope scope(isolate);
13683 Factory* factory = isolate->factory();
13670 13684
13671 ASSERT(args.length() == 1); 13685 ASSERT(args.length() == 1);
13672 CONVERT_ARG_HANDLE_CHECKED(String, service, 0); 13686 CONVERT_ARG_HANDLE_CHECKED(String, service, 0);
13673 13687
13674 const icu::Locale* available_locales = NULL; 13688 const icu::Locale* available_locales = NULL;
13675 int32_t count = 0; 13689 int32_t count = 0;
13676 13690
13677 if (service->IsUtf8EqualTo(CStrVector("collator"))) { 13691 if (service->IsUtf8EqualTo(CStrVector("collator"))) {
13678 available_locales = icu::Collator::getAvailableLocales(count); 13692 available_locales = icu::Collator::getAvailableLocales(count);
13679 } else if (service->IsUtf8EqualTo(CStrVector("numberformat"))) { 13693 } else if (service->IsUtf8EqualTo(CStrVector("numberformat"))) {
13680 available_locales = icu::NumberFormat::getAvailableLocales(count); 13694 available_locales = icu::NumberFormat::getAvailableLocales(count);
13681 } else if (service->IsUtf8EqualTo(CStrVector("dateformat"))) { 13695 } else if (service->IsUtf8EqualTo(CStrVector("dateformat"))) {
13682 available_locales = icu::DateFormat::getAvailableLocales(count); 13696 available_locales = icu::DateFormat::getAvailableLocales(count);
13683 } else if (service->IsUtf8EqualTo(CStrVector("breakiterator"))) { 13697 } else if (service->IsUtf8EqualTo(CStrVector("breakiterator"))) {
13684 available_locales = icu::BreakIterator::getAvailableLocales(count); 13698 available_locales = icu::BreakIterator::getAvailableLocales(count);
13685 } 13699 }
13686 13700
13687 UErrorCode error = U_ZERO_ERROR; 13701 UErrorCode error = U_ZERO_ERROR;
13688 char result[ULOC_FULLNAME_CAPACITY]; 13702 char result[ULOC_FULLNAME_CAPACITY];
13689 Handle<JSObject> locales = 13703 Handle<JSObject> locales =
13690 isolate->factory()->NewJSObject(isolate->object_function()); 13704 factory->NewJSObject(isolate->object_function());
13691 13705
13692 for (int32_t i = 0; i < count; ++i) { 13706 for (int32_t i = 0; i < count; ++i) {
13693 const char* icu_name = available_locales[i].getName(); 13707 const char* icu_name = available_locales[i].getName();
13694 13708
13695 error = U_ZERO_ERROR; 13709 error = U_ZERO_ERROR;
13696 // No need to force strict BCP47 rules. 13710 // No need to force strict BCP47 rules.
13697 uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, FALSE, &error); 13711 uloc_toLanguageTag(icu_name, result, ULOC_FULLNAME_CAPACITY, FALSE, &error);
13698 if (U_FAILURE(error)) { 13712 if (U_FAILURE(error)) {
13699 // This shouldn't happen, but lets not break the user. 13713 // This shouldn't happen, but lets not break the user.
13700 continue; 13714 continue;
13701 } 13715 }
13702 13716
13703 RETURN_FAILURE_ON_EXCEPTION(isolate, 13717 RETURN_FAILURE_ON_EXCEPTION(isolate,
13704 JSObject::SetLocalPropertyIgnoreAttributes( 13718 JSObject::SetLocalPropertyIgnoreAttributes(
13705 locales, 13719 locales,
13706 isolate->factory()->NewStringFromAscii(CStrVector(result)), 13720 factory->NewStringFromAsciiChecked(result),
13707 isolate->factory()->NewNumber(i), 13721 factory->NewNumber(i),
13708 NONE)); 13722 NONE));
13709 } 13723 }
13710 13724
13711 return *locales; 13725 return *locales;
13712 } 13726 }
13713 13727
13714 13728
13715 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultICULocale) { 13729 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetDefaultICULocale) {
13716 HandleScope scope(isolate); 13730 HandleScope scope(isolate);
13717 Factory* factory = isolate->factory(); 13731 Factory* factory = isolate->factory();
13718 13732
13719 ASSERT(args.length() == 0); 13733 ASSERT(args.length() == 0);
13720 13734
13721 icu::Locale default_locale; 13735 icu::Locale default_locale;
13722 13736
13723 // Set the locale 13737 // Set the locale
13724 char result[ULOC_FULLNAME_CAPACITY]; 13738 char result[ULOC_FULLNAME_CAPACITY];
13725 UErrorCode status = U_ZERO_ERROR; 13739 UErrorCode status = U_ZERO_ERROR;
13726 uloc_toLanguageTag( 13740 uloc_toLanguageTag(
13727 default_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status); 13741 default_locale.getName(), result, ULOC_FULLNAME_CAPACITY, FALSE, &status);
13728 if (U_SUCCESS(status)) { 13742 if (U_SUCCESS(status)) {
13729 return *factory->NewStringFromOneByte(OneByteVector(result)); 13743 return *factory->NewStringFromOneByte(
13744 OneByteVector(result)).ToHandleChecked();
13730 } 13745 }
13731 13746
13732 return *factory->NewStringFromOneByte(STATIC_ASCII_VECTOR("und")); 13747 return *factory->NewStringFromStaticAscii("und");
13733 } 13748 }
13734 13749
13735 13750
13736 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetLanguageTagVariants) { 13751 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetLanguageTagVariants) {
13737 HandleScope scope(isolate); 13752 HandleScope scope(isolate);
13753 Factory* factory = isolate->factory();
13738 13754
13739 ASSERT(args.length() == 1); 13755 ASSERT(args.length() == 1);
13740 13756
13741 CONVERT_ARG_HANDLE_CHECKED(JSArray, input, 0); 13757 CONVERT_ARG_HANDLE_CHECKED(JSArray, input, 0);
13742 13758
13743 uint32_t length = static_cast<uint32_t>(input->length()->Number()); 13759 uint32_t length = static_cast<uint32_t>(input->length()->Number());
13744 Handle<FixedArray> output = isolate->factory()->NewFixedArray(length); 13760 Handle<FixedArray> output = factory->NewFixedArray(length);
13745 Handle<Name> maximized = 13761 Handle<Name> maximized = factory->NewStringFromStaticAscii("maximized");
13746 isolate->factory()->NewStringFromAscii(CStrVector("maximized")); 13762 Handle<Name> base = factory->NewStringFromStaticAscii("base");
13747 Handle<Name> base =
13748 isolate->factory()->NewStringFromAscii(CStrVector("base"));
13749 for (unsigned int i = 0; i < length; ++i) { 13763 for (unsigned int i = 0; i < length; ++i) {
13750 Handle<Object> locale_id; 13764 Handle<Object> locale_id;
13751 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 13765 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
13752 isolate, locale_id, Object::GetElement(isolate, input, i)); 13766 isolate, locale_id, Object::GetElement(isolate, input, i));
13753 if (!locale_id->IsString()) { 13767 if (!locale_id->IsString()) {
13754 return isolate->Throw(isolate->heap()->illegal_argument_string()); 13768 return isolate->Throw(*factory->illegal_argument_string());
13755 } 13769 }
13756 13770
13757 v8::String::Utf8Value utf8_locale_id( 13771 v8::String::Utf8Value utf8_locale_id(
13758 v8::Utils::ToLocal(Handle<String>::cast(locale_id))); 13772 v8::Utils::ToLocal(Handle<String>::cast(locale_id)));
13759 13773
13760 UErrorCode error = U_ZERO_ERROR; 13774 UErrorCode error = U_ZERO_ERROR;
13761 13775
13762 // Convert from BCP47 to ICU format. 13776 // Convert from BCP47 to ICU format.
13763 // de-DE-u-co-phonebk -> de_DE@collation=phonebook 13777 // de-DE-u-co-phonebk -> de_DE@collation=phonebook
13764 char icu_locale[ULOC_FULLNAME_CAPACITY]; 13778 char icu_locale[ULOC_FULLNAME_CAPACITY];
13765 int icu_locale_length = 0; 13779 int icu_locale_length = 0;
13766 uloc_forLanguageTag(*utf8_locale_id, icu_locale, ULOC_FULLNAME_CAPACITY, 13780 uloc_forLanguageTag(*utf8_locale_id, icu_locale, ULOC_FULLNAME_CAPACITY,
13767 &icu_locale_length, &error); 13781 &icu_locale_length, &error);
13768 if (U_FAILURE(error) || icu_locale_length == 0) { 13782 if (U_FAILURE(error) || icu_locale_length == 0) {
13769 return isolate->Throw(isolate->heap()->illegal_argument_string()); 13783 return isolate->Throw(*factory->illegal_argument_string());
13770 } 13784 }
13771 13785
13772 // Maximize the locale. 13786 // Maximize the locale.
13773 // de_DE@collation=phonebook -> de_Latn_DE@collation=phonebook 13787 // de_DE@collation=phonebook -> de_Latn_DE@collation=phonebook
13774 char icu_max_locale[ULOC_FULLNAME_CAPACITY]; 13788 char icu_max_locale[ULOC_FULLNAME_CAPACITY];
13775 uloc_addLikelySubtags( 13789 uloc_addLikelySubtags(
13776 icu_locale, icu_max_locale, ULOC_FULLNAME_CAPACITY, &error); 13790 icu_locale, icu_max_locale, ULOC_FULLNAME_CAPACITY, &error);
13777 13791
13778 // Remove extensions from maximized locale. 13792 // Remove extensions from maximized locale.
13779 // de_Latn_DE@collation=phonebook -> de_Latn_DE 13793 // de_Latn_DE@collation=phonebook -> de_Latn_DE
(...skipping 12 matching lines...) Expand all
13792 char base_max_locale[ULOC_FULLNAME_CAPACITY]; 13806 char base_max_locale[ULOC_FULLNAME_CAPACITY];
13793 uloc_toLanguageTag(icu_base_max_locale, base_max_locale, 13807 uloc_toLanguageTag(icu_base_max_locale, base_max_locale,
13794 ULOC_FULLNAME_CAPACITY, FALSE, &error); 13808 ULOC_FULLNAME_CAPACITY, FALSE, &error);
13795 13809
13796 // de_DE -> de-DE 13810 // de_DE -> de-DE
13797 char base_locale[ULOC_FULLNAME_CAPACITY]; 13811 char base_locale[ULOC_FULLNAME_CAPACITY];
13798 uloc_toLanguageTag( 13812 uloc_toLanguageTag(
13799 icu_base_locale, base_locale, ULOC_FULLNAME_CAPACITY, FALSE, &error); 13813 icu_base_locale, base_locale, ULOC_FULLNAME_CAPACITY, FALSE, &error);
13800 13814
13801 if (U_FAILURE(error)) { 13815 if (U_FAILURE(error)) {
13802 return isolate->Throw(isolate->heap()->illegal_argument_string()); 13816 return isolate->Throw(*factory->illegal_argument_string());
13803 } 13817 }
13804 13818
13805 Handle<JSObject> result = 13819 Handle<JSObject> result = factory->NewJSObject(isolate->object_function());
13806 isolate->factory()->NewJSObject(isolate->object_function());
13807 RETURN_FAILURE_ON_EXCEPTION(isolate, 13820 RETURN_FAILURE_ON_EXCEPTION(isolate,
13808 JSObject::SetLocalPropertyIgnoreAttributes( 13821 JSObject::SetLocalPropertyIgnoreAttributes(
13809 result, 13822 result,
13810 maximized, 13823 maximized,
13811 isolate->factory()->NewStringFromAscii(CStrVector(base_max_locale)), 13824 factory->NewStringFromAsciiChecked(base_max_locale),
13812 NONE)); 13825 NONE));
13813 RETURN_FAILURE_ON_EXCEPTION(isolate, 13826 RETURN_FAILURE_ON_EXCEPTION(isolate,
13814 JSObject::SetLocalPropertyIgnoreAttributes( 13827 JSObject::SetLocalPropertyIgnoreAttributes(
13815 result, 13828 result,
13816 base, 13829 base,
13817 isolate->factory()->NewStringFromAscii(CStrVector(base_locale)), 13830 factory->NewStringFromAsciiChecked(base_locale),
13818 NONE)); 13831 NONE));
13819 output->set(i, *result); 13832 output->set(i, *result);
13820 } 13833 }
13821 13834
13822 Handle<JSArray> result = isolate->factory()->NewJSArrayWithElements(output); 13835 Handle<JSArray> result = factory->NewJSArrayWithElements(output);
13823 result->set_length(Smi::FromInt(length)); 13836 result->set_length(Smi::FromInt(length));
13824 return *result; 13837 return *result;
13825 } 13838 }
13826 13839
13827 13840
13828 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObject) { 13841 RUNTIME_FUNCTION(MaybeObject*, Runtime_IsInitializedIntlObject) {
13829 HandleScope scope(isolate); 13842 HandleScope scope(isolate);
13830 13843
13831 ASSERT(args.length() == 1); 13844 ASSERT(args.length() == 1);
13832 13845
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
13928 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat( 13941 icu::SimpleDateFormat* date_format = DateFormat::InitializeDateTimeFormat(
13929 isolate, locale, options, resolved); 13942 isolate, locale, options, resolved);
13930 13943
13931 if (!date_format) return isolate->ThrowIllegalOperation(); 13944 if (!date_format) return isolate->ThrowIllegalOperation();
13932 13945
13933 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format)); 13946 local_object->SetInternalField(0, reinterpret_cast<Smi*>(date_format));
13934 13947
13935 RETURN_FAILURE_ON_EXCEPTION(isolate, 13948 RETURN_FAILURE_ON_EXCEPTION(isolate,
13936 JSObject::SetLocalPropertyIgnoreAttributes( 13949 JSObject::SetLocalPropertyIgnoreAttributes(
13937 local_object, 13950 local_object,
13938 isolate->factory()->NewStringFromAscii(CStrVector("dateFormat")), 13951 isolate->factory()->NewStringFromStaticAscii("dateFormat"),
13939 isolate->factory()->NewStringFromAscii(CStrVector("valid")), 13952 isolate->factory()->NewStringFromStaticAscii("valid"),
13940 NONE)); 13953 NONE));
13941 13954
13942 // Make object handle weak so we can delete the data format once GC kicks in. 13955 // Make object handle weak so we can delete the data format once GC kicks in.
13943 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); 13956 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object);
13944 GlobalHandles::MakeWeak(wrapper.location(), 13957 GlobalHandles::MakeWeak(wrapper.location(),
13945 reinterpret_cast<void*>(wrapper.location()), 13958 reinterpret_cast<void*>(wrapper.location()),
13946 DateFormat::DeleteDateFormat); 13959 DateFormat::DeleteDateFormat);
13947 return *local_object; 13960 return *local_object;
13948 } 13961 }
13949 13962
(...skipping 10 matching lines...) Expand all
13960 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 13973 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
13961 isolate, value, Execution::ToNumber(isolate, date)); 13974 isolate, value, Execution::ToNumber(isolate, date));
13962 13975
13963 icu::SimpleDateFormat* date_format = 13976 icu::SimpleDateFormat* date_format =
13964 DateFormat::UnpackDateFormat(isolate, date_format_holder); 13977 DateFormat::UnpackDateFormat(isolate, date_format_holder);
13965 if (!date_format) return isolate->ThrowIllegalOperation(); 13978 if (!date_format) return isolate->ThrowIllegalOperation();
13966 13979
13967 icu::UnicodeString result; 13980 icu::UnicodeString result;
13968 date_format->format(value->Number(), result); 13981 date_format->format(value->Number(), result);
13969 13982
13970 return *isolate->factory()->NewStringFromTwoByte( 13983 Handle<String> result_str;
13971 Vector<const uint16_t>( 13984 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
13972 reinterpret_cast<const uint16_t*>(result.getBuffer()), 13985 isolate, result_str,
13973 result.length())); 13986 isolate->factory()->NewStringFromTwoByte(
13987 Vector<const uint16_t>(
13988 reinterpret_cast<const uint16_t*>(result.getBuffer()),
13989 result.length())));
13990 return *result_str;
13974 } 13991 }
13975 13992
13976 13993
13977 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalDateParse) { 13994 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalDateParse) {
13978 HandleScope scope(isolate); 13995 HandleScope scope(isolate);
13979 13996
13980 ASSERT(args.length() == 2); 13997 ASSERT(args.length() == 2);
13981 13998
13982 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0); 13999 CONVERT_ARG_HANDLE_CHECKED(JSObject, date_format_holder, 0);
13983 CONVERT_ARG_HANDLE_CHECKED(String, date_string, 1); 14000 CONVERT_ARG_HANDLE_CHECKED(String, date_string, 1);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
14023 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat( 14040 icu::DecimalFormat* number_format = NumberFormat::InitializeNumberFormat(
14024 isolate, locale, options, resolved); 14041 isolate, locale, options, resolved);
14025 14042
14026 if (!number_format) return isolate->ThrowIllegalOperation(); 14043 if (!number_format) return isolate->ThrowIllegalOperation();
14027 14044
14028 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format)); 14045 local_object->SetInternalField(0, reinterpret_cast<Smi*>(number_format));
14029 14046
14030 RETURN_FAILURE_ON_EXCEPTION(isolate, 14047 RETURN_FAILURE_ON_EXCEPTION(isolate,
14031 JSObject::SetLocalPropertyIgnoreAttributes( 14048 JSObject::SetLocalPropertyIgnoreAttributes(
14032 local_object, 14049 local_object,
14033 isolate->factory()->NewStringFromAscii(CStrVector("numberFormat")), 14050 isolate->factory()->NewStringFromStaticAscii("numberFormat"),
14034 isolate->factory()->NewStringFromAscii(CStrVector("valid")), 14051 isolate->factory()->NewStringFromStaticAscii("valid"),
14035 NONE)); 14052 NONE));
14036 14053
14037 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); 14054 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object);
14038 GlobalHandles::MakeWeak(wrapper.location(), 14055 GlobalHandles::MakeWeak(wrapper.location(),
14039 reinterpret_cast<void*>(wrapper.location()), 14056 reinterpret_cast<void*>(wrapper.location()),
14040 NumberFormat::DeleteNumberFormat); 14057 NumberFormat::DeleteNumberFormat);
14041 return *local_object; 14058 return *local_object;
14042 } 14059 }
14043 14060
14044 14061
14045 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberFormat) { 14062 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberFormat) {
14046 HandleScope scope(isolate); 14063 HandleScope scope(isolate);
14047 14064
14048 ASSERT(args.length() == 2); 14065 ASSERT(args.length() == 2);
14049 14066
14050 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); 14067 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0);
14051 CONVERT_ARG_HANDLE_CHECKED(Object, number, 1); 14068 CONVERT_ARG_HANDLE_CHECKED(Object, number, 1);
14052 14069
14053 Handle<Object> value; 14070 Handle<Object> value;
14054 ASSIGN_RETURN_FAILURE_ON_EXCEPTION( 14071 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
14055 isolate, value, Execution::ToNumber(isolate, number)); 14072 isolate, value, Execution::ToNumber(isolate, number));
14056 14073
14057 icu::DecimalFormat* number_format = 14074 icu::DecimalFormat* number_format =
14058 NumberFormat::UnpackNumberFormat(isolate, number_format_holder); 14075 NumberFormat::UnpackNumberFormat(isolate, number_format_holder);
14059 if (!number_format) return isolate->ThrowIllegalOperation(); 14076 if (!number_format) return isolate->ThrowIllegalOperation();
14060 14077
14061 icu::UnicodeString result; 14078 icu::UnicodeString result;
14062 number_format->format(value->Number(), result); 14079 number_format->format(value->Number(), result);
14063 14080
14064 return *isolate->factory()->NewStringFromTwoByte( 14081 Handle<String> result_str;
14065 Vector<const uint16_t>( 14082 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
14066 reinterpret_cast<const uint16_t*>(result.getBuffer()), 14083 isolate, result_str,
14067 result.length())); 14084 isolate->factory()->NewStringFromTwoByte(
14085 Vector<const uint16_t>(
14086 reinterpret_cast<const uint16_t*>(result.getBuffer()),
14087 result.length())));
14088 return *result_str;
14068 } 14089 }
14069 14090
14070 14091
14071 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberParse) { 14092 RUNTIME_FUNCTION(MaybeObject*, Runtime_InternalNumberParse) {
14072 HandleScope scope(isolate); 14093 HandleScope scope(isolate);
14073 14094
14074 ASSERT(args.length() == 2); 14095 ASSERT(args.length() == 2);
14075 14096
14076 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0); 14097 CONVERT_ARG_HANDLE_CHECKED(JSObject, number_format_holder, 0);
14077 CONVERT_ARG_HANDLE_CHECKED(String, number_string, 1); 14098 CONVERT_ARG_HANDLE_CHECKED(String, number_string, 1);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
14127 icu::Collator* collator = Collator::InitializeCollator( 14148 icu::Collator* collator = Collator::InitializeCollator(
14128 isolate, locale, options, resolved); 14149 isolate, locale, options, resolved);
14129 14150
14130 if (!collator) return isolate->ThrowIllegalOperation(); 14151 if (!collator) return isolate->ThrowIllegalOperation();
14131 14152
14132 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator)); 14153 local_object->SetInternalField(0, reinterpret_cast<Smi*>(collator));
14133 14154
14134 RETURN_FAILURE_ON_EXCEPTION(isolate, 14155 RETURN_FAILURE_ON_EXCEPTION(isolate,
14135 JSObject::SetLocalPropertyIgnoreAttributes( 14156 JSObject::SetLocalPropertyIgnoreAttributes(
14136 local_object, 14157 local_object,
14137 isolate->factory()->NewStringFromAscii(CStrVector("collator")), 14158 isolate->factory()->NewStringFromStaticAscii("collator"),
14138 isolate->factory()->NewStringFromAscii(CStrVector("valid")), 14159 isolate->factory()->NewStringFromStaticAscii("valid"),
14139 NONE)); 14160 NONE));
14140 14161
14141 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); 14162 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object);
14142 GlobalHandles::MakeWeak(wrapper.location(), 14163 GlobalHandles::MakeWeak(wrapper.location(),
14143 reinterpret_cast<void*>(wrapper.location()), 14164 reinterpret_cast<void*>(wrapper.location()),
14144 Collator::DeleteCollator); 14165 Collator::DeleteCollator);
14145 return *local_object; 14166 return *local_object;
14146 } 14167 }
14147 14168
14148 14169
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
14189 14210
14190 // TODO(mnita): check Normalizer2 (not available in ICU 46) 14211 // TODO(mnita): check Normalizer2 (not available in ICU 46)
14191 UErrorCode status = U_ZERO_ERROR; 14212 UErrorCode status = U_ZERO_ERROR;
14192 icu::UnicodeString result; 14213 icu::UnicodeString result;
14193 icu::Normalizer::normalize(u_value, normalizationForms[form_id], 0, 14214 icu::Normalizer::normalize(u_value, normalizationForms[form_id], 0,
14194 result, status); 14215 result, status);
14195 if (U_FAILURE(status)) { 14216 if (U_FAILURE(status)) {
14196 return isolate->heap()->undefined_value(); 14217 return isolate->heap()->undefined_value();
14197 } 14218 }
14198 14219
14199 return *isolate->factory()->NewStringFromTwoByte( 14220 Handle<String> result_str;
14200 Vector<const uint16_t>( 14221 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
14201 reinterpret_cast<const uint16_t*>(result.getBuffer()), 14222 isolate, result_str,
14202 result.length())); 14223 isolate->factory()->NewStringFromTwoByte(
14224 Vector<const uint16_t>(
14225 reinterpret_cast<const uint16_t*>(result.getBuffer()),
14226 result.length())));
14227 return *result_str;
14203 } 14228 }
14204 14229
14205 14230
14206 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateBreakIterator) { 14231 RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateBreakIterator) {
14207 HandleScope scope(isolate); 14232 HandleScope scope(isolate);
14208 14233
14209 ASSERT(args.length() == 3); 14234 ASSERT(args.length() == 3);
14210 14235
14211 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); 14236 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0);
14212 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); 14237 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1);
(...skipping 14 matching lines...) Expand all
14227 14252
14228 if (!break_iterator) return isolate->ThrowIllegalOperation(); 14253 if (!break_iterator) return isolate->ThrowIllegalOperation();
14229 14254
14230 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator)); 14255 local_object->SetInternalField(0, reinterpret_cast<Smi*>(break_iterator));
14231 // Make sure that the pointer to adopted text is NULL. 14256 // Make sure that the pointer to adopted text is NULL.
14232 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL)); 14257 local_object->SetInternalField(1, reinterpret_cast<Smi*>(NULL));
14233 14258
14234 RETURN_FAILURE_ON_EXCEPTION(isolate, 14259 RETURN_FAILURE_ON_EXCEPTION(isolate,
14235 JSObject::SetLocalPropertyIgnoreAttributes( 14260 JSObject::SetLocalPropertyIgnoreAttributes(
14236 local_object, 14261 local_object,
14237 isolate->factory()->NewStringFromAscii(CStrVector("breakIterator")), 14262 isolate->factory()->NewStringFromStaticAscii("breakIterator"),
14238 isolate->factory()->NewStringFromAscii(CStrVector("valid")), 14263 isolate->factory()->NewStringFromStaticAscii("valid"),
14239 NONE)); 14264 NONE));
14240 14265
14241 // Make object handle weak so we can delete the break iterator once GC kicks 14266 // Make object handle weak so we can delete the break iterator once GC kicks
14242 // in. 14267 // in.
14243 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object); 14268 Handle<Object> wrapper = isolate->global_handles()->Create(*local_object);
14244 GlobalHandles::MakeWeak(wrapper.location(), 14269 GlobalHandles::MakeWeak(wrapper.location(),
14245 reinterpret_cast<void*>(wrapper.location()), 14270 reinterpret_cast<void*>(wrapper.location()),
14246 BreakIterator::DeleteBreakIterator); 14271 BreakIterator::DeleteBreakIterator);
14247 return *local_object; 14272 return *local_object;
14248 } 14273 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
14330 icu::BreakIterator* break_iterator = 14355 icu::BreakIterator* break_iterator =
14331 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder); 14356 BreakIterator::UnpackBreakIterator(isolate, break_iterator_holder);
14332 if (!break_iterator) return isolate->ThrowIllegalOperation(); 14357 if (!break_iterator) return isolate->ThrowIllegalOperation();
14333 14358
14334 // TODO(cira): Remove cast once ICU fixes base BreakIterator class. 14359 // TODO(cira): Remove cast once ICU fixes base BreakIterator class.
14335 icu::RuleBasedBreakIterator* rule_based_iterator = 14360 icu::RuleBasedBreakIterator* rule_based_iterator =
14336 static_cast<icu::RuleBasedBreakIterator*>(break_iterator); 14361 static_cast<icu::RuleBasedBreakIterator*>(break_iterator);
14337 int32_t status = rule_based_iterator->getRuleStatus(); 14362 int32_t status = rule_based_iterator->getRuleStatus();
14338 // Keep return values in sync with JavaScript BreakType enum. 14363 // Keep return values in sync with JavaScript BreakType enum.
14339 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) { 14364 if (status >= UBRK_WORD_NONE && status < UBRK_WORD_NONE_LIMIT) {
14340 return *isolate->factory()->NewStringFromAscii(CStrVector("none")); 14365 return *isolate->factory()->NewStringFromStaticAscii("none");
14341 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) { 14366 } else if (status >= UBRK_WORD_NUMBER && status < UBRK_WORD_NUMBER_LIMIT) {
14342 return *isolate->factory()->NewStringFromAscii(CStrVector("number")); 14367 return *isolate->factory()->NewStringFromStaticAscii("number");
14343 } else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) { 14368 } else if (status >= UBRK_WORD_LETTER && status < UBRK_WORD_LETTER_LIMIT) {
14344 return *isolate->factory()->NewStringFromAscii(CStrVector("letter")); 14369 return *isolate->factory()->NewStringFromStaticAscii("letter");
14345 } else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) { 14370 } else if (status >= UBRK_WORD_KANA && status < UBRK_WORD_KANA_LIMIT) {
14346 return *isolate->factory()->NewStringFromAscii(CStrVector("kana")); 14371 return *isolate->factory()->NewStringFromStaticAscii("kana");
14347 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) { 14372 } else if (status >= UBRK_WORD_IDEO && status < UBRK_WORD_IDEO_LIMIT) {
14348 return *isolate->factory()->NewStringFromAscii(CStrVector("ideo")); 14373 return *isolate->factory()->NewStringFromStaticAscii("ideo");
14349 } else { 14374 } else {
14350 return *isolate->factory()->NewStringFromAscii(CStrVector("unknown")); 14375 return *isolate->factory()->NewStringFromStaticAscii("unknown");
14351 } 14376 }
14352 } 14377 }
14353 #endif // V8_I18N_SUPPORT 14378 #endif // V8_I18N_SUPPORT
14354 14379
14355 14380
14356 // Finds the script object from the script data. NOTE: This operation uses 14381 // Finds the script object from the script data. NOTE: This operation uses
14357 // heap traversal to find the function generated for the source position 14382 // heap traversal to find the function generated for the source position
14358 // for the requested break point. For lazily compiled functions several heap 14383 // for the requested break point. For lazily compiled functions several heap
14359 // traversals might be required rendering this operation as a rather slow 14384 // traversals might be required rendering this operation as a rather slow
14360 // operation. However for setting break points which is normally done through 14385 // operation. However for setting break points which is normally done through
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
14439 14464
14440 14465
14441 // Returns V8 version as a string. 14466 // Returns V8 version as a string.
14442 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetV8Version) { 14467 RUNTIME_FUNCTION(MaybeObject*, Runtime_GetV8Version) {
14443 HandleScope scope(isolate); 14468 HandleScope scope(isolate);
14444 ASSERT(args.length() == 0); 14469 ASSERT(args.length() == 0);
14445 14470
14446 const char* version_string = v8::V8::GetVersion(); 14471 const char* version_string = v8::V8::GetVersion();
14447 14472
14448 return *isolate->factory()->NewStringFromOneByte( 14473 return *isolate->factory()->NewStringFromOneByte(
14449 OneByteVector(version_string), NOT_TENURED); 14474 OneByteVector(version_string), NOT_TENURED).ToHandleChecked();
14450 } 14475 }
14451 14476
14452 14477
14453 RUNTIME_FUNCTION(MaybeObject*, Runtime_Abort) { 14478 RUNTIME_FUNCTION(MaybeObject*, Runtime_Abort) {
14454 SealHandleScope shs(isolate); 14479 SealHandleScope shs(isolate);
14455 ASSERT(args.length() == 1); 14480 ASSERT(args.length() == 1);
14456 CONVERT_SMI_ARG_CHECKED(message_id, 0); 14481 CONVERT_SMI_ARG_CHECKED(message_id, 0);
14457 const char* message = GetBailoutReason( 14482 const char* message = GetBailoutReason(
14458 static_cast<BailoutReason>(message_id)); 14483 static_cast<BailoutReason>(message_id));
14459 OS::PrintError("abort: %s\n", message); 14484 OS::PrintError("abort: %s\n", message);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
14651 Factory* factory = isolate->factory(); 14676 Factory* factory = isolate->factory();
14652 Handle<FixedArray> elements = factory->NewFixedArray(entry_count); 14677 Handle<FixedArray> elements = factory->NewFixedArray(entry_count);
14653 int index = 0; 14678 int index = 0;
14654 bool inline_runtime_functions = false; 14679 bool inline_runtime_functions = false;
14655 #define ADD_ENTRY(Name, argc, ressize) \ 14680 #define ADD_ENTRY(Name, argc, ressize) \
14656 { \ 14681 { \
14657 HandleScope inner(isolate); \ 14682 HandleScope inner(isolate); \
14658 Handle<String> name; \ 14683 Handle<String> name; \
14659 /* Inline runtime functions have an underscore in front of the name. */ \ 14684 /* Inline runtime functions have an underscore in front of the name. */ \
14660 if (inline_runtime_functions) { \ 14685 if (inline_runtime_functions) { \
14661 name = factory->NewStringFromAscii( \ 14686 name = factory->NewStringFromOneByte( \
14662 Vector<const char>("_" #Name, StrLength("_" #Name))); \ 14687 STATIC_ASCII_VECTOR("_" #Name)).ToHandleChecked(); \
14663 } else { \ 14688 } else { \
14664 name = factory->NewStringFromAscii( \ 14689 name = factory->NewStringFromOneByte( \
14665 Vector<const char>(#Name, StrLength(#Name))); \ 14690 STATIC_ASCII_VECTOR(#Name)).ToHandleChecked(); \
14666 } \ 14691 } \
14667 Handle<FixedArray> pair_elements = factory->NewFixedArray(2); \ 14692 Handle<FixedArray> pair_elements = factory->NewFixedArray(2); \
14668 pair_elements->set(0, *name); \ 14693 pair_elements->set(0, *name); \
14669 pair_elements->set(1, Smi::FromInt(argc)); \ 14694 pair_elements->set(1, Smi::FromInt(argc)); \
14670 Handle<JSArray> pair = factory->NewJSArrayWithElements(pair_elements); \ 14695 Handle<JSArray> pair = factory->NewJSArrayWithElements(pair_elements); \
14671 elements->set(index++, *pair); \ 14696 elements->set(index++, *pair); \
14672 } 14697 }
14673 inline_runtime_functions = false; 14698 inline_runtime_functions = false;
14674 RUNTIME_FUNCTION_LIST(ADD_ENTRY) 14699 RUNTIME_FUNCTION_LIST(ADD_ENTRY)
14675 // Calling hidden runtime functions should just throw. 14700 // Calling hidden runtime functions should just throw.
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
15108 } 15133 }
15109 } 15134 }
15110 15135
15111 15136
15112 void Runtime::OutOfMemory() { 15137 void Runtime::OutOfMemory() {
15113 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true); 15138 Heap::FatalProcessOutOfMemory("CALL_AND_RETRY_LAST", true);
15114 UNREACHABLE(); 15139 UNREACHABLE();
15115 } 15140 }
15116 15141
15117 } } // namespace v8::internal 15142 } } // namespace v8::internal
OLDNEW
« src/jsregexp.cc ('K') | « src/parser.cc ('k') | src/scanner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698