5 # include <ctype.h> /* for isdigit */
6 # include "lclintMacros.nf"
9 # include "cgrammar_tokens.h"
11 # include "exprChecks.h"
12 # include "aliasChecks.h"
13 # include "exprNodeSList.h"
15 //# include "exprData.i"
19 //#include "constraintExpr.h"
21 bool constraintTerm_isIntLiteral (constraintTerm term)
25 if (term->kind == INTLITERAL)
31 constraintTerm constraintTerm_simplify (constraintTerm term)
33 if (term->kind == EXPRNODE)
35 if ( exprNode_knownIntValue (term->value.expr ) )
38 temp = exprNode_getLongValue (term->value.expr);
39 term->value.intlit = temp;
40 term->kind = INTLITERAL;
46 fileloc constraintTerm_getFileloc (constraintTerm t)
48 return (fileloc_copy (t->loc) );
51 constraintTerm constraintTerm_makeExprNode (/*@only@*/ exprNode e)
53 constraintTerm ret = new_constraintTermExpr();
54 ret->loc = exprNode_getfileloc(e);
57 ret = constraintTerm_simplify(ret);
61 constraintTerm constraintTerm_makesRef (/*@only@*/ sRef s)
63 constraintTerm ret = new_constraintTermExpr();
64 ret->loc = fileloc_undefined;
67 ret = constraintTerm_simplify(ret);
71 constraintTerm constraintTerm_copy (constraintTerm term)
74 ret = new_constraintTermExpr();
75 ret->loc = fileloc_copy (term->loc);
76 ret->value= term->value;
77 ret->kind = term->kind;
81 constraintTerm constraintTerm_setFileloc (constraintTerm term, fileloc loc)
84 term->loc = fileloc_copy(loc);
89 cstring constraintTerm_getName (constraintTerm term)
92 s = cstring_undefined;
94 llassert (term != NULL);
100 s = message ("%s", exprNode_unparse (term->value.expr) );
103 s = message (" %d ", term->value.intlit);
107 s = message ("%s", sRef_unparse (term->value.sref) );
116 constraintTerm constraintTerm_doSRefFixBaseParam (constraintTerm term, exprNodeList arglist)
118 llassert (term != NULL);
124 // s = message ("%s @ %s ", exprNode_unparse (term->value.expr),
125 // fileloc_unparse (term->loc) );
128 // s = message (" %d ", term->value.intlit);
132 term->value.sref = sRef_fixBaseParam (term->value.sref, arglist);
133 // s = message ("%s ", sRef_unparse (term->value.sref) );
141 cstring constraintTerm_print (constraintTerm term)
144 s = cstring_undefined;
146 llassert (term != NULL);
152 s = message ("%s @ %s ", exprNode_unparse (term->value.expr),
153 fileloc_unparse (term->loc) );
156 s = message (" %d ", term->value.intlit);
160 s = message ("%s ", sRef_unparseDebug (term->value.sref) );
169 constraintTerm constraintTerm_makeIntLiteral (int i)
171 constraintTerm ret = new_constraintTermExpr();
172 ret->value.intlit = i;
173 ret->kind = INTLITERAL;
174 ret->loc = fileloc_undefined;
178 bool constraintTerm_canGetValue (constraintTerm term)
180 if (term->kind == INTLITERAL)
186 int constraintTerm_getValue (constraintTerm term)
188 llassert (term->kind == INTLITERAL);
189 return term->value.intlit;
194 /* same and similar are similar but not the same*/
196 bool constraintTerm_same (constraintTerm term1, constraintTerm term2)
198 llassert (term1 !=NULL && term2 !=NULL);
200 if ( (term1->kind != term2->kind) || (term1->kind != EXPRNODE) )
206 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
211 if (sRef_same (term1->value.expr->sref, term2->value.expr->sref) )
213 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
218 DPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
224 sRef constraintTerm_getsRef (constraintTerm t)
227 if (t->kind == EXPRNODE)
229 return t->value.expr->sref;
234 return t->value.sref;
237 return sRef_undefined;
240 bool constraintTerm_probSame (constraintTerm term1, constraintTerm term2)
244 llassert (term1 !=NULL && term2 !=NULL);
247 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
252 s1 = constraintTerm_getName (term1);
253 s2 = constraintTerm_getName (term2);
255 if (cstring_equal (s1, s2) )
257 DPRINTF ((message (" %s and %s are same", s1, s2 ) ) );
262 DPRINTF ((message (" %s and %s are not same", s1, s2 ) ) );
267 bool constraintTerm_similar (constraintTerm term1, constraintTerm term2)
271 llassert (term1 !=NULL && term2 !=NULL);
273 s1 = constraintTerm_getsRef (term1);
274 s2 = constraintTerm_getsRef (term2);
282 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
287 if (sRef_sameName (s1, s2) )
289 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
294 DPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));