| 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 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 | 525 |
| 526 icu::UnicodeString result; | 526 icu::UnicodeString result; |
| 527 number_format->format(value->Number(), result); | 527 number_format->format(value->Number(), result); |
| 528 | 528 |
| 529 RETURN_RESULT_OR_FAILURE( | 529 RETURN_RESULT_OR_FAILURE( |
| 530 isolate, isolate->factory()->NewStringFromTwoByte(Vector<const uint16_t>( | 530 isolate, isolate->factory()->NewStringFromTwoByte(Vector<const uint16_t>( |
| 531 reinterpret_cast<const uint16_t*>(result.getBuffer()), | 531 reinterpret_cast<const uint16_t*>(result.getBuffer()), |
| 532 result.length()))); | 532 result.length()))); |
| 533 } | 533 } |
| 534 | 534 |
| 535 RUNTIME_FUNCTION(Runtime_CurrencyDigits) { |
| 536 DCHECK_EQ(1, args.length()); |
| 537 |
| 538 CONVERT_ARG_HANDLE_CHECKED(String, currency, 0); |
| 539 |
| 540 // TODO(littledan): Avoid transcoding the string twice |
| 541 v8::String::Utf8Value currency_string(v8::Utils::ToLocal(currency)); |
| 542 icu::UnicodeString currency_icu = |
| 543 icu::UnicodeString::fromUTF8(*currency_string); |
| 544 |
| 545 DisallowHeapAllocation no_gc; |
| 546 UErrorCode status = U_ZERO_ERROR; |
| 547 #if U_ICU_VERSION_MAJOR_NUM >= 59 |
| 548 uint32_t fraction_digits = ucurr_getDefaultFractionDigits( |
| 549 icu::toUCharPtr(currency_icu.getTerminatedBuffer()), &status); |
| 550 #else |
| 551 uint32_t fraction_digits = ucurr_getDefaultFractionDigits( |
| 552 currency_icu.getTerminatedBuffer(), &status); |
| 553 #endif |
| 554 // For missing currency codes, default to the most common, 2 |
| 555 if (!U_SUCCESS(status)) fraction_digits = 2; |
| 556 return Smi::FromInt(fraction_digits); |
| 557 } |
| 535 | 558 |
| 536 RUNTIME_FUNCTION(Runtime_CreateCollator) { | 559 RUNTIME_FUNCTION(Runtime_CreateCollator) { |
| 537 HandleScope scope(isolate); | 560 HandleScope scope(isolate); |
| 538 | 561 |
| 539 DCHECK_EQ(3, args.length()); | 562 DCHECK_EQ(3, args.length()); |
| 540 | 563 |
| 541 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); | 564 CONVERT_ARG_HANDLE_CHECKED(String, locale, 0); |
| 542 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); | 565 CONVERT_ARG_HANDLE_CHECKED(JSObject, options, 1); |
| 543 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); | 566 CONVERT_ARG_HANDLE_CHECKED(JSObject, resolved, 2); |
| 544 | 567 |
| (...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 Handle<FixedArray> date_cache_version = | 838 Handle<FixedArray> date_cache_version = |
| 816 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( | 839 Handle<FixedArray>::cast(isolate->eternal_handles()->GetSingleton( |
| 817 EternalHandles::DATE_CACHE_VERSION)); | 840 EternalHandles::DATE_CACHE_VERSION)); |
| 818 return date_cache_version->get(0); | 841 return date_cache_version->get(0); |
| 819 } | 842 } |
| 820 | 843 |
| 821 } // namespace internal | 844 } // namespace internal |
| 822 } // namespace v8 | 845 } // namespace v8 |
| 823 | 846 |
| 824 #endif // V8_I18N_SUPPORT | 847 #endif // V8_I18N_SUPPORT |
| OLD | NEW |