diff --git a/source/simulation2/scripting/ScriptComponent.cpp b/source/simulation2/scripting/ScriptComponent.cpp index 0f82ab6dad..f6f96da1d1 100644 --- a/source/simulation2/scripting/ScriptComponent.cpp +++ b/source/simulation2/scripting/ScriptComponent.cpp @@ -27,6 +27,9 @@ CComponentTypeScript::CComponentTypeScript(ScriptInterface& scriptInterface, jsv { debug_assert(instance); m_ScriptInterface.AddRoot(&m_Instance, "CComponentTypeScript.m_Instance"); + + // Cache the property detection for efficiency + m_HasCustomSerialize = m_ScriptInterface.HasProperty(m_Instance, "Serialize"); } CComponentTypeScript::~CComponentTypeScript() @@ -62,7 +65,7 @@ void CComponentTypeScript::Serialize(ISerializer& serialize) { // Support a custom "Serialize" function, which returns a new object that will be // serialized instead of the component itself - if (m_ScriptInterface.HasProperty(m_Instance, "Serialize")) + if (m_HasCustomSerialize) { CScriptValRooted val; if (!m_ScriptInterface.CallFunction(m_Instance, "Serialize", val)) diff --git a/source/simulation2/scripting/ScriptComponent.h b/source/simulation2/scripting/ScriptComponent.h index 3c1d9e694f..4ebac2affd 100644 --- a/source/simulation2/scripting/ScriptComponent.h +++ b/source/simulation2/scripting/ScriptComponent.h @@ -76,6 +76,7 @@ BOOST_PP_REPEAT(SCRIPT_INTERFACE_MAX_ARGS, OVERLOADS, ~) private: ScriptInterface& m_ScriptInterface; jsval m_Instance; + bool m_HasCustomSerialize; NONCOPYABLE(CComponentTypeScript); };