Add ManagedBinaryModule::FindModule utility for C# type class lookup
This commit is contained in:
@@ -600,6 +600,24 @@ MMethod* ManagedBinaryModule::FindMethod(MClass* mclass, const ScriptingTypeMeth
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ManagedBinaryModule* ManagedBinaryModule::FindModule(MonoClass* klass)
|
||||||
|
{
|
||||||
|
// TODO: consider caching lookup table MonoImage* -> ManagedBinaryModule*
|
||||||
|
ManagedBinaryModule* module = nullptr;
|
||||||
|
MonoImage* mImage = mono_class_get_image(klass);
|
||||||
|
auto& modules = BinaryModule::GetModules();
|
||||||
|
for (auto e : modules)
|
||||||
|
{
|
||||||
|
auto managedModule = dynamic_cast<ManagedBinaryModule*>(e);
|
||||||
|
if (managedModule && managedModule->Assembly->GetMonoImage() == mImage)
|
||||||
|
{
|
||||||
|
module = managedModule;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
void ManagedBinaryModule::OnLoading(MAssembly* assembly)
|
void ManagedBinaryModule::OnLoading(MAssembly* assembly)
|
||||||
{
|
{
|
||||||
PROFILE_CPU();
|
PROFILE_CPU();
|
||||||
|
|||||||
@@ -297,6 +297,7 @@ public:
|
|||||||
|
|
||||||
static ScriptingObject* ManagedObjectSpawn(const ScriptingObjectSpawnParams& params);
|
static ScriptingObject* ManagedObjectSpawn(const ScriptingObjectSpawnParams& params);
|
||||||
static MMethod* FindMethod(MClass* mclass, const ScriptingTypeMethodSignature& signature);
|
static MMethod* FindMethod(MClass* mclass, const ScriptingTypeMethodSignature& signature);
|
||||||
|
static ManagedBinaryModule* FindModule(MonoClass* klass);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|||||||
@@ -367,19 +367,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the assembly with that class
|
// Get the assembly with that class
|
||||||
// TODO: consider caching lookup table MonoImage* -> ManagedBinaryModule*
|
auto module = ManagedBinaryModule::FindModule(typeClass);
|
||||||
ManagedBinaryModule* module = nullptr;
|
|
||||||
MonoImage* mImage = mono_class_get_image(typeClass);
|
|
||||||
auto& modules = BinaryModule::GetModules();
|
|
||||||
for (auto e : modules)
|
|
||||||
{
|
|
||||||
auto managedModule = dynamic_cast<ManagedBinaryModule*>(e);
|
|
||||||
if (managedModule && managedModule->Assembly->GetMonoImage() == mImage)
|
|
||||||
{
|
|
||||||
module = managedModule;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (module == nullptr)
|
if (module == nullptr)
|
||||||
{
|
{
|
||||||
LOG(Error, "Cannot find scripting assembly for type \'{0}.{1}\'.", String(mono_class_get_namespace(typeClass)), String(mono_class_get_name(typeClass)));
|
LOG(Error, "Cannot find scripting assembly for type \'{0}.{1}\'.", String(mono_class_get_namespace(typeClass)), String(mono_class_get_name(typeClass)));
|
||||||
@@ -464,19 +452,7 @@ public:
|
|||||||
MonoClass* typeClass = mono_object_get_class(managedInstance);
|
MonoClass* typeClass = mono_object_get_class(managedInstance);
|
||||||
|
|
||||||
// Get the assembly with that class
|
// Get the assembly with that class
|
||||||
// TODO: consider caching lookup table MonoImage* -> ManagedBinaryModule*
|
auto module = ManagedBinaryModule::FindModule(typeClass);
|
||||||
ManagedBinaryModule* module = nullptr;
|
|
||||||
MonoImage* mimage = mono_class_get_image(typeClass);
|
|
||||||
auto& modules = BinaryModule::GetModules();
|
|
||||||
for (auto e : modules)
|
|
||||||
{
|
|
||||||
auto managedModule = dynamic_cast<ManagedBinaryModule*>(e);
|
|
||||||
if (managedModule && managedModule->Assembly->GetMonoImage() == mimage)
|
|
||||||
{
|
|
||||||
module = managedModule;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (module == nullptr)
|
if (module == nullptr)
|
||||||
{
|
{
|
||||||
LOG(Error, "Cannot find scripting assembly for type \'{0}.{1}\'.", String(mono_class_get_namespace(typeClass)), String(mono_class_get_name(typeClass)));
|
LOG(Error, "Cannot find scripting assembly for type \'{0}.{1}\'.", String(mono_class_get_namespace(typeClass)), String(mono_class_get_name(typeClass)));
|
||||||
|
|||||||
Reference in New Issue
Block a user