Exact stack rooting for ScriptInterface::FreezeObject.

Refs #2415

This was SVN commit r15622.
This commit is contained in:
Yves 2014-08-08 11:59:49 +00:00
parent 7471662ddc
commit 9872f5741f
3 changed files with 8 additions and 6 deletions

View File

@ -1135,16 +1135,18 @@ bool ScriptInterface::SetPrototype(JS::HandleValue obj, JS::HandleValue proto)
return JS_SetPrototype(m->m_cx, &obj.toObject(), &proto.toObject());
}
bool ScriptInterface::FreezeObject(jsval obj, bool deep)
bool ScriptInterface::FreezeObject(JS::HandleValue objVal, bool deep)
{
JSAutoRequest rq(m->m_cx);
if (!obj.isObject())
if (!objVal.isObject())
return false;
JS::RootedObject obj(m->m_cx, &objVal.toObject());
if (deep)
return JS_DeepFreezeObject(m->m_cx, &obj.toObject());
return JS_DeepFreezeObject(m->m_cx, obj);
else
return JS_FreezeObject(m->m_cx, &obj.toObject());
return JS_FreezeObject(m->m_cx, obj);
}
bool ScriptInterface::LoadScript(const VfsPath& filename, const std::string& code)

View File

@ -258,7 +258,7 @@ public:
bool SetPrototype(JS::HandleValue obj, JS::HandleValue proto);
bool FreezeObject(jsval obj, bool deep);
bool FreezeObject(JS::HandleValue objVal, bool deep);
bool Eval(const char* code);

View File

@ -572,7 +572,7 @@ public:
// Since the template data is shared between AI players, freeze it
// to stop any of them changing it and confusing the other players
m_EntityTemplates = CScriptValRooted(cx, tmpEntityTemplates);
m_ScriptInterface->FreezeObject(m_EntityTemplates.get(), true);
m_ScriptInterface->FreezeObject(tmpEntityTemplates, true);
}
void Serialize(std::ostream& stream, bool isDebug)