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"
14 # include "exprData.i"
18 //#include "constraintExpr.h"
20 bool constraintTerm_isIntLiteral (constraintTerm term)
24 if (term->kind == INTLITERAL)
30 constraintTerm constraintTerm_simplify (constraintTerm term)
32 if (term->kind == EXPRNODE)
34 if ( exprNode_knownIntValue (term->value.expr ) )
37 temp = exprNode_getLongValue (term->value.expr);
38 term->value.intlit = temp;
39 term->kind = INTLITERAL;
45 fileloc constraintTerm_getFileloc (constraintTerm t)
47 return (fileloc_copy (t->loc) );
50 constraintTerm constraintTerm_makeExprNode (/*@only@*/ exprNode e)
52 constraintTerm ret = new_constraintTermExpr();
53 ret->loc = exprNode_getfileloc(e);
56 ret = constraintTerm_simplify(ret);
60 constraintTerm constraintTerm_copy (constraintTerm term)
63 ret = new_constraintTermExpr();
64 ret->loc = fileloc_copy (term->loc);
65 ret->value= term->value;
66 ret->kind = term->kind;
70 constraintTerm constraintTerm_setFileloc (constraintTerm term, fileloc loc)
73 term->loc = fileloc_copy(loc);
77 cstring constraintTerm_print (constraintTerm term)
80 s = cstring_undefined;
82 llassert (term != NULL);
88 s = message ("%s @ %s ", exprNode_unparse (term->value.expr),
89 fileloc_unparse (term->loc) );
92 s = message (" %d ", term->value.intlit);
96 s = cstring_makeLiteral("Not Implemented\n");
105 constraintTerm constraintTerm_makeIntLiteral (int i)
107 constraintTerm ret = new_constraintTermExpr();
108 ret->value.intlit = i;
109 ret->kind = INTLITERAL;
110 ret->loc = fileloc_undefined;
114 bool constraintTerm_canGetValue (constraintTerm term)
116 if (term->kind == INTLITERAL)
122 int constraintTerm_getValue (constraintTerm term)
124 llassert (term->kind == INTLITERAL);
125 return term->value.intlit;
130 /* same and similar are similar but not the same*/
132 bool constraintTerm_same (constraintTerm term1, constraintTerm term2)
134 llassert (term1 !=NULL && term2 !=NULL);
136 if ( (term1->kind != term2->kind) || (term1->kind != EXPRNODE) )
142 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
147 if (sRef_same (term1->value.expr->sref, term2->value.expr->sref) )
149 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
154 DPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
160 bool constraintTerm_similar (constraintTerm term1, constraintTerm term2)
162 llassert (term1 !=NULL && term2 !=NULL);
164 if ( (term1->kind != term2->kind) || (term1->kind != EXPRNODE) )
170 ("Comparing srefs for %s and %s ", constraintTerm_print(term1), constraintTerm_print(term2)
175 if (sRef_same (term1->value.expr->sref, term2->value.expr->sref) )
177 DPRINTF ((message (" %s and %s are same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));
182 TPRINTF ((message (" %s and %s are not same", constraintTerm_print(term1), constraintTerm_print(term2) ) ));