浏览代码

Fixed CreateValueTypeEqualsMethod

Brian Fiete 5 年之前
父节点
当前提交
44c8da4eb3
共有 1 个文件被更改,包括 12 次插入12 次删除
  1. 12 12
      IDEHelper/Compiler/BfModule.cpp

+ 12 - 12
IDEHelper/Compiler/BfModule.cpp

@@ -4187,28 +4187,28 @@ void BfModule::CreateValueTypeEqualsMethod(bool strictEquals)
 	
 	
 	if (mBfIRBuilder->mIgnoreWrites)
 	if (mBfIRBuilder->mIgnoreWrites)
 		return;
 		return;
-
-	auto boolType = GetPrimitiveType(BfTypeCode_Boolean);	
-	if (mCurTypeInstance->IsTypedPrimitive())
-	{
-		BfExprEvaluator exprEvaluator(this);
-		BfTypedValue leftTypedVal = LoadValue(exprEvaluator.LoadLocal(mCurMethodState->mLocals[0]));
-		BfTypedValue rightTypedVal = LoadValue(exprEvaluator.LoadLocal(mCurMethodState->mLocals[1]));
-		auto cmpResult = mBfIRBuilder->CreateCmpEQ(leftTypedVal.mValue, rightTypedVal.mValue);
-		mBfIRBuilder->CreateRet(cmpResult);
-		return;
-	}
-
+	
 	BF_ASSERT(!mCurTypeInstance->IsBoxed());
 	BF_ASSERT(!mCurTypeInstance->IsBoxed());
 
 
 	auto compareType = mCurMethodInstance->mParams[0].mResolvedType;	
 	auto compareType = mCurMethodInstance->mParams[0].mResolvedType;	
 	bool isValid = true;
 	bool isValid = true;
 
 
+	auto boolType = GetPrimitiveType(BfTypeCode_Boolean);
 	if (compareType->IsValuelessType())
 	if (compareType->IsValuelessType())
 	{
 	{
 		mBfIRBuilder->CreateRet(GetDefaultValue(boolType));
 		mBfIRBuilder->CreateRet(GetDefaultValue(boolType));
 		return;
 		return;
 	}
 	}
+	
+	if (compareType->IsTypedPrimitive())
+	{
+		BfExprEvaluator exprEvaluator(this);
+		BfTypedValue leftTypedVal = LoadValue(exprEvaluator.LoadLocal(mCurMethodState->mLocals[0]));
+		BfTypedValue rightTypedVal = LoadValue(exprEvaluator.LoadLocal(mCurMethodState->mLocals[1]));
+		auto cmpResult = mBfIRBuilder->CreateCmpEQ(leftTypedVal.mValue, rightTypedVal.mValue);
+		mBfIRBuilder->CreateRet(cmpResult);
+		return;
+	}
 
 
 	auto compareDType = compareType->ToDependedType();
 	auto compareDType = compareType->ToDependedType();
 	BfTypeInstance* compareTypeInst = compareType->ToTypeInstance();
 	BfTypeInstance* compareTypeInst = compareType->ToTypeInstance();