Skip to content

Commit b50333e

Browse files
ryzokukenBethGriggs
authored andcommitted
deps: V8: backport 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 <jkummerow@chromium.org> Commit-Queue: Frank Tang <ftang@chromium.org> Cr-Commit-Position: refs/heads/master@{#67027} Refs: v8/v8@3f8dc4b PR-URL: #32993 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Matheus Marchini <mat@mmarchini.me> Reviewed-By: Steven R Loomis <srloomis@us.ibm.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com>
1 parent 1af08e1 commit b50333e

File tree

2 files changed

+38
-36
lines changed

2 files changed

+38
-36
lines changed

common.gypi

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
# Reset this number to 0 on major V8 upgrades.
3737
# Increment by one for each non-official patch applied to deps/v8.
38-
'v8_embedder_string': '-node.31',
38+
'v8_embedder_string': '-node.32',
3939

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

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

+37-35
Original file line numberDiff line numberDiff line change
@@ -1197,42 +1197,31 @@ MaybeHandle<JSNumberFormat> JSNumberFormat::New(Isolate* isolate,
11971197
}
11981198

11991199
namespace {
1200-
Maybe<icu::UnicodeString> IcuFormatNumber(
1200+
Maybe<bool> IcuFormatNumber(
12011201
Isolate* isolate,
12021202
const icu::number::LocalizedNumberFormatter& number_format,
1203-
Handle<Object> numeric_obj, icu::FieldPositionIterator* fp_iter) {
1203+
Handle<Object> numeric_obj, icu::number::FormattedNumber* formatted) {
12041204
// If it is BigInt, handle it differently.
12051205
UErrorCode status = U_ZERO_ERROR;
1206-
icu::number::FormattedNumber formatted;
12071206
if (numeric_obj->IsBigInt()) {
12081207
Handle<BigInt> big_int = Handle<BigInt>::cast(numeric_obj);
12091208
Handle<String> big_int_string;
12101209
ASSIGN_RETURN_ON_EXCEPTION_VALUE(isolate, big_int_string,
12111210
BigInt::ToString(isolate, big_int),
1212-
Nothing<icu::UnicodeString>());
1213-
formatted = number_format.formatDecimal(
1211+
Nothing<bool>());
1212+
*formatted = number_format.formatDecimal(
12141213
{big_int_string->ToCString().get(), big_int_string->length()}, status);
12151214
} else {
12161215
double number = numeric_obj->Number();
1217-
formatted = number_format.formatDouble(number, status);
1216+
*formatted = number_format.formatDouble(number, status);
12181217
}
12191218
if (U_FAILURE(status)) {
12201219
// This happen because of icu data trimming trim out "unit".
12211220
// See https://bugs.chromium.org/p/v8/issues/detail?id=8641
1222-
THROW_NEW_ERROR_RETURN_VALUE(isolate,
1223-
NewTypeError(MessageTemplate::kIcuError),
1224-
Nothing<icu::UnicodeString>());
1225-
}
1226-
if (fp_iter) {
1227-
formatted.getAllFieldPositions(*fp_iter, status);
1221+
THROW_NEW_ERROR_RETURN_VALUE(
1222+
isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<bool>());
12281223
}
1229-
icu::UnicodeString result = formatted.toString(status);
1230-
if (U_FAILURE(status)) {
1231-
THROW_NEW_ERROR_RETURN_VALUE(isolate,
1232-
NewTypeError(MessageTemplate::kIcuError),
1233-
Nothing<icu::UnicodeString>());
1234-
}
1235-
return Just(result);
1224+
return Just(true);
12361225
}
12371226

12381227
} // namespace
@@ -1243,10 +1232,16 @@ MaybeHandle<String> JSNumberFormat::FormatNumeric(
12431232
Handle<Object> numeric_obj) {
12441233
DCHECK(numeric_obj->IsNumeric());
12451234

1246-
Maybe<icu::UnicodeString> maybe_format =
1247-
IcuFormatNumber(isolate, number_format, numeric_obj, nullptr);
1235+
icu::number::FormattedNumber formatted;
1236+
Maybe<bool> maybe_format =
1237+
IcuFormatNumber(isolate, number_format, numeric_obj, &formatted);
12481238
MAYBE_RETURN(maybe_format, Handle<String>());
1249-
return Intl::ToString(isolate, maybe_format.FromJust());
1239+
UErrorCode status = U_ZERO_ERROR;
1240+
icu::UnicodeString result = formatted.toString(status);
1241+
if (U_FAILURE(status)) {
1242+
THROW_NEW_ERROR(isolate, NewTypeError(MessageTemplate::kIcuError), String);
1243+
}
1244+
return Intl::ToString(isolate, result);
12501245
}
12511246

12521247
namespace {
@@ -1359,12 +1354,18 @@ std::vector<NumberFormatSpan> FlattenRegionsToParts(
13591354
}
13601355

13611356
namespace {
1362-
Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
1363-
icu::FieldPositionIterator* fp_iter,
1357+
Maybe<int> ConstructParts(Isolate* isolate,
1358+
icu::number::FormattedNumber* formatted,
13641359
Handle<JSArray> result, int start_index,
13651360
Handle<Object> numeric_obj, bool style_is_unit) {
1361+
UErrorCode status = U_ZERO_ERROR;
1362+
icu::UnicodeString formatted_text = formatted->toString(status);
1363+
if (U_FAILURE(status)) {
1364+
THROW_NEW_ERROR_RETURN_VALUE(
1365+
isolate, NewTypeError(MessageTemplate::kIcuError), Nothing<int>());
1366+
}
13661367
DCHECK(numeric_obj->IsNumeric());
1367-
int32_t length = formatted.length();
1368+
int32_t length = formatted_text.length();
13681369
int index = start_index;
13691370
if (length == 0) return Just(index);
13701371

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

13781379
{
1379-
icu::FieldPosition fp;
1380-
while (fp_iter->next(fp)) {
1381-
regions.push_back(NumberFormatSpan(fp.getField(), fp.getBeginIndex(),
1382-
fp.getEndIndex()));
1380+
icu::ConstrainedFieldPosition cfp;
1381+
cfp.constrainCategory(UFIELD_CATEGORY_NUMBER);
1382+
while (formatted->nextPosition(cfp, status)) {
1383+
regions.push_back(
1384+
NumberFormatSpan(cfp.getField(), cfp.getStart(), cfp.getLimit()));
13831385
}
13841386
}
13851387

@@ -1401,7 +1403,7 @@ Maybe<int> ConstructParts(Isolate* isolate, const icu::UnicodeString& formatted,
14011403
Handle<String> substring;
14021404
ASSIGN_RETURN_ON_EXCEPTION_VALUE(
14031405
isolate, substring,
1404-
Intl::ToString(isolate, formatted, part.begin_pos, part.end_pos),
1406+
Intl::ToString(isolate, formatted_text, part.begin_pos, part.end_pos),
14051407
Nothing<int>());
14061408
Intl::AddElement(isolate, result, index, field_type_string, substring);
14071409
++index;
@@ -1421,14 +1423,14 @@ MaybeHandle<JSArray> JSNumberFormat::FormatToParts(
14211423
number_format->icu_number_formatter().raw();
14221424
CHECK_NOT_NULL(fmt);
14231425

1424-
icu::FieldPositionIterator fp_iter;
1425-
Maybe<icu::UnicodeString> maybe_format =
1426-
IcuFormatNumber(isolate, *fmt, numeric_obj, &fp_iter);
1426+
icu::number::FormattedNumber formatted;
1427+
Maybe<bool> maybe_format =
1428+
IcuFormatNumber(isolate, *fmt, numeric_obj, &formatted);
14271429
MAYBE_RETURN(maybe_format, Handle<JSArray>());
14281430

14291431
Handle<JSArray> result = factory->NewJSArray(0);
14301432
Maybe<int> maybe_format_to_parts = ConstructParts(
1431-
isolate, maybe_format.FromJust(), &fp_iter, result, 0, numeric_obj,
1433+
isolate, &formatted, result, 0, numeric_obj,
14321434
number_format->style() == JSNumberFormat::Style::UNIT);
14331435
MAYBE_RETURN(maybe_format_to_parts, Handle<JSArray>());
14341436

0 commit comments

Comments
 (0)