Skip to content

Commit 1512757

Browse files
committed
deps: V8: cherry-pick 3f8dc4b2e5ba
Original commit message: [intl] Remove soon-to-be removed getAllFieldPositions Needed to land ICU67.1 soon. Bug: v8:10393 Change-Id: I3c7737ca600d6ccfdc46ffaddfb318ce60bc7618 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2136489 Reviewed-by: Jakob Kummerow <[email protected]> Commit-Queue: Frank Tang <[email protected]> Cr-Commit-Position: refs/heads/master@{#67027} Refs: v8/v8@3f8dc4b Backport-PR-URL: #33376 PR-URL: #32831 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Michaël Zasso <[email protected]> Reviewed-By: Jiawen Geng <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
1 parent 3d9cf4b commit 1512757

File tree

2 files changed

+40
-39
lines changed

2 files changed

+40
-39
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636

3737
# Reset this number to 0 on major V8 upgrades.
3838
# Increment by one for each non-official patch applied to deps/v8.
39-
'v8_embedder_string': '-node.10',
39+
'v8_embedder_string': '-node.11',
4040

4141
##### V8 defaults for Node.js #####
4242

deps/v8/src/objects/js-number-format.cc

+39-38
Original file line numberDiff line numberDiff line change
@@ -1239,44 +1239,33 @@ MaybeHandle<JSNumberFormat> JSNumberFormat::New(Isolate* isolate,
12391239
}
12401240

12411241
namespace {
1242-
Maybe<icu::UnicodeString> IcuFormatNumber(
1242+
Maybe<bool> IcuFormatNumber(
12431243
Isolate* isolate,
12441244
const icu::number::LocalizedNumberFormatter& number_format,
1245-
Handle<Object> numeric_obj, icu::FieldPositionIterator* fp_iter) {
1245+
Handle<Object> numeric_obj, icu::number::FormattedNumber* formatted) {
12461246
// If it is BigInt, handle it differently.
12471247
UErrorCode status = U_ZERO_ERROR;
1248-
icu::number::FormattedNumber formatted;
12491248
if (numeric_obj->IsBigInt()) {
12501249
Handle<BigInt> big_int = Handle<BigInt>::cast(numeric_obj);
12511250
Handle<String> big_int_string;
12521251
ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, big_int_string,
12531252
BigInt::ToString(isolate, big_int),
1254-
Nothing<icu::UnicodeString>());
1255-
formatted = number_format.formatDecimal(
1253+
Nothing<bool>());
1254+
*formatted = number_format.formatDecimal(
12561255
{big_int_string->ToCString().get(), big_int_string->length()}, status);
12571256
} else {
12581257
double number = numeric_obj->IsNaN()
12591258
? std::numeric_limits<double>::quiet_NaN()
12601259
: numeric_obj->Number();
1261-
formatted = number_format.formatDouble(number, status);
1260+
*formatted = number_format.formatDouble(number, status);
12621261
}
12631262
if (U_FAILURE(status)) {
12641263
// This happen because of icu data trimming trim out "unit".
12651264
// See https://bugs.chromium.org/p/v8/issues/detail?id=8641
1266-
THROW_NEW_ERROR_RETURN_VALUE(isolate,
1267-
NewTypeError(MessageTemplate::kIcuError),
1268-
Nothing<icu::UnicodeString>());
1269-
}
1270-
if (fp_iter) {
1271-
formatted.getAllFieldPositions(*fp_iter, status);
1272-
}
1273-
icu::UnicodeString result = formatted.toString(status);
1274-
if (U_FAILURE(status)) {
1275-
THROW_NEW_ERROR_RETURN_VALUE(isolate,
1276-
NewTypeError(MessageTemplate::kIcuError),
1277-
Nothing<icu::UnicodeString>());
1265+
THROW_NEW_ERROR_RETURN_VALUE(
1266+
isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<bool>());
12781267
}
1279-
return Just(result);
1268+
return Just(true);
12801269
}
12811270

12821271
} // namespace
@@ -1287,10 +1276,16 @@ MaybeHandle<String> JSNumberFormat::FormatNumeric(
12871276
Handle<Object> numeric_obj) {
12881277
DCHECK(numeric_obj->IsNumeric());
12891278

1290-
Maybe<icu::UnicodeString> maybe_format =
1291-
IcuFormatNumber(isolate, number_format, numeric_obj, nullptr);
1279+
icu::number::FormattedNumber formatted;
1280+
Maybe<bool> maybe_format =
1281+
IcuFormatNumber(isolate, number_format, numeric_obj, &formatted);
12921282
MAYBE_RETURN(maybe_format, Handle<String>());
1293-
return Intl::ToString(isolate, maybe_format.FromJust());
1283+
UErrorCode status = U_ZERO_ERROR;
1284+
icu::UnicodeString result = formatted.toString(status);
1285+
if (U_FAILURE(status)) {
1286+
THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kIcuError), String);
1287+
}
1288+
return Intl::ToString(isolate, result);
12941289
}
12951290

