Files
SAPFOR/projects/dvm/fdvm/trunk/Sage/lib/include/attributes.h
2025-03-12 14:28:04 +03:00

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