Commit 5d988ea3 authored by Frank Tang's avatar Frank Tang Committed by Commit Bot

Use better error messages for dateStyle/timeStyle

Bug: v8:10880
Change-Id: I7a9ba96e4b0c83565c4749101082c661e21d5ef1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2400598Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Reviewed-by: 's avatarFrank Tang <ftang@chromium.org>
Commit-Queue: Frank Tang <ftang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69844}
parent 4e47accc
...@@ -315,6 +315,7 @@ namespace internal { ...@@ -315,6 +315,7 @@ namespace internal {
T(BigIntDivZero, "Division by zero") \ T(BigIntDivZero, "Division by zero") \
T(BigIntNegativeExponent, "Exponent must be positive") \ T(BigIntNegativeExponent, "Exponent must be positive") \
T(BigIntTooBig, "Maximum BigInt size exceeded") \ T(BigIntTooBig, "Maximum BigInt size exceeded") \
T(CantSetOptionXWhenYIsUsed, "Can't set option % when % is used") \
T(DateRange, "Provided date is not in valid range.") \ T(DateRange, "Provided date is not in valid range.") \
T(ExpectedLocation, \ T(ExpectedLocation, \
"Expected letters optionally connected with underscores or hyphens for " \ "Expected letters optionally connected with underscores or hyphens for " \
......
...@@ -1744,14 +1744,33 @@ MaybeHandle<JSDateTimeFormat> JSDateTimeFormat::New( ...@@ -1744,14 +1744,33 @@ MaybeHandle<JSDateTimeFormat> JSDateTimeFormat::New(
// iii. If p is not undefined, then // iii. If p is not undefined, then
// 1. Throw a TypeError exception. // 1. Throw a TypeError exception.
if (skeleton.length() > 0) { if (skeleton.length() > 0) {
THROW_NEW_ERROR(isolate, std::string prop;
NewTypeError(MessageTemplate::kInvalid, for (const auto& item : GetPatternItems()) {
factory->NewStringFromStaticChars("option"), for (const auto& pair : item.pairs) {
if (skeleton.find(pair.pattern) != std::string::npos) {
prop.assign(item.property);
break;
}
}
if (!prop.empty()) {
break;
}
}
if (prop.empty() && skeleton.find("S") != std::string::npos) {
prop.assign("fractionalSecondDigits");
}
if (!prop.empty()) {
THROW_NEW_ERROR(
isolate,
NewTypeError(MessageTemplate::kCantSetOptionXWhenYIsUsed,
factory->NewStringFromAsciiChecked(prop.c_str()),
date_style != DateTimeStyle::kUndefined date_style != DateTimeStyle::kUndefined
? factory->dateStyle_string() ? factory->dateStyle_string()
: factory->timeStyle_string()), : factory->timeStyle_string()),
JSDateTimeFormat); JSDateTimeFormat);
} }
UNREACHABLE();
}
// b. Let pattern be DateTimeStylePattern(dateStyle, timeStyle, // b. Let pattern be DateTimeStylePattern(dateStyle, timeStyle,
// dataLocaleData, hc). // dataLocaleData, hc).
isolate->CountUsage( isolate->CountUsage(
......
...@@ -84,7 +84,7 @@ bytecodes: [ ...@@ -84,7 +84,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 53 S> */ B(Wide), B(LdaSmi), I16(266), /* 53 S> */ B(Wide), B(LdaSmi), I16(267),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
...@@ -115,7 +115,7 @@ bytecodes: [ ...@@ -115,7 +115,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 46 S> */ B(Wide), B(LdaSmi), I16(265), /* 46 S> */ B(Wide), B(LdaSmi), I16(266),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
...@@ -146,7 +146,7 @@ bytecodes: [ ...@@ -146,7 +146,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 48 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 53 S> */ B(Wide), B(LdaSmi), I16(266), /* 53 S> */ B(Wide), B(LdaSmi), I16(267),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
...@@ -177,7 +177,7 @@ bytecodes: [ ...@@ -177,7 +177,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 41 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 46 S> */ B(Wide), B(LdaSmi), I16(265), /* 46 S> */ B(Wide), B(LdaSmi), I16(266),
B(Star), R(4), B(Star), R(4),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(5), B(Star), R(5),
......
...@@ -57,7 +57,7 @@ bytecodes: [ ...@@ -57,7 +57,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 49 S> */ B(Wide), B(LdaSmi), I16(264), /* 49 S> */ B(Wide), B(LdaSmi), I16(265),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
...@@ -89,7 +89,7 @@ bytecodes: [ ...@@ -89,7 +89,7 @@ bytecodes: [
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(Mov), R(context), R(2), B(Mov), R(context), R(2),
/* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3), /* 44 E> */ B(CallRuntime), U16(Runtime::kAddPrivateBrand), R(0), U8(3),
/* 49 S> */ B(Wide), B(LdaSmi), I16(264), /* 49 S> */ B(Wide), B(LdaSmi), I16(265),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
......
...@@ -25,7 +25,7 @@ bytecodes: [ ...@@ -25,7 +25,7 @@ bytecodes: [
B(TestReferenceEqual), R(this), B(TestReferenceEqual), R(this),
B(Mov), R(this), R(1), B(Mov), R(this), R(1),
B(JumpIfTrue), U8(18), B(JumpIfTrue), U8(18),
B(Wide), B(LdaSmi), I16(262), B(Wide), B(LdaSmi), I16(263),
B(Star), R(2), B(Star), R(2),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(3), B(Star), R(3),
...@@ -56,7 +56,7 @@ frame size: 2 ...@@ -56,7 +56,7 @@ frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 56 S> */ B(Wide), B(LdaSmi), I16(264), /* 56 S> */ B(Wide), B(LdaSmi), I16(265),
B(Star), R(0), B(Star), R(0),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star), R(1),
...@@ -83,7 +83,7 @@ frame size: 2 ...@@ -83,7 +83,7 @@ frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 56 S> */ B(Wide), B(LdaSmi), I16(264), /* 56 S> */ B(Wide), B(LdaSmi), I16(265),
B(Star), R(0), B(Star), R(0),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star), R(1),
...@@ -122,7 +122,7 @@ bytecodes: [ ...@@ -122,7 +122,7 @@ bytecodes: [
/* 94 E> */ B(TestReferenceEqual), R(this), /* 94 E> */ B(TestReferenceEqual), R(this),
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(JumpIfTrue), U8(18), B(JumpIfTrue), U8(18),
B(Wide), B(LdaSmi), I16(262), B(Wide), B(LdaSmi), I16(263),
B(Star), R(2), B(Star), R(2),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(3), B(Star), R(3),
...@@ -144,7 +144,7 @@ bytecodes: [ ...@@ -144,7 +144,7 @@ bytecodes: [
/* 109 E> */ B(TestReferenceEqual), R(this), /* 109 E> */ B(TestReferenceEqual), R(this),
B(Mov), R(this), R(1), B(Mov), R(this), R(1),
B(JumpIfTrue), U8(18), B(JumpIfTrue), U8(18),
B(Wide), B(LdaSmi), I16(263), B(Wide), B(LdaSmi), I16(264),
B(Star), R(3), B(Star), R(3),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(4), B(Star), R(4),
...@@ -159,7 +159,7 @@ bytecodes: [ ...@@ -159,7 +159,7 @@ bytecodes: [
/* 133 E> */ B(TestReferenceEqual), R(this), /* 133 E> */ B(TestReferenceEqual), R(this),
B(Mov), R(this), R(0), B(Mov), R(this), R(0),
B(JumpIfTrue), U8(18), B(JumpIfTrue), U8(18),
B(Wide), B(LdaSmi), I16(262), B(Wide), B(LdaSmi), I16(263),
B(Star), R(2), B(Star), R(2),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(3), B(Star), R(3),
...@@ -189,7 +189,7 @@ frame size: 2 ...@@ -189,7 +189,7 @@ frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 60 S> */ B(Wide), B(LdaSmi), I16(266), /* 60 S> */ B(Wide), B(LdaSmi), I16(267),
B(Star), R(0), B(Star), R(0),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star), R(1),
...@@ -215,7 +215,7 @@ frame size: 2 ...@@ -215,7 +215,7 @@ frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 53 S> */ B(Wide), B(LdaSmi), I16(265), /* 53 S> */ B(Wide), B(LdaSmi), I16(266),
B(Star), R(0), B(Star), R(0),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star), R(1),
...@@ -241,7 +241,7 @@ frame size: 2 ...@@ -241,7 +241,7 @@ frame size: 2
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 60 S> */ B(Wide), B(LdaSmi), I16(266), /* 60 S> */ B(Wide), B(LdaSmi), I16(267),
B(Star), R(0), B(Star), R(0),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(1), B(Star), R(1),
...@@ -267,7 +267,7 @@ frame size: 3 ...@@ -267,7 +267,7 @@ frame size: 3
parameter count: 1 parameter count: 1
bytecode array length: 16 bytecode array length: 16
bytecodes: [ bytecodes: [
/* 46 S> */ B(Wide), B(LdaSmi), I16(265), /* 46 S> */ B(Wide), B(LdaSmi), I16(266),
B(Star), R(1), B(Star), R(1),
B(LdaConstant), U8(0), B(LdaConstant), U8(0),
B(Star), R(2), B(Star), R(2),
......
...@@ -44,10 +44,10 @@ assertThrows( ...@@ -44,10 +44,10 @@ assertThrows(
() => (new Intl.DateTimeFormat( () => (new Intl.DateTimeFormat(
"en", {timeStyle: "short", fractionalSecondDigits: 3})), "en", {timeStyle: "short", fractionalSecondDigits: 3})),
TypeError, TypeError,
"Invalid option : timeStyle"); "Can't set option fractionalSecondDigits when timeStyle is used");
assertThrows( assertThrows(
() => (new Intl.DateTimeFormat( () => (new Intl.DateTimeFormat(
"en", {dateStyle: "short", fractionalSecondDigits: 3})), "en", {dateStyle: "short", fractionalSecondDigits: 3})),
TypeError, TypeError,
"Invalid option : dateStyle"); "Can't set option fractionalSecondDigits when dateStyle is used");
...@@ -14,6 +14,7 @@ let opt = { ...@@ -14,6 +14,7 @@ let opt = {
day: '2-digit', day: '2-digit',
hour: '2-digit', hour: '2-digit',
minute: '2-digit', minute: '2-digit',
fractionalSecondDigits: 2,
}; };
let keys = Object.keys(opt); let keys = Object.keys(opt);
...@@ -25,10 +26,10 @@ testTimeStyle.timeStyle = 'long'; ...@@ -25,10 +26,10 @@ testTimeStyle.timeStyle = 'long';
for (key of keys) { for (key of keys) {
assertThrows( assertThrows(
() => new Intl.DateTimeFormat('en', testDateStyle), () => new Intl.DateTimeFormat('en', testDateStyle),
TypeError, "Invalid option : dateStyle"); TypeError, "Can't set option " + key + " when dateStyle is used");
assertThrows( assertThrows(
() => new Intl.DateTimeFormat('en', testTimeStyle), () => new Intl.DateTimeFormat('en', testTimeStyle),
TypeError, "Invalid option : timeStyle"); TypeError, "Can't set option " + key + " when timeStyle is used");
testDateStyle[key] = undefined; testDateStyle[key] = undefined;
testTimeStyle[key] = undefined; testTimeStyle[key] = undefined;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment