本文整理汇总了C++中mozilla::IsNaN方法的典型用法代码示例。如果您正苦于以下问题:C++ mozilla::IsNaN方法的具体用法?C++ mozilla::IsNaN怎么用?C++ mozilla::IsNaN使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mozilla
的用法示例。
在下文中一共展示了mozilla::IsNaN方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: field
static bool
ValidateConstant(JSContext *cx, AsmJSModule::Global &global, HandleValue globalVal)
{
RootedPropertyName field(cx, global.constantName());
RootedValue v(cx, globalVal);
if (global.constantKind() == AsmJSModule::Global::MathConstant) {
if (!GetDataProperty(cx, v, cx->names().Math, &v))
return false;
}
if (!GetDataProperty(cx, v, field, &v))
return false;
if (!v.isNumber())
return LinkFail(cx, "math / global constant value needs to be a number");
// NaN != NaN
if (IsNaN(global.constantValue())) {
if (!IsNaN(v.toNumber()))
return LinkFail(cx, "global constant value needs to be NaN");
} else {
if (v.toNumber() != global.constantValue())
return LinkFail(cx, "global constant value mismatch");
}
return true;
}
示例2: obj
static bool
GetGlobalExport(JSContext* cx, const GlobalDescVector& globals, uint32_t globalIndex,
const ValVector& globalImports, MutableHandleValue jsval)
{
const GlobalDesc& global = globals[globalIndex];
// Imports are located upfront in the globals array.
Val val;
switch (global.kind()) {
case GlobalKind::Import: val = globalImports[globalIndex]; break;
case GlobalKind::Variable: MOZ_CRASH("mutable variables can't be exported");
case GlobalKind::Constant: val = global.constantValue(); break;
}
switch (global.type()) {
case ValType::I32: {
jsval.set(Int32Value(val.i32()));
return true;
}
case ValType::I64: {
MOZ_ASSERT(JitOptions.wasmTestMode, "no int64 in asm.js/wasm");
RootedObject obj(cx, CreateI64Object(cx, val.i64()));
if (!obj)
return false;
jsval.set(ObjectValue(*obj));
return true;
}
case ValType::F32: {
float f = val.f32();
if (JitOptions.wasmTestMode && IsNaN(f)) {
RootedObject obj(cx, CreateCustomNaNObject(cx, &f));
if (!obj)
return false;
jsval.set(ObjectValue(*obj));
return true;
}
jsval.set(DoubleValue(double(f)));
return true;
}
case ValType::F64: {
double d = val.f64();
if (JitOptions.wasmTestMode && IsNaN(d)) {
RootedObject obj(cx, CreateCustomNaNObject(cx, &d));
if (!obj)
return false;
jsval.set(ObjectValue(*obj));
return true;
}
jsval.set(DoubleValue(d));
return true;
}
default: {
break;
}
}
MOZ_CRASH("unexpected type when creating global exports");
}
示例3: AtomizeString
bool
HashableValue::setValue(JSContext* cx, HandleValue v)
{
if (v.isString()) {
// Atomize so that hash() and operator==() are fast and infallible.
JSString* str = AtomizeString(cx, v.toString(), DoNotPinAtom);
if (!str)
return false;
value = StringValue(str);
} else if (v.isDouble()) {
double d = v.toDouble();
int32_t i;
if (NumberEqualsInt32(d, &i)) {
// Normalize int32_t-valued doubles to int32_t for faster hashing and testing.
value = Int32Value(i);
} else if (IsNaN(d)) {
// NaNs with different bits must hash and test identically.
value = DoubleNaNValue();
} else {
value = v;
}
} else {
value = v;
}
MOZ_ASSERT(value.isUndefined() || value.isNull() || value.isBoolean() || value.isNumber() ||
value.isString() || value.isSymbol() || value.isObject());
return true;
}
示例4: mLat
////////////////////////////////////////////////////
// nsGeoPositionCoords
////////////////////////////////////////////////////
nsGeoPositionCoords::nsGeoPositionCoords(double aLat, double aLong, double aAlt,
double aHError, double aVError,
double aHeading, double aSpeed)
: mLat(aLat),
mLong(aLong),
mAlt(aAlt),
mHError((aHError >= 0) ? aHError : 0)
// altitudeAccuracy without an altitude doesn't make any sense.
,
mVError((aVError >= 0 && !IsNaN(aAlt)) ? aVError : NaN())
// If the hosting device is stationary (i.e. the value of the speed
// attribute is 0), then the value of the heading attribute must be NaN
// (or null).
,
mHeading((aHeading >= 0 && aHeading < 360 && aSpeed > 0) ? aHeading
: NaN()),
mSpeed(aSpeed >= 0 ? aSpeed : NaN()) {
// Sanity check the location provider's results in debug builds. If the
// location provider is returning bogus results, we'd like to know, but
// we prefer to return some position data to JavaScript over a
// POSITION_UNAVAILABLE error.
MOZ_ASSERT(aLat >= -90 && aLat <= 90);
MOZ_ASSERT(aLong >= -180 && aLong <= 180);
MOZ_ASSERT(!(aLat == 0 && aLong == 0)); // valid but probably a bug
MOZ_ASSERT(EqualOrNaN(mAlt, aAlt));
MOZ_ASSERT(mHError == aHError);
MOZ_ASSERT(EqualOrNaN(mVError, aVError));
MOZ_ASSERT(EqualOrNaN(mHeading, aHeading));
MOZ_ASSERT(EqualOrNaN(mSpeed, aSpeed));
}
示例5: RenderNaN
static bool
RenderFloat32(WasmRenderContext& c, float f)
{
if (IsNaN(f))
return RenderNaN(c.sb(), f);
return RenderDouble(c, double(f));
}
示例6:
static double
max_double(double x, double y)
{
// Math.max(num, NaN) => NaN, Math.max(-0, +0) => +0
if (x > y || IsNaN(x) || (x == y && IsNegative(y)))
return x;
return y;
}
示例7:
double
js::math_max_impl(double x, double y)
{
// Math.max(num, NaN) => NaN, Math.max(-0, +0) => +0
if (x > y || IsNaN(x) || (x == y && IsNegative(y)))
return x;
return y;
}
示例8: RenderNaN
static bool
RenderFloat32(WasmRenderContext& c, RawF32 num)
{
float f = num.fp();
if (IsNaN(f))
return RenderNaN(c.sb(), num);
return RenderDouble(c, RawF64(double(f)));
}
示例9:
double
js::math_exp_impl(MathCache *cache, double x)
{
#ifdef _WIN32
if (!IsNaN(x)) {
if (x == js_PositiveInfinity)
return js_PositiveInfinity;
if (x == js_NegativeInfinity)
return 0.0;
}
#endif
return cache->lookup(exp, x);
}
示例10: CheckType
static bool
DecodeConstF64(FunctionDecoder& f, ExprType expected)
{
double value;
if (!f.d().readFixedF64(&value))
return f.fail("unable to read f64.const immediate");
if (IsNaN(value)) {
const double jsNaN = JS::GenericNaN();
if (memcmp(&value, &jsNaN, sizeof(value)) != 0)
return f.fail("NYI: NaN literals with custom payloads");
}
return CheckType(f, ExprType::F64, expected);
}
示例11: NumberValueToStringBuffer
static bool
RenderDouble(WasmRenderContext& c, double num)
{
if (IsNegativeZero(num))
return c.buffer.append("-0");
if (IsNaN(num))
return c.buffer.append("nan");
if (IsInfinite(num)) {
if (num > 0)
return c.buffer.append("infinity");
return c.buffer.append("-infinity");
}
return NumberValueToStringBuffer(c.cx, DoubleValue(num), c.buffer);
}
示例12:
static bool
DecodeConstF32(FunctionDecoder& f, ExprType* type)
{
float value;
if (!f.d().readFixedF32(&value))
return f.fail("unable to read f32.const immediate");
if (IsNaN(value)) {
const float jsNaN = (float)JS::GenericNaN();
if (memcmp(&value, &jsNaN, sizeof(value)) != 0)
return f.fail("NYI: NaN literals with custom payloads");
}
*type = ExprType::F32;
return true;
}
示例13: CallArgsFromVp
bool
js_math_max(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
double maxval = NegativeInfinity();
for (unsigned i = 0; i < args.length(); i++) {
double x;
if (!ToNumber(cx, args[i], &x))
return false;
// Math.max(num, NaN) => NaN, Math.max(-0, +0) => +0
if (x > maxval || IsNaN(x) || (x == maxval && IsNegative(maxval)))
maxval = x;
}
args.rval().setNumber(maxval);
return true;
}
示例14: CallArgsFromVp
bool
js_math_min(JSContext *cx, unsigned argc, Value *vp)
{
CallArgs args = CallArgsFromVp(argc, vp);
double minval = PositiveInfinity<double>();
for (unsigned i = 0; i < args.length(); i++) {
double x;
if (!ToNumber(cx, args[i], &x))
return false;
// Math.min(num, NaN) => NaN, Math.min(-0, +0) => -0
if (x < minval || IsNaN(x) || (x == minval && IsNegativeZero(x)))
minval = x;
}
args.rval().setNumber(minval);
return true;
}
示例15: obj
static JSObject*
CreateCustomNaNObject(JSContext* cx, T* addr)
{
MOZ_ASSERT(IsNaN(*addr));
RootedObject obj(cx, JS_NewPlainObject(cx));
if (!obj)
return nullptr;
int32_t* i32 = (int32_t*)addr;
RootedValue intVal(cx, Int32Value(i32[0]));
if (!JS_DefineProperty(cx, obj, "nan_low", intVal, JSPROP_ENUMERATE))
return nullptr;
if (IsSame<double, T>::value) {
intVal = Int32Value(i32[1]);
if (!JS_DefineProperty(cx, obj, "nan_high", intVal, JSPROP_ENUMERATE))
return nullptr;
}
return obj;
}