96 lines
3.3 KiB
C++
96 lines
3.3 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Defines the data structure for attributes in sage
|
|
// attributes can be used to store any information for any statement, expression, symbol or types nodes
|
|
// F. Bodin Indiana July 94.
|
|
//
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class SgAttribute{
|
|
private:
|
|
// the attribute data;
|
|
int type; // a label;
|
|
void *data; // the data;
|
|
int dataSize; // the size of the data in bytes to allow data to be copied;
|
|
SgAttribute *next; // to the next attribute of a statements (do that way or not??);
|
|
// link to sage node, allow to go from an attribute to sage stuffs;
|
|
typenode typeNode; // indicates if SgStatement, SgExpression, ... ptToSage is pointed to;
|
|
void *ptToSage; // pointer to SgStatement, SgExpression, ... ;
|
|
int fileNumber; // the file methods;
|
|
// the methods to access the structure of an attributes;
|
|
public:
|
|
SgAttribute(int t, void *pt, int size, SgStatement &st, int filenum);
|
|
SgAttribute(int t, void *pt, int size, SgSymbol &st, int filenum);
|
|
SgAttribute(int t, void *pt, int size, SgExpression &st, int filenum);
|
|
SgAttribute(int t, void *pt, int size, SgType &st, int filenum);
|
|
SgAttribute(int t, void *pt, int size, SgLabel &st, int filenum); //Kataev 21.03.2013
|
|
SgAttribute(int t, void *pt, int size, SgFile &st, int filenum); //Kataev 15.07.2013
|
|
SgAttribute(const SgAttribute& copy)
|
|
{
|
|
type = copy.type;
|
|
data = copy.data;
|
|
dataSize = copy.dataSize;
|
|
next = NULL;
|
|
typeNode = copy.typeNode;
|
|
ptToSage = copy.ptToSage;
|
|
fileNumber = copy.fileNumber;
|
|
}
|
|
|
|
~SgAttribute();
|
|
int getAttributeType();
|
|
void setAttributeType(int t);
|
|
void *getAttributeData();
|
|
void *setAttributeData(void *d);
|
|
int getAttributeSize();
|
|
void setAttributeSize(int s);
|
|
typenode getTypeNode();
|
|
void *getPtToSage();
|
|
void setPtToSage(void *sa);
|
|
void resetPtToSage();
|
|
void setPtToSage(SgStatement &st);
|
|
void setPtToSage(SgSymbol &st);
|
|
void setPtToSage(SgExpression &st);
|
|
void setPtToSage(SgType &st);
|
|
void setPtToSage(SgLabel &st); //Kataev 21.03.2013
|
|
void setPtToSage(SgFile &st); //Kataev 15.07.2013
|
|
SgStatement *getStatement();
|
|
SgExpression *getExpression();
|
|
SgSymbol *getSgSymbol();
|
|
SgType *getType();
|
|
SgLabel *getLabel(); //Kataev 21.03.2013
|
|
SgFile *getFile(); //Kataev 15.07.2013
|
|
int getfileNumber();
|
|
SgAttribute *copy();
|
|
SgAttribute *getNext();
|
|
void setNext(SgAttribute *s);
|
|
int listLenght();
|
|
SgAttribute *getInlist(int num);
|
|
void save(FILE *file);
|
|
void save(FILE *file, void (*savefunction)(void *dat,FILE *f));
|
|
|
|
};
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// The ATTRIBUTE TYPE ALREADY USED
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define DEPENDENCE_ATTRIBUTE -1001
|
|
#define INDUCTION_ATTRIBUTE -1002
|
|
#define ACCESS_ATTRIBUTE -1003
|
|
#define DEPGRAPH_ATTRIBUTE -1004
|
|
#define USEDLIST_ATTRIBUTE -1005
|
|
#define DEFINEDLIST_ATTRIBUTE -1006
|
|
|
|
#define NOGARBAGE_ATTRIBUTE -1007
|
|
#define GARBAGE_ATTRIBUTE -1008
|
|
|
|
// store the annotation expression; it is then visible from the
|
|
// garbage collection
|
|
#define ANNOTATION_EXPR_ATTRIBUTE -1009
|
|
|
|
|
|
|