Procházet zdrojové kódy

CreateConstExprValueType fix with incoming constExprType TypedValue

Brian Fiete před 7 měsíci
rodič
revize
ac7f66c1f1

+ 7 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -13266,8 +13266,14 @@ BfVariant BfModule::TypedValueToVariant(BfAstNode* refNode, const BfTypedValue&
 			}
 		}
 	}
-	else
+	else if (value.mType->IsConstExprValue())
 	{
+		auto constExprType = (BfConstExprValueType*)value.mType;
+		return constExprType->mValue;
+	}
+	else if (value.mType->IsValueType())
+	{		
+		PopulateType(value.mType);
 		int allocSize = value.mType->mSize + 4;
 		BfVariant::StructData* structData = (BfVariant::StructData*)(new uint8[allocSize]);
 		memset(structData, 0, allocSize);

+ 3 - 0
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -7742,6 +7742,9 @@ BfPointerType* BfModule::CreatePointerType(BfType* resolvedType)
 
 BfConstExprValueType* BfModule::CreateConstExprValueType(const BfTypedValue& typedValue, bool allowCreate)
 {
+	if (typedValue.mType->IsConstExprValue())
+		return (BfConstExprValueType*)typedValue.mType;
+
 	BfPopulateType populateType = allowCreate ? BfPopulateType_Data : BfPopulateType_Identity;
 	BfResolveTypeRefFlags resolveFlags = allowCreate ? BfResolveTypeRefFlag_None : BfResolveTypeRefFlag_NoCreate;