Ticket #1528: implicit-conversion.patch

File implicit-conversion.patch, 2.6 KB (added by Deiz, 12 years ago)
  • source/scriptinterface/ScriptConversions.cpp

     
    3030// Implicit type conversions often hide bugs, so warn about them
    3131#define WARN_IF_NOT(c, v) STMT(if (!(c)) { JS_ReportWarning(cx, "Script value conversion check failed: %s (got type %s)", #c, JS_GetTypeName(cx, JS_TypeOfValue(cx, v))); })
    3232
     33// Implicit conversions of several types are never desirable
     34#define ERROR_IF_NOT(c, v) STMT(if (!(c)) { JS_ReportError(cx, "Script value conversion check failed: %s (got type %s)", #c, JS_GetTypeName(cx, JS_TypeOfValue(cx, v))); return false; })
     35
    3336template<> bool ScriptInterface::FromJSVal<bool>(JSContext* cx, jsval v, bool& out)
    3437{
    3538    JSBool ret;
    36     WARN_IF_NOT(JSVAL_IS_BOOLEAN(v), v);
     39    ERROR_IF_NOT(JSVAL_IS_BOOLEAN(v), v);
    3740    if (!JS_ValueToBoolean(cx, v, &ret))
    3841        return false;
    3942    out = (ret ? true : false);
     
    4346template<> bool ScriptInterface::FromJSVal<float>(JSContext* cx, jsval v, float& out)
    4447{
    4548    jsdouble ret;
    46     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     49    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    4750    if (!JS_ValueToNumber(cx, v, &ret))
    4851        return false;
    4952    out = ret;
     
    5356template<> bool ScriptInterface::FromJSVal<double>(JSContext* cx, jsval v, double& out)
    5457{
    5558    jsdouble ret;
    56     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     59    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    5760    if (!JS_ValueToNumber(cx, v, &ret))
    5861        return false;
    5962    out = ret;
     
    6366template<> bool ScriptInterface::FromJSVal<i32>(JSContext* cx, jsval v, i32& out)
    6467{
    6568    int32 ret;
    66     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     69    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    6770    if (!JS_ValueToECMAInt32(cx, v, &ret))
    6871        return false;
    6972    out = ret;
     
    7376template<> bool ScriptInterface::FromJSVal<u32>(JSContext* cx, jsval v, u32& out)
    7477{
    7578    uint32 ret;
    76     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     79    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    7780    if (!JS_ValueToECMAUint32(cx, v, &ret))
    7881        return false;
    7982    out = ret;
     
    8386template<> bool ScriptInterface::FromJSVal<u16>(JSContext* cx, jsval v, u16& out)
    8487{
    8588    uint16 ret;
    86     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     89    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    8790    if (!JS_ValueToUint16(cx, v, &ret))
    8891        return false;
    8992    out = ret;
     
    9396template<> bool ScriptInterface::FromJSVal<u8>(JSContext* cx, jsval v, u8& out)
    9497{
    9598    uint16 ret;
    96     WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);
     99    ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v);
    97100    if (!JS_ValueToUint16(cx, v, &ret))
    98101        return false;
    99102    out = (u8)ret;