#pragma once struct DefUseList { private: int type; // def(0) or use(1) SgStatement *place; SgExpression *expr; SgFile *file; std::pair paramOfFunction; int parameterPosition; std::pair varName; int parameterPositionInFunction; public: explicit DefUseList(int type, SgStatement *place, SgExpression *expr, SgFile *file, const std::pair &inFuncParam, const std::pair &varName, const int parameterPosition, const int paramenterPostionInFunction) : type(type), place(place), expr(expr), file(file), paramOfFunction(inFuncParam), varName(varName), parameterPosition(parameterPosition), parameterPositionInFunction(paramenterPostionInFunction) { } bool isDef() const { return type == 0; } bool isUse() const { return type == 1; } std::string getVar() const { return varName.second; } SgSymbol* getVarS() const { return varName.first; } SgFile* getFile() const { return file; } SgStatement* getPlace() const { return place; } SgExpression* getExpr() const { return expr; } std::string getParamOfFunction() const { return paramOfFunction.second; } SgSymbol* getParamOfFunctionS() const { return paramOfFunction.first; } int getParameterPosition() const { return parameterPosition; } int getParameterPositionInFunction() const { return parameterPositionInFunction; } void print(FILE *fileOut = NULL, const bool onlyPositiveLine = false) const { if (onlyPositiveLine && place->lineNumber() < 0) return; if (fileOut == NULL) { printf("%s: [file: %s, line: %d], '%s' ", (type == 0) ? "DEF" : "USE", file->filename(), place->lineNumber(), varName.second.c_str()); if (parameterPosition != -1) printf(" under call of '%s' function on %d position of args (alt pos %d)", paramOfFunction.second.c_str(), parameterPosition, parameterPositionInFunction); printf("\n"); } else { fprintf(fileOut, "%s: [file: %s, line: %d], '%s' ", (type == 0) ? "DEF" : "USE", file->filename(), place->lineNumber(), varName.second.c_str()); if (parameterPosition != -1) fprintf(fileOut, " under call of '%s' function on %d position of args (alt pos %d)", paramOfFunction.second.c_str(), parameterPosition, parameterPositionInFunction); fprintf(fileOut, "\n"); } } };