Optimize MMethod::GetParameterIsOut to cache all parameters in a single bit-flag
This commit is contained in:
@@ -1514,13 +1514,16 @@ void MMethod::CacheSignature() const
|
||||
|
||||
static void* GetMethodReturnTypePtr = GetStaticMethodPointer(TEXT("GetMethodReturnType"));
|
||||
static void* GetMethodParameterTypesPtr = GetStaticMethodPointer(TEXT("GetMethodParameterTypes"));
|
||||
static void* GetMethodParameterIsOutPtr = GetStaticMethodPointer(TEXT("GetMethodParameterIsOut"));
|
||||
_returnType = CallStaticMethod<void*, void*>(GetMethodReturnTypePtr, _handle);
|
||||
_parameterOuts = 0;
|
||||
if (_paramsCount != 0)
|
||||
{
|
||||
void** parameterTypeHandles;
|
||||
CallStaticMethod<void, void*, void***>(GetMethodParameterTypesPtr, _handle, ¶meterTypeHandles);
|
||||
_parameterTypes.Set(parameterTypeHandles, _paramsCount);
|
||||
MCore::GC::FreeMemory(parameterTypeHandles);
|
||||
_parameterOuts = CallStaticMethod<uint64, void*>(GetMethodParameterIsOutPtr, _handle);
|
||||
}
|
||||
|
||||
_hasCachedSignature = true;
|
||||
@@ -1587,9 +1590,7 @@ bool MMethod::GetParameterIsOut(int32 paramIdx) const
|
||||
if (!_hasCachedSignature)
|
||||
CacheSignature();
|
||||
ASSERT_LOW_LAYER(paramIdx >= 0 && paramIdx < _paramsCount);
|
||||
// TODO: cache GetParameterIsOut maybe?
|
||||
static void* GetMethodParameterIsOutPtr = GetStaticMethodPointer(TEXT("GetMethodParameterIsOut"));
|
||||
return CallStaticMethod<bool, void*, int>(GetMethodParameterIsOutPtr, _handle, paramIdx);
|
||||
return _parameterOuts & (1ull << paramIdx);
|
||||
}
|
||||
|
||||
bool MMethod::HasAttribute(const MClass* klass) const
|
||||
|
||||
Reference in New Issue
Block a user