From 34bc8b0219899637742825b1b993eba3596428f8 Mon Sep 17 00:00:00 2001 From: DenisDudarenko Date: Sat, 16 Mar 2024 19:40:29 +0300 Subject: [PATCH] Fix problems --- sapfor/experts/Sapfor_2017/_src/Sapfor.cpp | 1 - .../Transformations/set_implicit_none.cpp | 65 ++++--------------- 2 files changed, 13 insertions(+), 53 deletions(-) diff --git a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp index 3d283a4..375238c 100644 --- a/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Sapfor.cpp @@ -2541,7 +2541,6 @@ void runPass(const int curr_regime, const char *proj_name, const char *folderNam case LOOPS_SPLITTER: case LOOPS_COMBINER: case FIX_COMMON_BLOCKS: - //case SET_IMPLICIT_NONE: case TEST_PASS: runAnalysis(*project, curr_regime, false); case SUBST_EXPR_RD_AND_UNPARSE: diff --git a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp index dfefa2e..4efb058 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp @@ -19,7 +19,6 @@ char AddLettersToMap(SgExpression* params, SgType* type); void ImplicitCheck(SgFile* file) { - for (int functionNumber = 0; functionNumber < file->numberOfFunctions(); functionNumber++) { InitTypes(); @@ -30,16 +29,14 @@ void ImplicitCheck(SgFile* file) CleanTypes(); } - - return; } -void FunctionImplicitCheck(SgStatement* function) +static void FunctionImplicitCheck(SgStatement* function) { auto implicitNoneDeclaration = new SgStatement(IMPL_DECL); auto hasImplicitNone = false; - for (SgStatement* statement = function; statement = statement->lexNext(); statement != NULL) + for (SgStatement* statement = function; statement != NULL; statement = statement->lexNext()) { if (statement->variant() == IMPL_DECL) { @@ -59,24 +56,16 @@ void FunctionImplicitCheck(SgStatement* function) } } else - { hasImplicitNone = true; - } } } else if (statement->variant() == CONTAINS_STMT || isSgExecutableStatement(statement) != NULL) - { break; - } } for (SgStatement* statement = function; statement != function->lastExecutable(); statement = statement->lexNext()) - { for (int expressionNumber = 0; expressionNumber < 3; expressionNumber++) - { FindAllVars(statement->expr(expressionNumber)); - } - } for (auto var : allVars) { @@ -87,9 +76,7 @@ void FunctionImplicitCheck(SgStatement* function) char c = var->identifier()[0]; if (types.find(c) != types.end()) - { var->setType(types[c]); - } varsWithoutDecl.push_back(var); } @@ -108,73 +95,55 @@ void FunctionImplicitCheck(SgStatement* function) tmpStatement->deleteStmt(); } else - { statement = statement->lexNext(); - } } - function->insertStmtBefore(*implicitNoneDeclaration, *function); + function->insertStmtAfter(*implicitNoneDeclaration, *function); } - return; + printf("%s", function->unparse()); } -void InitTypes() +static void InitTypes() { for (char letter = 'a'; letter <= 'z'; letter++) - { types[letter] = NULL; - } } -void FillCommonTypes() +static void FillCommonTypes() { for (char letter : commonIntLetters) - { if (types[letter] == NULL) - { types[letter] = new SgType(T_INT); - } - } for (auto letter : types) - { if (letter.second == NULL) - { types[letter.first] = new SgType(T_FLOAT); - } - } } -void CleanTypes() +static void CleanTypes() { types.clear(); allVars.clear(); varsWithoutDecl.clear(); } -void FindAllVars(SgExpression* expr) +static void FindAllVars(SgExpression* expr) { if (expr == NULL) - { return; - } - if (expr->symbol() != NULL) - { + if (expr->variant() == VAR_REF || expr->variant() == ARRAY_REF) allVars.insert(expr->symbol()); - } FindAllVars(expr->lhs()); FindAllVars(expr->rhs()); } -char AddLettersToMap(SgExpression* expr, SgType* type) +static char AddLettersToMap(SgExpression* expr, SgType* type) { if (expr == NULL) - { return NULL; - } if (expr->variant() == CHAR_VAL) { @@ -186,24 +155,16 @@ char AddLettersToMap(SgExpression* expr, SgType* type) char rightVal = AddLettersToMap(expr->rhs(), type); if (expr->variant() == DDOT) - { if (leftVal != NULL && rightVal != NULL) - { for (char letter = leftVal; letter <= rightVal; letter++) - { types[letter] = type; - } - } - } if (expr->variant() == EXPR_LIST) - { - if (leftVal != NULL) { + { + if (leftVal != NULL) types[leftVal] = type; - } - if (rightVal != NULL) { + if (rightVal != NULL) types[rightVal] = type; - } } return NULL;