From cca4eb835819906acb5724faff098451b3257000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bargull?= Date: Thu, 4 Jun 2020 11:24:02 +0000 Subject: [PATCH] Bug 1642962: Add toStringTag to Intl prototypes referring to the constructor name. r=jwalden Implement the changes from . Differential Revision: https://phabricator.services.mozilla.com/D78035 --- js/src/builtin/intl/Collator.cpp | 2 +- js/src/builtin/intl/DateTimeFormat.cpp | 3 ++- js/src/builtin/intl/NumberFormat.cpp | 3 ++- js/src/builtin/intl/PluralRules.cpp | 6 +++++- js/src/tests/jstests.list | 11 +++++++++++ js/src/tests/non262/Intl/Collator/toStringTag.js | 6 +++--- .../tests/non262/Intl/DateTimeFormat/toStringTag.js | 6 +++--- js/src/tests/non262/Intl/NumberFormat/toStringTag.js | 6 +++--- 8 files changed, 30 insertions(+), 13 deletions(-) diff --git a/js/src/builtin/intl/Collator.cpp b/js/src/builtin/intl/Collator.cpp index 012dbe5ea555e..4181c93f83f68 100644 --- a/js/src/builtin/intl/Collator.cpp +++ b/js/src/builtin/intl/Collator.cpp @@ -84,7 +84,7 @@ static const JSFunctionSpec collator_methods[] = { static const JSPropertySpec collator_properties[] = { JS_SELF_HOSTED_GET("compare", "$Intl_Collator_compare_get", 0), - JS_STRING_SYM_PS(toStringTag, "Object", JSPROP_READONLY), JS_PS_END}; + JS_STRING_SYM_PS(toStringTag, "Intl.Collator", JSPROP_READONLY), JS_PS_END}; static bool Collator(JSContext* cx, unsigned argc, Value* vp); diff --git a/js/src/builtin/intl/DateTimeFormat.cpp b/js/src/builtin/intl/DateTimeFormat.cpp index 34750385d3631..6bebd075f92c4 100644 --- a/js/src/builtin/intl/DateTimeFormat.cpp +++ b/js/src/builtin/intl/DateTimeFormat.cpp @@ -96,7 +96,8 @@ static const JSFunctionSpec dateTimeFormat_methods[] = { static const JSPropertySpec dateTimeFormat_properties[] = { JS_SELF_HOSTED_GET("format", "$Intl_DateTimeFormat_format_get", 0), - JS_STRING_SYM_PS(toStringTag, "Object", JSPROP_READONLY), JS_PS_END}; + JS_STRING_SYM_PS(toStringTag, "Intl.DateTimeFormat", JSPROP_READONLY), + JS_PS_END}; static bool DateTimeFormat(JSContext* cx, unsigned argc, Value* vp); diff --git a/js/src/builtin/intl/NumberFormat.cpp b/js/src/builtin/intl/NumberFormat.cpp index 19e6eab872e04..000f6e2bb1c8f 100644 --- a/js/src/builtin/intl/NumberFormat.cpp +++ b/js/src/builtin/intl/NumberFormat.cpp @@ -108,7 +108,8 @@ static const JSFunctionSpec numberFormat_methods[] = { static const JSPropertySpec numberFormat_properties[] = { JS_SELF_HOSTED_GET("format", "$Intl_NumberFormat_format_get", 0), - JS_STRING_SYM_PS(toStringTag, "Object", JSPROP_READONLY), JS_PS_END}; + JS_STRING_SYM_PS(toStringTag, "Intl.NumberFormat", JSPROP_READONLY), + JS_PS_END}; static bool NumberFormat(JSContext* cx, unsigned argc, Value* vp); diff --git a/js/src/builtin/intl/PluralRules.cpp b/js/src/builtin/intl/PluralRules.cpp index a0bcf5b6fc75f..7f8a4186aae48 100644 --- a/js/src/builtin/intl/PluralRules.cpp +++ b/js/src/builtin/intl/PluralRules.cpp @@ -78,6 +78,10 @@ static const JSFunctionSpec pluralRules_methods[] = { JS_SELF_HOSTED_FN("select", "Intl_PluralRules_select", 1, 0), JS_FN(js_toSource_str, pluralRules_toSource, 0, 0), JS_FS_END}; +static const JSPropertySpec pluralRules_properties[] = { + JS_STRING_SYM_PS(toStringTag, "Intl.PluralRules", JSPROP_READONLY), + JS_PS_END}; + static bool PluralRules(JSContext* cx, unsigned argc, Value* vp); const ClassSpec PluralRulesObject::classSpec_ = { @@ -86,7 +90,7 @@ const ClassSpec PluralRulesObject::classSpec_ = { pluralRules_static_methods, nullptr, pluralRules_methods, - nullptr, + pluralRules_properties, nullptr, ClassSpec::DontDefineConstructor}; diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list index 5bf929662f16d..cb1fd9d110720 100644 --- a/js/src/tests/jstests.list +++ b/js/src/tests/jstests.list @@ -715,6 +715,17 @@ skip script test262/built-ins/Promise/all/invoke-resolve-get-error-close.js skip script test262/built-ins/Promise/race/invoke-resolve-get-error-close.js skip script test262/built-ins/Promise/allSettled/invoke-resolve-get-error-close.js +# Not yet updated for . +skip script test262/intl402/Collator/instance-class.js +skip script test262/intl402/Collator/prototype/builtin.js +skip script test262/intl402/PluralRules/prototype/builtins.js +skip script test262/intl402/NumberFormat/instance-class.js +skip script test262/intl402/NumberFormat/prototype/builtin.js +skip script test262/intl402/NumberFormat/prototype/toStringTag/configurable.js +skip script test262/intl402/NumberFormat/prototype/toStringTag/prop-desc.js +skip script test262/intl402/DateTimeFormat/instance-class.js +skip script test262/intl402/DateTimeFormat/prototype/builtin.js + ############################################## # Enable Iterator Helpers tests in the shell # diff --git a/js/src/tests/non262/Intl/Collator/toStringTag.js b/js/src/tests/non262/Intl/Collator/toStringTag.js index 45e0585b341c3..e092418df954c 100644 --- a/js/src/tests/non262/Intl/Collator/toStringTag.js +++ b/js/src/tests/non262/Intl/Collator/toStringTag.js @@ -7,13 +7,13 @@ var desc = Object.getOwnPropertyDescriptor(Intl.Collator.prototype, Symbol.toStringTag); assertEq(desc !== undefined, true); -assertEq(desc.value, "Object"); +assertEq(desc.value, "Intl.Collator"); assertEq(desc.writable, false); assertEq(desc.enumerable, false); assertEq(desc.configurable, true); -assertEq(Object.prototype.toString.call(Intl.Collator.prototype), "[object Object]"); -assertEq(Object.prototype.toString.call(new Intl.Collator), "[object Object]"); +assertEq(Object.prototype.toString.call(Intl.Collator.prototype), "[object Intl.Collator]"); +assertEq(Object.prototype.toString.call(new Intl.Collator), "[object Intl.Collator]"); Object.defineProperty(Intl.Collator.prototype, Symbol.toStringTag, {value: "Collator"}); diff --git a/js/src/tests/non262/Intl/DateTimeFormat/toStringTag.js b/js/src/tests/non262/Intl/DateTimeFormat/toStringTag.js index aac07d3b5ca68..136632f71fa0f 100644 --- a/js/src/tests/non262/Intl/DateTimeFormat/toStringTag.js +++ b/js/src/tests/non262/Intl/DateTimeFormat/toStringTag.js @@ -7,13 +7,13 @@ var desc = Object.getOwnPropertyDescriptor(Intl.DateTimeFormat.prototype, Symbol.toStringTag); assertEq(desc !== undefined, true); -assertEq(desc.value, "Object"); +assertEq(desc.value, "Intl.DateTimeFormat"); assertEq(desc.writable, false); assertEq(desc.enumerable, false); assertEq(desc.configurable, true); -assertEq(Object.prototype.toString.call(Intl.DateTimeFormat.prototype), "[object Object]"); -assertEq(Object.prototype.toString.call(new Intl.DateTimeFormat), "[object Object]"); +assertEq(Object.prototype.toString.call(Intl.DateTimeFormat.prototype), "[object Intl.DateTimeFormat]"); +assertEq(Object.prototype.toString.call(new Intl.DateTimeFormat), "[object Intl.DateTimeFormat]"); Object.defineProperty(Intl.DateTimeFormat.prototype, Symbol.toStringTag, {value: "DateTimeFormat"}); diff --git a/js/src/tests/non262/Intl/NumberFormat/toStringTag.js b/js/src/tests/non262/Intl/NumberFormat/toStringTag.js index 9a39f2b3c5b6a..9ad0901a0b368 100644 --- a/js/src/tests/non262/Intl/NumberFormat/toStringTag.js +++ b/js/src/tests/non262/Intl/NumberFormat/toStringTag.js @@ -7,13 +7,13 @@ var desc = Object.getOwnPropertyDescriptor(Intl.NumberFormat.prototype, Symbol.toStringTag); assertEq(desc !== undefined, true); -assertEq(desc.value, "Object"); +assertEq(desc.value, "Intl.NumberFormat"); assertEq(desc.writable, false); assertEq(desc.enumerable, false); assertEq(desc.configurable, true); -assertEq(Object.prototype.toString.call(Intl.NumberFormat.prototype), "[object Object]"); -assertEq(Object.prototype.toString.call(new Intl.NumberFormat), "[object Object]"); +assertEq(Object.prototype.toString.call(Intl.NumberFormat.prototype), "[object Intl.NumberFormat]"); +assertEq(Object.prototype.toString.call(new Intl.NumberFormat), "[object Intl.NumberFormat]"); Object.defineProperty(Intl.NumberFormat.prototype, Symbol.toStringTag, {value: "NumberFormat"});