Ticket #1528: implicit-conversion.patch
File implicit-conversion.patch, 2.6 KB (added by , 12 years ago) |
---|
-
source/scriptinterface/ScriptConversions.cpp
30 30 // Implicit type conversions often hide bugs, so warn about them 31 31 #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))); }) 32 32 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 33 36 template<> bool ScriptInterface::FromJSVal<bool>(JSContext* cx, jsval v, bool& out) 34 37 { 35 38 JSBool ret; 36 WARN_IF_NOT(JSVAL_IS_BOOLEAN(v), v);39 ERROR_IF_NOT(JSVAL_IS_BOOLEAN(v), v); 37 40 if (!JS_ValueToBoolean(cx, v, &ret)) 38 41 return false; 39 42 out = (ret ? true : false); … … 43 46 template<> bool ScriptInterface::FromJSVal<float>(JSContext* cx, jsval v, float& out) 44 47 { 45 48 jsdouble ret; 46 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);49 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 47 50 if (!JS_ValueToNumber(cx, v, &ret)) 48 51 return false; 49 52 out = ret; … … 53 56 template<> bool ScriptInterface::FromJSVal<double>(JSContext* cx, jsval v, double& out) 54 57 { 55 58 jsdouble ret; 56 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);59 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 57 60 if (!JS_ValueToNumber(cx, v, &ret)) 58 61 return false; 59 62 out = ret; … … 63 66 template<> bool ScriptInterface::FromJSVal<i32>(JSContext* cx, jsval v, i32& out) 64 67 { 65 68 int32 ret; 66 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);69 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 67 70 if (!JS_ValueToECMAInt32(cx, v, &ret)) 68 71 return false; 69 72 out = ret; … … 73 76 template<> bool ScriptInterface::FromJSVal<u32>(JSContext* cx, jsval v, u32& out) 74 77 { 75 78 uint32 ret; 76 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);79 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 77 80 if (!JS_ValueToECMAUint32(cx, v, &ret)) 78 81 return false; 79 82 out = ret; … … 83 86 template<> bool ScriptInterface::FromJSVal<u16>(JSContext* cx, jsval v, u16& out) 84 87 { 85 88 uint16 ret; 86 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);89 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 87 90 if (!JS_ValueToUint16(cx, v, &ret)) 88 91 return false; 89 92 out = ret; … … 93 96 template<> bool ScriptInterface::FromJSVal<u8>(JSContext* cx, jsval v, u8& out) 94 97 { 95 98 uint16 ret; 96 WARN_IF_NOT(JSVAL_IS_NUMBER(v), v);99 ERROR_IF_NOT(JSVAL_IS_NUMBER(v), v); 97 100 if (!JS_ValueToUint16(cx, v, &ret)) 98 101 return false; 99 102 out = (u8)ret;