12961291
namespace {
@@ -1403,12 +1398,18 @@ std::vector<NumberFormatSpan> FlattenRegionsToParts(
14031398
}
14041399

14051400
namespace {
1406-
Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
1407-
icu::FieldPositionIterator* fp_iter,
1401+
Maybe<int> ConstructParts(Isolate* isolate,
1402+
icu::number::FormattedNumber* formatted,
14081403
Handle<JSArray> result, int start_index,
14091404
Handle<Object> numeric_obj, bool style_is_unit) {
1405+
UErrorCode status = U_ZERO_ERROR;
1406+
icu::UnicodeString formatted_text = formatted->toString(status);
1407+
if (U_FAILURE(status)) {
1408+
THROW_NEW_ERROR_RETURN_VALUE(
1409+
isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<int>());
1410+
}
14101411
DCHECK(numeric_obj->IsNumeric());
1411-
int32_t length = formatted.length();
1412+
int32_t length = formatted_text.length();
14121413
int index = start_index;
14131414
if (length == 0) return Just(index);
14141415

@@ -1417,13 +1418,14 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
14171418
// other region covers some part of the formatted string. It's possible
14181419
// there's another field with exactly the same begin and end as this backdrop,
14191420
// in which case the backdrop's field_id of -1 will give it lower priority.
1420-
regions.push_back(NumberFormatSpan(-1, 0, formatted.length()));
1421+
regions.push_back(NumberFormatSpan(-1, 0, formatted_text.length()));
14211422

14221423
{
1423-
icu::FieldPosition fp;
1424-
while (fp_iter->next(fp)) {
1425-
regions.push_back(NumberFormatSpan(fp.getField(), fp.getBeginIndex(),
1426-
fp.getEndIndex()));
1424+
icu::ConstrainedFieldPosition cfp;
1425+
cfp.constrainCategory(UFIELD_CATEGORY_NUMBER);
1426+
while (formatted->nextPosition(cfp, status)) {
1427+
regions.push_back(
1428+
NumberFormatSpan(cfp.getField(), cfp.getStart(), cfp.getLimit()));
14271429
}
14281430
}
14291431

@@ -1445,7 +1447,7 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
14451447
Handle<String> substring;
14461448
ASSIGN_RETURN_ON_EXCEPTION_VALUE(
14471449
isolate, substring,
1448-
Intl::ToString(isolate, formatted, part.begin_pos, part.end_pos),
1450+
Intl::ToString(isolate, formatted_text, part.begin_pos, part.end_pos),
14491451
Nothing<int>());
14501452
Intl::AddElement(isolate, result, index, field_type_string, substring);
14511453
++index;
@@ -1465,20 +1467,19 @@ MaybeHandle<JSArray> JSNumberFormat::FormatToParts(
14651467
number_format->icu_number_formatter().raw();
14661468
CHECK_NOT_NULL(fmt);
14671469

1468-
icu::FieldPositionIterator fp_iter;
1469-
Maybe<icu::UnicodeString> maybe_format =
1470-
IcuFormatNumber(isolate, *fmt, numeric_obj, &fp_iter);
1470+
icu::number::FormattedNumber formatted;
1471+
Maybe<bool> maybe_format =
1472+
IcuFormatNumber(isolate, *fmt, numeric_obj, &formatted);
14711473
MAYBE_RETURN(maybe_format, Handle<JSArray>());
1472-
14731474
UErrorCode status = U_ZERO_ERROR;
1475+
14741476
bool style_is_unit =
14751477
Style::UNIT == StyleFromSkeleton(fmt->toSkeleton(status));
14761478
CHECK(U_SUCCESS(status));
14771479

14781480
Handle<JSArray> result = factory->NewJSArray(0);
1479-
Maybe<int> maybe_format_to_parts =
1480-
ConstructParts(isolate, maybe_format.FromJust(), &fp_iter, result, 0,
1481-
numeric_obj, style_is_unit);
1481+
Maybe<int> maybe_format_to_parts = ConstructParts(
1482+
isolate, &formatted, result, 0, numeric_obj, style_is_unit);
14821483
MAYBE_RETURN(maybe_format_to_parts, Handle<JSArray>());
14831484

14841485
return result;

0 commit comments

Comments
 (0)