@@ -2437,40 +2437,43 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc)
24372437 return JavascriptString::NewWithBuffer (formatted, formattedLen, scriptContext);
24382438 }
24392439
2440- #if defined(ICU_VERSION) && ICU_VERSION >= 61
2441- UErrorCode status = U_ZERO_ERROR ;
2442- ScopedUFieldPositionIterator fpi (ufieldpositer_open (&status));
2443-
2444- EnsureBuffer ([&](UChar *buf, int bufLen, UErrorCode *status)
2440+ if (PlatformAgnostic::ICUHelpers::LinkedIcuMajorVersion () >= 61 )
24452441 {
2446- return unum_formatDoubleForFields (*fmt, num, buf, bufLen, fpi, status) ;
2447- }, scriptContext-> GetRecycler (), &formatted, &formattedLen );
2442+ UErrorCode status = U_ZERO_ERROR ;
2443+ ScopedUFieldPositionIterator fpi ( ufieldpositer_open (&status) );
24482444
2449- NumberFormatPartsBuilder nfpb (num, formatted, formattedLen, scriptContext);
2445+ EnsureBuffer ([&](UChar *buf, int bufLen, UErrorCode *status)
2446+ {
2447+ return unum_formatDoubleForFields (*fmt, num, buf, bufLen, fpi, status);
2448+ }, scriptContext->GetRecycler (), &formatted, &formattedLen);
24502449
2451- int partStart = 0 ;
2452- int partEnd = 0 ;
2453- int i = 0 ;
2454- for (int kind = ufieldpositer_next (fpi, &partStart, &partEnd); kind >= 0 ; kind = ufieldpositer_next (fpi, &partStart, &partEnd), ++i)
2455- {
2456- nfpb.InsertPart (static_cast <UNumberFormatFields>(kind), partStart, partEnd);
2457- }
2450+ NumberFormatPartsBuilder nfpb (num, formatted, formattedLen, scriptContext);
24582451
2459- return nfpb.ToPartsArray ();
2460- #else
2461- JavascriptLibrary *library = scriptContext->GetLibrary ();
2462- JavascriptArray *ret = library->CreateArray (1 );
2463- DynamicObject* part = library->CreateObject ();
2464- EnsureBuffer ([&](UChar *buf, int bufLen, UErrorCode *status)
2452+ int partStart = 0 ;
2453+ int partEnd = 0 ;
2454+ int i = 0 ;
2455+ for (int kind = ufieldpositer_next (fpi, &partStart, &partEnd); kind >= 0 ; kind = ufieldpositer_next (fpi, &partStart, &partEnd), ++i)
2456+ {
2457+ nfpb.InsertPart (static_cast <UNumberFormatFields>(kind), partStart, partEnd);
2458+ }
2459+
2460+ return nfpb.ToPartsArray ();
2461+ }
2462+ else
24652463 {
2466- return unum_formatDouble (*fmt, num, buf, bufLen, nullptr , status);
2467- }, scriptContext->GetRecycler (), &formatted, &formattedLen);
2468- JavascriptOperators::InitProperty (part, PropertyIds::type, library->GetIntlUnknownPartString ());
2469- JavascriptOperators::InitProperty (part, PropertyIds::value, JavascriptString::NewWithBuffer (formatted, formattedLen, scriptContext));
2464+ JavascriptLibrary *library = scriptContext->GetLibrary ();
2465+ JavascriptArray *ret = library->CreateArray (1 );
2466+ DynamicObject *part = library->CreateObject ();
2467+ EnsureBuffer ([&](UChar *buf, int bufLen, UErrorCode *status)
2468+ {
2469+ return unum_formatDouble (*fmt, num, buf, bufLen, nullptr , status);
2470+ }, scriptContext->GetRecycler (), &formatted, &formattedLen);
2471+ JavascriptOperators::InitProperty (part, PropertyIds::type, library->GetIntlUnknownPartString ());
2472+ JavascriptOperators::InitProperty (part, PropertyIds::value, JavascriptString::NewWithBuffer (formatted, formattedLen, scriptContext));
24702473
2471- ret->SetItem (0 , part, PropertyOperationFlags::PropertyOperation_None);
2472- return ret;
2473- # endif // #if ICU_VERSION >= 61 ... #else
2474+ ret->SetItem (0 , part, PropertyOperationFlags::PropertyOperation_None);
2475+ return ret;
2476+ }
24742477#else
24752478 INTL_CHECK_ARGS (
24762479 args.Info .Count == 3 &&
@@ -3012,21 +3015,24 @@ DEFINE_ISXLOCALEAVAILABLE(PR, uloc)
30123015 // For ICU < 61, we can fake it by creating an array of ["other"], which
30133016 // uplrules_getKeywords is guaranteed to return at minimum.
30143017 // This array is only used in resolved options, so the majority of the functionality can remain (namely, select() still works)
3015- #if defined(ICU_VERSION) && ICU_VERSION >= 61
3016- DynamicObject *state = UnsafeVarTo<DynamicObject>(args[1 ]);
3017- FinalizableUPluralRules *pr = GetOrCreateCachedUPluralRules (state, scriptContext);
3018+ if (PlatformAgnostic::ICUHelpers::LinkedIcuMajorVersion () >= 61 )
3019+ {
3020+ DynamicObject *state = UnsafeVarTo<DynamicObject>(args[1 ]);
3021+ FinalizableUPluralRules *pr = GetOrCreateCachedUPluralRules (state, scriptContext);
30183022
3019- UErrorCode status = U_ZERO_ERROR ;
3020- ScopedUEnumeration keywords (uplrules_getKeywords (*pr, &status));
3021- ICU_ASSERT (status, true );
3023+ UErrorCode status = U_ZERO_ERROR ;
3024+ ScopedUEnumeration keywords (uplrules_getKeywords (*pr, &status));
3025+ ICU_ASSERT (status, true );
30223026
3023- ForEachUEnumeration16 (keywords, [&](int index, const char16 *kw, charcount_t kwLength)
3027+ ForEachUEnumeration16 (keywords, [&](int index, const char16 *kw, charcount_t kwLength)
3028+ {
3029+ ret->SetItem (index, JavascriptString::NewCopyBuffer (kw, kwLength, scriptContext), PropertyOperation_None);
3030+ });
3031+ }
3032+ else
30243033 {
3025- ret->SetItem (index, JavascriptString::NewCopyBuffer (kw, kwLength, scriptContext), PropertyOperation_None);
3026- });
3027- #else
3028- ret->SetItem (0 , scriptContext->GetLibrary ()->GetIntlPluralRulesOtherString (), PropertyOperation_None);
3029- #endif
3034+ ret->SetItem (0 , scriptContext->GetLibrary ()->GetIntlPluralRulesOtherString (), PropertyOperation_None);
3035+ }
30303036
30313037 return ret;
30323038#else
0 commit comments