]>
Commit | Line | Data |
---|---|---|
1 | #ifndef __constraintTerm_h__ | |
2 | ||
3 | #define __constraintTerm_h__ | |
4 | ||
5 | typedef union | |
6 | { | |
7 | /*@exposed@*/ exprNode expr; | |
8 | /*@exposed@*/ sRef sref; | |
9 | int intlit; | |
10 | } constraintTermValue; | |
11 | ||
12 | void constraintTermValue_copy (/*@out@*/ constraintTermValue src, constraintTermValue dst); | |
13 | ||
14 | /*@-macroassign*/ | |
15 | ||
16 | #define constraintTermValue_copy(dst, src) ((dst) = (src)) | |
17 | ||
18 | /*@=macroassign*/ | |
19 | ||
20 | typedef enum | |
21 | { | |
22 | ERRORBADCONSTRAINTTERMTYPE, | |
23 | EXPRNODE, SREF, | |
24 | INTLITERAL | |
25 | } constraintTermType; | |
26 | ||
27 | struct _constraintTerm { | |
28 | /*@only@*/ fileloc loc; | |
29 | constraintTermValue value; | |
30 | constraintTermType kind; | |
31 | }; | |
32 | ||
33 | ||
34 | abst_typedef struct _constraintTerm * constraintTerm; | |
35 | ||
36 | extern constraintTermType constraintTerm_getKind (constraintTerm) ; | |
37 | extern /*@exposed@*/ sRef constraintTerm_getSRef (constraintTerm) ; | |
38 | ||
39 | extern /*@falsenull@*/ bool constraintTerm_isDefined (constraintTerm p_e) /*@*/; | |
40 | extern /*@unused@*/ /*@truenull@*/ bool constraintTerm_isUndefined (constraintTerm p_e) /*@*/ ; | |
41 | extern /*@unused@*/ /*@truenull@*/ bool constraintTerm_isError (constraintTerm p_e) /*@*/ ; | |
42 | ||
43 | /*@constant null constraintTerm constraintTerm_undefined; @*/ | |
44 | ||
45 | # define constraintTerm_undefined ((constraintTerm)NULL) | |
46 | ||
47 | # define constraintTerm_isDefined(e) ((e) != constraintTerm_undefined) | |
48 | # define constraintTerm_isUndefined(e) ((e) == constraintTerm_undefined) | |
49 | # define constraintTerm_isError(e) ((e) == constraintTerm_undefined) | |
50 | ||
51 | ||
52 | ||
53 | void constraintTerm_free (/*@only@*/ constraintTerm term); | |
54 | ||
55 | constraintTerm constraintTerm_simplify (/*@returned@*/ constraintTerm term) /*@modifies term@*/ ; | |
56 | ||
57 | /*@only@*/ constraintTerm constraintTerm_makeExprNode (/*@exposed@*/ exprNode e) /*@*/; | |
58 | ||
59 | constraintTerm constraintTerm_copy (constraintTerm term) /*@*/; | |
60 | ||
61 | ||
62 | /*@i1*/ //bool constraintTerm_same (constraintTerm term1, constraintTerm term2) /*@*/; | |
63 | ||
64 | bool constraintTerm_similar (constraintTerm term1, constraintTerm term2) /*@*/; | |
65 | ||
66 | bool constraintTerm_canGetValue (constraintTerm term)/*@*/; | |
67 | int constraintTerm_getValue (constraintTerm term) /*@*/; | |
68 | ||
69 | fileloc constraintTerm_getFileloc (constraintTerm t) /*@*/; | |
70 | ||
71 | ||
72 | bool constraintTerm_isIntLiteral (constraintTerm term) /*@*/; | |
73 | ||
74 | cstring constraintTerm_print (constraintTerm term) /*@*/; | |
75 | ||
76 | constraintTerm constraintTerm_makesRef (/*@exposed@*/ sRef s) /*@*/; | |
77 | ||
78 | /*@unused@*/ bool constraintTerm_probSame (constraintTerm term1, constraintTerm term2) /*@*/; | |
79 | ||
80 | constraintTerm constraintTerm_setFileloc (/*@returned@*/ constraintTerm term, fileloc loc) /*@modifies term@*/; | |
81 | ||
82 | constraintTerm constraintTerm_makeIntLiteral (int i) /*@*/; | |
83 | ||
84 | bool constraintTerm_isStringLiteral (constraintTerm c) /*@*/; | |
85 | cstring constraintTerm_getStringLiteral (constraintTerm c) /*@*/; | |
86 | ||
87 | ||
88 | constraintTerm constraintTerm_doSRefFixBaseParam (/*@returned@*/ constraintTerm term, exprNodeList arglist) /*@modifies term@*/; | |
89 | ||
90 | void constraintTerm_dump ( /*@observer@*/ constraintTerm t, FILE *f); | |
91 | ||
92 | /*@only@*/ constraintTerm constraintTerm_undump ( FILE *f); | |
93 | ||
94 | #else | |
95 | ||
96 | #error Multiple Include | |
97 | ||
98 | #endif |