1
0
forked from 0ad/0ad

Add ToJSVal<CRect> to make the conversion reusable, remove unused PSERROR_Scripting_ConversionFailed and dead catch.

Avoids the CRect copy or stops relying on optimization to avoid the
copy.
Split from D2142.

Differential Revision: https://code.wildfiregames.com/D2259
Tested on: gcc 9.1.0, Jenkins

This was SVN commit r22847.
This commit is contained in:
elexis 2019-09-04 16:15:37 +00:00
parent c25ab670e6
commit d5c1fd09a4
5 changed files with 47 additions and 71 deletions

View File

@ -211,6 +211,16 @@ template<> bool ScriptInterface::FromJSVal<CPos>(JSContext* cx, JS::HandleValue
return true;
}
template<> void ScriptInterface::ToJSVal<CRect>(JSContext* cx, JS::MutableHandleValue ret, const CRect& val)
{
ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface->CreateObject(
ret,
"left", val.left,
"right", val.right,
"top", val.top,
"bottom", val.bottom);
}
template<> void ScriptInterface::ToJSVal<CClientArea>(JSContext* cx, JS::MutableHandleValue ret, const CClientArea& val)
{
val.ToJSVal(cx, ret);

View File

@ -98,29 +98,23 @@ bool JSI_GUISize::toString(JSContext* cx, uint argc, JS::Value* vp)
JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
CStr buffer;
try
{
ScriptInterface* pScriptInterface = ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface;
double val, valr;
ScriptInterface* pScriptInterface = ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface;
double val, valr;
#define SIDE(side) \
pScriptInterface->GetProperty(args.thisv(), #side, val); \
pScriptInterface->GetProperty(args.thisv(), "r"#side, valr); \
buffer += ToPercentString(val, valr);
SIDE(left);
buffer += " ";
SIDE(top);
buffer += " ";
SIDE(right);
buffer += " ";
SIDE(bottom);
SIDE(left);
buffer += " ";
SIDE(top);
buffer += " ";
SIDE(right);
buffer += " ";
SIDE(bottom);
#undef SIDE
}
catch (PSERROR_Scripting_ConversionFailed&)
{
ScriptInterface::ToJSVal(cx, args.rval(), std::string("<Error converting value to numbers>"));
return true;
}
ScriptInterface::ToJSVal(cx, args.rval(), buffer);
return true;
}

View File

@ -228,24 +228,7 @@ bool JSI_IGUIObject::getComputedSize(JSContext* cx, uint argc, JS::Value* vp)
return false;
e->UpdateCachedSize();
CRect size = e->m_CachedActualSize;
ScriptInterface::ToJSVal(cx, args.rval(), e->m_CachedActualSize);
JS::RootedValue objVal(cx);
try
{
ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface->CreateObject(
&objVal,
"left", size.left,
"right", size.right,
"top", size.top,
"bottom", size.bottom);
}
catch (PSERROR_Scripting_ConversionFailed&)
{
debug_warn(L"Error creating size object!");
return false;
}
args.rval().set(objVal);
return true;
}

View File

@ -43,7 +43,6 @@ class PSERROR_GUI_OperationNeedsGUIObject : public PSERROR_GUI { public: PSERROR
class PSERROR_GUI_UnableToParse : public PSERROR_GUI { public: PSERROR_GUI_UnableToParse(); PSERROR_GUI_UnableToParse(const char* msg); PSRETURN getCode() const; };
class PSERROR_Game_World_MapLoadFailed : public PSERROR_Game_World { public: PSERROR_Game_World_MapLoadFailed(); PSERROR_Game_World_MapLoadFailed(const char* msg); PSRETURN getCode() const; };
class PSERROR_Scripting_CallFunctionFailed : public PSERROR_Scripting { public: PSERROR_Scripting_CallFunctionFailed(); PSERROR_Scripting_CallFunctionFailed(const char* msg); PSRETURN getCode() const; };
class PSERROR_Scripting_ConversionFailed : public PSERROR_Scripting { public: PSERROR_Scripting_ConversionFailed(); PSERROR_Scripting_ConversionFailed(const char* msg); PSRETURN getCode() const; };
class PSERROR_Scripting_CreateObjectFailed : public PSERROR_Scripting { public: PSERROR_Scripting_CreateObjectFailed(); PSERROR_Scripting_CreateObjectFailed(const char* msg); PSRETURN getCode() const; };
class PSERROR_Scripting_DefineConstantFailed : public PSERROR_Scripting { public: PSERROR_Scripting_DefineConstantFailed(); PSERROR_Scripting_DefineConstantFailed(const char* msg); PSRETURN getCode() const; };
class PSERROR_Scripting_DefineType_AlreadyExists : public PSERROR_Scripting_DefineType { public: PSERROR_Scripting_DefineType_AlreadyExists(); PSERROR_Scripting_DefineType_AlreadyExists(const char* msg); PSRETURN getCode() const; };
@ -90,12 +89,11 @@ extern const PSRETURN PSRETURN_Scripting_DefineType_CreationFailed = 0x08010002;
extern const PSRETURN PSRETURN_Scripting_LoadFile_EvalErrors = 0x08020001;
extern const PSRETURN PSRETURN_Scripting_LoadFile_OpenFailed = 0x08020002;
extern const PSRETURN PSRETURN_Scripting_CallFunctionFailed = 0x08000001;
extern const PSRETURN PSRETURN_Scripting_ConversionFailed = 0x08000002;
extern const PSRETURN PSRETURN_Scripting_CreateObjectFailed = 0x08000003;
extern const PSRETURN PSRETURN_Scripting_DefineConstantFailed = 0x08000004;
extern const PSRETURN PSRETURN_Scripting_RegisterFunctionFailed = 0x08000005;
extern const PSRETURN PSRETURN_Scripting_SetupFailed = 0x08000006;
extern const PSRETURN PSRETURN_Scripting_TypeDoesNotExist = 0x08000007;
extern const PSRETURN PSRETURN_Scripting_CreateObjectFailed = 0x08000002;
extern const PSRETURN PSRETURN_Scripting_DefineConstantFailed = 0x08000003;
extern const PSRETURN PSRETURN_Scripting_RegisterFunctionFailed = 0x08000004;
extern const PSRETURN PSRETURN_Scripting_SetupFailed = 0x08000005;
extern const PSRETURN PSRETURN_Scripting_TypeDoesNotExist = 0x08000006;
extern const PSRETURN PSRETURN_Serialize_InvalidCharInString = 0x09000001;
extern const PSRETURN PSRETURN_Serialize_InvalidScriptValue = 0x09000002;
extern const PSRETURN PSRETURN_Serialize_OutOfBounds = 0x09000003;
@ -189,18 +187,16 @@ extern const PSRETURN MASK__PSRETURN_Scripting_LoadFile_OpenFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_LoadFile_OpenFailed = 0x08020002;
extern const PSRETURN MASK__PSRETURN_Scripting_CallFunctionFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_CallFunctionFailed = 0x08000001;
extern const PSRETURN MASK__PSRETURN_Scripting_ConversionFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_ConversionFailed = 0x08000002;
extern const PSRETURN MASK__PSRETURN_Scripting_CreateObjectFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_CreateObjectFailed = 0x08000003;
extern const PSRETURN CODE__PSRETURN_Scripting_CreateObjectFailed = 0x08000002;
extern const PSRETURN MASK__PSRETURN_Scripting_DefineConstantFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_DefineConstantFailed = 0x08000004;
extern const PSRETURN CODE__PSRETURN_Scripting_DefineConstantFailed = 0x08000003;
extern const PSRETURN MASK__PSRETURN_Scripting_RegisterFunctionFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_RegisterFunctionFailed = 0x08000005;
extern const PSRETURN CODE__PSRETURN_Scripting_RegisterFunctionFailed = 0x08000004;
extern const PSRETURN MASK__PSRETURN_Scripting_SetupFailed = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_SetupFailed = 0x08000006;
extern const PSRETURN CODE__PSRETURN_Scripting_SetupFailed = 0x08000005;
extern const PSRETURN MASK__PSRETURN_Scripting_TypeDoesNotExist = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Scripting_TypeDoesNotExist = 0x08000007;
extern const PSRETURN CODE__PSRETURN_Scripting_TypeDoesNotExist = 0x08000006;
extern const PSRETURN MASK__PSRETURN_Serialize_InvalidCharInString = 0xffffffff;
extern const PSRETURN CODE__PSRETURN_Serialize_InvalidCharInString = 0x09000001;
extern const PSRETURN MASK__PSRETURN_Serialize_InvalidScriptValue = 0xffffffff;
@ -343,29 +339,25 @@ PSERROR_Scripting_CallFunctionFailed::PSERROR_Scripting_CallFunctionFailed() : P
PSERROR_Scripting_CallFunctionFailed::PSERROR_Scripting_CallFunctionFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_CallFunctionFailed::getCode() const { return 0x08000001; }
PSERROR_Scripting_ConversionFailed::PSERROR_Scripting_ConversionFailed() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_ConversionFailed::PSERROR_Scripting_ConversionFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_ConversionFailed::getCode() const { return 0x08000002; }
PSERROR_Scripting_CreateObjectFailed::PSERROR_Scripting_CreateObjectFailed() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_CreateObjectFailed::PSERROR_Scripting_CreateObjectFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_CreateObjectFailed::getCode() const { return 0x08000003; }
PSRETURN PSERROR_Scripting_CreateObjectFailed::getCode() const { return 0x08000002; }
PSERROR_Scripting_DefineConstantFailed::PSERROR_Scripting_DefineConstantFailed() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_DefineConstantFailed::PSERROR_Scripting_DefineConstantFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_DefineConstantFailed::getCode() const { return 0x08000004; }
PSRETURN PSERROR_Scripting_DefineConstantFailed::getCode() const { return 0x08000003; }
PSERROR_Scripting_RegisterFunctionFailed::PSERROR_Scripting_RegisterFunctionFailed() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_RegisterFunctionFailed::PSERROR_Scripting_RegisterFunctionFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_RegisterFunctionFailed::getCode() const { return 0x08000005; }
PSRETURN PSERROR_Scripting_RegisterFunctionFailed::getCode() const { return 0x08000004; }
PSERROR_Scripting_SetupFailed::PSERROR_Scripting_SetupFailed() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_SetupFailed::PSERROR_Scripting_SetupFailed(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_SetupFailed::getCode() const { return 0x08000006; }
PSRETURN PSERROR_Scripting_SetupFailed::getCode() const { return 0x08000005; }
PSERROR_Scripting_TypeDoesNotExist::PSERROR_Scripting_TypeDoesNotExist() : PSERROR_Scripting(NULL) { }
PSERROR_Scripting_TypeDoesNotExist::PSERROR_Scripting_TypeDoesNotExist(const char* msg) : PSERROR_Scripting(msg) { }
PSRETURN PSERROR_Scripting_TypeDoesNotExist::getCode() const { return 0x08000007; }
PSRETURN PSERROR_Scripting_TypeDoesNotExist::getCode() const { return 0x08000006; }
PSERROR_Serialize_InvalidCharInString::PSERROR_Serialize_InvalidCharInString() : PSERROR_Serialize(NULL) { }
PSERROR_Serialize_InvalidCharInString::PSERROR_Serialize_InvalidCharInString(const char* msg) : PSERROR_Serialize(msg) { }
@ -442,12 +434,11 @@ const char* GetErrorString(PSRETURN code)
case 0x08020001: return "Scripting_LoadFile_EvalErrors";
case 0x08020002: return "Scripting_LoadFile_OpenFailed";
case 0x08000001: return "Scripting_CallFunctionFailed";
case 0x08000002: return "Scripting_ConversionFailed";
case 0x08000003: return "Scripting_CreateObjectFailed";
case 0x08000004: return "Scripting_DefineConstantFailed";
case 0x08000005: return "Scripting_RegisterFunctionFailed";
case 0x08000006: return "Scripting_SetupFailed";
case 0x08000007: return "Scripting_TypeDoesNotExist";
case 0x08000002: return "Scripting_CreateObjectFailed";
case 0x08000003: return "Scripting_DefineConstantFailed";
case 0x08000004: return "Scripting_RegisterFunctionFailed";
case 0x08000005: return "Scripting_SetupFailed";
case 0x08000006: return "Scripting_TypeDoesNotExist";
case 0x09000001: return "Serialize_InvalidCharInString";
case 0x09000002: return "Serialize_InvalidScriptValue";
case 0x09000003: return "Serialize_OutOfBounds";
@ -493,12 +484,11 @@ void ThrowError(PSRETURN code)
case 0x08020001: throw PSERROR_Scripting_LoadFile_EvalErrors(); break;
case 0x08020002: throw PSERROR_Scripting_LoadFile_OpenFailed(); break;
case 0x08000001: throw PSERROR_Scripting_CallFunctionFailed(); break;
case 0x08000002: throw PSERROR_Scripting_ConversionFailed(); break;
case 0x08000003: throw PSERROR_Scripting_CreateObjectFailed(); break;
case 0x08000004: throw PSERROR_Scripting_DefineConstantFailed(); break;
case 0x08000005: throw PSERROR_Scripting_RegisterFunctionFailed(); break;
case 0x08000006: throw PSERROR_Scripting_SetupFailed(); break;
case 0x08000007: throw PSERROR_Scripting_TypeDoesNotExist(); break;
case 0x08000002: throw PSERROR_Scripting_CreateObjectFailed(); break;
case 0x08000003: throw PSERROR_Scripting_DefineConstantFailed(); break;
case 0x08000004: throw PSERROR_Scripting_RegisterFunctionFailed(); break;
case 0x08000005: throw PSERROR_Scripting_SetupFailed(); break;
case 0x08000006: throw PSERROR_Scripting_TypeDoesNotExist(); break;
case 0x09000001: throw PSERROR_Serialize_InvalidCharInString(); break;
case 0x09000002: throw PSERROR_Serialize_InvalidScriptValue(); break;
case 0x09000003: throw PSERROR_Serialize_OutOfBounds(); break;

View File

@ -33,7 +33,6 @@ ERROR_SUBGROUP(Scripting, LoadFile);
ERROR_TYPE(Scripting_LoadFile, OpenFailed);
ERROR_TYPE(Scripting_LoadFile, EvalErrors);
ERROR_TYPE(Scripting, ConversionFailed);
ERROR_TYPE(Scripting, CallFunctionFailed);
ERROR_TYPE(Scripting, RegisterFunctionFailed);
ERROR_TYPE(Scripting, DefineConstantFailed);