return JS_TRUE;
locale = localeconv(); rt->thousandsSeparator = JS_strdup(cx, locale->thousands_sep ? locale->thousands_sep : "'"); rt->decimalSeparator = JS_strdup(cx, locale->decimal_point ? locale->decimal_point : "."); rt->numGrouping = JS_strdup(cx, locale->grouping ? locale->grouping : "\3\0");  return rt->thousandsSeparator && rt->decimalSeparator && rt->numGrouping;
js_InitRuntimeNumberState(JSContext *cx){    JSRuntime *rt;    jsdpun u;    rt = cx->runtime;    JS_ASSERT(!rt->jsNaN);    FIX_FPU();    u.s.hi = JSDOUBLE_HI32_EXPMASK | JSDOUBLE_HI32_MANTMASK;    u.s.lo = 0xffffffff;    number_constants[NC_NaN].dval = NaN = u.d;    rt->jsNaN = js_NewDouble(cx, NaN);    if (!rt->jsNaN || !js_LockGCThing(cx, rt->jsNaN))        return JS_FALSE;    u.s.hi = JSDOUBLE_HI32_EXPMASK;    u.s.lo = 0x00000000;    number_constants[NC_POSITIVE_INFINITY].dval = u.d;    rt->jsPositiveInfinity = js_NewDouble(cx, u.d);    if (!rt->jsPositiveInfinity ||        !js_LockGCThing(cx, rt->jsPositiveInfinity)) {        return JS_FALSE;    }    u.s.hi = JSDOUBLE_HI32_SIGNBIT | JSDOUBLE_HI32_EXPMASK;    u.s.lo = 0x00000000;    number_constants[NC_NEGATIVE_INFINITY].dval = u.d;    rt->jsNegativeInfinity = js_NewDouble(cx, u.d);    if (!rt->jsNegativeInfinity ||        !js_LockGCThing(cx, rt->jsNegativeInfinity)) {        return JS_FALSE;    }    u.s.hi = 0;    u.s.lo = 1;    number_constants[NC_MIN_VALUE].dval = u.d;    return JS_TRUE;}