Index: ps/trunk/source/gui/CGUISetting.cpp =================================================================== --- ps/trunk/source/gui/CGUISetting.cpp +++ ps/trunk/source/gui/CGUISetting.cpp @@ -51,6 +51,7 @@ if (!settingValue.ParseString(m_pObject.GetGUI(), name)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid color '%s'", name.c_str()); return false; } Index: ps/trunk/source/gui/scripting/GuiScriptConversions.cpp =================================================================== --- ps/trunk/source/gui/scripting/GuiScriptConversions.cpp +++ ps/trunk/source/gui/scripting/GuiScriptConversions.cpp @@ -166,18 +166,21 @@ { if (!v.isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "CSize value must be an object!"); return false; } if (!FromJSProperty(cx, v, "width", out.cx)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CSize.cx property"); return false; } if (!FromJSProperty(cx, v, "height", out.cy)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CSize.cy property"); return false; } @@ -194,18 +197,21 @@ { if (!v.isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "CPos value must be an object!"); return false; } if (!FromJSProperty(cx, v, "x", out.x)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CPos.x property"); return false; } if (!FromJSProperty(cx, v, "y", out.y)) { + JSAutoRequest rq(cx); JS_ReportError(cx, "Failed to get CPos.y property"); return false; } @@ -273,6 +279,7 @@ default: word = "error"; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid EVAlign"); break; } @@ -293,6 +300,7 @@ else { out = EVAlign_Top; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); return false; } @@ -315,6 +323,7 @@ break; default: word = "error"; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); break; } @@ -335,6 +344,7 @@ else { out = EAlign_Left; + JSAutoRequest rq(cx); JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')"); return false; } Index: ps/trunk/source/ps/scripting/JSInterface_Game.cpp =================================================================== --- ps/trunk/source/ps/scripting/JSInterface_Game.cpp +++ ps/trunk/source/ps/scripting/JSInterface_Game.cpp @@ -101,7 +101,9 @@ { if (!g_Game) { - JS_ReportError(pCxPrivate->pScriptInterface->GetContext(), "Game is not started"); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "Game is not started"); return false; } @@ -112,7 +114,9 @@ { if (!g_Game) { - JS_ReportError(pCxPrivate->pScriptInterface->GetContext(), "Game is not started"); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "Game is not started"); return; } Index: ps/trunk/source/ps/scripting/JSInterface_VFS.cpp =================================================================== --- ps/trunk/source/ps/scripting/JSInterface_VFS.cpp +++ ps/trunk/source/ps/scripting/JSInterface_VFS.cpp @@ -228,10 +228,9 @@ allowedPaths += L"\"" + validPaths[i] + L"\""; } - JS_ReportError( - pCxPrivate->pScriptInterface->GetContext(), - "This part of the engine may only read from %s!", - utf8_from_wstring(allowedPaths).c_str()); + JSContext* cx = pCxPrivate->pScriptInterface->GetContext(); + JSAutoRequest rq(cx); + JS_ReportError(cx, "This part of the engine may only read from %s!", utf8_from_wstring(allowedPaths).c_str()); return false; } Index: ps/trunk/source/scriptinterface/ScriptInterface.cpp =================================================================== --- ps/trunk/source/scriptinterface/ScriptInterface.cpp +++ ps/trunk/source/scriptinterface/ScriptInterface.cpp @@ -214,6 +214,7 @@ if (args.length() != 1 || !args.get(0).isObject()) { + JSAutoRequest rq(cx); JS_ReportError(cx, "deepfreeze requires exactly one object as an argument."); return false; } Index: ps/trunk/source/simulation2/scripting/EngineScriptConversions.cpp =================================================================== --- ps/trunk/source/simulation2/scripting/EngineScriptConversions.cpp +++ ps/trunk/source/simulation2/scripting/EngineScriptConversions.cpp @@ -90,10 +90,11 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, CColor& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("JS::HandleValue not an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); JS::RootedValue r(cx); @@ -262,10 +263,11 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, TNSpline& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("Argument must be an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); bool isArray; if (!JS_IsArrayObject(cx, obj, &isArray) || !isArray) @@ -300,10 +302,11 @@ template<> bool ScriptInterface::FromJSVal(JSContext* cx, JS::HandleValue v, CCinemaPath& out) { + JSAutoRequest rq(cx); + if (!v.isObject()) FAIL("Argument must be an object"); - JSAutoRequest rq(cx); JS::RootedObject obj(cx, &v.toObject()); CCinemaData pathData;