forked from 0ad/0ad
Exact stack rooting for ScriptInterface::FreezeObject.
Refs #2415 This was SVN commit r15622.
This commit is contained in:
parent
7471662ddc
commit
9872f5741f
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user