7 # include <ctype.h> /* for isdigit */
8 # include "lclintMacros.nf"
10 # include "cgrammar.h"
11 # include "cgrammar_tokens.h"
13 # include "exprChecks.h"
14 # include "aliasChecks.h"
15 # include "exprNodeSList.h"
17 //# include "exprData.i"
21 //#include "constraintExpr.h"
26 bool constraintTerm_isIntLiteral (constraintTerm term)
30 if (term->kind == INTLITERAL)
36 constraintTerm constraintTerm_simplify (constraintTerm term)
38 if (term->kind == EXPRNODE)
40 if ( exprNode_knownIntValue (term->value.expr ) )
43 temp = exprNode_getLongValue (term->value.expr);
44 term->value.intlit = temp;
45 term->kind = INTLITERAL;
51 fileloc constraintTerm_getFileloc (constraintTerm t)
53 return (fileloc_copy (t->loc) );
56 constraintTerm constraintTerm_makeExprNode (/*@only@*/ exprNode e)
58 constraintTerm ret = new_constraintTermExpr();
59 ret->loc = exprNode_getfileloc(e);
62 ret = constraintTerm_simplify(ret);
66 constraintTerm constraintTerm_makesRef (/*@only@*/ sRef s)
68 constraintTerm ret = new_constraintTermExpr();
69 ret->loc = fileloc_undefined;
72 ret = constraintTerm_simplify(ret);
76 constraintTerm constraintTerm_copy (constraintTerm term)
79 ret = new_constraintTermExpr();
80 ret->loc = fileloc_copy (term->loc);
81 ret->value= term->value;
82 ret->kind = term->kind;
86 constraintTerm constraintTerm_setFileloc (constraintTerm term, fileloc loc)
89 term->loc = fileloc_copy(loc);
94 cstring constraintTerm_getName (constraintTerm term)
97 s = cstring_undefined;
99 llassert (term != NULL);
105 s = message ("%s", exprNode_unparse (term->value.expr) );
108 s = message (" %d ", term->value.intlit);
112 s = message ("%s", sRef_unparse (term->value.sref) );
121 constraintTerm constraintTerm_doSRefFixBaseParam (constraintTerm term, exprNodeList arglist)
123 llassert (term != NULL);
129 // s = message ("%s @ %s ", exprNode_unparse (term->value.expr),
130 // fileloc_unparse (term->loc) );
133 // s = message (" %d ", term->value.intlit);
137 term->value.sref = sRef_fixBaseParam (term->value.sref, arglist);
138 // s = message ("%s ", sRef_unparse (term->value.sref) );
146 cstring constraintTerm_print (constraintTerm term) /*@*/
149 s = cstring_undefined;
151 llassert (term != NULL);
157 s = message ("%s @ %s ", exprNode_unparse (term->value.expr),
158 fileloc_unparse (term->loc) );
161 s = message (" %d ", term->value.intlit);
165 s = message ("%s ", sRef_unparseDebug (term->value.sref) );
174 constraintTerm constraintTerm_makeIntLiteral (int i)
176 constraintTerm ret = new_constraintTermExpr();
177 ret->value.intlit = i;
178 ret->kind = INTLITERAL;
179 ret->loc = fileloc_undefined;
183 bool constraintTerm_canGetValue (constraintTerm term)
185 if (term->kind == INTLITERAL)
191 int constraintTerm_getValue (constraintTerm term)
193 llassert (term->kind == INTLITERAL);
194 return term->value.intlit;
199 /* same and similar are similar but not the same*/
201 bool constraintTerm_same (constraintTerm term1, constraintTerm term2)
203 llassert (term1 !=NULL && term2 !=NULL);
205 if ( (term1->kind != term2->kind) || (term1->kind != EXPRNODE) )
211 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
216 if (sRef_same (term1->value.expr->sref, term2->value.expr->sref) )
218 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
223 DPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
229 sRef constraintTerm_getsRef (constraintTerm t)
232 if (t->kind == EXPRNODE)
234 return t->value.expr->sref;
239 return t->value.sref;
242 return sRef_undefined;
245 bool constraintTerm_probSame (constraintTerm term1, constraintTerm term2)
249 llassert (term1 !=NULL && term2 !=NULL);
252 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
257 s1 = constraintTerm_getName (term1);
258 s2 = constraintTerm_getName (term2);
260 if (cstring_equal (s1, s2) )
262 DPRINTF ((message (" %s and %s are same", s1, s2 ) ) );
267 DPRINTF ((message (" %s and %s are not same", s1, s2 ) ) );
272 bool constraintTerm_similar (constraintTerm term1, constraintTerm term2)
276 llassert (term1 !=NULL && term2 !=NULL);
278 s1 = constraintTerm_getsRef (term1);
279 s2 = constraintTerm_getsRef (term2);
287 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
292 if (sRef_sameName (s1, s2) )
294 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
299 DPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));