1
0
forked from 0ad/0ad

Use FromJSVal ToJSVal for primitive types to remove the duplicate logic and make JSInterface_IGUIObject case handling more equal.

Remove broken uint overflow check from 3698c134b5 and just use the
native JS uint32 conversion.

This was SVN commit r22540.
This commit is contained in:
elexis 2019-07-24 02:58:50 +00:00
parent 26ae9d430a
commit 636c719110
2 changed files with 16 additions and 22 deletions

View File

@ -134,7 +134,7 @@ template<> void ScriptInterface::ToJSVal<CGUIString>(JSContext* cx, JS::MutableH
template<> bool ScriptInterface::FromJSVal<CGUIString>(JSContext* cx, JS::HandleValue v, CGUIString& out) template<> bool ScriptInterface::FromJSVal<CGUIString>(JSContext* cx, JS::HandleValue v, CGUIString& out)
{ {
std::wstring val; std::wstring val;
if (!ScriptInterface::FromJSVal(cx, v, val)) if (!FromJSVal(cx, v, val))
return false; return false;
out.SetValue(val); out.SetValue(val);
return true; return true;

View File

@ -138,9 +138,9 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
case GUIST_int: case GUIST_int:
{ {
int value; i32 value;
GUI<int>::GetSetting(e, propName, value); GUI<i32>::GetSetting(e, propName, value);
vp.set(JS::Int32Value(value)); ScriptInterface::ToJSVal(cx, vp, value);
break; break;
} }
@ -148,10 +148,7 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
{ {
u32 value; u32 value;
GUI<u32>::GetSetting(e, propName, value); GUI<u32>::GetSetting(e, propName, value);
if (value >= std::numeric_limits<u32>::max()) ScriptInterface::ToJSVal(cx, vp, value);
LOGERROR("Integer overflow on converting to GUIST_uint");
else
vp.set(JS::Int32Value(value));
break; break;
} }
@ -159,9 +156,8 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
{ {
float value; float value;
GUI<float>::GetSetting(e, propName, value); GUI<float>::GetSetting(e, propName, value);
// Create a garbage-collectable double ScriptInterface::ToJSVal(cx, vp, value);
vp.set(JS::NumberValue(value)); break;
return !vp.isNull();
} }
case GUIST_CColor: case GUIST_CColor:
@ -205,7 +201,7 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
{ {
CGUIString value; CGUIString value;
GUI<CGUIString>::GetSetting(e, propName, value); GUI<CGUIString>::GetSetting(e, propName, value);
ScriptInterface::ToJSVal(cx, vp, value.GetOriginalString()); ScriptInterface::ToJSVal(cx, vp, value);
break; break;
} }
@ -227,7 +223,7 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
case GUIST_CGUISpriteInstance: case GUIST_CGUISpriteInstance:
{ {
CGUISpriteInstance *value; CGUISpriteInstance* value;
GUI<CGUISpriteInstance>::GetSettingPointer(e, propName, value); GUI<CGUISpriteInstance>::GetSettingPointer(e, propName, value);
ScriptInterface::ToJSVal(cx, vp, value->GetName()); ScriptInterface::ToJSVal(cx, vp, value->GetName());
break; break;
@ -346,7 +342,7 @@ bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
{ {
case GUIST_CStr: case GUIST_CStr:
{ {
std::string value; CStr value;
if (!ScriptInterface::FromJSVal(cx, vp, value)) if (!ScriptInterface::FromJSVal(cx, vp, value))
return false; return false;
@ -356,7 +352,7 @@ bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
case GUIST_CStrW: case GUIST_CStrW:
{ {
std::wstring value; CStrW value;
if (!ScriptInterface::FromJSVal(cx, vp, value)) if (!ScriptInterface::FromJSVal(cx, vp, value))
return false; return false;
@ -376,13 +372,11 @@ bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
case GUIST_CGUIString: case GUIST_CGUIString:
{ {
std::wstring value; CGUIString value;
if (!ScriptInterface::FromJSVal(cx, vp, value)) if (!ScriptInterface::FromJSVal(cx, vp, value))
return false; return false;
CGUIString str; GUI<CGUIString>::SetSetting(e, propName, value);
str.SetValue(value);
GUI<CGUIString>::SetSetting(e, propName, str);
break; break;
} }
@ -452,9 +446,9 @@ bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
case GUIST_float: case GUIST_float:
{ {
double value; float value;
if (JS::ToNumber(cx, vp, &value) == true) if (ScriptInterface::FromJSVal(cx, vp, value))
GUI<float>::SetSetting(e, propName, (float)value); GUI<float>::SetSetting(e, propName, value);
else else
{ {
JS_ReportError(cx, "Cannot convert value to float"); JS_ReportError(cx, "Cannot convert value to float");