1 #ifndef __constraintExpr_h__
3 #define __constraintExpr_h__
5 typedef union constraintTermValue_
10 } constraintTermValue;
18 struct _constraintTerm {
20 constraintTermValue value;
21 constraintTermType kind;
30 constraintExprBinaryOpKind;
35 MAXSET, MINSET, MAXREAD, MINREAD,
39 constraintExprUnaryOpKind;
49 typedef struct constraintExprBinaryOp_
52 constraintExprBinaryOpKind binaryOp;
54 } constraintExprBinaryOp;
57 typedef struct constraintExprUnaryOp_
60 constraintExprUnaryOpKind unaryOp;
61 } constraintExprUnaryOp;
64 typedef union constraintExprData_
66 constraintExprBinaryOp binaryOp;
67 constraintExprUnaryOp unaryOp;
69 } *constraintExprData;
72 struct constraintExpr_ {
73 constraintExprKind kind;
74 constraintExprData data;
77 # define constraintExpr_undefined ((constraintExpr)NULL)
79 //constraintTerm constraintTerm_copy (constraintTerm term);
81 int constraintExpr_getValue (constraintExpr expr) /*@*/;
83 constraintExpr constraintExpr_setFileloc (constraintExpr expr, fileloc loc);
85 constraintExpr constraintExpr_copy (constraintExpr expr);
87 cstring constraintExpr_unparse (constraintExpr ex) /*@*/;
88 extern cstring constraintExpr_print (constraintExpr expr) /*@*/;
91 bool constraintExpr_similar (constraintExpr expr1, constraintExpr expr2);
92 bool constraintExpr_same (constraintExpr expr1, constraintExpr expr2);
93 constraintExpr constraintExpr_searchandreplace (constraintExpr c, constraintExpr old, constraintExpr new );
94 bool constraintExpr_canGetValue (constraintExpr expr);
96 int constraintExpr_compare (constraintExpr expr1, constraintExpr expr2);
98 constraintExpr constraintExpr_makeValueInt (int i);
100 constraintExpr constraintExpr_makeIntLiteral (int i);
102 constraintExpr constraintExpr_makeValueExpr (exprNode expr);
104 constraintExpr constraintExpr_makeMaxSetExpr (exprNode expr);
106 constraintExpr constraintExpr_makeMaxReadExpr (exprNode expr);
108 constraintExpr constraintExpr_makeMinSetExpr (exprNode expr);
110 constraintExpr constraintExpr_makeMinReadExpr (exprNode expr);
112 constraintExpr constraintExpr_makeIncConstraintExpr (constraintExpr expr);
114 constraintExpr constraintExpr_makeDecConstraintExpr (constraintExpr expr);
116 constraintExpr constraintExpr_simplify (constraintExpr c);
119 constraintExpr constraintExpr_solveBinaryExpr (constraintExpr lexpr, constraintExpr expr);
121 bool constraintExpr_search (constraintExpr c, constraintExpr old);
124 constraintExprData constraintExprData_copy (constraintExprData data, constraintExprKind kind);
127 constraintExprData constraintExprData_termSetTerm (/*@out@*/ constraintExprData data, constraintTerm term);
129 constraintTerm constraintExprData_termGetTerm (constraintExprData data) /*@*/;
131 constraintExprUnaryOpKind constraintExprData_unaryExprGetOp (constraintExprData data) /*@*/;
133 constraintExpr constraintExprData_unaryExprGetExpr (constraintExprData data) /*@*/;
135 constraintExprData constraintExprData_unaryExprSetOp (constraintExprData data, constraintExprUnaryOpKind op);
138 constraintExprData constraintExprData_unaryExprSetExpr (constraintExprData data, constraintExpr expr);
141 constraintExprBinaryOpKind constraintExprData_binaryExprGetOp (constraintExprData data) /*@*/;
143 constraintExpr constraintExprData_binaryExprGetExpr1 (constraintExprData data)/*@*/;
145 constraintExpr constraintExprData_binaryExprGetExpr2 (constraintExprData data)/*@*/;
147 constraintExprData constraintExprData_binaryExprSetExpr1 (constraintExprData data, constraintExpr expr);
149 constraintExprData constraintExprData_binaryExprSetExpr2 (constraintExprData data, constraintExpr expr);
151 constraintExprData constraintExprData_binaryExprSetOp (constraintExprData data, constraintExprBinaryOpKind op);
152 fileloc constraintExpr_getFileloc (constraintExpr expr);
154 constraintExpr constraintExpr_makeBinaryOpConstraintExprIntLiteral (constraintExpr expr, int literal);
156 constraintExpr constraintExpr_makeSRefMaxset (sRef s);
158 constraintExpr constraintExpr_makeTermsRef (sRef s);
159 constraintExpr constraintExpr_doSRefFixBaseParam ( /*@returned@*/ constraintExpr expr, exprNodeList arglist);
160 constraintExpr constraintExpr_makeExprNode (exprNode e);
161 constraintExpr constraintExpr_doSRefFixConstraintParam (/*@returned@*/ constraintExpr expr, exprNodeList arglist);
163 constraintExpr constraintExpr_doFixResult (/*@returned@*/ constraintExpr expr, exprNode fcnCall);
164 bool constraintExpr_isLit (constraintExpr expr);
165 constraintExpr constraintExpr_makeAddConstraintExpr (constraintExpr expr, constraintExpr add);
167 constraintExpr constraintExpr_parseMakeUnaryOp (lltok op, constraintExpr cexpr);
169 constraintExpr constraintExpr_parseMakeBinaryOp (constraintExpr expr1, lltok op, constraintExpr expr2);
171 bool constraintExpr_hasMaxSet (constraintExpr expr);
173 constraintExpr constraintExpr_propagateConstants (constraintExpr expr,
174 /*@out@*/ bool * propagate,
175 /*@out@*/ int *literal);