Bug 818634 - Remove support for Date.prototype.toLocaleFormat. r=gandalf, r=anba

This commit is contained in:
Rofael Aleezada 2017-10-18 21:51:32 -05:00
Родитель 85a0a23d40
Коммит 626c4563b7
15 изменённых файлов: 11 добавлений и 533 удалений

Просмотреть файл

@ -73,7 +73,6 @@ const ErrorDocs = {
JSMSG_GETTER_ONLY: "Getter_only",
JSMSG_INVALID_DATE: "Invalid_date",
JSMSG_DEPRECATED_STRING_METHOD: "Deprecated_String_generics",
JSMSG_DEPRECATED_TOLOCALEFORMAT: "Deprecated_toLocaleFormat",
JSMSG_RESERVED_ID: "Reserved_identifier",
JSMSG_BAD_CONST_ASSIGN: "Invalid_const_assignment",
JSMSG_BAD_CONST_DECL: "Missing_initializer_in_const",

Просмотреть файл

@ -148,7 +148,6 @@ test("new Date()", d => justDontThrow(Date.prototype.toISOString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toLocaleString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toLocaleDateString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toLocaleTimeString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toLocaleFormat.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toTimeString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toDateString.call(d)));
test("new Date()", d => justDontThrow(Date.prototype.toSource.call(d)));

Просмотреть файл

@ -124,7 +124,6 @@ MSG_DEF(JSMSG_CANT_DECLARE_GLOBAL_BINDING, 2, JSEXN_TYPEERR, "cannot declare glo
// Date
MSG_DEF(JSMSG_INVALID_DATE, 0, JSEXN_RANGEERR, "invalid date")
MSG_DEF(JSMSG_BAD_TOISOSTRING_PROP, 0, JSEXN_TYPEERR, "toISOString property is not callable")
MSG_DEF(JSMSG_DEPRECATED_TOLOCALEFORMAT, 0, JSEXN_WARN, "Date.prototype.toLocaleFormat is deprecated; consider using Intl.DateTimeFormat instead")
// String
MSG_DEF(JSMSG_BAD_URI, 0, JSEXN_URIERR, "malformed URI sequence")

Просмотреть файл

@ -55,7 +55,6 @@ JSCompartment::JSCompartment(Zone* zone, const JS::CompartmentOptions& options =
isAtomsCompartment_(false),
isSelfHosting(false),
marked(true),
warnedAboutDateToLocaleFormat(false),
warnedAboutExprClosure(false),
warnedAboutForEach(false),
warnedAboutLegacyGenerator(false),

Просмотреть файл

@ -622,7 +622,6 @@ struct JSCompartment
public:
bool isSelfHosting;
bool marked;
bool warnedAboutDateToLocaleFormat : 1;
bool warnedAboutExprClosure : 1;
bool warnedAboutForEach : 1;
bool warnedAboutLegacyGenerator : 1;

Просмотреть файл

@ -2733,6 +2733,7 @@ FormatDate(JSContext* cx, double utcTime, FormatSpec format, MutableHandleValue
return true;
}
#if !EXPOSE_INTL_API
static bool
ToLocaleFormatHelper(JSContext* cx, HandleObject obj, const char* format, MutableHandleValue rval)
{
@ -2778,7 +2779,7 @@ ToLocaleFormatHelper(JSContext* cx, HandleObject obj, const char* format, Mutabl
return true;
}
#if !EXPOSE_INTL_API
/* ES5 15.9.5.5. */
MOZ_ALWAYS_INLINE bool
date_toLocaleString_impl(JSContext* cx, const CallArgs& args)
@ -2849,56 +2850,6 @@ date_toLocaleTimeString(JSContext* cx, unsigned argc, Value* vp)
}
#endif /* !EXPOSE_INTL_API */
MOZ_ALWAYS_INLINE bool
date_toLocaleFormat_impl(JSContext* cx, const CallArgs& args)
{
Rooted<DateObject*> dateObj(cx, &args.thisv().toObject().as<DateObject>());
#if EXPOSE_INTL_API
if (!cx->compartment()->warnedAboutDateToLocaleFormat) {
if (!JS_ReportErrorFlagsAndNumberASCII(cx, JSREPORT_WARNING, GetErrorMessage, nullptr,
JSMSG_DEPRECATED_TOLOCALEFORMAT))
{
return false;
}
cx->compartment()->warnedAboutDateToLocaleFormat = true;
}
#endif
if (args.length() == 0) {
/*
* Use '%#c' for windows, because '%c' is backward-compatible and non-y2k
* with msvc; '%#c' requests that a full year be used in the result string.
*/
static const char format[] =
#if defined(_WIN32) && !defined(__MWERKS__)
"%#c"
#else
"%c"
#endif
;
return ToLocaleFormatHelper(cx, dateObj, format, args.rval());
}
RootedString fmt(cx, ToString<CanGC>(cx, args[0]));
if (!fmt)
return false;
JSAutoByteString fmtbytes(cx, fmt);
if (!fmtbytes)
return false;
return ToLocaleFormatHelper(cx, dateObj, fmtbytes.ptr(), args.rval());
}
static bool
date_toLocaleFormat(JSContext* cx, unsigned argc, Value* vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
return CallNonGenericMethod<IsDate, date_toLocaleFormat_impl>(cx, args);
}
/* ES5 15.9.5.4. */
MOZ_ALWAYS_INLINE bool
date_toTimeString_impl(JSContext* cx, const CallArgs& args)
@ -3055,7 +3006,6 @@ static const JSFunctionSpec date_methods[] = {
JS_FN("setMilliseconds", date_setMilliseconds, 1,0),
JS_FN("setUTCMilliseconds", date_setUTCMilliseconds, 1,0),
JS_FN("toUTCString", date_toGMTString, 0,0),
JS_FN("toLocaleFormat", date_toLocaleFormat, 0,0),
#if EXPOSE_INTL_API
JS_SELF_HOSTED_FN(js_toLocaleString_str, "Date_toLocaleString", 0,0),
JS_SELF_HOSTED_FN("toLocaleDateString", "Date_toLocaleDateString", 0,0),

Просмотреть файл

@ -34,8 +34,7 @@ var ClassToMethodMap =
"sup", "sub", "substr", "trimLeft", "trimRight", "toJSON"],
Boolean: ["toSource", "toJSON"],
Number: ["toSource", "toJSON"],
Date: ["toSource", "toLocaleFormat", "getYear", "setYear",
"toGMTString"],
Date: ["toSource", "getYear", "setYear", "toGMTString"],
RegExp: ["toSource"],
Error: ["toSource"],
};

Просмотреть файл

@ -1,230 +0,0 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
//-----------------------------------------------------------------------------
var BUGNUMBER = 291494;
var summary = 'Date.prototype.toLocaleFormat extension';
var actual = '';
var expect = '';
var temp;
/*
* SpiderMonkey only.
*
* When the output of toLocaleFormat exceeds 100 bytes toLocaleFormat
* defaults to using toString to produce the result.
*/
enterFunc ('test');
printBugNumber(BUGNUMBER);
printStatus (summary);
var date = new Date("06/05/2005 00:00:00 GMT-0000");
expect = date.getTimezoneOffset() > 0 ? 'Sat' : 'Sun';
actual = date.toLocaleFormat('%a');
reportCompare(expect, actual, 'Date.toLocaleFormat("%a")');
expect = date.getTimezoneOffset() > 0 ? 'Saturday' : 'Sunday';
actual = date.toLocaleFormat('%A');
reportCompare(expect, actual, 'Date.toLocaleFormat("%A")');
expect = 'Jun';
actual = date.toLocaleFormat('%b');
reportCompare(expect, actual, 'Date.toLocaleFormat("%b")');
expect = 'June';
actual = date.toLocaleFormat('%B');
reportCompare(expect, actual, 'Date.toLocaleFormat("%B")');
expect = (date.getTimezoneOffset() > 0) ? '04' : '05';
actual = date.toLocaleFormat('%d');
reportCompare(expect, actual, 'Date.toLocaleFormat("%d")');
expect = '0';
actual = String((Number(date.toLocaleFormat('%H')) +
date.getTimezoneOffset()/60) % 24);
reportCompare(expect, actual, 'Date.toLocaleFormat(%H)');
expect = '12';
actual = String(Number(date.toLocaleFormat('%I')) +
date.getTimezoneOffset()/60);
reportCompare(expect, actual, 'Date.toLocaleFormat(%I)');
expect = String(155 + ((date.getTimezoneOffset() > 0) ? 0 : 1));
actual = date.toLocaleFormat('%j');
reportCompare(expect, actual, 'Date.toLocaleFormat("%j")');
expect = '06';
actual = date.toLocaleFormat('%m');
reportCompare(expect, actual, 'Date.toLocaleFormat("%m")');
expect = '00';
actual = date.toLocaleFormat('%M');
reportCompare(expect, actual, 'Date.toLocaleFormat("%M")');
expect = true;
temp = date.toLocaleFormat('%p');
actual = temp == 'AM' || date.toLocaleFormat('%p') == 'PM';
reportCompare(expect, actual, 'Date.toLocaleFormat("%p") is AM or PM');
expect = '00';
actual = date.toLocaleFormat('%S');
reportCompare(expect, actual, 'Date.toLocaleFormat("%S")');
expect = String(22 + ((date.getTimezoneOffset() > 0) ? 0 : 1));
actual = date.toLocaleFormat('%U');
reportCompare(expect, actual, 'Date.toLocaleFormat("%U")');
expect = String((6 + ((date.getTimezoneOffset() > 0) ? 0 : 1))%7);
actual = date.toLocaleFormat('%w');
reportCompare(expect, actual, 'Date.toLocaleFormat("%w")');
expect = '22';
actual = date.toLocaleFormat('%W');
reportCompare(expect, actual, 'Date.toLocaleFormat("%W")');
expect = '05';
actual = date.toLocaleFormat('%y');
reportCompare(expect, actual, 'Date.toLocaleFormat("%y")');
expect = '2005';
actual = date.toLocaleFormat('%Y');
reportCompare(expect, actual, 'Date.toLocaleFormat("%Y")');
expect = '%';
actual = date.toLocaleFormat('%%');
reportCompare(expect, actual, 'Date.toLocaleFormat("%%")');
expect = '1899 99';
temp='%Y %y';
actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1899189918991899189918991899189918991899189918991899189918991899189918991899189918991899';
temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxx189918991899189918991899189918991899189918991899189918991899189918991899189918991899189918991899';
temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(0, 0, 0, 13, 14, 15, 0).toString();
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxxx189918991899189918991899189918991899';
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(0, 0, 0, 13, 14, 15, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '-51 49';
temp = '%Y %y';
actual = new Date(-51, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51';
temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-51, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxx-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51-51';
temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-51, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(-51, 0).toString();
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-51, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1851 51';
temp = '%Y %y';
actual = new Date(1851, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1851185118511851185118511851185118511851185118511851185118511851185118511851185118511851';
temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(1851, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxx185118511851185118511851185118511851185118511851185118511851185118511851185118511851185118511851';
temp = 'xxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(1851, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(1851, 0).toString();
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(1851, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '-1 99';
temp = '%Y %y';
actual = new Date(-1, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '-100 00';
temp = '%Y %y';
actual = new Date(-100, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1900 00';
temp = '%Y %y';
actual = new Date(0, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1901 01';
temp = '%Y %y';
actual = new Date(1, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '1970 70';
temp = '%Y %y';
actual = new Date(1970, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(32767, 0).toString();
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(32767, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767';
temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(32767, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxxx32767327673276732767327673276732767327673276732767327673276732767327673276732767327673276732767';
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(32767, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(32767, 0).toString();
temp = 'xxxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(32767, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = '-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999';
temp = '%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-9999, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = 'xxxx-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999-9999';
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-9999, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');
expect = new Date(-9999, 0).toString();
temp = 'xxxx%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y%Y';
actual = new Date(-9999, 0).toLocaleFormat(temp);
reportCompare(expect, actual, 'Date.toLocaleFormat("'+temp+'")');

Просмотреть файл

@ -1,105 +0,0 @@
// |reftest| skip-if(xulRuntime.OS=="WINNT")
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
//-----------------------------------------------------------------------------
var BUGNUMBER = 291494;
var summary = 'Date.prototype.toLocaleFormat extension';
var actual = '';
var expect = '';
var temp;
/*
* SpiderMonkey only.
*
* This test uses format strings which are not supported cross
* platform and are expected to fail on at least some platforms
* however they all currently pass on Linux (Fedora Core 6). They are
* included here in order to increase coverage for cases where a crash
* may occur. These failures will be tracked in the
* mozilla/js/tests/public-failures.txt list.
*
*/
enterFunc ('test');
printBugNumber(BUGNUMBER);
printStatus (summary);
var date = new Date("06/05/2005 00:00:00 GMT-0000");
expect = '20';
actual = date.toLocaleFormat('%C');
reportCompare(expect, actual, 'Date.toLocaleFormat("%C")');
expect = date.toLocaleFormat('%C%y');
actual = date.toLocaleFormat('%Y');
reportCompare(expect, actual, 'Date.toLocaleFormat("%C%y") == ' +
'Date.toLocaleFormat("%Y")');
expect = date.toLocaleFormat('%m/%d/%y');
actual = date.toLocaleFormat('%D');
reportCompare(expect, actual, 'Date.toLocaleFormat("%m/%d/%y") == ' +
'Date.toLocaleFormat("%D")');
expect = (date.getTimezoneOffset() > 0) ? ' 4' : ' 5';
actual = date.toLocaleFormat('%e');
reportCompare(expect, actual, 'Date.toLocaleFormat("%e")');
expect = date.toLocaleFormat('%Y-%m-%d');
actual = date.toLocaleFormat('%F');
reportCompare(expect, actual, 'Date.toLocaleFormat("%Y-%m-%d") == ' +
'Date.toLocaleFormat("%F")');
expect = '05';
actual = date.toLocaleFormat('%g');
reportCompare(expect, actual, 'Date.toLocaleFormat("%g")');
expect = '2005';
actual = date.toLocaleFormat('%G');
reportCompare(expect, actual, 'Date.toLocaleFormat("%G")');
expect = date.toLocaleFormat('%b');
actual = date.toLocaleFormat('%h');
reportCompare(expect, actual, 'Date.toLocaleFormat("%b") == ' +
'Date.toLocaleFormat("%h")');
expect = '\n';
actual = date.toLocaleFormat('%n');
reportCompare(expect, actual, 'Date.toLocaleFormat("%n") == "\\n"');
expect = date.toLocaleFormat('%I:%M:%S %p');
actual = date.toLocaleFormat('%r');
reportCompare(expect, actual, 'Date.toLocaleFormat("%I:%M:%S %p") == ' +
'Date.toLocaleFormat("%r")');
expect = date.toLocaleFormat('%H:%M');
actual = date.toLocaleFormat('%R');
reportCompare(expect, actual, 'Date.toLocaleFormat("%H:%M") == ' +
'Date.toLocaleFormat("%R")');
expect = '\t';
actual = date.toLocaleFormat('%t');
reportCompare(expect, actual, 'Date.toLocaleFormat("%t") == "\\t"');
expect = date.toLocaleFormat('%H:%M:%S');
actual = date.toLocaleFormat('%T');
reportCompare(expect, actual, 'Date.toLocaleFormat("%H:%M:%S") == ' +
'Date.toLocaleFormat("%T")');
expect = String(6 + ((date.getTimezoneOffset() > 0) ? 0 : 1));
actual = date.toLocaleFormat('%u');
reportCompare(expect, actual, 'Date.toLocaleFormat("%u")');
expect = '22';
actual = date.toLocaleFormat('%V');
reportCompare(expect, actual, 'Date.toLocaleFormat("%V")');
print('Note: For Date.toLocaleFormat("%m/%d/%y") == Date.toLocaleFormat("%x") ' +
'to pass in Windows, the Regional Setting for the short date must be ' +
'set to mm/dd/yyyy');
expect = date.toLocaleFormat('%m/%d/%Y');
actual = date.toLocaleFormat('%x');
reportCompare(expect, actual, 'Date.toLocaleFormat("%m/%d/%Y") == ' +
'Date.toLocaleFormat("%x")');

Просмотреть файл

@ -1,18 +0,0 @@
// |reftest| skip-if(!xulRuntime.shell||this.hasOwnProperty("Intl"))
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Don't warn about Date.prototype.toLocaleFormat() when Intl isn't supported.
enableLastWarning();
new Date().toLocaleFormat("%Y");
var warning = getLastWarning();
assertEq(warning, null, "warning shouldn't be emitted for toLocaleFormat");
disableLastWarning();
if (typeof reportCompare === 'function')
reportCompare(0, 0);

Просмотреть файл

@ -1,28 +0,0 @@
// |reftest| skip-if(!xulRuntime.shell||!this.hasOwnProperty("Intl"))
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Warn once about Date.prototype.toLocaleFormat().
enableLastWarning();
new Date().toLocaleFormat("%Y");
var warning = getLastWarning();
assertEq(warning !== null, true, "warning should be emitted for toLocaleFormat");
assertEq(warning.name, "Warning");
assertEq(warning.message.indexOf("toLocaleFormat") !== -1, true,
"warning should mention toLocaleFormat");
clearLastWarning();
new Date().toLocaleFormat("%Y");
warning = getLastWarning();
assertEq(warning, null, "warning shouldn't be emitted for 2nd call to toLocaleFormat");
disableLastWarning();
if (typeof reportCompare === 'function')
reportCompare(0, 0);

Просмотреть файл

@ -322,8 +322,6 @@ PRMJ_FormatTime(char* buf, int buflen, const char* fmt, PRMJTime* prtm)
* Note that FAKE_YEAR_BASE should be a multiple of 100 to make 2-digit
* year formats (%y) work correctly (since we won't find the fake year
* in that case).
* e.g. new Date(1873, 0).toLocaleFormat('%Y %y') => "1873 73"
* See bug 327869.
*/
#define FAKE_YEAR_BASE 9900
if (prtm->tm_year < 1900 || prtm->tm_year > 9999) {

Просмотреть файл

@ -8,11 +8,8 @@
#include "jsapi.h"
#include "nsCollationCID.h"
#include "nsJSUtils.h"
#include "nsICollation.h"
#include "nsIObserver.h"
#include "nsNativeCharsetUtils.h"
#include "nsComponentManagerUtils.h"
#include "nsServiceManagerUtils.h"
#include "mozilla/CycleCollectedJSContext.h"
@ -76,11 +73,12 @@ struct XPCLocaleCallbacks : public JSLocaleCallbacks
// Disable the toLocaleUpper/Lower case hooks to use the standard,
// locale-insensitive definition from String.prototype. (These hooks are
// only consulted when EXPOSE_INTL_API is not set.)
// only consulted when EXPOSE_INTL_API is not set.) Since EXPOSE_INTL_API
// is always set, these hooks should be disabled.
localeToUpperCase = nullptr;
localeToLowerCase = nullptr;
localeCompare = LocaleCompare;
localeToUnicode = LocaleToUnicode;
localeCompare = nullptr;
localeToUnicode = nullptr;
// It's going to be retained by the ObserverService.
RefPtr<XPCLocaleObserver> locObs = new XPCLocaleObserver();
@ -93,15 +91,6 @@ struct XPCLocaleCallbacks : public JSLocaleCallbacks
MOZ_COUNT_DTOR(XPCLocaleCallbacks);
}
/**
* Return the XPCLocaleCallbacks from |cx|'s runtime (see below).
*/
static XPCLocaleCallbacks*
This(JSContext* cx)
{
return This(JS_GetRuntime(cx));
}
/**
* Return the XPCLocaleCallbacks that's hidden away in |rt|. (This impl uses
* the locale callbacks struct to store away its per-context data.)
@ -115,93 +104,20 @@ struct XPCLocaleCallbacks : public JSLocaleCallbacks
MOZ_ASSERT(lc);
MOZ_ASSERT(lc->localeToUpperCase == nullptr);
MOZ_ASSERT(lc->localeToLowerCase == nullptr);
MOZ_ASSERT(lc->localeCompare == LocaleCompare);
MOZ_ASSERT(lc->localeToUnicode == LocaleToUnicode);
MOZ_ASSERT(lc->localeCompare == nullptr);
MOZ_ASSERT(lc->localeToUnicode == nullptr);
const XPCLocaleCallbacks* ths = static_cast<const XPCLocaleCallbacks*>(lc);
ths->AssertThreadSafety();
return const_cast<XPCLocaleCallbacks*>(ths);
}
static bool
LocaleToUnicode(JSContext* cx, const char* src, MutableHandleValue rval)
{
return This(cx)->ToUnicode(cx, src, rval);
}
static bool
LocaleCompare(JSContext* cx, HandleString src1, HandleString src2, MutableHandleValue rval)
{
return This(cx)->Compare(cx, src1, src2, rval);
}
private:
bool
Compare(JSContext* cx, HandleString src1, HandleString src2, MutableHandleValue rval)
{
nsresult rv;
if (!mCollation) {
nsCOMPtr<nsICollationFactory> colFactory =
do_CreateInstance(NS_COLLATIONFACTORY_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv)) {
rv = colFactory->CreateCollation(getter_AddRefs(mCollation));
}
if (NS_FAILED(rv)) {
xpc::Throw(cx, rv);
return false;
}
}
nsAutoJSString autoStr1, autoStr2;
if (!autoStr1.init(cx, src1) || !autoStr2.init(cx, src2)) {
return false;
}
int32_t result;
rv = mCollation->CompareString(nsICollation::kCollationStrengthDefault,
autoStr1, autoStr2, &result);
if (NS_FAILED(rv)) {
xpc::Throw(cx, rv);
return false;
}
rval.setInt32(result);
return true;
}
bool
ToUnicode(JSContext* cx, const char* src, MutableHandleValue rval)
{
// This code is only used by our prioprietary toLocaleFormat method
// and should be removed once we get rid of it.
// toLocaleFormat is used in non-ICU scenarios where we don't have
// access to any other date/time than the OS one, so we have to also
// use the OS locale for unicode conversions.
// See bug 1349470 for more details.
nsAutoString result;
NS_CopyNativeToUnicode(nsDependentCString(src), result);
JSString* ucstr =
JS_NewUCStringCopyN(cx, result.get(), result.Length());
if (ucstr) {
rval.setString(ucstr);
return true;
}
xpc::Throw(cx, NS_ERROR_OUT_OF_MEMORY);
return false;
}
void AssertThreadSafety() const
{
NS_ASSERT_OWNINGTHREAD(XPCLocaleCallbacks);
}
nsCOMPtr<nsICollation> mCollation;
NS_DECL_OWNINGTHREAD
};

Просмотреть файл

@ -182,7 +182,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=933681
"setYear", "setFullYear", "setUTCFullYear", "setMonth", "setUTCMonth",
"setDate", "setUTCDate", "setHours", "setUTCHours", "setMinutes",
"setUTCMinutes", "setSeconds", "setUTCSeconds", "setMilliseconds",
"setUTCMilliseconds", "toUTCString", "toLocaleFormat", "toLocaleString",
"setUTCMilliseconds", "toUTCString", "toLocaleString",
"toLocaleDateString", "toLocaleTimeString", "toDateString", "toTimeString",
"toISOString", "toJSON", "toSource", "toString", "valueOf", "constructor",
"toGMTString", Symbol.toPrimitive];

Просмотреть файл

@ -5223,6 +5223,7 @@ SetupErrorHandling(const char* progname)
setbuf(stdout, 0);
}
// Note: This function should not be needed anymore. See Bug 818634 for details.
void
OverrideDefaultLocaleIfNeeded() {
// Read pref to decide whether to override default locale with US English.