diff --git a/source/gui/scripting/JSInterface_IGUIObject.cpp b/source/gui/scripting/JSInterface_IGUIObject.cpp index 156586279a..a5c8a1bc61 100755 --- a/source/gui/scripting/JSInterface_IGUIObject.cpp +++ b/source/gui/scripting/JSInterface_IGUIObject.cpp @@ -1,4 +1,4 @@ -// $Id: JSInterface_IGUIObject.cpp,v 1.12 2004/09/03 14:12:43 philip Exp $ +// $Id: JSInterface_IGUIObject.cpp,v 1.13 2004/09/04 14:42:46 philip Exp $ #include "precompiled.h" @@ -131,7 +131,7 @@ JSBool JSI_IGUIObject::getProperty(JSContext* cx, JSObject* obj, jsval id, jsval CClientArea area; GUI::GetSetting(e, propName, area); JSObject* obj = JS_NewObject(cx, &JSI_GUISize::JSI_class, NULL, NULL); - JS_AddRoot(cx, obj); + JS_AddRoot(cx, &obj); try { #define P(x, y, z) g_ScriptingHost.SetObjectProperty_Double(obj, #z, area.x.y) @@ -148,12 +148,12 @@ JSBool JSI_IGUIObject::getProperty(JSContext* cx, JSObject* obj, jsval id, jsval catch (PSERROR_Scripting_ConversionFailed) { debug_warn("Error creating size object!"); - JS_RemoveRoot(cx, obj); + JS_RemoveRoot(cx, &obj); break; } *vp = OBJECT_TO_JSVAL(obj); - JS_RemoveRoot(cx, obj); + JS_RemoveRoot(cx, &obj); break; } diff --git a/source/i18n/ScriptInterface.cpp b/source/i18n/ScriptInterface.cpp index 1c94bb070b..28ab882830 100755 --- a/source/i18n/ScriptInterface.cpp +++ b/source/i18n/ScriptInterface.cpp @@ -4,7 +4,14 @@ #include "CLocale.h" #include "StringConvert.h" -#include "jsapi.h" +#include + +// Make JS debugging a little easier by automatically naming GC roots +#ifndef NDEBUG +// Don't simply #define NAME_ALL_GC_ROOTS, because jsapi.h is horridly broken +# define JS_AddRoot(cx, rp) JS_AddNamedRoot((cx), (rp), __FILE__) +#endif + #include "ps/CLogger.h" #define LOG_CATEGORY "i18n" @@ -360,8 +367,8 @@ ScriptValueString::ScriptValueString(ScriptObject& script, const wchar_t* s) } else { - JS_AddRoot(Context, str); Value = STRING_TO_JSVAL(str); + JS_AddRoot(Context, &Value); } } @@ -375,8 +382,7 @@ ScriptValueString::~ScriptValueString() { if (! JSVAL_IS_NULL(Value)) { - JSString* str = JSVAL_TO_STRING(Value); - JS_RemoveRoot(Context, str); + JS_RemoveRoot(Context, &Value); } } @@ -412,7 +418,7 @@ jsval ScriptValueVariable::GetJsval(const std::vector& vars) // Clean up from earlier invocations if (GCVal) { - JS_RemoveRoot(Context, GCVal); + JS_RemoveRoot(Context, &GCVal); GCVal = NULL; } @@ -432,7 +438,7 @@ jsval ScriptValueVariable::GetJsval(const std::vector& vars) return JSVAL_NULL; } GCVal = (void*)val; - JS_AddRoot(Context, val); + JS_AddRoot(Context, &GCVal); return DOUBLE_TO_JSVAL(val); } case vartype_string: @@ -444,7 +450,7 @@ jsval ScriptValueVariable::GetJsval(const std::vector& vars) return JSVAL_NULL; } GCVal = (void*)val; - JS_AddRoot(Context, val); + JS_AddRoot(Context, &GCVal); return STRING_TO_JSVAL(val); } case vartype_rawstring: @@ -456,7 +462,7 @@ jsval ScriptValueVariable::GetJsval(const std::vector& vars) return JSVAL_NULL; } GCVal = (void*)val; - JS_AddRoot(Context, val); + JS_AddRoot(Context, &GCVal); return STRING_TO_JSVAL(val); } default: @@ -468,5 +474,5 @@ jsval ScriptValueVariable::GetJsval(const std::vector& vars) ScriptValueVariable::~ScriptValueVariable() { if (GCVal) - JS_RemoveRoot(Context, GCVal); + JS_RemoveRoot(Context, &GCVal); } diff --git a/source/ps/StringConvert.cpp b/source/ps/StringConvert.cpp index c4f458cb00..51342d79b4 100755 --- a/source/ps/StringConvert.cpp +++ b/source/ps/StringConvert.cpp @@ -3,7 +3,15 @@ #include "StringConvert.h" #include -#include "jsapi.h" + +#include + +// Make JS debugging a little easier by automatically naming GC roots +#ifndef NDEBUG +// Don't simply #define NAME_ALL_GC_ROOTS, because jsapi.h is horridly broken +# define JS_AddRoot(cx, rp) JS_AddNamedRoot((cx), (rp), __FILE__) +#endif + #if SDL_BYTE_ORDER == SDL_BIG_ENDIAN #define ucs2le_to_wchart(ptr) (wchar_t)( (u16) ((u8*)ptr)[0] | (u16) ( ((u8*)ptr)[1] << 8) ) diff --git a/source/scripting/ScriptingHost.h b/source/scripting/ScriptingHost.h index 85451250ec..6fa6e0aa75 100755 --- a/source/scripting/ScriptingHost.h +++ b/source/scripting/ScriptingHost.h @@ -28,6 +28,12 @@ ERROR_TYPE(Scripting_DefineType, CreationFailed); #include +// Make JS debugging a little easier by automatically naming GC roots +#ifndef NDEBUG +// Don't simply #define NAME_ALL_GC_ROOTS, because jsapi.h is horridly broken +# define JS_AddRoot(cx, rp) JS_AddNamedRoot((cx), (rp), __FILE__) +#endif + #include #include #include