From 83a303cc306bc8a8149dd2a520c8cba34505db98 Mon Sep 17 00:00:00 2001 From: ALEXks Date: Thu, 13 Feb 2025 16:37:24 +0300 Subject: [PATCH] fixed implicit --- .../_src/Transformations/set_implicit_none.cpp | 5 ++++- .../experts/Sapfor_2017/_src/Utils/module_utils.h | 13 +++++++++++++ sapfor/experts/Sapfor_2017/_src/Utils/version.h | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 sapfor/experts/Sapfor_2017/_src/Utils/module_utils.h 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 32d1c19..8407685 100644 --- a/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp +++ b/sapfor/experts/Sapfor_2017/_src/Transformations/set_implicit_none.cpp @@ -51,12 +51,15 @@ static void FindAllVars(SgExpression* expr, set& allVars, setsymbol(); const string ident(s->identifier()); + const int s_var = s->variant(); + if (var == FUNC_CALL /*(s->attributes() & EXTERNAL_BIT)*/) { if (!IS_BY_USE(s) && ident.find("::") == string::npos /* && s->scope() == scope*/) allVars.insert(s); } - else + else if (s_var != CONSTRUCT_NAME || + s_var == VARIABLE_NAME) { if (!IS_BY_USE(s) && ident.find("::") == string::npos && s->scope() == scope) allVars.insert(s); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/module_utils.h b/sapfor/experts/Sapfor_2017/_src/Utils/module_utils.h new file mode 100644 index 0000000..e0e14a5 --- /dev/null +++ b/sapfor/experts/Sapfor_2017/_src/Utils/module_utils.h @@ -0,0 +1,13 @@ +#pragma once + +void getModulesAndFunctions(SgFile* file, std::vector& modulesAndFunctions); +void findModulesInFile(SgFile* file, std::vector& modules); +SgSymbol* getFromModule(const std::map>& byUse, SgSymbol* orig, bool processAsModule = false); +std::map> createMapOfModuleUses(SgFile* file); +void fillModuleUse(SgFile* file, std::map>& moduleUses, std::map& moduleDecls); +void filterModuleUse(std::map>& moduleUses, std::map& moduleDecls); +void fillUsedModulesInFunction(SgStatement* st, std::vector& useStats); +std::string getNameByUse(SgStatement* place, const std::string& varName, const std::string& locName); +void fillUseStatement(SgStatement* st, std::set& useMod, std::map>>& modByUse, std::map>>& modByUseOnly); +void fixUseOnlyStmt(SgFile* file, const std::vector& regs); +std::map> moduleRefsByUseInFunction(SgStatement* stIn); diff --git a/sapfor/experts/Sapfor_2017/_src/Utils/version.h b/sapfor/experts/Sapfor_2017/_src/Utils/version.h index 94a1911..a6610ad 100644 --- a/sapfor/experts/Sapfor_2017/_src/Utils/version.h +++ b/sapfor/experts/Sapfor_2017/_src/Utils/version.h @@ -1,3 +1,3 @@ #pragma once -#define VERSION_SPF "2389" +#define VERSION_SPF "2390"