Browse Source

Fixed reflecting Invoke for delegate/function

Brian Fiete 1 year ago
parent
commit
b98f1ea6a4

+ 3 - 0
IDEHelper/Compiler/BfModule.cpp

@@ -7299,6 +7299,9 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary<int, int>& usedStrin
 
 		bool includeMethod = reflectIncludeAllMethods;
 
+		if (typeInstance->IsDelegateOrFunction())
+			includeMethod = true;
+
 		BfMethodCustomAttributes* methodCustomAttributes = NULL;
 		if ((defaultMethod->mMethodInfoEx != NULL) && (defaultMethod->mMethodInfoEx->mMethodCustomAttributes != NULL) && (defaultMethod->mMethodInfoEx->mMethodCustomAttributes->mCustomAttributes != NULL))
 		{

+ 3 - 0
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -4675,6 +4675,9 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
 	typeInstance->mInstSize = std::max(0, typeInstance->mInstSize);
 	typeInstance->mInstAlign = std::max(0, typeInstance->mInstAlign);
 
+	if (typeInstance->IsDelegateOrFunction())
+		typeInstance->mAlwaysIncludeFlags = (BfAlwaysIncludeFlags)(typeInstance->mAlwaysIncludeFlags | BfAlwaysIncludeFlag_IncludeAllMethods);
+
 	ProcessCustomAttributeData();
 	int packing = 0;
 	bool isUnion = false;

+ 2 - 0
IDEHelper/Compiler/BfSystem.cpp

@@ -690,6 +690,8 @@ bool BfMethodDef::CanReflect()
 		return true;
 	if (mMethodType == BfMethodType_Ctor)
 		return true;
+	if ((mDeclaringType->mIsDelegate) || (mDeclaringType->mIsFunction))
+		return mName == "Invoke";
 	return false;
 }