Split JS conversions from ScriptInterface.
All ToJSVal/FromJSVal definitions are put in a separate header. Remove AssignOr[To/From]JSVal duplication. The functions were already static so this is rather straightforward. Follows34b1920e7b
and2bae30c454
Differential Revision: https://code.wildfiregames.com/D3953 This was SVN commit r25428.
This commit is contained in:
parent
d798a2ec0e
commit
61e0aef0b4
@ -323,7 +323,7 @@ JS::Value CMapGeneratorWorker::LoadHeightmap(const VfsPath& filename)
|
||||
|
||||
ScriptRequest rq(m_ScriptInterface);
|
||||
JS::RootedValue returnValue(rq.cx);
|
||||
ToJSVal_vector(rq, &returnValue, heightmap);
|
||||
Script::ToJSVal(rq, &returnValue, heightmap);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
@ -72,7 +72,7 @@ bool CGUISimpleSetting<CGUIColor>::DoFromJSVal(const ScriptRequest& rq, JS::Hand
|
||||
if (value.isString())
|
||||
{
|
||||
CStr name;
|
||||
if (!ScriptInterface::FromJSVal(rq, value, name))
|
||||
if (!Script::FromJSVal(rq, value, name))
|
||||
return false;
|
||||
|
||||
if (!m_Setting.ParseString(m_pObject.GetGUI(), name))
|
||||
@ -82,20 +82,19 @@ bool CGUISimpleSetting<CGUIColor>::DoFromJSVal(const ScriptRequest& rq, JS::Hand
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return ScriptInterface::FromJSVal<CColor>(rq, value, m_Setting);
|
||||
return Script::FromJSVal<CColor>(rq, value, m_Setting);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
bool CGUISimpleSetting<T>::DoFromJSVal(const ScriptRequest& rq, JS::HandleValue value)
|
||||
{
|
||||
return ScriptInterface::FromJSVal<T>(rq, value, m_Setting);
|
||||
return Script::FromJSVal<T>(rq, value, m_Setting);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
void CGUISimpleSetting<T>::ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue value)
|
||||
{
|
||||
ScriptInterface::ToJSVal<T>(rq, value, m_Setting);
|
||||
Script::ToJSVal<T>(rq, value, m_Setting);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -41,12 +41,12 @@ public:
|
||||
bool FromString(const CStrW& value, const bool sendMessage);
|
||||
|
||||
/**
|
||||
* Parses the given JS::Value using ScriptInterface::FromJSVal and assigns it to the setting data.
|
||||
* Parses the given JS::Value using Script::FromJSVal and assigns it to the setting data.
|
||||
*/
|
||||
bool FromJSVal(const ScriptRequest& rq, JS::HandleValue value, const bool sendMessage);
|
||||
|
||||
/**
|
||||
* Converts the setting data to a JS::Value using ScriptInterface::ToJSVal.
|
||||
* Converts the setting data to a JS::Value using Script::ToJSVal.
|
||||
*/
|
||||
virtual void ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue value) = 0;
|
||||
|
||||
|
@ -31,13 +31,13 @@ const CStr CHotkeyPicker::EventNameCombination = "Combination";
|
||||
const CStr CHotkeyPicker::EventNameKeyChange = "KeyChange";
|
||||
|
||||
// Don't send the scancode, JS doesn't care.
|
||||
template<> void ScriptInterface::ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue ret, const CHotkeyPicker::Key& val)
|
||||
template<> void Script::ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue ret, const CHotkeyPicker::Key& val)
|
||||
{
|
||||
ScriptInterface::ToJSVal(rq, ret, val.scancodeName);
|
||||
Script::ToJSVal(rq, ret, val.scancodeName);
|
||||
}
|
||||
|
||||
// Unused, but JSVAL_VECTOR requires it.
|
||||
template<> bool ScriptInterface::FromJSVal(const ScriptRequest&, const JS::HandleValue, CHotkeyPicker::Key&)
|
||||
template<> bool Script::FromJSVal(const ScriptRequest&, const JS::HandleValue, CHotkeyPicker::Key&)
|
||||
{
|
||||
LOGWARNING("FromJSVal<CHotkeyPicker>: Not implemented");
|
||||
return false;
|
||||
@ -61,7 +61,7 @@ void CHotkeyPicker::FireEvent(const CStr& event)
|
||||
|
||||
JS::RootedValueArray<1> args(rq.cx);
|
||||
JS::RootedValue keys(rq.cx);
|
||||
m_pGUI.GetScriptInterface()->ToJSVal(rq, &keys, m_KeysPressed);
|
||||
Script::ToJSVal(rq, &keys, m_KeysPressed);
|
||||
args[0].set(keys);
|
||||
ScriptEvent(event, args);
|
||||
}
|
||||
|
@ -38,7 +38,6 @@ class CHotkeyPicker : public IGUIObject
|
||||
{
|
||||
GUI_OBJECT(CHotkeyPicker)
|
||||
|
||||
friend class ScriptInterface;
|
||||
public:
|
||||
CHotkeyPicker(CGUI& pGUI);
|
||||
virtual ~CHotkeyPicker();
|
||||
@ -54,6 +53,14 @@ public:
|
||||
|
||||
// Pre-empt events: this is our sole purpose.
|
||||
virtual InReaction PreemptEvent(const SDL_Event_* ev);
|
||||
|
||||
struct Key
|
||||
{
|
||||
// The scancode is used for fast comparisons.
|
||||
SDL_Scancode code;
|
||||
// This is the name ultimately stored in the config file.
|
||||
CStr scancodeName;
|
||||
};
|
||||
protected:
|
||||
// Fire an event with m_KeysPressed as argument.
|
||||
void FireEvent(const CStr& event);
|
||||
@ -64,13 +71,6 @@ protected:
|
||||
double m_LastKeyChange;
|
||||
|
||||
// Keep track of which keys we are pressing, and precompute their name for JS code.
|
||||
struct Key
|
||||
{
|
||||
// The scancode is used for fast comparisons.
|
||||
SDL_Scancode code;
|
||||
// This is the name ultimately stored in the config file.
|
||||
CStr scancodeName;
|
||||
};
|
||||
std::vector<Key> m_KeysPressed;
|
||||
|
||||
static const CStr EventNameCombination;
|
||||
|
@ -284,7 +284,7 @@ bool CMiniMap::FireWorldClickEvent(int button, int UNUSED(clicks))
|
||||
ScriptInterface::CreateObject(rq, &coords, "x", x, "z", z);
|
||||
|
||||
JS::RootedValue buttonJs(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &buttonJs, button);
|
||||
Script::ToJSVal(rq, &buttonJs, button);
|
||||
|
||||
JS::RootedValueVector paramData(rq.cx);
|
||||
ignore_result(paramData.append(coords));
|
||||
|
@ -29,14 +29,15 @@
|
||||
#include "ps/Hotkey.h"
|
||||
#include "ps/CLogger.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptInterface.h" // CreateObject
|
||||
|
||||
#include <string>
|
||||
|
||||
#define SET(obj, name, value) STMT(JS::RootedValue v_(rq.cx); AssignOrToJSVal(rq, &v_, (value)); JS_SetProperty(rq.cx, obj, (name), v_))
|
||||
#define SET(obj, name, value) STMT(JS::RootedValue v_(rq.cx); Script::ToJSVal(rq, &v_, (value)); JS_SetProperty(rq.cx, obj, (name), v_))
|
||||
// ignore JS_SetProperty return value, because errors should be impossible
|
||||
// and we can't do anything useful in the case of errors anyway
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<SDL_Event_>(const ScriptRequest& rq, JS::MutableHandleValue ret, SDL_Event_ const& val)
|
||||
template<> void Script::ToJSVal<SDL_Event_>(const ScriptRequest& rq, JS::MutableHandleValue ret, SDL_Event_ const& val)
|
||||
{
|
||||
const char* typeName;
|
||||
|
||||
@ -129,7 +130,7 @@ template<> void ScriptInterface::ToJSVal<SDL_Event_>(const ScriptRequest& rq, JS
|
||||
ret.setObject(*obj);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<IGUIObject*>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, IGUIObject* const& val)
|
||||
template<> void Script::ToJSVal<IGUIObject*>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, IGUIObject* const& val)
|
||||
{
|
||||
if (val == nullptr)
|
||||
ret.setNull();
|
||||
@ -137,7 +138,7 @@ template<> void ScriptInterface::ToJSVal<IGUIObject*>(const ScriptRequest& UNUSE
|
||||
ret.setObject(*val->GetJSObject());
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<IGUIObject*>(const ScriptRequest& rq, JS::HandleValue v, IGUIObject*& out)
|
||||
template<> bool Script::FromJSVal<IGUIObject*>(const ScriptRequest& rq, JS::HandleValue v, IGUIObject*& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
{
|
||||
@ -153,12 +154,12 @@ template<> bool ScriptInterface::FromJSVal<IGUIObject*>(const ScriptRequest& rq,
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUIString>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIString& val)
|
||||
template<> void Script::ToJSVal<CGUIString>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIString& val)
|
||||
{
|
||||
ScriptInterface::ToJSVal(rq, ret, val.GetOriginalString());
|
||||
Script::ToJSVal(rq, ret, val.GetOriginalString());
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CGUIString>(const ScriptRequest& rq, JS::HandleValue v, CGUIString& out)
|
||||
template<> bool Script::FromJSVal<CGUIString>(const ScriptRequest& rq, JS::HandleValue v, CGUIString& out)
|
||||
{
|
||||
std::wstring val;
|
||||
if (!FromJSVal(rq, v, val))
|
||||
@ -171,7 +172,7 @@ JSVAL_VECTOR(CVector2D)
|
||||
JSVAL_VECTOR(std::vector<CVector2D>)
|
||||
JSVAL_VECTOR(CGUIString)
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUIColor>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIColor& val)
|
||||
template<> void Script::ToJSVal<CGUIColor>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIColor& val)
|
||||
{
|
||||
ToJSVal<CColor>(rq, ret, val);
|
||||
}
|
||||
@ -179,11 +180,11 @@ template<> void ScriptInterface::ToJSVal<CGUIColor>(const ScriptRequest& rq, JS:
|
||||
/**
|
||||
* The color depends on the predefined color database stored in the current GUI page.
|
||||
*/
|
||||
template<> bool ScriptInterface::FromJSVal<CGUIColor>(const ScriptRequest& rq, JS::HandleValue v, CGUIColor& out) = delete;
|
||||
template<> bool Script::FromJSVal<CGUIColor>(const ScriptRequest& rq, JS::HandleValue v, CGUIColor& out) = delete;
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CRect>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CRect& val)
|
||||
template<> void Script::ToJSVal<CRect>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CRect& val)
|
||||
{
|
||||
CreateObject(
|
||||
ScriptInterface::CreateObject(
|
||||
rq,
|
||||
ret,
|
||||
"left", val.left,
|
||||
@ -192,37 +193,37 @@ template<> void ScriptInterface::ToJSVal<CRect>(const ScriptRequest& rq, JS::Mut
|
||||
"bottom", val.bottom);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUISize>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISize& val)
|
||||
template<> void Script::ToJSVal<CGUISize>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISize& val)
|
||||
{
|
||||
val.ToJSVal(rq, ret);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CGUISize>(const ScriptRequest& rq, JS::HandleValue v, CGUISize& out)
|
||||
template<> bool Script::FromJSVal<CGUISize>(const ScriptRequest& rq, JS::HandleValue v, CGUISize& out)
|
||||
{
|
||||
return out.FromJSVal(rq, v);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUIList>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIList& val)
|
||||
template<> void Script::ToJSVal<CGUIList>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIList& val)
|
||||
{
|
||||
ToJSVal(rq, ret, val.m_Items);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CGUIList>(const ScriptRequest& rq, JS::HandleValue v, CGUIList& out)
|
||||
template<> bool Script::FromJSVal<CGUIList>(const ScriptRequest& rq, JS::HandleValue v, CGUIList& out)
|
||||
{
|
||||
return FromJSVal(rq, v, out.m_Items);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUISeries>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISeries& val)
|
||||
template<> void Script::ToJSVal<CGUISeries>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISeries& val)
|
||||
{
|
||||
ToJSVal(rq, ret, val.m_Series);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CGUISeries>(const ScriptRequest& rq, JS::HandleValue v, CGUISeries& out)
|
||||
template<> bool Script::FromJSVal<CGUISeries>(const ScriptRequest& rq, JS::HandleValue v, CGUISeries& out)
|
||||
{
|
||||
return FromJSVal(rq, v, out.m_Series);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<EVAlign>(const ScriptRequest& rq, JS::MutableHandleValue ret, const EVAlign& val)
|
||||
template<> void Script::ToJSVal<EVAlign>(const ScriptRequest& rq, JS::MutableHandleValue ret, const EVAlign& val)
|
||||
{
|
||||
std::string word;
|
||||
switch (val)
|
||||
@ -247,7 +248,7 @@ template<> void ScriptInterface::ToJSVal<EVAlign>(const ScriptRequest& rq, JS::M
|
||||
ToJSVal(rq, ret, word);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<EVAlign>(const ScriptRequest& rq, JS::HandleValue v, EVAlign& out)
|
||||
template<> bool Script::FromJSVal<EVAlign>(const ScriptRequest& rq, JS::HandleValue v, EVAlign& out)
|
||||
{
|
||||
std::string word;
|
||||
FromJSVal(rq, v, word);
|
||||
@ -267,7 +268,7 @@ template<> bool ScriptInterface::FromJSVal<EVAlign>(const ScriptRequest& rq, JS:
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<EAlign>(const ScriptRequest& rq, JS::MutableHandleValue ret, const EAlign& val)
|
||||
template<> void Script::ToJSVal<EAlign>(const ScriptRequest& rq, JS::MutableHandleValue ret, const EAlign& val)
|
||||
{
|
||||
std::string word;
|
||||
switch (val)
|
||||
@ -289,7 +290,7 @@ template<> void ScriptInterface::ToJSVal<EAlign>(const ScriptRequest& rq, JS::Mu
|
||||
ToJSVal(rq, ret, word);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<EAlign>(const ScriptRequest& rq, JS::HandleValue v, EAlign& out)
|
||||
template<> bool Script::FromJSVal<EAlign>(const ScriptRequest& rq, JS::HandleValue v, EAlign& out)
|
||||
{
|
||||
std::string word;
|
||||
FromJSVal(rq, v, word);
|
||||
@ -309,12 +310,12 @@ template<> bool ScriptInterface::FromJSVal<EAlign>(const ScriptRequest& rq, JS::
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CGUISpriteInstance>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISpriteInstance& val)
|
||||
template<> void Script::ToJSVal<CGUISpriteInstance>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUISpriteInstance& val)
|
||||
{
|
||||
ToJSVal(rq, ret, val.GetName());
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CGUISpriteInstance>(const ScriptRequest& rq, JS::HandleValue v, CGUISpriteInstance& out)
|
||||
template<> bool Script::FromJSVal<CGUISpriteInstance>(const ScriptRequest& rq, JS::HandleValue v, CGUISpriteInstance& out)
|
||||
{
|
||||
std::string name;
|
||||
if (!FromJSVal(rq, v, name))
|
||||
@ -324,12 +325,12 @@ template<> bool ScriptInterface::FromJSVal<CGUISpriteInstance>(const ScriptReque
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CSize2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CSize2D& val)
|
||||
template<> void Script::ToJSVal<CSize2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CSize2D& val)
|
||||
{
|
||||
CreateObject(rq, ret, "width", val.Width, "height", val.Height);
|
||||
ScriptInterface::CreateObject(rq, ret, "width", val.Width, "height", val.Height);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CSize2D>(const ScriptRequest& rq, JS::HandleValue v, CSize2D& out)
|
||||
template<> bool Script::FromJSVal<CSize2D>(const ScriptRequest& rq, JS::HandleValue v, CSize2D& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
{
|
||||
@ -352,12 +353,12 @@ template<> bool ScriptInterface::FromJSVal<CSize2D>(const ScriptRequest& rq, JS:
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CVector2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CVector2D& val)
|
||||
template<> void Script::ToJSVal<CVector2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CVector2D& val)
|
||||
{
|
||||
CreateObject(rq, ret, "x", val.X, "y", val.Y);
|
||||
ScriptInterface::CreateObject(rq, ret, "x", val.X, "y", val.Y);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CVector2D>(const ScriptRequest& rq, JS::HandleValue v, CVector2D& out)
|
||||
template<> bool Script::FromJSVal<CVector2D>(const ScriptRequest& rq, JS::HandleValue v, CVector2D& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
{
|
||||
|
@ -176,7 +176,7 @@ bool JSI_GUIProxy<T>::get(JSContext* cx, JS::HandleObject proxy, JS::HandleValue
|
||||
return false;
|
||||
|
||||
std::string propName;
|
||||
if (!ScriptInterface::FromJSVal(rq, idval, propName))
|
||||
if (!Script::FromJSVal(rq, idval, propName))
|
||||
return false;
|
||||
|
||||
// Return function properties. Specializable.
|
||||
@ -217,7 +217,7 @@ bool JSI_GUIProxy<T>::get(JSContext* cx, JS::HandleObject proxy, JS::HandleValue
|
||||
}
|
||||
else if (propName == "name")
|
||||
{
|
||||
ScriptInterface::ToJSVal(rq, vp, e->GetName());
|
||||
Script::ToJSVal(rq, vp, e->GetName());
|
||||
return true;
|
||||
}
|
||||
else if (e->SettingExists(propName))
|
||||
@ -249,13 +249,13 @@ bool JSI_GUIProxy<T>::set(JSContext* cx, JS::HandleObject proxy, JS::HandleId id
|
||||
return result.fail(JSMSG_BAD_PROP_ID);
|
||||
|
||||
std::string propName;
|
||||
if (!ScriptInterface::FromJSVal(rq, idval, propName))
|
||||
if (!Script::FromJSVal(rq, idval, propName))
|
||||
return result.fail(JSMSG_BAD_PROP_ID);
|
||||
|
||||
if (propName == "name")
|
||||
{
|
||||
std::string value;
|
||||
if (!ScriptInterface::FromJSVal(rq, vp, value))
|
||||
if (!Script::FromJSVal(rq, vp, value))
|
||||
return result.fail(JSMSG_BAD_PROP_ID);
|
||||
e->SetName(value);
|
||||
return result.succeed();
|
||||
@ -304,7 +304,7 @@ bool JSI_GUIProxy<T>::delete_(JSContext* cx, JS::HandleObject proxy, JS::HandleI
|
||||
return result.fail(JSMSG_BAD_PROP_ID);
|
||||
|
||||
std::string propName;
|
||||
if (!ScriptInterface::FromJSVal(rq, idval, propName))
|
||||
if (!Script::FromJSVal(rq, idval, propName))
|
||||
return result.fail(JSMSG_BAD_PROP_ID);
|
||||
|
||||
// event handlers
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -124,6 +124,6 @@ bool JSI_GUISize::toString(JSContext* cx, uint argc, JS::Value* vp)
|
||||
SIDE(bottom);
|
||||
#undef SIDE
|
||||
|
||||
ScriptInterface::ToJSVal(rq, args.rval(), buffer);
|
||||
Script::ToJSVal(rq, args.rval(), buffer);
|
||||
return true;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
|
||||
#include "gui/CGUI.h"
|
||||
#include "gui/ObjectBases/IGUIObject.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
|
||||
bool CGUIHotkey::DoFromString(const CStrW& value)
|
||||
{
|
||||
@ -34,7 +34,7 @@ bool CGUIHotkey::DoFromString(const CStrW& value)
|
||||
bool CGUIHotkey::DoFromJSVal(const ScriptRequest& rq, JS::HandleValue value)
|
||||
{
|
||||
m_pObject.GetGUI().UnsetObjectHotkey(&m_pObject, m_Setting);
|
||||
if (!ScriptInterface::FromJSVal(rq, value, m_Setting))
|
||||
if (!Script::FromJSVal(rq, value, m_Setting))
|
||||
return false;
|
||||
m_pObject.GetGUI().SetObjectHotkey(&m_pObject, m_Setting);
|
||||
return true;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -182,7 +182,7 @@ bool CGUISize::FromJSVal(const ScriptRequest& rq, JS::HandleValue v)
|
||||
if (v.isString())
|
||||
{
|
||||
CStrW str;
|
||||
if (!ScriptInterface::FromJSVal(rq, v, str))
|
||||
if (!Script::FromJSVal(rq, v, str))
|
||||
{
|
||||
LOGERROR("CGUISize could not read JS string");
|
||||
return false;
|
||||
|
@ -26,7 +26,7 @@
|
||||
#include "ps/Filesystem.h"
|
||||
#include "ps/CLogger.h"
|
||||
#include "ps/CStr.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
|
||||
class IGUIObject;
|
||||
class IGUISetting;
|
||||
@ -53,13 +53,13 @@ CGUIMouseEventMask::~CGUIMouseEventMask()
|
||||
|
||||
void CGUIMouseEventMask::ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue Value)
|
||||
{
|
||||
ScriptInterface::ToJSVal(rq, Value, m_Spec);
|
||||
Script::ToJSVal(rq, Value, m_Spec);
|
||||
}
|
||||
|
||||
bool CGUIMouseEventMask::DoFromJSVal(const ScriptRequest& rq, JS::HandleValue value)
|
||||
{
|
||||
CStrW spec;
|
||||
if (!ScriptInterface::FromJSVal(rq, value, spec))
|
||||
if (!Script::FromJSVal(rq, value, spec))
|
||||
return false;
|
||||
return DoFromString(spec);
|
||||
}
|
||||
|
@ -83,37 +83,37 @@ public:
|
||||
// called, to avoid infinite additions of objects.
|
||||
g_GUI->TickObjects();
|
||||
pageScriptInterface.GetProperty(global, "called1", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 1);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called2", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 1);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called3", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 0);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called4", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 0);
|
||||
|
||||
// Ticking again will still call the second object, but also the fourth.
|
||||
g_GUI->TickObjects();
|
||||
pageScriptInterface.GetProperty(global, "called1", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 1);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called2", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 2);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called3", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 0);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "called4", &js_called_value);
|
||||
ScriptInterface::FromJSVal(prq, js_called_value, called_value);
|
||||
Script::FromJSVal(prq, js_called_value, called_value);
|
||||
TS_ASSERT_EQUALS(called_value, 1);
|
||||
}
|
||||
|
||||
@ -155,12 +155,12 @@ public:
|
||||
JS::RootedValue js_hotkey_pressed_value(prq.cx);
|
||||
|
||||
pageScriptInterface.GetProperty(global, "state_before", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, true);
|
||||
|
||||
hotkey_pressed_value = false;
|
||||
pageScriptInterface.GetProperty(global, "state_after", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, true);
|
||||
|
||||
// We are listening to KeyDown events, so repeat shouldn't matter.
|
||||
@ -171,12 +171,12 @@ public:
|
||||
|
||||
hotkey_pressed_value = false;
|
||||
pageScriptInterface.GetProperty(global, "state_before", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, true);
|
||||
|
||||
hotkey_pressed_value = false;
|
||||
pageScriptInterface.GetProperty(global, "state_after", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, true);
|
||||
|
||||
hotkeyNotification.ev.type = SDL_KEYUP;
|
||||
@ -186,12 +186,12 @@ public:
|
||||
|
||||
hotkey_pressed_value = true;
|
||||
pageScriptInterface.GetProperty(global, "state_before", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, false);
|
||||
|
||||
hotkey_pressed_value = true;
|
||||
pageScriptInterface.GetProperty(global, "state_after", &js_hotkey_pressed_value);
|
||||
ScriptInterface::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
Script::FromJSVal(prq, js_hotkey_pressed_value, hotkey_pressed_value);
|
||||
TS_ASSERT_EQUALS(hotkey_pressed_value, false);
|
||||
|
||||
UnloadHotkeys();
|
||||
|
@ -692,7 +692,7 @@ template<typename T, typename... Args>
|
||||
void SetGUIMessageProperty(const ScriptRequest& rq, JS::HandleObject messageObj, const std::string& propertyName, const T& propertyValue, Args const&... args)
|
||||
{
|
||||
JS::RootedValue scriptPropertyValue(rq.cx);
|
||||
ScriptInterface::AssignOrToJSVal(rq, &scriptPropertyValue, propertyValue);
|
||||
Script::ToJSVal(rq, &scriptPropertyValue, propertyValue);
|
||||
JS_DefineProperty(rq.cx, messageObj, propertyName.c_str(), scriptPropertyValue, JSPROP_ENUMERATE);
|
||||
SetGUIMessageProperty(rq, messageObj, args...);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2019 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -23,37 +23,37 @@
|
||||
#include "lobby/XmppClient.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<glooxwrapper::string>(const ScriptRequest& rq, JS::MutableHandleValue ret, const glooxwrapper::string& val)
|
||||
template<> void Script::ToJSVal<glooxwrapper::string>(const ScriptRequest& rq, JS::MutableHandleValue ret, const glooxwrapper::string& val)
|
||||
{
|
||||
ToJSVal(rq, ret, wstring_from_utf8(val.to_string()));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::Presence::PresenceType>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::Presence::PresenceType& val)
|
||||
template<> void Script::ToJSVal<gloox::Presence::PresenceType>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::Presence::PresenceType& val)
|
||||
{
|
||||
ToJSVal(rq, ret, XmppClient::GetPresenceString(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::MUCRoomRole>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::MUCRoomRole& val)
|
||||
template<> void Script::ToJSVal<gloox::MUCRoomRole>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::MUCRoomRole& val)
|
||||
{
|
||||
ToJSVal(rq, ret, XmppClient::GetRoleString(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::StanzaError>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::StanzaError& val)
|
||||
template<> void Script::ToJSVal<gloox::StanzaError>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::StanzaError& val)
|
||||
{
|
||||
ToJSVal(rq, ret, wstring_from_utf8(XmppClient::StanzaErrorToString(val)));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::ConnectionError>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::ConnectionError& val)
|
||||
template<> void Script::ToJSVal<gloox::ConnectionError>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::ConnectionError& val)
|
||||
{
|
||||
ToJSVal(rq, ret, wstring_from_utf8(XmppClient::ConnectionErrorToString(val)));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::RegistrationResult>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::RegistrationResult& val)
|
||||
template<> void Script::ToJSVal<gloox::RegistrationResult>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::RegistrationResult& val)
|
||||
{
|
||||
ToJSVal(rq, ret, wstring_from_utf8(XmppClient::RegistrationResultToString(val)));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<gloox::CertStatus>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::CertStatus& val)
|
||||
template<> void Script::ToJSVal<gloox::CertStatus>(const ScriptRequest& rq, JS::MutableHandleValue ret, const gloox::CertStatus& val)
|
||||
{
|
||||
ToJSVal(rq, ret, wstring_from_utf8(XmppClient::CertificateErrorToString(val)));
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ static void PumpEvents()
|
||||
if (g_GUI)
|
||||
{
|
||||
JS::RootedValue tmpVal(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &tmpVal, ev);
|
||||
Script::ToJSVal(rq, &tmpVal, ev);
|
||||
std::string data = g_GUI->GetScriptInterface()->StringifyJSON(&tmpVal);
|
||||
PROFILE2_ATTR("%s", data.c_str());
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ void GUI_DisplayLoadProgress(int percent, const wchar_t* pending_task)
|
||||
ignore_result(paramData.append(JS::NumberValue(percent)));
|
||||
|
||||
JS::RootedValue valPendingTask(rq.cx);
|
||||
scriptInterface.ToJSVal(rq, &valPendingTask, pending_task);
|
||||
Script::ToJSVal(rq, &valPendingTask, pending_task);
|
||||
ignore_result(paramData.append(valPendingTask));
|
||||
|
||||
g_GUI->SendEventToAll(g_EventNameGameLoadProgress, paramData);
|
||||
@ -1493,7 +1493,7 @@ bool Autostart(const CmdLineArgs& args)
|
||||
if (scriptInterface.HasProperty(settings, "TriggerScripts"))
|
||||
{
|
||||
scriptInterface.GetProperty(settings, "TriggerScripts", &triggerScripts);
|
||||
FromJSVal_vector(rq, triggerScripts, triggerScriptsVector);
|
||||
Script::FromJSVal(rq, triggerScripts, triggerScriptsVector);
|
||||
}
|
||||
|
||||
if (!CRenderer::IsInitialised())
|
||||
@ -1523,7 +1523,7 @@ bool Autostart(const CmdLineArgs& args)
|
||||
&& scriptInterface.GetProperty(data, "Scripts", &victoryScripts) && !victoryScripts.isUndefined())
|
||||
{
|
||||
std::vector<CStrW> victoryScriptsVector;
|
||||
FromJSVal_vector(rq, victoryScripts, victoryScriptsVector);
|
||||
Script::FromJSVal(rq, victoryScripts, victoryScriptsVector);
|
||||
triggerScriptsVector.insert(triggerScriptsVector.end(), victoryScriptsVector.begin(), victoryScriptsVector.end());
|
||||
}
|
||||
else
|
||||
@ -1533,7 +1533,7 @@ bool Autostart(const CmdLineArgs& args)
|
||||
}
|
||||
}
|
||||
|
||||
ToJSVal_vector(rq, &triggerScripts, triggerScriptsVector);
|
||||
Script::ToJSVal(rq, &triggerScripts, triggerScriptsVector);
|
||||
scriptInterface.SetProperty(settings, "TriggerScripts", triggerScripts);
|
||||
|
||||
int wonderDuration = 10;
|
||||
|
@ -314,7 +314,7 @@ JS::Value Mod::GetLoadedModsWithVersions(const ScriptInterface& scriptInterface)
|
||||
{
|
||||
ScriptRequest rq(scriptInterface);
|
||||
JS::RootedValue returnValue(rq.cx);
|
||||
scriptInterface.ToJSVal(rq, &returnValue, g_LoadedModVersions);
|
||||
Script::ToJSVal(rq, &returnValue, g_LoadedModVersions);
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -75,7 +75,7 @@ CModInstaller::ModInstallationResult CModInstaller::Install(
|
||||
JS::RootedValue name_val(rq.cx);
|
||||
if (!JS_GetProperty(rq.cx, json_obj, "name", &name_val))
|
||||
return FAIL_ON_EXTRACT_NAME;
|
||||
ScriptInterface::FromJSVal(rq, name_val, modName);
|
||||
Script::FromJSVal(rq, name_val, modName);
|
||||
if (modName.empty())
|
||||
return FAIL_ON_EXTRACT_NAME;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
@ -632,7 +632,7 @@ bool ModIo::ParseGameIdResponse(const ScriptInterface& scriptInterface, const st
|
||||
FAIL("id property not a number.");
|
||||
|
||||
id = -1;
|
||||
if (!ScriptInterface::FromJSVal(rq, idProperty, id) || id <= 0)
|
||||
if (!Script::FromJSVal(rq, idProperty, id) || id <= 0)
|
||||
FAIL("Invalid id.");
|
||||
|
||||
return true;
|
||||
@ -705,7 +705,7 @@ bool ModIo::ParseModsResponse(const ScriptInterface& scriptInterface, const std:
|
||||
for (const std::string& prop : { __VA_ARGS__ }) \
|
||||
{ \
|
||||
std::string val; \
|
||||
if (!ScriptInterface::FromJSProperty(rq, obj, prop.c_str(), val, true)) \
|
||||
if (!Script::FromJSProperty(rq, obj, prop.c_str(), val, true)) \
|
||||
{ \
|
||||
ok = false; \
|
||||
copyStringError = "Failed to get " + prop + " from " + #obj + "."; \
|
||||
@ -745,7 +745,7 @@ bool ModIo::ParseModsResponse(const ScriptInterface& scriptInterface, const std:
|
||||
|
||||
// Parse metadata_blob (sig+deps)
|
||||
std::string metadata_blob;
|
||||
if (!ScriptInterface::FromJSProperty(rq, modFile, "metadata_blob", metadata_blob, true))
|
||||
if (!Script::FromJSProperty(rq, modFile, "metadata_blob", metadata_blob, true))
|
||||
INVALIDATE_DATA_AND_CONTINUE("Failed to get metadata_blob from modFile.");
|
||||
|
||||
JS::RootedValue metadata(rq.cx);
|
||||
@ -755,11 +755,11 @@ bool ModIo::ParseModsResponse(const ScriptInterface& scriptInterface, const std:
|
||||
if (!metadata.isObject())
|
||||
INVALIDATE_DATA_AND_CONTINUE("metadata_blob is not decoded as an object.");
|
||||
|
||||
if (!ScriptInterface::FromJSProperty(rq, metadata, "dependencies", data.dependencies, true))
|
||||
if (!Script::FromJSProperty(rq, metadata, "dependencies", data.dependencies, true))
|
||||
INVALIDATE_DATA_AND_CONTINUE("Failed to get dependencies from metadata_blob.");
|
||||
|
||||
std::vector<std::string> minisigs;
|
||||
if (!ScriptInterface::FromJSProperty(rq, metadata, "minisigs", minisigs, true))
|
||||
if (!Script::FromJSProperty(rq, metadata, "minisigs", minisigs, true))
|
||||
INVALIDATE_DATA_AND_CONTINUE("Failed to get minisigs from metadata_blob.");
|
||||
|
||||
// Check we did find a valid matching signature.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 2020 Wildfire Games.
|
||||
/* Copyright (C) 2021 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
@ -169,7 +169,7 @@ void CReplayPlayer::CheckReplayMods(const ScriptInterface& scriptInterface, JS::
|
||||
|
||||
std::vector<std::vector<CStr>> enabledMods;
|
||||
JS::RootedValue enabledModsJS(rq.cx, Mod::GetLoadedModsWithVersions(scriptInterface));
|
||||
scriptInterface.FromJSVal(rq, enabledModsJS, enabledMods);
|
||||
Script::FromJSVal(rq, enabledModsJS, enabledMods);
|
||||
|
||||
CStr warn;
|
||||
if (replayMods.size() != enabledMods.size())
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "lib/file/io/write_buffer.h"
|
||||
#include "lib/file/vfs/vfs.h"
|
||||
#include "ps/CLogger.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptExtraHeaders.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
|
||||
@ -251,7 +252,7 @@ bool JSNodeData::Setup(XMBStorageWriter& xmb, JS::HandleValue value)
|
||||
if (attrib)
|
||||
{
|
||||
std::string attrVal;
|
||||
if (!ScriptInterface::FromJSVal(rq, child, attrVal))
|
||||
if (!Script::FromJSVal(rq, child, attrVal))
|
||||
{
|
||||
LOGERROR("Attributes must be convertible to string");
|
||||
return false;
|
||||
@ -305,7 +306,7 @@ bool JSNodeData::Output(WriteBuffer& writeBuffer, JS::HandleValue value) const
|
||||
if (!scriptInterface.GetProperty(value, "_string", &actualValue))
|
||||
return false;
|
||||
std::string strVal;
|
||||
if (!ScriptInterface::FromJSVal(rq, actualValue, strVal))
|
||||
if (!Script::FromJSVal(rq, actualValue, strVal))
|
||||
{
|
||||
LOGERROR("'_string' value must be convertible to string");
|
||||
return false;
|
||||
@ -317,7 +318,7 @@ bool JSNodeData::Output(WriteBuffer& writeBuffer, JS::HandleValue value) const
|
||||
case JSTYPE_NUMBER:
|
||||
{
|
||||
std::string strVal;
|
||||
if (!ScriptInterface::FromJSVal(rq, value, strVal))
|
||||
if (!Script::FromJSVal(rq, value, strVal))
|
||||
return false;
|
||||
|
||||
WriteStringAndLineNumber(writeBuffer, strVal, 0);
|
||||
|
@ -49,20 +49,20 @@ static void ToJSVal_unordered_map(const ScriptRequest& rq, JS::MutableHandleValu
|
||||
for (const std::pair<T, U>& item : val)
|
||||
{
|
||||
JS::RootedValue el(rq.cx);
|
||||
ScriptInterface::ToJSVal<U>(rq, &el, item.second);
|
||||
Script::ToJSVal<U>(rq, &el, item.second);
|
||||
JS_SetProperty(rq.cx, obj, item.first.c_str(), el);
|
||||
}
|
||||
ret.setObject(*obj);
|
||||
}
|
||||
|
||||
template<>
|
||||
void ScriptInterface::ToJSVal<std::unordered_map<std::string, std::vector<std::vector<std::string>>>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::unordered_map<std::string, std::vector<std::vector<std::string>>>& val)
|
||||
void Script::ToJSVal<std::unordered_map<std::string, std::vector<std::vector<std::string>>>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::unordered_map<std::string, std::vector<std::vector<std::string>>>& val)
|
||||
{
|
||||
ToJSVal_unordered_map(rq, ret, val);
|
||||
}
|
||||
|
||||
template<>
|
||||
void ScriptInterface::ToJSVal<std::unordered_map<std::string, std::string>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::unordered_map<std::string, std::string>& val)
|
||||
void Script::ToJSVal<std::unordered_map<std::string, std::string>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::unordered_map<std::string, std::string>& val)
|
||||
{
|
||||
ToJSVal_unordered_map(rq, ret, val);
|
||||
}
|
||||
@ -90,7 +90,7 @@ JS::Value GetHotkeyMap(const ScriptRequest& rq)
|
||||
if (keymap.size() < 2 || keymap[0] < keymap[1])
|
||||
hotkeys[mapping.name].emplace_back(keymap);
|
||||
}
|
||||
ScriptInterface::ToJSVal(rq, &hotkeyMap, hotkeys);
|
||||
Script::ToJSVal(rq, &hotkeyMap, hotkeys);
|
||||
|
||||
return hotkeyMap;
|
||||
}
|
||||
@ -107,7 +107,7 @@ JS::Value GetScancodeKeyNames(const ScriptRequest& rq)
|
||||
// This is slightly wasteful but should be fine overall, they are dense.
|
||||
for (int i = 0; i < MOUSE_LAST; ++i)
|
||||
map[FindScancodeName(static_cast<SDL_Scancode>(i))] = FindKeyName(static_cast<SDL_Scancode>(i));
|
||||
ScriptInterface::ToJSVal(rq, &obj, map);
|
||||
Script::ToJSVal(rq, &obj, map);
|
||||
|
||||
return obj;
|
||||
}
|
||||
@ -121,7 +121,7 @@ void ReloadHotkeys()
|
||||
JS::Value GetConflicts(const ScriptRequest& rq, JS::HandleValue combination)
|
||||
{
|
||||
std::vector<std::string> keys;
|
||||
if (!ScriptInterface::FromJSVal(rq, combination, keys))
|
||||
if (!Script::FromJSVal(rq, combination, keys))
|
||||
{
|
||||
LOGERROR("Invalid hotkey combination");
|
||||
return JS::NullValue();
|
||||
@ -157,7 +157,7 @@ JS::Value GetConflicts(const ScriptRequest& rq, JS::HandleValue combination)
|
||||
return JS::NullValue();
|
||||
|
||||
JS::RootedValue ret(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &ret, conflicts);
|
||||
Script::ToJSVal(rq, &ret, conflicts);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
@ -94,7 +94,7 @@ static Status BuildDirEntListCB(const VfsPath& pathname, const CFileInfo& UNUSED
|
||||
|
||||
JS::RootedObject filenameArrayObj(s->rq.cx, s->filename_array);
|
||||
JS::RootedValue val(s->rq.cx);
|
||||
ScriptInterface::ToJSVal(s->rq, &val, CStrW(pathname.string()) );
|
||||
Script::ToJSVal(s->rq, &val, CStrW(pathname.string()) );
|
||||
JS_SetElement(s->rq.cx, filenameArrayObj, s->cur_idx++, val);
|
||||
return INFO::OK;
|
||||
}
|
||||
@ -164,7 +164,7 @@ JS::Value ReadFile(const ScriptRequest& rq, const std::wstring& filename)
|
||||
|
||||
// Decode as UTF-8
|
||||
JS::RootedValue ret(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &ret, contents.FromUTF8());
|
||||
Script::ToJSVal(rq, &ret, contents.FromUTF8());
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -195,7 +195,7 @@ JS::Value ReadFileLines(const ScriptInterface& scriptInterface, const std::wstri
|
||||
{
|
||||
// Decode each line as UTF-8
|
||||
JS::RootedValue val(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &val, CStr(line).FromUTF8());
|
||||
Script::ToJSVal(rq, &val, CStr(line).FromUTF8());
|
||||
scriptInterface.SetPropertyInt(line_array, cur_line++, val);
|
||||
}
|
||||
|
||||
|
@ -18,14 +18,15 @@
|
||||
#ifndef INCLUDED_FUNCTIONWRAPPER
|
||||
#define INCLUDED_FUNCTIONWRAPPER
|
||||
|
||||
#include "ScriptInterface.h"
|
||||
#include "ScriptConversions.h"
|
||||
#include "ScriptExceptions.h"
|
||||
#include "ScriptInterface.h"
|
||||
|
||||
/**
|
||||
* This class introduces templates to conveniently wrap C++ functions in JSNative functions.
|
||||
* This _is_ rather template heavy, so compilation times beware.
|
||||
* The C++ code can have arbitrary arguments and arbitrary return types, so long
|
||||
* as they can be converted to/from JS using ScriptInterface::ToJSVal (FromJSVal respectively),
|
||||
* as they can be converted to/from JS using Script::ToJSVal (FromJSVal respectively),
|
||||
* and they are default-constructible (TODO: that can probably changed).
|
||||
* (This could be a namespace, but I like being able to specify public/private).
|
||||
*/
|
||||
@ -107,7 +108,7 @@ private:
|
||||
else
|
||||
{
|
||||
T ret;
|
||||
went_ok &= ScriptInterface::FromJSVal<T>(rq, args[idx], ret);
|
||||
went_ok &= Script::FromJSVal<T>(rq, args[idx], ret);
|
||||
return std::forward_as_tuple(ret);
|
||||
}
|
||||
}
|
||||
@ -217,7 +218,7 @@ private:
|
||||
template<int i, typename T, typename... Ts>
|
||||
static void AssignOrToJSValHelper(const ScriptRequest& rq, JS::MutableHandleValueVector argv, const T& a, const Ts&... params)
|
||||
{
|
||||
ScriptInterface::AssignOrToJSVal(rq, argv[i], a);
|
||||
Script::ToJSVal(rq, argv[i], a);
|
||||
AssignOrToJSValHelper<i+1>(rq, argv, params...);
|
||||
}
|
||||
|
||||
@ -261,7 +262,7 @@ private:
|
||||
if constexpr (!std::is_same_v<R, IgnoreResult_t>)
|
||||
{
|
||||
if (success)
|
||||
ScriptInterface::FromJSVal(rq, jsRet, ret);
|
||||
Script::FromJSVal(rq, jsRet, ret);
|
||||
}
|
||||
else
|
||||
UNUSED2(ret); // VS2017 complains.
|
||||
@ -339,7 +340,7 @@ public:
|
||||
else if constexpr (std::is_same_v<JS::Value, typename args_info<decltype(callable)>::return_type>)
|
||||
args.rval().set(call<callable>(obj, outs));
|
||||
else
|
||||
ScriptInterface::ToJSVal(rq, args.rval(), call<callable>(obj, outs));
|
||||
Script::ToJSVal(rq, args.rval(), call<callable>(obj, outs));
|
||||
|
||||
return !ScriptException::IsPending(rq);
|
||||
}
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "ScriptExtraHeaders.h"
|
||||
|
||||
#include "graphics/Entity.h"
|
||||
#include "lib/file/vfs/vfs_path.h"
|
||||
#include "maths/Vector2D.h"
|
||||
#include "ps/utf16string.h"
|
||||
#include "ps/CLogger.h"
|
||||
@ -37,14 +38,14 @@
|
||||
return false; \
|
||||
})
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<bool>(const ScriptRequest& rq, JS::HandleValue v, bool& out)
|
||||
template<> bool Script::FromJSVal<bool>(const ScriptRequest& rq, JS::HandleValue v, bool& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isBoolean(), v);
|
||||
out = JS::ToBoolean(v);
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<float>(const ScriptRequest& rq, JS::HandleValue v, float& out)
|
||||
template<> bool Script::FromJSVal<float>(const ScriptRequest& rq, JS::HandleValue v, float& out)
|
||||
{
|
||||
double tmp;
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
@ -54,7 +55,7 @@ template<> bool ScriptInterface::FromJSVal<float>(const ScriptRequest& rq, JS::H
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<double>(const ScriptRequest& rq, JS::HandleValue v, double& out)
|
||||
template<> bool Script::FromJSVal<double>(const ScriptRequest& rq, JS::HandleValue v, double& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
if (!JS::ToNumber(rq.cx, v, &out))
|
||||
@ -62,7 +63,7 @@ template<> bool ScriptInterface::FromJSVal<double>(const ScriptRequest& rq, JS:
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<i32>(const ScriptRequest& rq, JS::HandleValue v, i32& out)
|
||||
template<> bool Script::FromJSVal<i32>(const ScriptRequest& rq, JS::HandleValue v, i32& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
if (!JS::ToInt32(rq.cx, v, &out))
|
||||
@ -70,7 +71,7 @@ template<> bool ScriptInterface::FromJSVal<i32>(const ScriptRequest& rq, JS::Ha
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<u32>(const ScriptRequest& rq, JS::HandleValue v, u32& out)
|
||||
template<> bool Script::FromJSVal<u32>(const ScriptRequest& rq, JS::HandleValue v, u32& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
if (!JS::ToUint32(rq.cx, v, &out))
|
||||
@ -78,7 +79,7 @@ template<> bool ScriptInterface::FromJSVal<u32>(const ScriptRequest& rq, JS::Ha
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<u16>(const ScriptRequest& rq, JS::HandleValue v, u16& out)
|
||||
template<> bool Script::FromJSVal<u16>(const ScriptRequest& rq, JS::HandleValue v, u16& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
if (!JS::ToUint16(rq.cx, v, &out))
|
||||
@ -86,7 +87,7 @@ template<> bool ScriptInterface::FromJSVal<u16>(const ScriptRequest& rq, JS::Ha
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<u8>(const ScriptRequest& rq, JS::HandleValue v, u8& out)
|
||||
template<> bool Script::FromJSVal<u8>(const ScriptRequest& rq, JS::HandleValue v, u8& out)
|
||||
{
|
||||
u16 tmp;
|
||||
FAIL_IF_NOT(v.isNumber(), v);
|
||||
@ -96,7 +97,7 @@ template<> bool ScriptInterface::FromJSVal<u8>(const ScriptRequest& rq, JS::Han
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<std::wstring>(const ScriptRequest& rq, JS::HandleValue v, std::wstring& out)
|
||||
template<> bool Script::FromJSVal<std::wstring>(const ScriptRequest& rq, JS::HandleValue v, std::wstring& out)
|
||||
{
|
||||
FAIL_IF_NOT(v.isString() || v.isNumber() || v.isBoolean(), v); // allow implicit boolean/number conversions
|
||||
JS::RootedString str(rq.cx, JS::ToString(rq.cx, v));
|
||||
@ -126,7 +127,7 @@ template<> bool ScriptInterface::FromJSVal<std::wstring>(const ScriptRequest& rq
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<Path>(const ScriptRequest& rq, JS::HandleValue v, Path& out)
|
||||
template<> bool Script::FromJSVal<Path>(const ScriptRequest& rq, JS::HandleValue v, Path& out)
|
||||
{
|
||||
std::wstring string;
|
||||
if (!FromJSVal(rq, v, string))
|
||||
@ -135,7 +136,7 @@ template<> bool ScriptInterface::FromJSVal<Path>(const ScriptRequest& rq, JS::H
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<std::string>(const ScriptRequest& rq, JS::HandleValue v, std::string& out)
|
||||
template<> bool Script::FromJSVal<std::string>(const ScriptRequest& rq, JS::HandleValue v, std::string& out)
|
||||
{
|
||||
std::wstring wideout;
|
||||
if (!FromJSVal(rq, v, wideout))
|
||||
@ -144,17 +145,17 @@ template<> bool ScriptInterface::FromJSVal<std::string>(const ScriptRequest& rq,
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CStr8>(const ScriptRequest& rq, JS::HandleValue v, CStr8& out)
|
||||
template<> bool Script::FromJSVal<CStr8>(const ScriptRequest& rq, JS::HandleValue v, CStr8& out)
|
||||
{
|
||||
return ScriptInterface::FromJSVal(rq, v, static_cast<std::string&>(out));
|
||||
return Script::FromJSVal(rq, v, static_cast<std::string&>(out));
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CStrW>(const ScriptRequest& rq, JS::HandleValue v, CStrW& out)
|
||||
template<> bool Script::FromJSVal<CStrW>(const ScriptRequest& rq, JS::HandleValue v, CStrW& out)
|
||||
{
|
||||
return ScriptInterface::FromJSVal(rq, v, static_cast<std::wstring&>(out));
|
||||
return Script::FromJSVal(rq, v, static_cast<std::wstring&>(out));
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<Entity>(const ScriptRequest& rq, JS::HandleValue v, Entity& out)
|
||||
template<> bool Script::FromJSVal<Entity>(const ScriptRequest& rq, JS::HandleValue v, Entity& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
FAIL("Argument must be an object");
|
||||
@ -184,42 +185,42 @@ template<> bool ScriptInterface::FromJSVal<Entity>(const ScriptRequest& rq, JS:
|
||||
////////////////////////////////////////////////////////////////
|
||||
// Primitive types:
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<bool>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const bool& val)
|
||||
template<> void Script::ToJSVal<bool>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const bool& val)
|
||||
{
|
||||
ret.setBoolean(val);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<float>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const float& val)
|
||||
template<> void Script::ToJSVal<float>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const float& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<double>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const double& val)
|
||||
template<> void Script::ToJSVal<double>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const double& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<i32>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const i32& val)
|
||||
template<> void Script::ToJSVal<i32>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const i32& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<u16>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u16& val)
|
||||
template<> void Script::ToJSVal<u16>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u16& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<u8>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u8& val)
|
||||
template<> void Script::ToJSVal<u8>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u8& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<u32>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u32& val)
|
||||
template<> void Script::ToJSVal<u32>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const u32& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<std::wstring>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::wstring& val)
|
||||
template<> void Script::ToJSVal<std::wstring>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::wstring& val)
|
||||
{
|
||||
utf16string utf16(val.begin(), val.end());
|
||||
JS::RootedString str(rq.cx, JS_NewUCStringCopyN(rq.cx, reinterpret_cast<const char16_t*> (utf16.c_str()), utf16.length()));
|
||||
@ -229,22 +230,22 @@ template<> void ScriptInterface::ToJSVal<std::wstring>(const ScriptRequest& rq,
|
||||
ret.setUndefined();
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<Path>(const ScriptRequest& rq, JS::MutableHandleValue ret, const Path& val)
|
||||
template<> void Script::ToJSVal<Path>(const ScriptRequest& rq, JS::MutableHandleValue ret, const Path& val)
|
||||
{
|
||||
ToJSVal(rq, ret, val.string());
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<std::string>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::string& val)
|
||||
template<> void Script::ToJSVal<std::string>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::string& val)
|
||||
{
|
||||
ToJSVal(rq, ret, static_cast<const std::wstring>(CStr(val).FromUTF8()));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<const wchar_t*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const wchar_t* const& val)
|
||||
template<> void Script::ToJSVal<const wchar_t*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const wchar_t* const& val)
|
||||
{
|
||||
ToJSVal(rq, ret, std::wstring(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<const char*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const char* const& val)
|
||||
template<> void Script::ToJSVal<const char*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const char* const& val)
|
||||
{
|
||||
JS::RootedString str(rq.cx, JS_NewStringCopyZ(rq.cx, val));
|
||||
if (str)
|
||||
@ -254,11 +255,11 @@ template<> void ScriptInterface::ToJSVal<const char*>(const ScriptRequest& rq,
|
||||
}
|
||||
|
||||
#define TOJSVAL_CHAR(N) \
|
||||
template<> void ScriptInterface::ToJSVal<wchar_t[N]>(const ScriptRequest& rq, JS::MutableHandleValue ret, const wchar_t (&val)[N]) \
|
||||
template<> void Script::ToJSVal<wchar_t[N]>(const ScriptRequest& rq, JS::MutableHandleValue ret, const wchar_t (&val)[N]) \
|
||||
{ \
|
||||
ToJSVal(rq, ret, static_cast<const wchar_t*>(val)); \
|
||||
} \
|
||||
template<> void ScriptInterface::ToJSVal<char[N]>(const ScriptRequest& rq, JS::MutableHandleValue ret, const char (&val)[N]) \
|
||||
template<> void Script::ToJSVal<char[N]>(const ScriptRequest& rq, JS::MutableHandleValue ret, const char (&val)[N]) \
|
||||
{ \
|
||||
ToJSVal(rq, ret, static_cast<const char*>(val)); \
|
||||
}
|
||||
@ -287,12 +288,12 @@ TOJSVAL_CHAR(35)
|
||||
TOJSVAL_CHAR(256)
|
||||
#undef TOJSVAL_CHAR
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CStrW>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CStrW& val)
|
||||
template<> void Script::ToJSVal<CStrW>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CStrW& val)
|
||||
{
|
||||
ToJSVal(rq, ret, static_cast<const std::wstring&>(val));
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CStr8>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CStr8& val)
|
||||
template<> void Script::ToJSVal<CStr8>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CStr8& val)
|
||||
{
|
||||
ToJSVal(rq, ret, static_cast<const std::string&>(val));
|
||||
}
|
||||
@ -308,17 +309,18 @@ JSVAL_VECTOR(std::string)
|
||||
JSVAL_VECTOR(std::wstring)
|
||||
JSVAL_VECTOR(std::vector<std::wstring>)
|
||||
JSVAL_VECTOR(CStr8)
|
||||
JSVAL_VECTOR(CStrW)
|
||||
JSVAL_VECTOR(std::vector<CStr8>)
|
||||
JSVAL_VECTOR(std::vector<std::string>)
|
||||
|
||||
|
||||
class IComponent;
|
||||
template<> void ScriptInterface::ToJSVal<std::vector<IComponent*>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<IComponent*>& val)
|
||||
template<> void Script::ToJSVal<std::vector<IComponent*>>(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<IComponent*>& val)
|
||||
{
|
||||
ToJSVal_vector(rq, ret, val);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<std::vector<Entity>>(const ScriptRequest& rq, JS::HandleValue v, std::vector<Entity>& out)
|
||||
template<> bool Script::FromJSVal<std::vector<Entity>>(const ScriptRequest& rq, JS::HandleValue v, std::vector<Entity>& out)
|
||||
{
|
||||
return FromJSVal_vector(rq, v, out);
|
||||
}
|
||||
|
@ -18,12 +18,77 @@
|
||||
#ifndef INCLUDED_SCRIPTCONVERSIONS
|
||||
#define INCLUDED_SCRIPTCONVERSIONS
|
||||
|
||||
#include "ScriptInterface.h"
|
||||
#include "scriptinterface/ScriptExtraHeaders.h" // for typed arrays
|
||||
#include "ScriptRequest.h"
|
||||
#include "ScriptExceptions.h"
|
||||
#include "ScriptExtraHeaders.h" // for typed arrays
|
||||
|
||||
#include <limits>
|
||||
|
||||
template<typename T> static void ToJSVal_vector(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<T>& val)
|
||||
namespace Script
|
||||
{
|
||||
/**
|
||||
* Convert a JS::Value to a C++ type. (This might trigger GC.)
|
||||
*/
|
||||
template<typename T> bool FromJSVal(const ScriptRequest& rq, const JS::HandleValue val, T& ret);
|
||||
|
||||
/**
|
||||
* Convert a C++ type to a JS::Value. (This might trigger GC. The return
|
||||
* value must be rooted if you don't want it to be collected.)
|
||||
* NOTE: We are passing the JS::Value by reference instead of returning it by value.
|
||||
* The reason is a memory corruption problem that appears to be caused by a bug in Visual Studio.
|
||||
* Details here: http://www.wildfiregames.com/forum/index.php?showtopic=17289&p=285921
|
||||
*/
|
||||
template<typename T> void ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue ret, T const& val);
|
||||
|
||||
template<>
|
||||
inline void ToJSVal<JS::PersistentRootedValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::PersistentRootedValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void ToJSVal<JS::Heap<JS::Value> >(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::Heap<JS::Value>& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void ToJSVal<JS::RootedValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::RootedValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void ToJSVal<JS::HandleValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::HandleValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a named property of an object to a C++ type.
|
||||
*/
|
||||
template<typename T> inline bool FromJSProperty(const ScriptRequest& rq, const JS::HandleValue val, const char* name, T& ret, bool strict = false)
|
||||
{
|
||||
if (!val.isObject())
|
||||
return false;
|
||||
|
||||
JS::RootedObject obj(rq.cx, &val.toObject());
|
||||
|
||||
bool hasProperty;
|
||||
if (!JS_HasProperty(rq.cx, obj, name, &hasProperty) || !hasProperty)
|
||||
return false;
|
||||
|
||||
JS::RootedValue value(rq.cx);
|
||||
if (!JS_GetProperty(rq.cx, obj, name, &value))
|
||||
return false;
|
||||
|
||||
if (strict && value.isNull())
|
||||
return false;
|
||||
|
||||
return FromJSVal(rq, value, ret);
|
||||
}
|
||||
|
||||
template<typename T> inline void ToJSVal_vector(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<T>& val)
|
||||
{
|
||||
JS::RootedObject obj(rq.cx, JS::NewArrayObject(rq.cx, 0));
|
||||
if (!obj)
|
||||
@ -36,7 +101,7 @@ template<typename T> static void ToJSVal_vector(const ScriptRequest& rq, JS::Mut
|
||||
for (u32 i = 0; i < val.size(); ++i)
|
||||
{
|
||||
JS::RootedValue el(rq.cx);
|
||||
ScriptInterface::ToJSVal<T>(rq, &el, val[i]);
|
||||
Script::ToJSVal<T>(rq, &el, val[i]);
|
||||
JS_SetElement(rq.cx, obj, i, el);
|
||||
}
|
||||
ret.setObject(*obj);
|
||||
@ -44,7 +109,7 @@ template<typename T> static void ToJSVal_vector(const ScriptRequest& rq, JS::Mut
|
||||
|
||||
#define FAIL(msg) STMT(ScriptException::Raise(rq, msg); return false)
|
||||
|
||||
template<typename T> static bool FromJSVal_vector(const ScriptRequest& rq, JS::HandleValue v, std::vector<T>& out)
|
||||
template<typename T> inline bool FromJSVal_vector(const ScriptRequest& rq, JS::HandleValue v, std::vector<T>& out)
|
||||
{
|
||||
JS::RootedObject obj(rq.cx);
|
||||
if (!v.isObject())
|
||||
@ -67,7 +132,7 @@ template<typename T> static bool FromJSVal_vector(const ScriptRequest& rq, JS::H
|
||||
if (!JS_GetElement(rq.cx, obj, i, &el))
|
||||
FAIL("Failed to read array element");
|
||||
T el2;
|
||||
if (!ScriptInterface::FromJSVal<T>(rq, el, el2))
|
||||
if (!Script::FromJSVal<T>(rq, el, el2))
|
||||
return false;
|
||||
out.push_back(el2);
|
||||
}
|
||||
@ -77,34 +142,15 @@ template<typename T> static bool FromJSVal_vector(const ScriptRequest& rq, JS::H
|
||||
#undef FAIL
|
||||
|
||||
#define JSVAL_VECTOR(T) \
|
||||
template<> void ScriptInterface::ToJSVal<std::vector<T> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<T>& val) \
|
||||
template<> void Script::ToJSVal<std::vector<T> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const std::vector<T>& val) \
|
||||
{ \
|
||||
ToJSVal_vector(rq, ret, val); \
|
||||
} \
|
||||
template<> bool ScriptInterface::FromJSVal<std::vector<T> >(const ScriptRequest& rq, JS::HandleValue v, std::vector<T>& out) \
|
||||
template<> bool Script::FromJSVal<std::vector<T> >(const ScriptRequest& rq, JS::HandleValue v, std::vector<T>& out) \
|
||||
{ \
|
||||
return FromJSVal_vector(rq, v, out); \
|
||||
}
|
||||
|
||||
template<typename T> bool ScriptInterface::FromJSProperty(const ScriptRequest& rq, const JS::HandleValue val, const char* name, T& ret, bool strict)
|
||||
{
|
||||
if (!val.isObject())
|
||||
return false;
|
||||
|
||||
JS::RootedObject obj(rq.cx, &val.toObject());
|
||||
|
||||
bool hasProperty;
|
||||
if (!JS_HasProperty(rq.cx, obj, name, &hasProperty) || !hasProperty)
|
||||
return false;
|
||||
|
||||
JS::RootedValue value(rq.cx);
|
||||
if (!JS_GetProperty(rq.cx, obj, name, &value))
|
||||
return false;
|
||||
|
||||
if (strict && value.isNull())
|
||||
return false;
|
||||
|
||||
return FromJSVal(rq, value, ret);
|
||||
}
|
||||
} // namespace Script
|
||||
|
||||
#endif //INCLUDED_SCRIPTCONVERSIONS
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include "ps/CLogger.h"
|
||||
#include "ps/CStr.h"
|
||||
#include "scriptinterface/FunctionWrapper.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
#include "scriptinterface/ScriptRequest.h"
|
||||
|
||||
bool ScriptException::IsPending(const ScriptRequest& rq)
|
||||
{
|
||||
@ -49,7 +49,7 @@ bool ScriptException::CatchPending(const ScriptRequest& rq)
|
||||
if (!excn.isObject())
|
||||
{
|
||||
CStr error;
|
||||
ScriptInterface::FromJSVal(rq, excn, error);
|
||||
Script::FromJSVal(rq, excn, error);
|
||||
LOGERROR("JavaScript error: %s", error);
|
||||
return true;
|
||||
}
|
||||
@ -60,7 +60,7 @@ bool ScriptException::CatchPending(const ScriptRequest& rq)
|
||||
if (!report)
|
||||
{
|
||||
CStr error;
|
||||
ScriptInterface::FromJSVal(rq, excn, error);
|
||||
Script::FromJSVal(rq, excn, error);
|
||||
LOGERROR("JavaScript error: %s", error);
|
||||
return true;
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ bool print(JSContext* cx, uint argc, JS::Value* vp)
|
||||
for (uint i = 0; i < args.length(); ++i)
|
||||
{
|
||||
std::wstring str;
|
||||
if (!ScriptInterface::FromJSVal(rq, args[i], str))
|
||||
if (!Script::FromJSVal(rq, args[i], str))
|
||||
return false;
|
||||
debug_printf("%s", utf8_from_wstring(str).c_str());
|
||||
}
|
||||
@ -137,7 +137,7 @@ bool logmsg(JSContext* cx, uint argc, JS::Value* vp)
|
||||
|
||||
ScriptRequest rq(*ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface); \
|
||||
std::wstring str;
|
||||
if (!ScriptInterface::FromJSVal(rq, args[0], str))
|
||||
if (!Script::FromJSVal(rq, args[0], str))
|
||||
return false;
|
||||
LOGMESSAGE("%s", utf8_from_wstring(str));
|
||||
args.rval().setUndefined();
|
||||
@ -155,7 +155,7 @@ bool warn(JSContext* cx, uint argc, JS::Value* vp)
|
||||
|
||||
ScriptRequest rq(*ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface); \
|
||||
std::wstring str;
|
||||
if (!ScriptInterface::FromJSVal(rq, args[0], str))
|
||||
if (!Script::FromJSVal(rq, args[0], str))
|
||||
return false;
|
||||
LOGWARNING("%s", utf8_from_wstring(str));
|
||||
args.rval().setUndefined();
|
||||
@ -173,7 +173,7 @@ bool error(JSContext* cx, uint argc, JS::Value* vp)
|
||||
|
||||
ScriptRequest rq(*ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface); \
|
||||
std::wstring str;
|
||||
if (!ScriptInterface::FromJSVal(rq, args[0], str))
|
||||
if (!Script::FromJSVal(rq, args[0], str))
|
||||
return false;
|
||||
LOGERROR("%s", utf8_from_wstring(str));
|
||||
args.rval().setUndefined();
|
||||
@ -712,7 +712,7 @@ bool ScriptInterface::EnumeratePropertyNames(JS::HandleValue objVal, bool enumer
|
||||
continue;
|
||||
|
||||
std::string propName;
|
||||
if (!FromJSVal(rq, val, propName))
|
||||
if (!Script::FromJSVal(rq, val, propName))
|
||||
return false;
|
||||
|
||||
out.emplace_back(std::move(propName));
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "lib/file/vfs/vfs_path.h"
|
||||
#include "maths/Fixed.h"
|
||||
#include "ps/Errors.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptExceptions.h"
|
||||
#include "scriptinterface/ScriptRequest.h"
|
||||
#include "scriptinterface/ScriptTypes.h"
|
||||
@ -285,25 +286,6 @@ public:
|
||||
bool Eval(const char* code, JS::MutableHandleValue out) const;
|
||||
template<typename T> bool Eval(const char* code, T& out) const;
|
||||
|
||||
/**
|
||||
* Convert a JS::Value to a C++ type. (This might trigger GC.)
|
||||
*/
|
||||
template<typename T> static bool FromJSVal(const ScriptRequest& rq, const JS::HandleValue val, T& ret);
|
||||
|
||||
/**
|
||||
* Convert a C++ type to a JS::Value. (This might trigger GC. The return
|
||||
* value must be rooted if you don't want it to be collected.)
|
||||
* NOTE: We are passing the JS::Value by reference instead of returning it by value.
|
||||
* The reason is a memory corruption problem that appears to be caused by a bug in Visual Studio.
|
||||
* Details here: http://www.wildfiregames.com/forum/index.php?showtopic=17289&p=285921
|
||||
*/
|
||||
template<typename T> static void ToJSVal(const ScriptRequest& rq, JS::MutableHandleValue ret, T const& val);
|
||||
|
||||
/**
|
||||
* Convert a named property of an object to a C++ type.
|
||||
*/
|
||||
template<typename T> static bool FromJSProperty(const ScriptRequest& rq, const JS::HandleValue val, const char* name, T& ret, bool strict = false);
|
||||
|
||||
/**
|
||||
* MathRandom (this function) calls the random number generator assigned to this ScriptInterface instance and
|
||||
* returns the generated number.
|
||||
@ -348,38 +330,6 @@ public:
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts |a| if needed and assigns it to |handle|.
|
||||
* This is meant for use in other templates where we want to use the same code for JS::RootedValue&/JS::HandleValue and
|
||||
* other types. Note that functions are meant to take JS::HandleValue instead of JS::RootedValue&, but this implicit
|
||||
* conversion does not work for templates (exact type matches required for type deduction).
|
||||
* A similar functionality could also be implemented as a ToJSVal specialization. The current approach was preferred
|
||||
* because "conversions" from JS::HandleValue to JS::MutableHandleValue are unusual and should not happen "by accident".
|
||||
*/
|
||||
template <typename T>
|
||||
static void AssignOrToJSVal(const ScriptRequest& rq, JS::MutableHandleValue handle, const T& a);
|
||||
|
||||
/**
|
||||
* The same as AssignOrToJSVal, but also allows JS::Value for T.
|
||||
* In most cases it's not safe to use the plain (unrooted) JS::Value type, but this can happen quite
|
||||
* easily with template functions. The idea is that the linker prints an error if AssignOrToJSVal is
|
||||
* used with JS::Value. If the specialization for JS::Value should be allowed, you can use this
|
||||
* "unrooted" version of AssignOrToJSVal.
|
||||
*/
|
||||
template <typename T>
|
||||
static void AssignOrToJSValUnrooted(const ScriptRequest& rq, JS::MutableHandleValue handle, const T& a)
|
||||
{
|
||||
AssignOrToJSVal(rq, handle, a);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts |val| to T if needed or just returns it if it's a handle.
|
||||
* This is meant for use in other templates where we want to use the same code for JS::HandleValue and
|
||||
* other types.
|
||||
*/
|
||||
template <typename T>
|
||||
static T AssignOrFromJSVal(const ScriptRequest& rq, const JS::HandleValue& val, bool& ret);
|
||||
|
||||
private:
|
||||
|
||||
static bool CreateObject_(const ScriptRequest& rq, JS::MutableHandleObject obj);
|
||||
@ -388,7 +338,7 @@ private:
|
||||
static bool CreateObject_(const ScriptRequest& rq, JS::MutableHandleObject obj, const char* propertyName, const T& propertyValue, Args const&... args)
|
||||
{
|
||||
JS::RootedValue val(rq.cx);
|
||||
AssignOrToJSVal(rq, &val, propertyValue);
|
||||
Script::ToJSVal(rq, &val, propertyValue);
|
||||
|
||||
return CreateObject_(rq, obj, args...) && JS_DefineProperty(rq.cx, obj, propertyName, val, JSPROP_ENUMERATE);
|
||||
}
|
||||
@ -413,63 +363,12 @@ private:
|
||||
std::map<std::string, CustomType> m_CustomObjectTypes;
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
inline void ScriptInterface::AssignOrToJSVal(const ScriptRequest& rq, JS::MutableHandleValue handle, const T& a)
|
||||
{
|
||||
ToJSVal(rq, handle, a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void ScriptInterface::AssignOrToJSVal<JS::PersistentRootedValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::PersistentRootedValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void ScriptInterface::AssignOrToJSVal<JS::Heap<JS::Value> >(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::Heap<JS::Value>& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template<>
|
||||
inline void ScriptInterface::AssignOrToJSVal<JS::RootedValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::RootedValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void ScriptInterface::AssignOrToJSVal<JS::HandleValue>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::HandleValue& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void ScriptInterface::AssignOrToJSValUnrooted<JS::Value>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue handle, const JS::Value& a)
|
||||
{
|
||||
handle.set(a);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T ScriptInterface::AssignOrFromJSVal(const ScriptRequest& rq, const JS::HandleValue& val, bool& ret)
|
||||
{
|
||||
T retVal;
|
||||
ret = FromJSVal(rq, val, retVal);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
template<>
|
||||
inline JS::HandleValue ScriptInterface::AssignOrFromJSVal<JS::HandleValue>(const ScriptRequest& UNUSED(rq), const JS::HandleValue& val, bool& ret)
|
||||
{
|
||||
ret = true;
|
||||
return val;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
bool ScriptInterface::SetGlobal(const char* name, const T& value, bool replace, bool constant, bool enumerate)
|
||||
{
|
||||
ScriptRequest rq(this);
|
||||
JS::RootedValue val(rq.cx);
|
||||
AssignOrToJSVal(rq, &val, value);
|
||||
Script::ToJSVal(rq, &val, value);
|
||||
return SetGlobal_(name, val, replace, constant, enumerate);
|
||||
}
|
||||
|
||||
@ -478,7 +377,7 @@ bool ScriptInterface::SetProperty(JS::HandleValue obj, const char* name, const T
|
||||
{
|
||||
ScriptRequest rq(this);
|
||||
JS::RootedValue val(rq.cx);
|
||||
AssignOrToJSVal(rq, &val, value);
|
||||
Script::ToJSVal(rq, &val, value);
|
||||
return SetProperty_(obj, name, val, constant, enumerate);
|
||||
}
|
||||
|
||||
@ -487,7 +386,7 @@ bool ScriptInterface::SetProperty(JS::HandleValue obj, const wchar_t* name, cons
|
||||
{
|
||||
ScriptRequest rq(this);
|
||||
JS::RootedValue val(rq.cx);
|
||||
AssignOrToJSVal(rq, &val, value);
|
||||
Script::ToJSVal(rq, &val, value);
|
||||
return SetProperty_(obj, name, val, constant, enumerate);
|
||||
}
|
||||
|
||||
@ -496,7 +395,7 @@ bool ScriptInterface::SetPropertyInt(JS::HandleValue obj, int name, const T& val
|
||||
{
|
||||
ScriptRequest rq(this);
|
||||
JS::RootedValue val(rq.cx);
|
||||
AssignOrToJSVal(rq, &val, value);
|
||||
Script::ToJSVal(rq, &val, value);
|
||||
return SetPropertyInt_(obj, name, val, constant, enumerate);
|
||||
}
|
||||
|
||||
@ -513,7 +412,7 @@ bool ScriptInterface::GetProperty(const ScriptRequest& rq, JS::HandleValue obj,
|
||||
JS::RootedValue val(rq.cx);
|
||||
if (!GetProperty(rq, obj, name, &val))
|
||||
return false;
|
||||
return FromJSVal(rq, val, out);
|
||||
return Script::FromJSVal(rq, val, out);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
@ -529,7 +428,7 @@ bool ScriptInterface::GetPropertyInt(const ScriptRequest& rq, JS::HandleValue ob
|
||||
JS::RootedValue val(rq.cx);
|
||||
if (!GetPropertyInt(rq, obj, name, &val))
|
||||
return false;
|
||||
return FromJSVal(rq, val, out);
|
||||
return Script::FromJSVal(rq, val, out);
|
||||
}
|
||||
|
||||
|
||||
@ -540,7 +439,7 @@ bool ScriptInterface::Eval(const char* code, T& ret) const
|
||||
JS::RootedValue rval(rq.cx);
|
||||
if (!Eval(code, &rval))
|
||||
return false;
|
||||
return FromJSVal(rq, rval, ret);
|
||||
return Script::FromJSVal(rq, rval, ret);
|
||||
}
|
||||
|
||||
#endif // INCLUDED_SCRIPTINTERFACE
|
||||
|
@ -39,7 +39,7 @@ class TestScriptConversions : public CxxTest::TestSuite
|
||||
ScriptRequest rq(script);
|
||||
|
||||
JS::RootedValue v1(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &v1, value);
|
||||
Script::ToJSVal(rq, &v1, value);
|
||||
|
||||
// We want to convert values to strings, but can't just call toSource() on them
|
||||
// since they might not be objects. So just use uneval.
|
||||
@ -58,7 +58,7 @@ class TestScriptConversions : public CxxTest::TestSuite
|
||||
ScriptRequest rq(script);
|
||||
|
||||
JS::RootedValue v1(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &v1, value);
|
||||
Script::ToJSVal(rq, &v1, value);
|
||||
|
||||
std::string source;
|
||||
JS::RootedValue global(rq.cx, rq.globalValue());
|
||||
@ -68,7 +68,7 @@ class TestScriptConversions : public CxxTest::TestSuite
|
||||
TS_ASSERT_STR_EQUALS(source, expected);
|
||||
|
||||
T v2 = T();
|
||||
TS_ASSERT(ScriptInterface::FromJSVal(rq, v1, v2));
|
||||
TS_ASSERT(Script::FromJSVal(rq, v1, v2));
|
||||
TS_ASSERT_EQUALS(value, v2);
|
||||
}
|
||||
|
||||
@ -80,15 +80,15 @@ class TestScriptConversions : public CxxTest::TestSuite
|
||||
ScriptRequest rq(script);
|
||||
|
||||
JS::RootedValue v1(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &v1, v);
|
||||
Script::ToJSVal(rq, &v1, v);
|
||||
JS::RootedValue u1(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &u1, u);
|
||||
Script::ToJSVal(rq, &u1, u);
|
||||
|
||||
T r;
|
||||
JS::RootedValue r1(rq.cx);
|
||||
|
||||
TS_ASSERT(ScriptFunction::Call(rq, u1, func.c_str(), r, v1));
|
||||
ScriptInterface::ToJSVal(rq, &r1, r);
|
||||
Script::ToJSVal(rq, &r1, r);
|
||||
|
||||
std::string source;
|
||||
JS::RootedValue global(rq.cx, rq.globalValue());
|
||||
@ -174,21 +174,21 @@ public:
|
||||
|
||||
// using new uninitialized variables each time to be sure the test doesn't succeeed if ToJSVal doesn't touch the value at all.
|
||||
JS::RootedValue val0(rq.cx), val1(rq.cx), val2(rq.cx), val3(rq.cx), val4(rq.cx), val5(rq.cx), val6(rq.cx), val7(rq.cx), val8(rq.cx);
|
||||
ScriptInterface::ToJSVal<i32>(rq, &val0, 0);
|
||||
ScriptInterface::ToJSVal<i32>(rq, &val1, JSVAL_INT_MAX - 1);
|
||||
ScriptInterface::ToJSVal<i32>(rq, &val2, JSVAL_INT_MAX);
|
||||
ScriptInterface::ToJSVal<i32>(rq, &val3, JSVAL_INT_MIN + 1);
|
||||
ScriptInterface::ToJSVal<i32>(rq, &val4, -(i64)2147483648u); // JSVAL_INT_MIN
|
||||
Script::ToJSVal<i32>(rq, &val0, 0);
|
||||
Script::ToJSVal<i32>(rq, &val1, JSVAL_INT_MAX - 1);
|
||||
Script::ToJSVal<i32>(rq, &val2, JSVAL_INT_MAX);
|
||||
Script::ToJSVal<i32>(rq, &val3, JSVAL_INT_MIN + 1);
|
||||
Script::ToJSVal<i32>(rq, &val4, -(i64)2147483648u); // JSVAL_INT_MIN
|
||||
TS_ASSERT(val0.isInt32());
|
||||
TS_ASSERT(val1.isInt32());
|
||||
TS_ASSERT(val2.isInt32());
|
||||
TS_ASSERT(val3.isInt32());
|
||||
TS_ASSERT(val4.isInt32());
|
||||
|
||||
ScriptInterface::ToJSVal<u32>(rq, &val5, 0);
|
||||
ScriptInterface::ToJSVal<u32>(rq, &val6, 2147483646u); // JSVAL_INT_MAX-1
|
||||
ScriptInterface::ToJSVal<u32>(rq, &val7, 2147483647u); // JSVAL_INT_MAX
|
||||
ScriptInterface::ToJSVal<u32>(rq, &val8, 2147483648u); // JSVAL_INT_MAX+1
|
||||
Script::ToJSVal<u32>(rq, &val5, 0);
|
||||
Script::ToJSVal<u32>(rq, &val6, 2147483646u); // JSVAL_INT_MAX-1
|
||||
Script::ToJSVal<u32>(rq, &val7, 2147483647u); // JSVAL_INT_MAX
|
||||
Script::ToJSVal<u32>(rq, &val8, 2147483648u); // JSVAL_INT_MAX+1
|
||||
TS_ASSERT(val5.isInt32());
|
||||
TS_ASSERT(val6.isInt32());
|
||||
TS_ASSERT(val7.isInt32());
|
||||
@ -206,8 +206,8 @@ public:
|
||||
|
||||
float f = 0;
|
||||
JS::RootedValue testNANVal(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &testNANVal, NAN);
|
||||
TS_ASSERT(ScriptInterface::FromJSVal(rq, testNANVal, f));
|
||||
Script::ToJSVal(rq, &testNANVal, NAN);
|
||||
TS_ASSERT(Script::FromJSVal(rq, testNANVal, f));
|
||||
TS_ASSERT(isnan(f));
|
||||
}
|
||||
|
||||
@ -259,15 +259,15 @@ public:
|
||||
std::wstring in_utf16(L"éè!§$-aezi134900°°©©¢¢ÇÇ'{¶«¡Ç'[å»ÛÁØ");
|
||||
|
||||
JS::RootedValue v1(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &v1, in_utf8);
|
||||
Script::ToJSVal(rq, &v1, in_utf8);
|
||||
std::wstring test_out_utf16;
|
||||
TS_ASSERT(ScriptInterface::FromJSVal(rq, v1, test_out_utf16));
|
||||
TS_ASSERT(Script::FromJSVal(rq, v1, test_out_utf16));
|
||||
TS_ASSERT_EQUALS(test_out_utf16, in_utf16);
|
||||
|
||||
JS::RootedValue v2(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &v2, in_utf16);
|
||||
Script::ToJSVal(rq, &v2, in_utf16);
|
||||
std::string test_out_utf8;
|
||||
TS_ASSERT(ScriptInterface::FromJSVal(rq, v2, test_out_utf8));
|
||||
TS_ASSERT(Script::FromJSVal(rq, v2, test_out_utf8));
|
||||
TS_ASSERT_EQUALS(test_out_utf8, in_utf8);
|
||||
}
|
||||
};
|
||||
|
@ -160,7 +160,7 @@ public:
|
||||
// Test that a mutable handle value as return value works.
|
||||
ScriptFunction::Call(rq, val, "inc", &out);
|
||||
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(4, nbr);
|
||||
|
||||
ScriptFunction::Call(rq, val, "add", nbr, nbrVal);
|
||||
@ -169,13 +169,13 @@ public:
|
||||
// GetProperty JS::RootedValue* overload
|
||||
nbr = 0;
|
||||
script.GetProperty(val, "0", &out);
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(nbr, 7);
|
||||
|
||||
// GetPropertyInt JS::RootedValue* overload
|
||||
nbr = 0;
|
||||
script.GetPropertyInt(val, 0, &out);
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(nbr, 7);
|
||||
|
||||
handle_templates_test(script, val, &out, nbrVal);
|
||||
@ -190,7 +190,7 @@ public:
|
||||
ScriptFunction::CallVoid(rq, val, "setTo", nbrVal);
|
||||
ScriptFunction::Call(rq, val, "inc", out);
|
||||
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(4, nbr);
|
||||
|
||||
ScriptFunction::Call(rq, val, "add", nbr, nbrVal);
|
||||
@ -199,13 +199,13 @@ public:
|
||||
// GetProperty JS::MutableHandleValue overload
|
||||
nbr = 0;
|
||||
script.GetProperty(val, "0", out);
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(nbr, 7);
|
||||
|
||||
// GetPropertyInt JS::MutableHandleValue overload
|
||||
nbr = 0;
|
||||
script.GetPropertyInt(val, 0, out);
|
||||
ScriptInterface::FromJSVal(rq, out, nbr);
|
||||
Script::FromJSVal(rq, out, nbr);
|
||||
TS_ASSERT_EQUALS(nbr, 7);
|
||||
}
|
||||
|
||||
@ -263,7 +263,7 @@ public:
|
||||
TS_ASSERT(script.Eval("f()", &out));
|
||||
|
||||
int outNbr = 0;
|
||||
ScriptInterface::FromJSVal(rq, out, outNbr);
|
||||
Script::FromJSVal(rq, out, outNbr);
|
||||
TS_ASSERT_EQUALS(2, outNbr);
|
||||
}
|
||||
};
|
||||
|
@ -313,11 +313,11 @@ public:
|
||||
std::vector<CFixedVector2D> waypoints;
|
||||
JS::RootedValue retVal(rq.cx);
|
||||
|
||||
m_ScriptInterface->FromJSVal<CFixedVector2D>(rq, position, pos);
|
||||
m_ScriptInterface->FromJSVal<CFixedVector2D>(rq, goal, goalPos);
|
||||
Script::FromJSVal(rq, position, pos);
|
||||
Script::FromJSVal(rq, goal, goalPos);
|
||||
|
||||
ComputePath(pos, goalPos, passClass, waypoints);
|
||||
m_ScriptInterface->ToJSVal<std::vector<CFixedVector2D> >(rq, &retVal, waypoints);
|
||||
Script::ToJSVal(rq, &retVal, waypoints);
|
||||
|
||||
return retVal;
|
||||
}
|
||||
@ -426,7 +426,7 @@ public:
|
||||
for (size_t i = 0; i < m_Players.size(); ++i)
|
||||
{
|
||||
JS::RootedValue val(rq.cx);
|
||||
m_ScriptInterface->ToJSVal(rq, &val, m_Players[i]->m_Player);
|
||||
Script::ToJSVal(rq, &val, m_Players[i]->m_Player);
|
||||
m_ScriptInterface->SetPropertyInt(playersID, i, val, true);
|
||||
}
|
||||
|
||||
@ -477,8 +477,8 @@ public:
|
||||
|
||||
JS::RootedValue state(rq.cx);
|
||||
Script::ReadStructuredClone(rq, gameState, &state);
|
||||
ScriptInterface::ToJSVal(rq, &m_PassabilityMapVal, passabilityMap);
|
||||
ScriptInterface::ToJSVal(rq, &m_TerritoryMapVal, territoryMap);
|
||||
Script::ToJSVal(rq, &m_PassabilityMapVal, passabilityMap);
|
||||
Script::ToJSVal(rq, &m_TerritoryMapVal, territoryMap);
|
||||
|
||||
m_PassabilityMap = passabilityMap;
|
||||
m_NonPathfindingPassClasses = nonPathfindingPassClassMasks;
|
||||
@ -529,7 +529,7 @@ public:
|
||||
|
||||
ScriptRequest rq(m_ScriptInterface);
|
||||
if (dimensionChange || justDeserialized)
|
||||
ScriptInterface::ToJSVal(rq, &m_PassabilityMapVal, m_PassabilityMap);
|
||||
Script::ToJSVal(rq, &m_PassabilityMapVal, m_PassabilityMap);
|
||||
else
|
||||
{
|
||||
// Avoid a useless memory reallocation followed by a garbage collection.
|
||||
@ -557,7 +557,7 @@ public:
|
||||
|
||||
ScriptRequest rq(m_ScriptInterface);
|
||||
if (dimensionChange)
|
||||
ScriptInterface::ToJSVal(rq, &m_TerritoryMapVal, m_TerritoryMap);
|
||||
Script::ToJSVal(rq, &m_TerritoryMapVal, m_TerritoryMap);
|
||||
else
|
||||
{
|
||||
// Avoid a useless memory reallocation followed by a garbage collection.
|
||||
|
@ -41,9 +41,9 @@ JS::Value ICmpFootprint::GetShape_wrapper() const
|
||||
JS::RootedValue ptype(rq.cx);
|
||||
JS::RootedValue pradius(rq.cx);
|
||||
JS::RootedValue pheight(rq.cx);
|
||||
ScriptInterface::ToJSVal<std::string>(rq, &ptype, "circle");
|
||||
ScriptInterface::ToJSVal(rq, &pradius, size0);
|
||||
ScriptInterface::ToJSVal(rq, &pheight, height);
|
||||
Script::ToJSVal<std::string>(rq, &ptype, "circle");
|
||||
Script::ToJSVal(rq, &pradius, size0);
|
||||
Script::ToJSVal(rq, &pheight, height);
|
||||
JS_SetProperty(rq.cx, obj, "type", ptype);
|
||||
JS_SetProperty(rq.cx, obj, "radius", pradius);
|
||||
JS_SetProperty(rq.cx, obj, "height", pheight);
|
||||
@ -54,10 +54,10 @@ JS::Value ICmpFootprint::GetShape_wrapper() const
|
||||
JS::RootedValue pwidth(rq.cx);
|
||||
JS::RootedValue pdepth(rq.cx);
|
||||
JS::RootedValue pheight(rq.cx);
|
||||
ScriptInterface::ToJSVal<std::string>(rq, &ptype, "square");
|
||||
ScriptInterface::ToJSVal(rq, &pwidth, size0);
|
||||
ScriptInterface::ToJSVal(rq, &pdepth, size1);
|
||||
ScriptInterface::ToJSVal(rq, &pheight, height);
|
||||
Script::ToJSVal<std::string>(rq, &ptype, "square");
|
||||
Script::ToJSVal(rq, &pwidth, size0);
|
||||
Script::ToJSVal(rq, &pdepth, size1);
|
||||
Script::ToJSVal(rq, &pheight, height);
|
||||
JS_SetProperty(rq.cx, obj, "type", ptype);
|
||||
JS_SetProperty(rq.cx, obj, "width", pwidth);
|
||||
JS_SetProperty(rq.cx, obj, "depth", pdepth);
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include "precompiled.h"
|
||||
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
|
||||
#include "graphics/Color.h"
|
||||
#include "maths/Fixed.h"
|
||||
@ -34,7 +35,7 @@
|
||||
#define FAIL(msg) STMT(LOGERROR(msg); return false)
|
||||
#define FAIL_VOID(msg) STMT(ScriptException::Raise(rq, msg); return)
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<IComponent*>(const ScriptRequest& rq, JS::MutableHandleValue ret, IComponent* const& val)
|
||||
template<> void Script::ToJSVal<IComponent*>(const ScriptRequest& rq, JS::MutableHandleValue ret, IComponent* const& val)
|
||||
{
|
||||
if (val == NULL)
|
||||
{
|
||||
@ -65,7 +66,7 @@ template<> void ScriptInterface::ToJSVal<IComponent*>(const ScriptRequest& rq,
|
||||
ret.setObject(*obj);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CParamNode>(const ScriptRequest& rq, JS::MutableHandleValue ret, CParamNode const& val)
|
||||
template<> void Script::ToJSVal<CParamNode>(const ScriptRequest& rq, JS::MutableHandleValue ret, CParamNode const& val)
|
||||
{
|
||||
val.ToJSVal(rq, true, ret);
|
||||
|
||||
@ -78,7 +79,7 @@ template<> void ScriptInterface::ToJSVal<CParamNode>(const ScriptRequest& rq, J
|
||||
}
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<const CParamNode*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CParamNode* const& val)
|
||||
template<> void Script::ToJSVal<const CParamNode*>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CParamNode* const& val)
|
||||
{
|
||||
if (val)
|
||||
ToJSVal(rq, ret, *val);
|
||||
@ -86,7 +87,7 @@ template<> void ScriptInterface::ToJSVal<const CParamNode*>(const ScriptRequest&
|
||||
ret.setUndefined();
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CColor>(const ScriptRequest& rq, JS::HandleValue v, CColor& out)
|
||||
template<> bool Script::FromJSVal<CColor>(const ScriptRequest& rq, JS::HandleValue v, CColor& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
FAIL("CColor has to be an object");
|
||||
@ -109,9 +110,9 @@ template<> bool ScriptInterface::FromJSVal<CColor>(const ScriptRequest& rq, JS:
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CColor>(const ScriptRequest& rq, JS::MutableHandleValue ret, CColor const& val)
|
||||
template<> void Script::ToJSVal<CColor>(const ScriptRequest& rq, JS::MutableHandleValue ret, CColor const& val)
|
||||
{
|
||||
CreateObject(
|
||||
ScriptInterface::CreateObject(
|
||||
rq,
|
||||
ret,
|
||||
"r", val.r,
|
||||
@ -120,7 +121,7 @@ template<> void ScriptInterface::ToJSVal<CColor>(const ScriptRequest& rq, JS::M
|
||||
"a", val.a);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<fixed>(const ScriptRequest& rq, JS::HandleValue v, fixed& out)
|
||||
template<> bool Script::FromJSVal<fixed>(const ScriptRequest& rq, JS::HandleValue v, fixed& out)
|
||||
{
|
||||
double ret;
|
||||
if (!JS::ToNumber(rq.cx, v, &ret))
|
||||
@ -131,12 +132,12 @@ template<> bool ScriptInterface::FromJSVal<fixed>(const ScriptRequest& rq, JS::
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<fixed>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const fixed& val)
|
||||
template<> void Script::ToJSVal<fixed>(const ScriptRequest& UNUSED(rq), JS::MutableHandleValue ret, const fixed& val)
|
||||
{
|
||||
ret.set(JS::NumberValue(val.ToDouble()));
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CFixedVector3D>(const ScriptRequest& rq, JS::HandleValue v, CFixedVector3D& out)
|
||||
template<> bool Script::FromJSVal<CFixedVector3D>(const ScriptRequest& rq, JS::HandleValue v, CFixedVector3D& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
return false; // TODO: report type error
|
||||
@ -156,7 +157,7 @@ template<> bool ScriptInterface::FromJSVal<CFixedVector3D>(const ScriptRequest&
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CFixedVector3D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CFixedVector3D& val)
|
||||
template<> void Script::ToJSVal<CFixedVector3D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CFixedVector3D& val)
|
||||
{
|
||||
JS::RootedObject global(rq.cx, rq.glob);
|
||||
JS::RootedValue valueVector3D(rq.cx);
|
||||
@ -175,7 +176,7 @@ template<> void ScriptInterface::ToJSVal<CFixedVector3D>(const ScriptRequest& rq
|
||||
ret.setObject(*objVec);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CFixedVector2D>(const ScriptRequest& rq, JS::HandleValue v, CFixedVector2D& out)
|
||||
template<> bool Script::FromJSVal<CFixedVector2D>(const ScriptRequest& rq, JS::HandleValue v, CFixedVector2D& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
return false; // TODO: report type error
|
||||
@ -192,7 +193,7 @@ template<> bool ScriptInterface::FromJSVal<CFixedVector2D>(const ScriptRequest&
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<CFixedVector2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CFixedVector2D& val)
|
||||
template<> void Script::ToJSVal<CFixedVector2D>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CFixedVector2D& val)
|
||||
{
|
||||
JS::RootedObject global(rq.cx, rq.glob);
|
||||
JS::RootedValue valueVector2D(rq.cx);
|
||||
@ -210,7 +211,7 @@ template<> void ScriptInterface::ToJSVal<CFixedVector2D>(const ScriptRequest& rq
|
||||
ret.setObject(*objVec);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<Grid<u8> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const Grid<u8>& val)
|
||||
template<> void Script::ToJSVal<Grid<u8> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const Grid<u8>& val)
|
||||
{
|
||||
u32 length = (u32)(val.m_W * val.m_H);
|
||||
u32 nbytes = (u32)(length * sizeof(u8));
|
||||
@ -223,7 +224,7 @@ template<> void ScriptInterface::ToJSVal<Grid<u8> >(const ScriptRequest& rq, JS
|
||||
}
|
||||
|
||||
JS::RootedValue data(rq.cx, JS::ObjectValue(*objArr));
|
||||
CreateObject(
|
||||
ScriptInterface::CreateObject(
|
||||
rq,
|
||||
ret,
|
||||
"width", val.m_W,
|
||||
@ -231,7 +232,7 @@ template<> void ScriptInterface::ToJSVal<Grid<u8> >(const ScriptRequest& rq, JS
|
||||
"data", data);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<Grid<u16> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const Grid<u16>& val)
|
||||
template<> void Script::ToJSVal<Grid<u16> >(const ScriptRequest& rq, JS::MutableHandleValue ret, const Grid<u16>& val)
|
||||
{
|
||||
u32 length = (u32)(val.m_W * val.m_H);
|
||||
u32 nbytes = (u32)(length * sizeof(u16));
|
||||
@ -244,7 +245,7 @@ template<> void ScriptInterface::ToJSVal<Grid<u16> >(const ScriptRequest& rq, J
|
||||
}
|
||||
|
||||
JS::RootedValue data(rq.cx, JS::ObjectValue(*objArr));
|
||||
CreateObject(
|
||||
ScriptInterface::CreateObject(
|
||||
rq,
|
||||
ret,
|
||||
"width", val.m_W,
|
||||
@ -252,7 +253,7 @@ template<> void ScriptInterface::ToJSVal<Grid<u16> >(const ScriptRequest& rq, J
|
||||
"data", data);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<TNSpline>(const ScriptRequest& rq, JS::HandleValue v, TNSpline& out)
|
||||
template<> bool Script::FromJSVal<TNSpline>(const ScriptRequest& rq, JS::HandleValue v, TNSpline& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
FAIL("Argument must be an object");
|
||||
@ -289,7 +290,7 @@ template<> bool ScriptInterface::FromJSVal<TNSpline>(const ScriptRequest& rq, J
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<CCinemaPath>(const ScriptRequest& rq, JS::HandleValue v, CCinemaPath& out)
|
||||
template<> bool Script::FromJSVal<CCinemaPath>(const ScriptRequest& rq, JS::HandleValue v, CCinemaPath& out)
|
||||
{
|
||||
if (!v.isObject())
|
||||
FAIL("Argument must be an object");
|
||||
|
@ -29,7 +29,7 @@
|
||||
#define SET_MSG_PROPERTY(name) \
|
||||
do { \
|
||||
JS::RootedValue prop(rq.cx);\
|
||||
ScriptInterface::ToJSVal(rq, &prop, this->name); \
|
||||
Script::ToJSVal(rq, &prop, this->name); \
|
||||
if (! JS_SetProperty(rq.cx, obj, #name, prop)) \
|
||||
return JS::UndefinedValue(); \
|
||||
} while (0);
|
||||
@ -46,7 +46,7 @@
|
||||
{ \
|
||||
if (! JS_GetProperty(rq.cx, obj, #name, &prop)) \
|
||||
return NULL; \
|
||||
if (! ScriptInterface::FromJSVal(rq, prop, name)) \
|
||||
if (! Script::FromJSVal(rq, prop, name)) \
|
||||
return NULL; \
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "ps/CLogger.h"
|
||||
#include "ps/CStr.h"
|
||||
#include "scriptinterface/FunctionWrapper.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
#include "scriptinterface/ScriptExtraHeaders.h" // For typed arrays and ArrayBuffer
|
||||
#include "simulation2/serialization/ISerializer.h"
|
||||
|
@ -19,6 +19,7 @@
|
||||
#define INCLUDED_INTERFACE_SCRIPTED
|
||||
|
||||
#include "scriptinterface/FunctionWrapper.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
#include "scriptinterface/ScriptInterface.h"
|
||||
|
||||
#define BEGIN_INTERFACE_WRAPPER(iname) \
|
||||
|
@ -95,11 +95,11 @@ void CReplayTurnManager::NotifyFinishedUpdate(u32 turn)
|
||||
ignore_result(paramData.append(JS::NumberValue(turn)));
|
||||
|
||||
JS::RootedValue hashVal(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &hashVal, hash);
|
||||
Script::ToJSVal(rq, &hashVal, hash);
|
||||
ignore_result(paramData.append(hashVal));
|
||||
|
||||
JS::RootedValue expectedHashVal(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &expectedHashVal, expectedHash);
|
||||
Script::ToJSVal(rq, &expectedHashVal, expectedHash);
|
||||
ignore_result(paramData.append(expectedHashVal));
|
||||
|
||||
g_GUI->SendEventToAll(EventNameReplayOutOfSync, paramData);
|
||||
|
@ -105,19 +105,19 @@ public:
|
||||
|
||||
const CParamNode* inherit1 = tempMan->LoadTemplate(ent2, "inherit1");
|
||||
JS::RootedValue val(rq.cx);
|
||||
ScriptInterface::ToJSVal(rq, &val, inherit1);
|
||||
Script::ToJSVal(rq, &val, inherit1);
|
||||
TS_ASSERT_STR_EQUALS(man.GetScriptInterface().ToString(&val), "({Test1A:{'@a':\"a1\", '@b':\"b1\", '@c':\"c1\", d:\"d1\", e:\"e1\", f:\"f1\"}})");
|
||||
|
||||
const CParamNode* inherit2 = tempMan->LoadTemplate(ent2, "inherit2");
|
||||
ScriptInterface::ToJSVal(rq, &val, inherit2);
|
||||
Script::ToJSVal(rq, &val, inherit2);
|
||||
TS_ASSERT_STR_EQUALS(man.GetScriptInterface().ToString(&val), "({'@parent':\"inherit1\", Test1A:{'@a':\"a2\", '@b':\"b1\", '@c':\"c1\", d:\"d2\", e:\"e1\", f:\"f1\", g:\"g2\"}})");
|
||||
|
||||
const CParamNode* actor = tempMan->LoadTemplate(ent2, "actor|example1");
|
||||
ScriptInterface::ToJSVal(rq, &val, &actor->GetChild("VisualActor"));
|
||||
Script::ToJSVal(rq, &val, &actor->GetChild("VisualActor"));
|
||||
TS_ASSERT_STR_EQUALS(man.GetScriptInterface().ToString(&val), "({Actor:\"example1\", ActorOnly:(void 0), SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\", VisibleInAtlasOnly:\"false\"})");
|
||||
|
||||
const CParamNode* foundation = tempMan->LoadTemplate(ent2, "foundation|actor|example1");
|
||||
ScriptInterface::ToJSVal(rq, &val, &foundation->GetChild("VisualActor"));
|
||||
Script::ToJSVal(rq, &val, &foundation->GetChild("VisualActor"));
|
||||
TS_ASSERT_STR_EQUALS(man.GetScriptInterface().ToString(&val), "({Actor:\"example1\", ActorOnly:(void 0), Foundation:(void 0), SilhouetteDisplay:\"false\", SilhouetteOccluder:\"false\", VisibleInAtlasOnly:\"false\"})");
|
||||
|
||||
#define GET_FIRST_ELEMENT(n, templateName) \
|
||||
@ -126,7 +126,7 @@ public:
|
||||
{ \
|
||||
if (it->first[0] == '@') \
|
||||
continue; \
|
||||
ScriptInterface::ToJSVal(rq, &val, it->second); \
|
||||
Script::ToJSVal(rq, &val, it->second); \
|
||||
break; \
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user