Fix 64-bit integer script conversions by removing the discrepancy between Windows and Linux.
Patch by echotangoecho, fixes #3848. Reviewed By: Itms Differential Revision: https://code.wildfiregames.com/D84 This was SVN commit r19189.
This commit is contained in:
parent
73bda917bb
commit
c0ca70efd2
@ -116,21 +116,21 @@ template<> bool ScriptInterface::FromJSVal<u8>(JSContext* cx, JS::HandleValue v,
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<long>(JSContext* cx, JS::HandleValue v, long& out)
|
||||
template<> bool ScriptInterface::FromJSVal<i64>(JSContext* cx, JS::HandleValue v, i64& out)
|
||||
{
|
||||
JSAutoRequest rq(cx);
|
||||
i64 tmp;
|
||||
bool ok = JS::ToInt64(cx, v, &tmp);
|
||||
out = (long)tmp;
|
||||
out = (i64)tmp;
|
||||
return ok;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<unsigned long>(JSContext* cx, JS::HandleValue v, unsigned long& out)
|
||||
template<> bool ScriptInterface::FromJSVal<u64>(JSContext* cx, JS::HandleValue v, u64& out)
|
||||
{
|
||||
JSAutoRequest rq(cx);
|
||||
u64 tmp;
|
||||
bool ok = JS::ToUint64(cx, v, &tmp);
|
||||
out = (unsigned long)tmp;
|
||||
out = (u64)tmp;
|
||||
return ok;
|
||||
}
|
||||
|
||||
@ -294,12 +294,12 @@ template<> void ScriptInterface::ToJSVal<u32>(JSContext* UNUSED(cx), JS::Mutable
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<long>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const long& val)
|
||||
template<> void ScriptInterface::ToJSVal<i64>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const i64& val)
|
||||
{
|
||||
ret.set(JS::NumberValue((int)val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<unsigned long>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const unsigned long& val)
|
||||
template<> void ScriptInterface::ToJSVal<u64>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const u64& val)
|
||||
{
|
||||
ret.set(JS::NumberValue((int)val));
|
||||
}
|
||||
|
@ -141,6 +141,22 @@ public:
|
||||
roundtrip<u32>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
|
||||
}
|
||||
|
||||
roundtrip<i64>(0, "0");
|
||||
roundtrip<i64>(123, "123");
|
||||
roundtrip<i64>(-123, "-123");
|
||||
roundtrip<i64>(1073741822, "1073741822"); // JSVAL_INT_MAX-1
|
||||
roundtrip<i64>(1073741823, "1073741823"); // JSVAL_INT_MAX
|
||||
roundtrip<i64>(-1073741823, "-1073741823"); // JSVAL_INT_MIN+1
|
||||
roundtrip<i64>(-1073741824, "-1073741824"); // JSVAL_INT_MIN
|
||||
roundtrip<i64>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
|
||||
roundtrip<i64>(-1073741825, "-1073741825"); // JSVAL_INT_MIN-1
|
||||
|
||||
roundtrip<u64>(0, "0");
|
||||
roundtrip<u64>(123, "123");
|
||||
roundtrip<u64>(1073741822, "1073741822"); // JSVAL_INT_MAX-1
|
||||
roundtrip<u64>(1073741823, "1073741823"); // JSVAL_INT_MAX
|
||||
roundtrip<u64>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
|
||||
|
||||
std::string s1 = "test";
|
||||
s1[1] = '\0';
|
||||
std::string s2 = "тест";
|
||||
@ -202,6 +218,27 @@ public:
|
||||
TS_ASSERT(val6.isInt32());
|
||||
TS_ASSERT(val7.isInt32());
|
||||
TS_ASSERT(val8.isDouble());
|
||||
|
||||
JS::RootedValue val9(cx), val10(cx), val11(cx), val12(cx), val13(cx), val14(cx), val15(cx), val16(cx), val17(cx);
|
||||
ScriptInterface::ToJSVal<i64>(cx, &val9, 0);
|
||||
ScriptInterface::ToJSVal<i64>(cx, &val10, 2147483646); // JSVAL_INT_MAX-1
|
||||
ScriptInterface::ToJSVal<i64>(cx, &val11, 2147483647); // JSVAL_INT_MAX
|
||||
ScriptInterface::ToJSVal<i64>(cx, &val12, -2147483647); // JSVAL_INT_MIN+1
|
||||
ScriptInterface::ToJSVal<i64>(cx, &val13, -(i64)2147483648u); // JSVAL_INT_MIN
|
||||
TS_ASSERT(val9.isInt32());
|
||||
TS_ASSERT(val10.isInt32());
|
||||
TS_ASSERT(val11.isInt32());
|
||||
TS_ASSERT(val12.isInt32());
|
||||
TS_ASSERT(val13.isInt32());
|
||||
|
||||
ScriptInterface::ToJSVal<u64>(cx, &val14, 0);
|
||||
ScriptInterface::ToJSVal<u64>(cx, &val15, 2147483646u); // JSVAL_INT_MAX-1
|
||||
ScriptInterface::ToJSVal<u64>(cx, &val16, 2147483647u); // JSVAL_INT_MAX
|
||||
ScriptInterface::ToJSVal<u64>(cx, &val17, 2147483648u); // JSVAL_INT_MAX+1
|
||||
TS_ASSERT(val14.isInt32());
|
||||
TS_ASSERT(val15.isInt32());
|
||||
TS_ASSERT(val16.isInt32());
|
||||
TS_ASSERT(val17.isInt32());
|
||||
}
|
||||
|
||||
void test_nonfinite()
|
||||
|
Loading…
Reference in New Issue
Block a user