| Index: src/runtime/runtime-i18n.cc | 
| diff --git a/src/runtime/runtime-i18n.cc b/src/runtime/runtime-i18n.cc | 
| index 7b5ea181e1368a44cc7b9c205af1909c3e669fb2..80c8a9cd012a89210dfa54accd5a386bd8739a03 100644 | 
| --- a/src/runtime/runtime-i18n.cc | 
| +++ b/src/runtime/runtime-i18n.cc | 
| @@ -532,6 +532,29 @@ RUNTIME_FUNCTION(Runtime_InternalNumberFormat) { | 
| result.length()))); | 
| } | 
|  | 
| +RUNTIME_FUNCTION(Runtime_CurrencyDigits) { | 
| +  DCHECK_EQ(1, args.length()); | 
| + | 
| +  CONVERT_ARG_HANDLE_CHECKED(String, currency, 0); | 
| + | 
| +  // TODO(littledan): Avoid transcoding the string twice | 
| +  v8::String::Utf8Value currency_string(v8::Utils::ToLocal(currency)); | 
| +  icu::UnicodeString currency_icu = | 
| +      icu::UnicodeString::fromUTF8(*currency_string); | 
| + | 
| +  DisallowHeapAllocation no_gc; | 
| +  UErrorCode status = U_ZERO_ERROR; | 
| +#if U_ICU_VERSION_MAJOR_NUM >= 59 | 
| +  uint32_t fraction_digits = ucurr_getDefaultFractionDigits( | 
| +      icu::toUCharPtr(currency_icu.getTerminatedBuffer()), &status); | 
| +#else | 
| +  uint32_t fraction_digits = ucurr_getDefaultFractionDigits( | 
| +      currency_icu.getTerminatedBuffer(), &status); | 
| +#endif | 
| +  // For missing currency codes, default to the most common, 2 | 
| +  if (!U_SUCCESS(status)) fraction_digits = 2; | 
| +  return Smi::FromInt(fraction_digits); | 
| +} | 
|  | 
| RUNTIME_FUNCTION(Runtime_CreateCollator) { | 
| HandleScope scope(isolate); | 
|  |