From 6ebfaad68f90809604b8cdda3f9ccc5b0231637b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Tr=C3=A1vn=C3=AD=C4=8Dek?= <jan.travnicek@fit.cvut.cz>
Date: Sat, 19 Mar 2022 21:55:20 +0100
Subject: [PATCH] abstraction: fix cast noop detection

---
 alib2abstraction/src/common/CastHelper.cpp         | 2 +-
 alib2abstraction/src/common/EvalHelper.cpp         | 4 +---
 alib2cli/src/ast/statements/ContainerStatement.cpp | 6 +-----
 3 files changed, 3 insertions(+), 9 deletions(-)

diff --git a/alib2abstraction/src/common/CastHelper.cpp b/alib2abstraction/src/common/CastHelper.cpp
index a0a51bd889..2c7417fdc2 100644
--- a/alib2abstraction/src/common/CastHelper.cpp
+++ b/alib2abstraction/src/common/CastHelper.cpp
@@ -6,7 +6,7 @@
 namespace abstraction {
 
 std::shared_ptr < abstraction::Value > CastHelper::eval ( abstraction::TemporariesHolder & environment, std::shared_ptr < abstraction::Value > param, const core::type_details & type ) {
-	if ( abstraction::Registry::isCastNoOp ( type, param->getActualType ( ) ) ) {
+	if ( abstraction::Registry::isCastNoOp ( param->getActualType ( ), type ) ) {
 		return param;
 	}
 
diff --git a/alib2abstraction/src/common/EvalHelper.cpp b/alib2abstraction/src/common/EvalHelper.cpp
index c1b10abd5c..d7b40256db 100644
--- a/alib2abstraction/src/common/EvalHelper.cpp
+++ b/alib2abstraction/src/common/EvalHelper.cpp
@@ -70,9 +70,7 @@ std::shared_ptr < abstraction::Value > EvalHelper::evalAbstraction ( abstraction
 	unsigned i = 0;
 	ext::vector < std::shared_ptr < abstraction::Value > > casted_params;
 	for ( std::shared_ptr < abstraction::Value > param : params ) {
-		if ( ! abstraction::Registry::isCastNoOp ( param->getActualType ( ), abstraction->getParamType ( i ) ) ) {
-			param = abstraction::CastHelper::eval ( environment, param, abstraction->getParamType ( i ) );
-		}
+		param = abstraction::CastHelper::eval ( environment, param, abstraction->getParamType ( i ) );
 
 		if ( abstraction::Registry::hasDenormalize ( abstraction->getParamType ( i ) ) && abstraction->getParamType ( i ) != param->getDeclaredType ( ) ) {
 			std::unique_ptr < abstraction::OperationAbstraction > denormalize = abstraction::Registry::getDenormalizeAbstraction ( abstraction->getParamType ( i ) );
diff --git a/alib2cli/src/ast/statements/ContainerStatement.cpp b/alib2cli/src/ast/statements/ContainerStatement.cpp
index c001889958..a9213a0cb1 100644
--- a/alib2cli/src/ast/statements/ContainerStatement.cpp
+++ b/alib2cli/src/ast/statements/ContainerStatement.cpp
@@ -24,11 +24,7 @@ std::shared_ptr < abstraction::Value > ContainerStatement::translateAndEval ( co
 	int i = 0;
 	ext::vector < std::shared_ptr < abstraction::Value > > casted_params;
 	for ( const std::shared_ptr < abstraction::Value > & param : params ) {
-		if ( abstraction::Registry::isCastNoOp ( algo->getParamType ( i ), param->getDeclaredType ( ) ) ) {
-			casted_params.push_back ( param );
-		} else {
-			casted_params.push_back ( abstraction::CastHelper::eval ( environment, param, algo->getParamType ( i ) ) );
-		}
+		casted_params.push_back ( abstraction::CastHelper::eval ( environment, param, algo->getParamType ( i ) ) );
 		++ i;
 	}
 
-- 
GitLab