@@ -559,64 +559,6 @@ bool cmp_NumberFormatSpan(const NumberFormatSpan& a,
559559 return a.field_id < b.field_id ;
560560}
561561
562- // The list comes from third_party/icu/source/i18n/unicode/unum.h.
563- // They're mapped to NumberFormat part types mentioned throughout
564- // https://tc39.github.io/ecma402/#sec-partitionnumberpattern .
565- Handle<String> IcuNumberFieldIdToNumberType (int32_t field_id,
566- Handle<Object> numeric_obj,
567- Isolate* isolate) {
568- DCHECK (numeric_obj->IsNumeric ());
569- switch (static_cast <UNumberFormatFields>(field_id)) {
570- case UNUM_INTEGER_FIELD:
571- if (numeric_obj->IsBigInt ()) {
572- // Neither NaN nor Infinite could be stored into BigInt
573- // so just return integer.
574- return isolate->factory ()->integer_string ();
575- } else {
576- double number = numeric_obj->Number ();
577- if (std::isfinite (number)) return isolate->factory ()->integer_string ();
578- if (std::isnan (number)) return isolate->factory ()->nan_string ();
579- return isolate->factory ()->infinity_string ();
580- }
581- case UNUM_FRACTION_FIELD:
582- return isolate->factory ()->fraction_string ();
583- case UNUM_DECIMAL_SEPARATOR_FIELD:
584- return isolate->factory ()->decimal_string ();
585- case UNUM_GROUPING_SEPARATOR_FIELD:
586- return isolate->factory ()->group_string ();
587- case UNUM_CURRENCY_FIELD:
588- return isolate->factory ()->currency_string ();
589- case UNUM_PERCENT_FIELD:
590- return isolate->factory ()->percentSign_string ();
591- case UNUM_SIGN_FIELD:
592- if (numeric_obj->IsBigInt ()) {
593- Handle<BigInt> big_int = Handle<BigInt>::cast (numeric_obj);
594- return big_int->IsNegative () ? isolate->factory ()->minusSign_string ()
595- : isolate->factory ()->plusSign_string ();
596- } else {
597- double number = numeric_obj->Number ();
598- return number < 0 ? isolate->factory ()->minusSign_string ()
599- : isolate->factory ()->plusSign_string ();
600- }
601- case UNUM_EXPONENT_SYMBOL_FIELD:
602- case UNUM_EXPONENT_SIGN_FIELD:
603- case UNUM_EXPONENT_FIELD:
604- // We should never get these because we're not using any scientific
605- // formatter.
606- UNREACHABLE ();
607- return Handle<String>();
608-
609- case UNUM_PERMILL_FIELD:
610- // We're not creating any permill formatter, and it's not even clear how
611- // that would be possible with the ICU API.
612- UNREACHABLE ();
613- return Handle<String>();
614-
615- default :
616- UNREACHABLE ();
617- return Handle<String>();
618- }
619- }
620562} // namespace
621563
622564// Flattens a list of possibly-overlapping "regions" to a list of
@@ -748,7 +690,7 @@ Maybe<int> JSNumberFormat::FormatToParts(Isolate* isolate,
748690 Handle<String> field_type_string =
749691 part.field_id == -1
750692 ? isolate->factory ()->literal_string ()
751- : IcuNumberFieldIdToNumberType (part. field_id , numeric_obj, isolate );
693+ : Intl::NumberFieldToType (isolate , numeric_obj, part. field_id );
752694 Handle<String> substring;
753695 ASSIGN_RETURN_ON_EXCEPTION_VALUE (
754696 isolate, substring,
0 commit comments