Added support for dynamically allocated arrays.
[repair.git] / Repair / RepairInterpreter / cmodel.h
1 #ifndef Cmodel_H
2 #define Cmodel_H
3 #include<unistd.h>
4 #include "classlist.h"
5 #include "amodel.h"
6
7 #define CAELEMENTEXPR_LABEL 1
8 #define CAELEMENTEXPR_SUB 2
9 #define CAELEMENTEXPR_ADD 3
10 #define CAELEMENTEXPR_MULT 4
11 #define CAELEMENTEXPR_LIT 5
12 #define CAELEMENTEXPR_NULL 8
13 #define CAELEMENTEXPR_SIZEOF 9
14 #define CAELEMENTEXPR_ELEMENT 10
15 #define CAELEMENTEXPR_RELATION 11
16 #define CAELEMENTEXPR_DIV 12
17 class CAElementexpr:public AElementexpr {
18  public:
19   CAElementexpr(CAElementexpr *index, Setexpr *se);
20   CAElementexpr(Setexpr *se);
21   CAElementexpr(CAElementexpr *,Relation *r);  
22   CAElementexpr(CAElementexpr *l, CAElementexpr *r, int op);
23   CAElementexpr(Literal *lit);
24   CAElementexpr(Label *lab);
25   CAElementexpr();
26   CAElementexpr * getleft();
27   CAElementexpr * getright();
28   Setexpr * getsetexpr();
29   void print();
30   Relation * getrelation();
31  private:
32   Relation *rrelation;
33   Setexpr *setexpr;
34 };
35
36 #define EXPR_LABEL 1
37 #define EXPR_FIELD 2
38 #define EXPR_ARRAY 3
39 #define EXPR_CAST 4
40
41 class Expr {
42  public:
43   Expr(Label *l);
44   Expr(Expr *, Field *);
45   Expr(Expr *, Field *, CAElementexpr *);
46   Expr(char *, Expr *);
47   int gettype();
48   Expr * getexpr();
49   Field * getfield();
50   Label * getlabel();
51   CAElementexpr * getindex();
52   void print();
53   char * getcasttype();
54
55  private:
56   int type;
57   CAElementexpr *index;
58   Expr *expr;
59   Field *field;
60   Label *label;
61   char *casttype;
62 };
63
64 #define CSTATEMENTB_FIELDASSIGN 3
65 #define CSTATEMENTB_ARRAYASSIGN 4
66
67 class CStatementb:public Statementb {
68  public:
69   void print();
70   CStatementb(Expr *l, Field *f, CAElementexpr *rvalue);
71   CStatementb(Expr *l, Field *f, CAElementexpr *index, CAElementexpr *rvalue);
72   Expr * getexpr();
73   Field * getfield();
74  protected:
75   Expr *expr;
76   Field *field;
77 };
78 #endif