findlocaldata #20
@@ -3,7 +3,6 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
|
|
|||||||
#include "../Utils/SgUtils.h"
|
#include "../Utils/SgUtils.h"
|
||||||
#include "../Utils/utils.h"
|
#include "../Utils/utils.h"
|
||||||
@@ -39,7 +38,7 @@ static SgType* createArrayCharType(int len, int dim)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<string, SgStatement*>& localParams,
|
static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<string, SgStatement*>& localParams,
|
||||||
set<string>& added, std::set<std::string>& IntentInadded)
|
set<string>& added, set<string>& IntentInParams)
|
||||||
{
|
{
|
||||||
|
Alexander_KS
commented
std:: лишнее, так как сверху есть using namespace std; std:: лишнее, так как сверху есть using namespace std;
AntonMilienkov
commented
ок ок
|
|||||||
if (ex)
|
if (ex)
|
||||||
{
|
{
|
||||||
@@ -68,8 +67,8 @@ static void findDecls(SgExpression* ex, vector<SgExpression*>& local, const map<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
findDecls(ex->lhs(), local, localParams, added, IntentInadded);
|
findDecls(ex->lhs(), local, localParams, added, IntentInParams);
|
||||||
findDecls(ex->rhs(), local, localParams, added, IntentInadded);
|
findDecls(ex->rhs(), local, localParams, added, IntentInParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,10 +90,10 @@ static void findLocalData(SgStatement* func, SgStatement* end, vector<SgExpressi
|
|||||||
SgStatement* start = func->lexNext();
|
SgStatement* start = func->lexNext();
|
||||||
|
|
||||||
FuncInfo* funcI = findFileInfoByName(func, allFuncInfo);
|
FuncInfo* funcI = findFileInfoByName(func, allFuncInfo);
|
||||||
std::set<std::string> IntentInadded;
|
set<string> IntentInParams;
|
||||||
|
Alexander_KS
commented
зачем искать эту функцию заново, если она уже ищется до вызова ? ее нужно передать просто, и не передавать вектор зачем искать эту функцию заново, если она уже ищется до вызова ? ее нужно передать просто, и не передавать вектор
AntonMilienkov
commented
не понял про "заново", кажется, что не ищется. Эта функция взята из функции processFunctionCallChain (написанной студенткой) и этот код (если его раскомментить) выполняется позже. До вывзова findlocatedata ищется тоьлко название функции, в которой есть create checkpoint. не понял про "заново", кажется, что не ищется. Эта функция взята из функции processFunctionCallChain (написанной студенткой) и этот код (если его раскомментить) выполняется позже. До вывзова findlocatedata ищется тоьлко название функции, в которой есть create checkpoint.
Так как подобный код есть в processFunctionCallChain, я решил выделить его в отдельную функцию
|
|||||||
for (int i = 0; i < funcI->funcParams.countOfPars; ++i)
|
for (int i = 0; i < funcI->funcParams.countOfPars; ++i)
|
||||||
if (funcI->funcParams.isArgIn(i) && !funcI->funcParams.isArgOut(i))
|
if (funcI->funcParams.isArgIn(i) && !funcI->funcParams.isArgOut(i))
|
||||||
IntentInadded.insert(funcI->funcParams.identificators[i]);
|
IntentInParams.insert(funcI->funcParams.identificators[i]);
|
||||||
|
Alexander_KS
commented
есть еще isArgInOut, надо просто посмотреть доступные функции есть еще isArgInOut, надо просто посмотреть доступные функции
AntonMilienkov
commented
isArgInOut реализован следующим образом: Поэтому, если переменная не out, то она и не inout isArgInOut реализован следующим образом:
bool isArgInOut(const int num) const
{
if (num >= countOfPars)
return false;
else
return isArgIn(num) && isArgOut(num);
}
Поэтому, если переменная не out, то она и не inout
|
|||||||
|
|
||||||
for (SgStatement* st = start; st != end; st = st->lexNext())
|
for (SgStatement* st = start; st != end; st = st->lexNext())
|
||||||
{
|
{
|
||||||
@@ -115,7 +114,7 @@ static void findLocalData(SgStatement* func, SgStatement* end, vector<SgExpressi
|
|||||||
{
|
{
|
||||||
//printf("line %d %s Var %s\n", st->lineNumber(), st->fileName(), tag[st->variant()]);
|
//printf("line %d %s Var %s\n", st->lineNumber(), st->fileName(), tag[st->variant()]);
|
||||||
if (st->variant() == VAR_DECL || st->variant() == VAR_DECL_90)
|
if (st->variant() == VAR_DECL || st->variant() == VAR_DECL_90)
|
||||||
findDecls(st->expr(0), local, localParams, added, IntentInadded);
|
findDecls(st->expr(0), local, localParams, added, IntentInParams);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
этот заголовок для отладки использовлася?
да, впредь буду удалять