From 8ef8bb9efc01a10279640c3f40ab8ef9a919b502 Mon Sep 17 00:00:00 2001 From: Zibi Braniecki <gandalf@mozilla.com> Date: Tue, 13 Sep 2016 20:49:21 -0700 Subject: [PATCH] Bug 1289340 - Expose Intl.DateTimeFormat.prototype.formatToParts. r=waldo MozReview-Commit-ID: Ii7TqMDRzu4 --- js/src/builtin/Intl.cpp | 18 +------------- js/src/jsapi.h | 19 --------------- js/src/shell/js.cpp | 5 ---- .../Intl/DateTimeFormat/formatToParts.js | 24 +++++++------------ js/src/vm/CommonPropertyNames.h | 1 - js/xpconnect/src/nsXPConnect.cpp | 6 ----- 6 files changed, 10 insertions(+), 63 deletions(-) diff --git a/js/src/builtin/Intl.cpp b/js/src/builtin/Intl.cpp index 146752d742554..38326c1b2c030 100644 --- a/js/src/builtin/Intl.cpp +++ b/js/src/builtin/Intl.cpp @@ -1674,6 +1674,7 @@ static const JSFunctionSpec dateTimeFormat_static_methods[] = { static const JSFunctionSpec dateTimeFormat_methods[] = { JS_SELF_HOSTED_FN("resolvedOptions", "Intl_DateTimeFormat_resolvedOptions", 0, 0), + JS_SELF_HOSTED_FN("formatToParts", "Intl_DateTimeFormat_formatToParts", 0, 0), #if JS_HAS_TOSOURCE JS_FN(js_toSource_str, dateTimeFormat_toSource, 0, 0), #endif @@ -1811,23 +1812,6 @@ CreateDateTimeFormatPrototype(JSContext* cx, HandleObject Intl, Handle<GlobalObj return nullptr; } - // If the still-experimental DateTimeFormat.prototype.formatToParts method - // is enabled, also add it. - if (cx->compartment()->creationOptions().experimentalDateTimeFormatFormatToPartsEnabled()) { - RootedValue ftp(cx); - HandlePropertyName name = cx->names().formatToParts; - if (!GlobalObject::getSelfHostedFunction(cx, cx->global(), - cx->names().DateTimeFormatFormatToParts, - name, - 0, &ftp)) - { - return nullptr; - } - - if (!DefineProperty(cx, proto, cx->names().formatToParts, ftp, nullptr, nullptr, 0)) - return nullptr; - } - RootedValue options(cx); if (!CreateDefaultOptions(cx, &options)) return nullptr; diff --git a/js/src/jsapi.h b/js/src/jsapi.h index c59b1dd83f196..2714dc2a028c9 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -2145,7 +2145,6 @@ class JS_PUBLIC_API(CompartmentCreationOptions) mergeable_(false), preserveJitCode_(false), cloneSingletons_(false), - experimentalDateTimeFormatFormatToPartsEnabled_(false), sharedMemoryAndAtomics_(false), secureContext_(false) { @@ -2210,23 +2209,6 @@ class JS_PUBLIC_API(CompartmentCreationOptions) return *this; } - // ECMA-402 is considering adding a "formatToParts" DateTimeFormat method, - // that exposes not just a formatted string but its ordered subcomponents. - // The method, its semantics, and its name are all well short of being - // finalized, so for now it's exposed *only* if requested. - // - // Until "formatToParts" is included in a final specification edition, it's - // subject to change or removal at any time. Do *not* rely on it in - // mission-critical code that can't be changed if ECMA-402 decides not to - // accept the method in its current form. - bool experimentalDateTimeFormatFormatToPartsEnabled() const { - return experimentalDateTimeFormatFormatToPartsEnabled_; - } - CompartmentCreationOptions& setExperimentalDateTimeFormatFormatToPartsEnabled(bool flag) { - experimentalDateTimeFormatFormatToPartsEnabled_ = flag; - return *this; - } - bool getSharedMemoryAndAtomicsEnabled() const; CompartmentCreationOptions& setSharedMemoryAndAtomicsEnabled(bool flag); @@ -2251,7 +2233,6 @@ class JS_PUBLIC_API(CompartmentCreationOptions) bool mergeable_; bool preserveJitCode_; bool cloneSingletons_; - bool experimentalDateTimeFormatFormatToPartsEnabled_; bool sharedMemoryAndAtomics_; bool secureContext_; }; diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 605e3140856d4..23454e4346092 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -4460,11 +4460,6 @@ NewGlobal(JSContext* cx, unsigned argc, Value* vp) if (v.isBoolean()) creationOptions.setCloneSingletons(v.toBoolean()); - if (!JS_GetProperty(cx, opts, "experimentalDateTimeFormatFormatToPartsEnabled", &v)) - return false; - if (v.isBoolean()) - creationOptions.setExperimentalDateTimeFormatFormatToPartsEnabled(v.toBoolean()); - if (!JS_GetProperty(cx, opts, "sameZoneAs", &v)) return false; if (v.isObject()) diff --git a/js/src/tests/Intl/DateTimeFormat/formatToParts.js b/js/src/tests/Intl/DateTimeFormat/formatToParts.js index 9a6d9624f3deb..95831e67a3ec0 100644 --- a/js/src/tests/Intl/DateTimeFormat/formatToParts.js +++ b/js/src/tests/Intl/DateTimeFormat/formatToParts.js @@ -1,4 +1,4 @@ -// |reftest| skip-if(!this.hasOwnProperty("Intl")||!this.newGlobal||!newGlobal({experimentalDateTimeFormatFormatToPartsEnabled:true}).Intl.DateTimeFormat().formatToParts) +// |reftest| skip-if(!this.hasOwnProperty("Intl")) // Any copyright is dedicated to the Public Domain. // http://creativecommons.org/licenses/publicdomain/ @@ -47,14 +47,8 @@ function composeDate(parts) { var format; var date = Date.UTC(2012, 11, 17, 3, 0, 42); -// The experimental formatToParts method is only exposed if specifically -// requested. Perform all tests using DateTimeFormat instances from a global -// object with this method enabled. -var DateTimeFormat = - newGlobal({experimentalDateTimeFormatFormatToPartsEnabled:true}).Intl.DateTimeFormat; - // Locale en-US; default options. -format = new DateTimeFormat("en-us", {timeZone: "UTC"}); +format = new Intl.DateTimeFormat("en-us", {timeZone: "UTC"}); assertEq(deepEqual(format.formatToParts(date), [ { type: 'month', value: '12' }, { type: 'literal', value: '/' }, @@ -64,7 +58,7 @@ assertEq(deepEqual(format.formatToParts(date), [ ]), true); // Just date -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { year: 'numeric', month: 'numeric', day: 'numeric', @@ -79,7 +73,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Just time in hour24 -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { hour: 'numeric', minute: 'numeric', second: 'numeric', @@ -95,7 +89,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Just time in hour12 -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { hour: 'numeric', minute: 'numeric', second: 'numeric', @@ -113,7 +107,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Just month. -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { month: "narrow", timeZone: "UTC"}); assertEq(deepEqual(format.formatToParts(date), [ @@ -122,7 +116,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Just weekday. -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { weekday: "narrow", timeZone: "UTC"}); assertEq(deepEqual(format.formatToParts(date), [ @@ -131,7 +125,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Year and era. -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { year: "numeric", era: "short", timeZone: "UTC"}); @@ -143,7 +137,7 @@ assertEq(deepEqual(format.formatToParts(date), [ assertEq(composeDate(format.formatToParts(date)), format.format(date)); // Time and date -format = new DateTimeFormat("en-us", { +format = new Intl.DateTimeFormat("en-us", { weekday: 'long', year: 'numeric', month: 'numeric', diff --git a/js/src/vm/CommonPropertyNames.h b/js/src/vm/CommonPropertyNames.h index 6a29e7869d3a9..47f880183de66 100644 --- a/js/src/vm/CommonPropertyNames.h +++ b/js/src/vm/CommonPropertyNames.h @@ -115,7 +115,6 @@ macro(forceInterpreter, forceInterpreter, "forceInterpreter") \ macro(forEach, forEach, "forEach") \ macro(format, format, "format") \ - macro(formatToParts, formatToParts, "formatToParts") \ macro(frame, frame, "frame") \ macro(from, from, "from") \ macro(fulfilled, fulfilled, "fulfilled") \ diff --git a/js/xpconnect/src/nsXPConnect.cpp b/js/xpconnect/src/nsXPConnect.cpp index a389510c68efc..b82b37d2ab2fe 100644 --- a/js/xpconnect/src/nsXPConnect.cpp +++ b/js/xpconnect/src/nsXPConnect.cpp @@ -439,12 +439,6 @@ InitGlobalObjectOptions(JS::CompartmentOptions& aOptions, if (isSystem) { // Make sure [SecureContext] APIs are visible: aOptions.creationOptions().setSecureContext(true); - -#if 0 // TODO: Reenable in Bug 1288653 - // Enable the ECMA-402 experimental formatToParts in any chrome page - aOptions.creationOptions() - .setExperimentalDateTimeFormatFormatToPartsEnabled(true); -#endif } if (shouldDiscardSystemSource) { -- GitLab