Explorar el Código

Fixed AddStackMarkableObject with base append fields

Brian Fiete hace 7 meses
padre
commit
d9ce23ac8e

+ 2 - 8
IDEHelper/Compiler/BfExprEvaluator.cpp

@@ -16739,14 +16739,8 @@ void BfExprEvaluator::CreateObject(BfObjectCreateExpression* objCreateExpr, BfAs
 
 							if (!needsCall)
 							{
-								for (auto& fieldInst : typeInstance->mFieldInstances)
-								{
-									if (fieldInst.IsAppendedObject())
-									{
-										needsCall = true;
-										break;
-									}
-								}
+								if (typeInstance->HasAppendedField(true))
+									needsCall = true;								
 							}
 
 							if (needsCall)

+ 14 - 0
IDEHelper/Compiler/BfResolvedTypeUtils.cpp

@@ -2483,6 +2483,20 @@ bool BfTypeInstance::BaseHasAppendCtor()
 	return false;
 }
 
+bool BfTypeInstance::HasAppendedField(bool checkBase)
+{
+	for (auto& fieldInstance : mFieldInstances)
+	{
+		if (fieldInstance.IsAppendedObject())
+			return true;
+	}
+
+	if ((checkBase) && (mBaseType != NULL))
+		return mBaseType->HasAppendedField(checkBase);
+
+	return false;
+}
+
 void BfTypeInstance::ReportMemory(MemReporter* memReporter)
 {
 	if (mGenericTypeInfo != NULL)

+ 2 - 1
IDEHelper/Compiler/BfResolvedTypeUtils.h

@@ -1020,7 +1020,7 @@ public:
 	BfExpression* GetParamInitializer(int paramIdx);
 	BfTypeReference* GetParamTypeRef(int paramIdx);
 	BfIdentifierNode* GetParamNameNode(int paramIdx);
-	int DbgGetVirtualMethodNum();
+	int DbgGetVirtualMethodNum();	
 
 	void GetIRFunctionInfo(BfModule* module, BfIRType& returnType, SizedArrayImpl<BfIRType>& paramTypes, bool forceStatic = false);
 	int GetIRFunctionParamCount(BfModule* module);
@@ -2219,6 +2219,7 @@ public:
 	bool IsAnonymousInitializerType();
 	bool HasAppendCtor();
 	bool BaseHasAppendCtor();
+	bool HasAppendedField(bool checkBase);
 
 	virtual void ReportMemory(MemReporter* memReporter) override;
 };