mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-22 23:27:30 +09:00
Issue #325 Part 14: Remove EXPOSE_INTL_API conditionals.
This commit is contained in:
parent
04679df9c6
commit
8e9e42c7d8
17 changed files with 5 additions and 395 deletions
|
|
@ -900,11 +900,7 @@ function ArrayToLocaleString(locales, options) {
|
||||||
if (firstElement === undefined || firstElement === null) {
|
if (firstElement === undefined || firstElement === null) {
|
||||||
R = "";
|
R = "";
|
||||||
} else {
|
} else {
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
R = ToString(callContentFunction(firstElement.toLocaleString, firstElement, locales, options));
|
R = ToString(callContentFunction(firstElement.toLocaleString, firstElement, locales, options));
|
||||||
#else
|
|
||||||
R = ToString(callContentFunction(firstElement.toLocaleString, firstElement));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 3 (reordered).
|
// Step 3 (reordered).
|
||||||
|
|
@ -919,11 +915,7 @@ function ArrayToLocaleString(locales, options) {
|
||||||
// Steps 9.a, 9.c-e.
|
// Steps 9.a, 9.c-e.
|
||||||
R += separator;
|
R += separator;
|
||||||
if (!(nextElement === undefined || nextElement === null)) {
|
if (!(nextElement === undefined || nextElement === null)) {
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
R += ToString(callContentFunction(nextElement.toLocaleString, nextElement, locales, options));
|
R += ToString(callContentFunction(nextElement.toLocaleString, nextElement, locales, options));
|
||||||
#else
|
|
||||||
R += ToString(callContentFunction(nextElement.toLocaleString, nextElement));
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -659,11 +659,7 @@ function String_static_localeCompare(str1, str2) {
|
||||||
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, "String.localeCompare");
|
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, "String.localeCompare");
|
||||||
var locales = arguments.length > 2 ? arguments[2] : undefined;
|
var locales = arguments.length > 2 ? arguments[2] : undefined;
|
||||||
var options = arguments.length > 3 ? arguments[3] : undefined;
|
var options = arguments.length > 3 ? arguments[3] : undefined;
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
return callFunction(String_localeCompare, str1, str2, locales, options);
|
return callFunction(String_localeCompare, str1, str2, locales, options);
|
||||||
#else
|
|
||||||
return callFunction(std_String_localeCompare, str1, str2, locales, options);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ES6 draft 2014-04-27 B.2.3.3
|
// ES6 draft 2014-04-27 B.2.3.3
|
||||||
|
|
@ -855,14 +851,12 @@ function String_static_toLocaleUpperCase(string) {
|
||||||
return callFunction(std_String_toLocaleUpperCase, string);
|
return callFunction(std_String_toLocaleUpperCase, string);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
function String_static_normalize(string) {
|
function String_static_normalize(string) {
|
||||||
if (arguments.length < 1)
|
if (arguments.length < 1)
|
||||||
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, 'String.normalize');
|
ThrowTypeError(JSMSG_MISSING_FUN_ARG, 0, 'String.normalize');
|
||||||
var form = arguments.length > 1 ? arguments[1] : undefined;
|
var form = arguments.length > 1 ? arguments[1] : undefined;
|
||||||
return callFunction(std_String_normalize, string, form);
|
return callFunction(std_String_normalize, string, form);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
function String_static_concat(string, arg1) {
|
function String_static_concat(string, arg1) {
|
||||||
if (arguments.length < 1)
|
if (arguments.length < 1)
|
||||||
|
|
|
||||||
|
|
@ -236,11 +236,7 @@ GetBuildConfiguration(JSContext* cx, unsigned argc, Value* vp)
|
||||||
if (!JS_SetProperty(cx, info, "binary-data", value))
|
if (!JS_SetProperty(cx, info, "binary-data", value))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
#ifdef EXPOSE_INTL_API
|
|
||||||
value = BooleanValue(true);
|
value = BooleanValue(true);
|
||||||
#else
|
|
||||||
value = BooleanValue(false);
|
|
||||||
#endif
|
|
||||||
if (!JS_SetProperty(cx, info, "intl-api", value))
|
if (!JS_SetProperty(cx, info, "intl-api", value))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1232,11 +1232,7 @@ function TypedArrayToLocaleString(locales = undefined, options = undefined) {
|
||||||
// Steps 6-7.
|
// Steps 6-7.
|
||||||
// Omit the 'if' clause in step 6, since typed arrays can't have undefined
|
// Omit the 'if' clause in step 6, since typed arrays can't have undefined
|
||||||
// or null elements.
|
// or null elements.
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
var R = ToString(callContentFunction(firstElement.toLocaleString, firstElement, locales, options));
|
var R = ToString(callContentFunction(firstElement.toLocaleString, firstElement, locales, options));
|
||||||
#else
|
|
||||||
var R = ToString(callContentFunction(firstElement.toLocaleString, firstElement));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Step 3 (reordered).
|
// Step 3 (reordered).
|
||||||
// We don't (yet?) implement locale-dependent separators.
|
// We don't (yet?) implement locale-dependent separators.
|
||||||
|
|
@ -1258,11 +1254,7 @@ function TypedArrayToLocaleString(locales = undefined, options = undefined) {
|
||||||
// the error message. So despite bug 1079853, we can skip step 9.c.
|
// the error message. So despite bug 1079853, we can skip step 9.c.
|
||||||
|
|
||||||
// Step 9.d.
|
// Step 9.d.
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
R = ToString(callContentFunction(nextElement.toLocaleString, nextElement, locales, options));
|
R = ToString(callContentFunction(nextElement.toLocaleString, nextElement, locales, options));
|
||||||
#else
|
|
||||||
R = ToString(callContentFunction(nextElement.toLocaleString, nextElement));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Step 9.e.
|
// Step 9.e.
|
||||||
R = S + R;
|
R = S + R;
|
||||||
|
|
|
||||||
|
|
@ -5222,7 +5222,7 @@ JS_ResetDefaultLocale(JSContext* cx);
|
||||||
struct JSLocaleCallbacks {
|
struct JSLocaleCallbacks {
|
||||||
JSLocaleToUpperCase localeToUpperCase;
|
JSLocaleToUpperCase localeToUpperCase;
|
||||||
JSLocaleToLowerCase localeToLowerCase;
|
JSLocaleToLowerCase localeToLowerCase;
|
||||||
JSLocaleCompare localeCompare; // not used #if EXPOSE_INTL_API
|
JSLocaleCompare localeCompare; // not used
|
||||||
JSLocaleToUnicode localeToUnicode;
|
JSLocaleToUnicode localeToUnicode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2743,77 +2743,6 @@ ToLocaleFormatHelper(JSContext* cx, HandleObject obj, const char* format, Mutabl
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
/* ES5 15.9.5.5. */
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
|
||||||
date_toLocaleString_impl(JSContext* cx, const CallArgs& args)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* 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
|
|
||||||
;
|
|
||||||
|
|
||||||
Rooted<DateObject*> dateObj(cx, &args.thisv().toObject().as<DateObject>());
|
|
||||||
return ToLocaleFormatHelper(cx, dateObj, format, args.rval());
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
date_toLocaleString(JSContext* cx, unsigned argc, Value* vp)
|
|
||||||
{
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
|
||||||
return CallNonGenericMethod<IsDate, date_toLocaleString_impl>(cx, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ES5 15.9.5.6. */
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
|
||||||
date_toLocaleDateString_impl(JSContext* cx, const CallArgs& args)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Use '%#x' for windows, because '%x' is backward-compatible and non-y2k
|
|
||||||
* with msvc; '%#x' requests that a full year be used in the result string.
|
|
||||||
*/
|
|
||||||
static const char format[] =
|
|
||||||
#if defined(_WIN32) && !defined(__MWERKS__)
|
|
||||||
"%#x"
|
|
||||||
#else
|
|
||||||
"%x"
|
|
||||||
#endif
|
|
||||||
;
|
|
||||||
|
|
||||||
Rooted<DateObject*> dateObj(cx, &args.thisv().toObject().as<DateObject>());
|
|
||||||
return ToLocaleFormatHelper(cx, dateObj, format, args.rval());
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
date_toLocaleDateString(JSContext* cx, unsigned argc, Value* vp)
|
|
||||||
{
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
|
||||||
return CallNonGenericMethod<IsDate, date_toLocaleDateString_impl>(cx, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ES5 15.9.5.7. */
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
|
||||||
date_toLocaleTimeString_impl(JSContext* cx, const CallArgs& args)
|
|
||||||
{
|
|
||||||
Rooted<DateObject*> dateObj(cx, &args.thisv().toObject().as<DateObject>());
|
|
||||||
return ToLocaleFormatHelper(cx, dateObj, "%X", args.rval());
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
date_toLocaleTimeString(JSContext* cx, unsigned argc, Value* vp)
|
|
||||||
{
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
|
||||||
return CallNonGenericMethod<IsDate, date_toLocaleTimeString_impl>(cx, args);
|
|
||||||
}
|
|
||||||
#endif /* !EXPOSE_INTL_API */
|
|
||||||
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
MOZ_ALWAYS_INLINE bool
|
||||||
date_toLocaleFormat_impl(JSContext* cx, const CallArgs& args)
|
date_toLocaleFormat_impl(JSContext* cx, const CallArgs& args)
|
||||||
{
|
{
|
||||||
|
|
@ -3037,15 +2966,9 @@ static const JSFunctionSpec date_methods[] = {
|
||||||
JS_FN("setUTCMilliseconds", date_setUTCMilliseconds, 1,0),
|
JS_FN("setUTCMilliseconds", date_setUTCMilliseconds, 1,0),
|
||||||
JS_FN("toUTCString", date_toGMTString, 0,0),
|
JS_FN("toUTCString", date_toGMTString, 0,0),
|
||||||
JS_FN("toLocaleFormat", date_toLocaleFormat, 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(js_toLocaleString_str, "Date_toLocaleString", 0,0),
|
||||||
JS_SELF_HOSTED_FN("toLocaleDateString", "Date_toLocaleDateString", 0,0),
|
JS_SELF_HOSTED_FN("toLocaleDateString", "Date_toLocaleDateString", 0,0),
|
||||||
JS_SELF_HOSTED_FN("toLocaleTimeString", "Date_toLocaleTimeString", 0,0),
|
JS_SELF_HOSTED_FN("toLocaleTimeString", "Date_toLocaleTimeString", 0,0),
|
||||||
#else
|
|
||||||
JS_FN(js_toLocaleString_str, date_toLocaleString, 0,0),
|
|
||||||
JS_FN("toLocaleDateString", date_toLocaleDateString, 0,0),
|
|
||||||
JS_FN("toLocaleTimeString", date_toLocaleTimeString, 0,0),
|
|
||||||
#endif
|
|
||||||
JS_FN("toDateString", date_toDateString, 0,0),
|
JS_FN("toDateString", date_toDateString, 0,0),
|
||||||
JS_FN("toTimeString", date_toTimeString, 0,0),
|
JS_FN("toTimeString", date_toTimeString, 0,0),
|
||||||
JS_FN("toISOString", date_toISOString, 0,0),
|
JS_FN("toISOString", date_toISOString, 0,0),
|
||||||
|
|
|
||||||
204
js/src/jsnum.cpp
204
js/src/jsnum.cpp
|
|
@ -724,141 +724,6 @@ js::num_toString(JSContext* cx, unsigned argc, Value* vp)
|
||||||
return CallNonGenericMethod<IsNumber, num_toString_impl>(cx, args);
|
return CallNonGenericMethod<IsNumber, num_toString_impl>(cx, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
|
||||||
num_toLocaleString_impl(JSContext* cx, const CallArgs& args)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(IsNumber(args.thisv()));
|
|
||||||
|
|
||||||
double d = Extract(args.thisv());
|
|
||||||
|
|
||||||
RootedString str(cx, NumberToStringWithBase<CanGC>(cx, d, 10));
|
|
||||||
if (!str) {
|
|
||||||
JS_ReportOutOfMemory(cx);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create the string, move back to bytes to make string twiddling
|
|
||||||
* a bit easier and so we can insert platform charset seperators.
|
|
||||||
*/
|
|
||||||
JSAutoByteString numBytes(cx, str);
|
|
||||||
if (!numBytes)
|
|
||||||
return false;
|
|
||||||
const char* num = numBytes.ptr();
|
|
||||||
if (!num)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find the first non-integer value, whether it be a letter as in
|
|
||||||
* 'Infinity', a decimal point, or an 'e' from exponential notation.
|
|
||||||
*/
|
|
||||||
const char* nint = num;
|
|
||||||
if (*nint == '-')
|
|
||||||
nint++;
|
|
||||||
while (*nint >= '0' && *nint <= '9')
|
|
||||||
nint++;
|
|
||||||
int digits = nint - num;
|
|
||||||
const char* end = num + digits;
|
|
||||||
if (!digits) {
|
|
||||||
args.rval().setString(str);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSRuntime* rt = cx->runtime();
|
|
||||||
size_t thousandsLength = strlen(rt->thousandsSeparator);
|
|
||||||
size_t decimalLength = strlen(rt->decimalSeparator);
|
|
||||||
|
|
||||||
/* Figure out how long resulting string will be. */
|
|
||||||
int buflen = strlen(num);
|
|
||||||
if (*nint == '.')
|
|
||||||
buflen += decimalLength - 1; /* -1 to account for existing '.' */
|
|
||||||
|
|
||||||
const char* numGrouping;
|
|
||||||
const char* tmpGroup;
|
|
||||||
numGrouping = tmpGroup = rt->numGrouping;
|
|
||||||
int remainder = digits;
|
|
||||||
if (*num == '-')
|
|
||||||
remainder--;
|
|
||||||
|
|
||||||
while (*tmpGroup != CHAR_MAX && *tmpGroup != '\0') {
|
|
||||||
if (*tmpGroup >= remainder)
|
|
||||||
break;
|
|
||||||
buflen += thousandsLength;
|
|
||||||
remainder -= *tmpGroup;
|
|
||||||
tmpGroup++;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nrepeat;
|
|
||||||
if (*tmpGroup == '\0' && *numGrouping != '\0') {
|
|
||||||
nrepeat = (remainder - 1) / tmpGroup[-1];
|
|
||||||
buflen += thousandsLength * nrepeat;
|
|
||||||
remainder -= nrepeat * tmpGroup[-1];
|
|
||||||
} else {
|
|
||||||
nrepeat = 0;
|
|
||||||
}
|
|
||||||
tmpGroup--;
|
|
||||||
|
|
||||||
char* buf = cx->pod_malloc<char>(buflen + 1);
|
|
||||||
if (!buf)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
char* tmpDest = buf;
|
|
||||||
const char* tmpSrc = num;
|
|
||||||
|
|
||||||
while (*tmpSrc == '-' || remainder--) {
|
|
||||||
MOZ_ASSERT(tmpDest - buf < buflen);
|
|
||||||
*tmpDest++ = *tmpSrc++;
|
|
||||||
}
|
|
||||||
while (tmpSrc < end) {
|
|
||||||
MOZ_ASSERT(tmpDest - buf + ptrdiff_t(thousandsLength) <= buflen);
|
|
||||||
strcpy(tmpDest, rt->thousandsSeparator);
|
|
||||||
tmpDest += thousandsLength;
|
|
||||||
MOZ_ASSERT(tmpDest - buf + *tmpGroup <= buflen);
|
|
||||||
js_memcpy(tmpDest, tmpSrc, *tmpGroup);
|
|
||||||
tmpDest += *tmpGroup;
|
|
||||||
tmpSrc += *tmpGroup;
|
|
||||||
if (--nrepeat < 0)
|
|
||||||
tmpGroup--;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*nint == '.') {
|
|
||||||
MOZ_ASSERT(tmpDest - buf + ptrdiff_t(decimalLength) <= buflen);
|
|
||||||
strcpy(tmpDest, rt->decimalSeparator);
|
|
||||||
tmpDest += decimalLength;
|
|
||||||
MOZ_ASSERT(tmpDest - buf + ptrdiff_t(strlen(nint + 1)) <= buflen);
|
|
||||||
strcpy(tmpDest, nint + 1);
|
|
||||||
} else {
|
|
||||||
MOZ_ASSERT(tmpDest - buf + ptrdiff_t(strlen(nint)) <= buflen);
|
|
||||||
strcpy(tmpDest, nint);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cx->runtime()->localeCallbacks && cx->runtime()->localeCallbacks->localeToUnicode) {
|
|
||||||
Rooted<Value> v(cx, StringValue(str));
|
|
||||||
bool ok = !!cx->runtime()->localeCallbacks->localeToUnicode(cx, buf, &v);
|
|
||||||
if (ok)
|
|
||||||
args.rval().set(v);
|
|
||||||
js_free(buf);
|
|
||||||
return ok;
|
|
||||||
}
|
|
||||||
|
|
||||||
str = NewStringCopyN<CanGC>(cx, buf, buflen);
|
|
||||||
js_free(buf);
|
|
||||||
if (!str)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
args.rval().setString(str);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
|
||||||
num_toLocaleString(JSContext* cx, unsigned argc, Value* vp)
|
|
||||||
{
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
|
||||||
return CallNonGenericMethod<IsNumber, num_toLocaleString_impl>(cx, args);
|
|
||||||
}
|
|
||||||
#endif /* !EXPOSE_INTL_API */
|
|
||||||
|
|
||||||
MOZ_ALWAYS_INLINE bool
|
MOZ_ALWAYS_INLINE bool
|
||||||
num_valueOf_impl(JSContext* cx, const CallArgs& args)
|
num_valueOf_impl(JSContext* cx, const CallArgs& args)
|
||||||
{
|
{
|
||||||
|
|
@ -1075,11 +940,7 @@ static const JSFunctionSpec number_methods[] = {
|
||||||
JS_FN(js_toSource_str, num_toSource, 0, 0),
|
JS_FN(js_toSource_str, num_toSource, 0, 0),
|
||||||
#endif
|
#endif
|
||||||
JS_FN(js_toString_str, num_toString, 1, 0),
|
JS_FN(js_toString_str, num_toString, 1, 0),
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
JS_SELF_HOSTED_FN(js_toLocaleString_str, "Number_toLocaleString", 0,0),
|
JS_SELF_HOSTED_FN(js_toLocaleString_str, "Number_toLocaleString", 0,0),
|
||||||
#else
|
|
||||||
JS_FN(js_toLocaleString_str, num_toLocaleString, 0,0),
|
|
||||||
#endif
|
|
||||||
JS_FN(js_valueOf_str, num_valueOf, 0, 0),
|
JS_FN(js_valueOf_str, num_valueOf, 0, 0),
|
||||||
JS_FN("toFixed", num_toFixed, 1, 0),
|
JS_FN("toFixed", num_toFixed, 1, 0),
|
||||||
JS_FN("toExponential", num_toExponential, 1, 0),
|
JS_FN("toExponential", num_toExponential, 1, 0),
|
||||||
|
|
@ -1135,72 +996,11 @@ js::InitRuntimeNumberState(JSRuntime* rt)
|
||||||
{
|
{
|
||||||
FIX_FPU();
|
FIX_FPU();
|
||||||
|
|
||||||
// XXX If EXPOSE_INTL_API becomes true all the time at some point,
|
// XXX EXPOSE_INTL_API has become true all the time, meaning this is
|
||||||
// js::InitRuntimeNumberState is no longer fallible, and we should
|
// no longer fallible, and we should change its return type.
|
||||||
// change its return type.
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
/* Copy locale-specific separators into the runtime strings. */
|
|
||||||
const char* thousandsSeparator;
|
|
||||||
const char* decimalPoint;
|
|
||||||
const char* grouping;
|
|
||||||
#ifdef HAVE_LOCALECONV
|
|
||||||
struct lconv* locale = localeconv();
|
|
||||||
thousandsSeparator = locale->thousands_sep;
|
|
||||||
decimalPoint = locale->decimal_point;
|
|
||||||
grouping = locale->grouping;
|
|
||||||
#else
|
|
||||||
thousandsSeparator = getenv("LOCALE_THOUSANDS_SEP");
|
|
||||||
decimalPoint = getenv("LOCALE_DECIMAL_POINT");
|
|
||||||
grouping = getenv("LOCALE_GROUPING");
|
|
||||||
#endif
|
|
||||||
if (!thousandsSeparator)
|
|
||||||
thousandsSeparator = "'";
|
|
||||||
if (!decimalPoint)
|
|
||||||
decimalPoint = ".";
|
|
||||||
if (!grouping)
|
|
||||||
grouping = "\3\0";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We use single malloc to get the memory for all separator and grouping
|
|
||||||
* strings.
|
|
||||||
*/
|
|
||||||
size_t thousandsSeparatorSize = strlen(thousandsSeparator) + 1;
|
|
||||||
size_t decimalPointSize = strlen(decimalPoint) + 1;
|
|
||||||
size_t groupingSize = strlen(grouping) + 1;
|
|
||||||
|
|
||||||
char* storage = js_pod_malloc<char>(thousandsSeparatorSize +
|
|
||||||
decimalPointSize +
|
|
||||||
groupingSize);
|
|
||||||
if (!storage)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
js_memcpy(storage, thousandsSeparator, thousandsSeparatorSize);
|
|
||||||
rt->thousandsSeparator = storage;
|
|
||||||
storage += thousandsSeparatorSize;
|
|
||||||
|
|
||||||
js_memcpy(storage, decimalPoint, decimalPointSize);
|
|
||||||
rt->decimalSeparator = storage;
|
|
||||||
storage += decimalPointSize;
|
|
||||||
|
|
||||||
js_memcpy(storage, grouping, groupingSize);
|
|
||||||
rt->numGrouping = grouping;
|
|
||||||
#endif /* !EXPOSE_INTL_API */
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
void
|
|
||||||
js::FinishRuntimeNumberState(JSRuntime* rt)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The free also releases the memory for decimalSeparator and numGrouping
|
|
||||||
* strings.
|
|
||||||
*/
|
|
||||||
char* storage = const_cast<char*>(rt->thousandsSeparator);
|
|
||||||
js_free(storage);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
JSObject*
|
JSObject*
|
||||||
js::InitNumberClass(JSContext* cx, HandleObject obj)
|
js::InitNumberClass(JSContext* cx, HandleObject obj)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,6 @@ class StringBuffer;
|
||||||
extern MOZ_MUST_USE bool
|
extern MOZ_MUST_USE bool
|
||||||
InitRuntimeNumberState(JSRuntime* rt);
|
InitRuntimeNumberState(JSRuntime* rt);
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
extern void
|
|
||||||
FinishRuntimeNumberState(JSRuntime* rt);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Initialize the Number class, returning its prototype object. */
|
/* Initialize the Number class, returning its prototype object. */
|
||||||
extern JSObject*
|
extern JSObject*
|
||||||
InitNumberClass(JSContext* cx, HandleObject obj);
|
InitNumberClass(JSContext* cx, HandleObject obj);
|
||||||
|
|
|
||||||
|
|
@ -37,11 +37,7 @@
|
||||||
#define TYPED_ARRAY_CLASP(type) (&TypedArrayObject::classes[Scalar::type])
|
#define TYPED_ARRAY_CLASP(type) (&TypedArrayObject::classes[Scalar::type])
|
||||||
#define ERROR_CLASP(type) (&ErrorObject::classes[type])
|
#define ERROR_CLASP(type) (&ErrorObject::classes[type])
|
||||||
|
|
||||||
#ifdef EXPOSE_INTL_API
|
|
||||||
#define IF_INTL(real,imaginary) real
|
#define IF_INTL(real,imaginary) real
|
||||||
#else
|
|
||||||
#define IF_INTL(real,imaginary) imaginary
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ENABLE_BINARYDATA
|
#ifdef ENABLE_BINARYDATA
|
||||||
#define IF_BDATA(real,imaginary) real
|
#define IF_BDATA(real,imaginary) real
|
||||||
|
|
|
||||||
|
|
@ -897,38 +897,6 @@ js::str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp)
|
||||||
return ToUpperCaseHelper(cx, args);
|
return ToUpperCaseHelper(cx, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
bool
|
|
||||||
js::str_localeCompare(JSContext* cx, unsigned argc, Value* vp)
|
|
||||||
{
|
|
||||||
CallArgs args = CallArgsFromVp(argc, vp);
|
|
||||||
RootedString str(cx, ToStringForStringFunction(cx, args.thisv()));
|
|
||||||
if (!str)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
RootedString thatStr(cx, ToString<CanGC>(cx, args.get(0)));
|
|
||||||
if (!thatStr)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (cx->runtime()->localeCallbacks && cx->runtime()->localeCallbacks->localeCompare) {
|
|
||||||
RootedValue result(cx);
|
|
||||||
if (!cx->runtime()->localeCallbacks->localeCompare(cx, str, thatStr, &result))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
args.rval().set(result);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t result;
|
|
||||||
if (!CompareStrings(cx, str, thatStr, &result))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
args.rval().setInt32(result);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
/* ES6 20140210 draft 21.1.3.12. */
|
/* ES6 20140210 draft 21.1.3.12. */
|
||||||
bool
|
bool
|
||||||
js::str_normalize(JSContext* cx, unsigned argc, Value* vp)
|
js::str_normalize(JSContext* cx, unsigned argc, Value* vp)
|
||||||
|
|
@ -1005,7 +973,6 @@ js::str_normalize(JSContext* cx, unsigned argc, Value* vp)
|
||||||
args.rval().setString(ns);
|
args.rval().setString(ns);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
js::str_charAt(JSContext* cx, unsigned argc, Value* vp)
|
js::str_charAt(JSContext* cx, unsigned argc, Value* vp)
|
||||||
|
|
@ -2597,15 +2564,9 @@ static const JSFunctionSpec string_methods[] = {
|
||||||
JS_FN("trimRight", str_trimRight, 0,0),
|
JS_FN("trimRight", str_trimRight, 0,0),
|
||||||
JS_FN("toLocaleLowerCase", str_toLocaleLowerCase, 0,0),
|
JS_FN("toLocaleLowerCase", str_toLocaleLowerCase, 0,0),
|
||||||
JS_FN("toLocaleUpperCase", str_toLocaleUpperCase, 0,0),
|
JS_FN("toLocaleUpperCase", str_toLocaleUpperCase, 0,0),
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
JS_SELF_HOSTED_FN("localeCompare", "String_localeCompare", 1,0),
|
JS_SELF_HOSTED_FN("localeCompare", "String_localeCompare", 1,0),
|
||||||
#else
|
|
||||||
JS_FN("localeCompare", str_localeCompare, 1,0),
|
|
||||||
#endif
|
|
||||||
JS_SELF_HOSTED_FN("repeat", "String_repeat", 1,0),
|
JS_SELF_HOSTED_FN("repeat", "String_repeat", 1,0),
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
JS_FN("normalize", str_normalize, 0,0),
|
JS_FN("normalize", str_normalize, 0,0),
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Perl-ish methods (search is actually Python-esque). */
|
/* Perl-ish methods (search is actually Python-esque). */
|
||||||
JS_SELF_HOSTED_FN("match", "String_match", 1,0),
|
JS_SELF_HOSTED_FN("match", "String_match", 1,0),
|
||||||
|
|
@ -2916,9 +2877,7 @@ static const JSFunctionSpec string_static_methods[] = {
|
||||||
JS_SELF_HOSTED_FN("trimRight", "String_static_trimRight", 1,0),
|
JS_SELF_HOSTED_FN("trimRight", "String_static_trimRight", 1,0),
|
||||||
JS_SELF_HOSTED_FN("toLocaleLowerCase","String_static_toLocaleLowerCase",1,0),
|
JS_SELF_HOSTED_FN("toLocaleLowerCase","String_static_toLocaleLowerCase",1,0),
|
||||||
JS_SELF_HOSTED_FN("toLocaleUpperCase","String_static_toLocaleUpperCase",1,0),
|
JS_SELF_HOSTED_FN("toLocaleUpperCase","String_static_toLocaleUpperCase",1,0),
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
JS_SELF_HOSTED_FN("normalize", "String_static_normalize", 1,0),
|
JS_SELF_HOSTED_FN("normalize", "String_static_normalize", 1,0),
|
||||||
#endif
|
|
||||||
JS_SELF_HOSTED_FN("concat", "String_static_concat", 2,0),
|
JS_SELF_HOSTED_FN("concat", "String_static_concat", 2,0),
|
||||||
|
|
||||||
JS_SELF_HOSTED_FN("localeCompare", "String_static_localeCompare", 2,0),
|
JS_SELF_HOSTED_FN("localeCompare", "String_static_localeCompare", 2,0),
|
||||||
|
|
|
||||||
|
|
@ -378,13 +378,8 @@ str_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp);
|
||||||
extern bool
|
extern bool
|
||||||
str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp);
|
str_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp);
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
extern bool
|
|
||||||
str_localeCompare(JSContext* cx, unsigned argc, Value* vp);
|
|
||||||
#else
|
|
||||||
extern bool
|
extern bool
|
||||||
str_normalize(JSContext* cx, unsigned argc, Value* vp);
|
str_normalize(JSContext* cx, unsigned argc, Value* vp);
|
||||||
#endif
|
|
||||||
|
|
||||||
extern bool
|
extern bool
|
||||||
str_concat(JSContext* cx, unsigned argc, Value* vp);
|
str_concat(JSContext* cx, unsigned argc, Value* vp);
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,7 @@
|
||||||
|
|
||||||
#include "builtin/AtomicsObject.h"
|
#include "builtin/AtomicsObject.h"
|
||||||
#include "builtin/Eval.h"
|
#include "builtin/Eval.h"
|
||||||
#if EXPOSE_INTL_API
|
#include "builtin/Intl.h"
|
||||||
# include "builtin/Intl.h"
|
|
||||||
#endif
|
|
||||||
#include "builtin/MapObject.h"
|
#include "builtin/MapObject.h"
|
||||||
#include "builtin/ModuleObject.h"
|
#include "builtin/ModuleObject.h"
|
||||||
#include "builtin/Object.h"
|
#include "builtin/Object.h"
|
||||||
|
|
|
||||||
|
|
@ -111,12 +111,10 @@ JS::detail::InitWithFailureDiagnostic(bool isDebugBuild)
|
||||||
|
|
||||||
js::DateTimeInfo::init();
|
js::DateTimeInfo::init();
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
UErrorCode err = U_ZERO_ERROR;
|
UErrorCode err = U_ZERO_ERROR;
|
||||||
u_init(&err);
|
u_init(&err);
|
||||||
if (U_FAILURE(err))
|
if (U_FAILURE(err))
|
||||||
return "u_init() failed";
|
return "u_init() failed";
|
||||||
#endif // EXPOSE_INTL_API
|
|
||||||
|
|
||||||
RETURN_IF_FAIL(js::CreateHelperThreadsState());
|
RETURN_IF_FAIL(js::CreateHelperThreadsState());
|
||||||
RETURN_IF_FAIL(FutexRuntime::initialize());
|
RETURN_IF_FAIL(FutexRuntime::initialize());
|
||||||
|
|
@ -169,9 +167,7 @@ JS_ShutDown(void)
|
||||||
// to do it only when PRMJ_Now is eventually called.
|
// to do it only when PRMJ_Now is eventually called.
|
||||||
PRMJ_NowShutdown();
|
PRMJ_NowShutdown();
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
u_cleanup();
|
u_cleanup();
|
||||||
#endif // EXPOSE_INTL_API
|
|
||||||
|
|
||||||
if (!JSRuntime::hasLiveRuntimes())
|
if (!JSRuntime::hasLiveRuntimes())
|
||||||
js::jit::ReleaseProcessExecutableMemory();
|
js::jit::ReleaseProcessExecutableMemory();
|
||||||
|
|
@ -186,11 +182,7 @@ JS_SetICUMemoryFunctions(JS_ICUAllocFn allocFn, JS_ICUReallocFn reallocFn, JS_IC
|
||||||
"must call JS_SetICUMemoryFunctions before any other JSAPI "
|
"must call JS_SetICUMemoryFunctions before any other JSAPI "
|
||||||
"operation (including JS_Init)");
|
"operation (including JS_Init)");
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
UErrorCode status = U_ZERO_ERROR;
|
UErrorCode status = U_ZERO_ERROR;
|
||||||
u_setMemoryFunctions(/* context = */ nullptr, allocFn, reallocFn, freeFn, &status);
|
u_setMemoryFunctions(/* context = */ nullptr, allocFn, reallocFn, freeFn, &status);
|
||||||
return U_SUCCESS(status);
|
return U_SUCCESS(status);
|
||||||
#else
|
|
||||||
return true;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -213,11 +213,6 @@ JSRuntime::JSRuntime(JSRuntime* parentRuntime)
|
||||||
warningReporter(nullptr),
|
warningReporter(nullptr),
|
||||||
buildIdOp(nullptr),
|
buildIdOp(nullptr),
|
||||||
propertyRemovals(0),
|
propertyRemovals(0),
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
thousandsSeparator(0),
|
|
||||||
decimalSeparator(0),
|
|
||||||
numGrouping(0),
|
|
||||||
#endif
|
|
||||||
keepAtoms_(0),
|
keepAtoms_(0),
|
||||||
trustedPrincipals_(nullptr),
|
trustedPrincipals_(nullptr),
|
||||||
beingDestroyed_(false),
|
beingDestroyed_(false),
|
||||||
|
|
@ -425,10 +420,6 @@ JSRuntime::destroyRuntime()
|
||||||
*/
|
*/
|
||||||
FreeScriptData(this, lock);
|
FreeScriptData(this, lock);
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
FinishRuntimeNumberState(this);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
gc.finish();
|
gc.finish();
|
||||||
atomsCompartment_ = nullptr;
|
atomsCompartment_ = nullptr;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -978,13 +978,6 @@ struct JSRuntime : public JS::shadow::Runtime,
|
||||||
*/
|
*/
|
||||||
uint32_t propertyRemovals;
|
uint32_t propertyRemovals;
|
||||||
|
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
/* Number localization, used by jsnum.cpp. */
|
|
||||||
const char* thousandsSeparator;
|
|
||||||
const char* decimalSeparator;
|
|
||||||
const char* numGrouping;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mozilla::Maybe<js::SharedImmutableStringsCache> sharedImmutableStrings_;
|
mozilla::Maybe<js::SharedImmutableStringsCache> sharedImmutableStrings_;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2205,11 +2205,7 @@ static const JSFunctionSpec intrinsic_functions[] = {
|
||||||
JS_FN("std_String_trimRight", str_trimRight, 0,0),
|
JS_FN("std_String_trimRight", str_trimRight, 0,0),
|
||||||
JS_FN("std_String_toLocaleLowerCase", str_toLocaleLowerCase, 0,0),
|
JS_FN("std_String_toLocaleLowerCase", str_toLocaleLowerCase, 0,0),
|
||||||
JS_FN("std_String_toLocaleUpperCase", str_toLocaleUpperCase, 0,0),
|
JS_FN("std_String_toLocaleUpperCase", str_toLocaleUpperCase, 0,0),
|
||||||
#if !EXPOSE_INTL_API
|
|
||||||
JS_FN("std_String_localeCompare", str_localeCompare, 1,0),
|
|
||||||
#else
|
|
||||||
JS_FN("std_String_normalize", str_normalize, 0,0),
|
JS_FN("std_String_normalize", str_normalize, 0,0),
|
||||||
#endif
|
|
||||||
JS_FN("std_String_concat", str_concat, 1,0),
|
JS_FN("std_String_concat", str_concat, 1,0),
|
||||||
|
|
||||||
JS_FN("std_TypedArray_buffer", js::TypedArray_bufferGetter, 1,0),
|
JS_FN("std_TypedArray_buffer", js::TypedArray_bufferGetter, 1,0),
|
||||||
|
|
|
||||||
|
|
@ -172,9 +172,7 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**);
|
||||||
|
|
||||||
#include "gfxPlatform.h"
|
#include "gfxPlatform.h"
|
||||||
|
|
||||||
#if EXPOSE_INTL_API
|
|
||||||
#include "unicode/putil.h"
|
#include "unicode/putil.h"
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace mozilla;
|
using namespace mozilla;
|
||||||
using base::AtExitManager;
|
using base::AtExitManager;
|
||||||
|
|
@ -692,7 +690,7 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
|
||||||
memmove);
|
memmove);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EXPOSE_INTL_API && defined(MOZ_ICU_DATA_ARCHIVE)
|
#if defined(MOZ_ICU_DATA_ARCHIVE)
|
||||||
nsCOMPtr<nsIFile> greDir;
|
nsCOMPtr<nsIFile> greDir;
|
||||||
nsDirectoryService::gService->Get(NS_GRE_DIR,
|
nsDirectoryService::gService->Get(NS_GRE_DIR,
|
||||||
NS_GET_IID(nsIFile),
|
NS_GET_IID(nsIFile),
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue