Main Page   Alphabetical List   Compound List   File List   Compound Members   File Members  

guardSet.c File Reference

#include "lclintMacros.nf"
#include "basic.h"

Go to the source code of this file.

Functions

guardSet guardSet_new ()
sRefSet guardSet_getTrueGuards (guardSet g)
void guardSet_delete (guardSet g, sRef s)
sRefSet guardSet_getFalseGuards (guardSet g)
guardSet guardSet_or ( guardSet s, guardSet t)
guardSet guardSet_and ( guardSet s, guardSet t)
guardSet guardSet_union ( guardSet s, guardSet t)
guardSet guardSet_levelUnion ( guardSet s, guardSet t, int lexlevel)
guardSet guardSet_levelUnionFree ( guardSet s, guardSet t, int lexlevel)
void guardSet_flip (guardSet g)
guardSet guardSet_invert ( guardSet g)
guardSet guardSet_copy ( guardSet g)
guardSet guardSet_addTrueGuard ( guardSet g, sRef s)
guardSet guardSet_addFalseGuard ( guardSet g, sRef s)
cstring guardSet_unparse (guardSet g)
void guardSet_free ( guardSet g)
bool guardSet_isGuarded (guardSet g, sRef s)
bool guardSet_isProbableNull (guardSet g, sRef s)
bool guardSet_isEmpty (guardSet g)


Function Documentation

guardSet guardSet_addFalseGuard ( guardSet g,
sRef s )
 

Definition at line 288 of file guardSet.c.

Referenced by exprNode_preOp().

00289 {
00290   if (sRef_isMeaningful (s))
00291     {
00292       if (g == guardSet_undefined)
00293         {
00294           g = guardSet_newEmpty ();
00295         }
00296       
00297       g->fguard = sRefSet_insert (g->fguard, s);
00298     }
00299 
00300   return g;
00301 }

guardSet guardSet_addTrueGuard ( guardSet g,
sRef s )
 

Definition at line 273 of file guardSet.c.

Referenced by exprNode_produceGuards().

00274 {
00275   if (sRef_isMeaningful (s))
00276     {
00277       if (g == guardSet_undefined)
00278         {
00279           g = guardSet_newEmpty ();
00280         }
00281       
00282       g->tguard = sRefSet_insert (g->tguard, s);
00283     }
00284 
00285   return g;
00286 }

guardSet guardSet_and ( guardSet s,
guardSet t )
 

Definition at line 125 of file guardSet.c.

00126 {
00127   llassert (NOALIAS (s, t));
00128 
00129   if (s == guardSet_undefined)
00130     {
00131       if (t == guardSet_undefined)
00132         {
00133           return s;
00134         }
00135 
00136       s = guardSet_newEmpty ();
00137     }
00138 
00139   if (t == guardSet_undefined)
00140     {
00141       sRefSet_free (s->fguard);
00142       s->fguard = sRefSet_new ();
00143     }
00144   else
00145     {
00146       sRefSet last;
00147 
00148       s->tguard = sRefSet_union (s->tguard, t->tguard);
00149 
00150       s->fguard = sRefSet_intersect (last = s->fguard, t->fguard);
00151       sRefSet_free (last);
00152     }
00153   
00154   return s;
00155 }

guardSet guardSet_copy ( guardSet g )
 

Definition at line 259 of file guardSet.c.

Referenced by exprNode_whilePred().

00260 {
00261   if (g != guardSet_undefined)
00262     {
00263       guardSet ret = guardSet_newEmpty ();
00264 
00265       ret->tguard = sRefSet_newCopy (g->tguard);      
00266       ret->fguard = sRefSet_newCopy (g->fguard);
00267 
00268       return ret;
00269     }
00270   return guardSet_undefined;
00271 }

void guardSet_delete ( guardSet g,
sRef s )
 

Definition at line 68 of file guardSet.c.

Referenced by usymtab_unguard().

00069 {
00070   bool res;
00071   llassert (guardSet_isDefined (g));
00072   res = sRefSet_delete (g->tguard, s);
00073   
00074   /*
00075   ** This assertion is no longer always true:
00076   ** llassert (res);
00077   */
00078 }

void guardSet_flip ( guardSet g )
 

Definition at line 234 of file guardSet.c.

Referenced by exprNode_preOp().

00235 {
00236   if (g != guardSet_undefined)
00237     {
00238       sRefSet tmp = g->tguard;
00239 
00240       g->tguard = g->fguard;      
00241       g->fguard = tmp;
00242     }
00243 }

void guardSet_free ( guardSet g )
 

Definition at line 317 of file guardSet.c.

Referenced by context_exitDoWhileClause(), context_exitForClause(), context_exitWhileClause(), exprNode_free(), exprNode_freeShallow(), guardSet_levelUnionFree(), usymtab_altBranch(), and usymtab_trueBranch().

00318 {
00319   if (g == guardSet_undefined) return;
00320 
00321   sRefSet_free (g->tguard);
00322   sRefSet_free (g->fguard);
00323   
00324   sfree (g);
00325 }

sRefSet guardSet_getFalseGuards ( guardSet g )
 

Definition at line 80 of file guardSet.c.

Referenced by usymtab_popBranches().

00081 {
00082   if (guardSet_isDefined (g))
00083     { 
00084       return (g->fguard);
00085     }
00086   else
00087     {
00088       return (sRefSet_undefined);
00089     }
00090 }

sRefSet guardSet_getTrueGuards ( guardSet g )
 

Definition at line 55 of file guardSet.c.

Referenced by usymtab_popBranches().

00056 {
00057   
00058   if (guardSet_isDefined (g))
00059     {
00060       return (g->tguard);
00061     }
00062   else
00063     {
00064       return (sRefSet_undefined);
00065     }
00066 }

guardSet guardSet_invert ( guardSet g )
 

Definition at line 245 of file guardSet.c.

Referenced by context_exitDoWhileClause(), context_exitForClause(), context_exitWhileClause(), and usymtab_popBranches().

00246 {
00247   if (g != guardSet_undefined)
00248     {
00249       guardSet ret = guardSet_newEmpty ();
00250 
00251       ret->tguard = sRefSet_newCopy (g->fguard);      
00252       ret->fguard = sRefSet_newCopy (g->tguard);
00253 
00254       return ret;
00255     }
00256   return guardSet_undefined;
00257 }

bool guardSet_isEmpty ( guardSet g )
 

Definition at line 346 of file guardSet.c.

00347 {
00348   if (guardSet_isDefined (g))
00349     {
00350       return (sRefSet_isEmpty (g->tguard) && sRefSet_isEmpty (g->fguard));
00351     }
00352   else
00353     {
00354       return TRUE;
00355     }
00356 }

bool guardSet_isGuarded ( guardSet g,
sRef s )
 

Definition at line 328 of file guardSet.c.

Referenced by usymtab_unguard().

00329 {
00330   if (g == guardSet_undefined) return FALSE;
00331   
00332   return (sRefSet_member (g->tguard, s));
00333 }

bool guardSet_isProbableNull ( guardSet g,
sRef s )
 

Definition at line 336 of file guardSet.c.

00337 {
00338   bool ret;
00339 
00340   if (g == guardSet_undefined) return FALSE;
00341 
00342   ret = sRefSet_member (g->fguard, s);
00343   return ret;
00344 }

guardSet guardSet_levelUnion ( guardSet s,
guardSet t,
int lexlevel )
 

Definition at line 179 of file guardSet.c.

Referenced by usymtab_popBranches(), and usymtab_quietExitScope().

00180 {
00181   if (t == guardSet_undefined) return s;
00182 
00183   llassert (NOALIAS (s, t));
00184 
00185   if (guardSet_isDefined (s))
00186     {
00187       s->tguard = sRefSet_levelUnion (s->tguard, t->tguard, lexlevel);
00188       s->fguard = sRefSet_levelUnion (s->fguard, t->fguard, lexlevel);
00189     }
00190   else
00191     {
00192       s = guardSet_newEmpty ();
00193 
00194       /* should be necessary! */
00195 
00196       sRefSet_free (s->tguard);
00197       sRefSet_free (s->fguard);
00198 
00199       s->tguard = sRefSet_levelCopy (t->tguard, lexlevel);
00200       s->fguard = sRefSet_levelCopy (t->fguard, lexlevel);
00201     }
00202 
00203   return s;
00204 }

guardSet guardSet_levelUnionFree ( guardSet s,
guardSet t,
int lexlevel )
 

Definition at line 207 of file guardSet.c.

Referenced by usymtab_popAndBranch(), and usymtab_popOrBranch().

00209 {
00210   if (t == guardSet_undefined) return s;
00211 
00212   if (guardSet_isDefined (s))
00213     {
00214       s->tguard = sRefSet_levelUnion (s->tguard, t->tguard, lexlevel);
00215       s->fguard = sRefSet_levelUnion (s->fguard, t->fguard, lexlevel);
00216     }
00217   else
00218     {
00219       s = guardSet_newEmpty ();
00220 
00221       /* should be necessary! */
00222 
00223       sRefSet_free (s->tguard);
00224       sRefSet_free (s->fguard);
00225 
00226       s->tguard = sRefSet_levelCopy (t->tguard, lexlevel);
00227       s->fguard = sRefSet_levelCopy (t->fguard, lexlevel);
00228     }
00229 
00230   guardSet_free (t);
00231   return s;
00232 }

guardSet guardSet_new ( )
 

Definition at line 38 of file guardSet.c.

Referenced by exprNode_createId(), and exprNode_iterNewId().

00039 {
00040   return guardSet_undefined;
00041 }

guardSet guardSet_or ( guardSet s,
guardSet t )
 

Definition at line 92 of file guardSet.c.

00093 {
00094   
00095   llassert (NOALIAS (s, t));
00096 
00097   if (s == guardSet_undefined)
00098     {
00099       if (t == guardSet_undefined)
00100         {
00101           return s;
00102         }
00103 
00104       s = guardSet_newEmpty ();
00105     }
00106 
00107   if (t == guardSet_undefined)
00108     {
00109       sRefSet_free (s->tguard);
00110       s->tguard = sRefSet_new ();
00111     }
00112   else
00113     {
00114       sRefSet last;
00115 
00116       s->tguard = sRefSet_intersect (last = s->tguard, t->tguard);
00117       sRefSet_free (last);
00118       s->fguard = sRefSet_union (s->fguard, t->fguard);
00119     }
00120   
00121   
00122   return s;
00123 }

guardSet guardSet_union ( guardSet s,
guardSet t )
 

Definition at line 157 of file guardSet.c.

Referenced by usymtab_addGuards().

00158 {
00159   if (t == guardSet_undefined) return s; 
00160 
00161   llassert (NOALIAS (s, t));
00162 
00163   if (guardSet_isDefined (s)) 
00164     {
00165       s->tguard = sRefSet_union (s->tguard, t->tguard);
00166       s->fguard = sRefSet_union (s->fguard, t->fguard);
00167     }
00168   else
00169     {
00170       s = guardSet_newEmpty ();
00171 
00172       s->tguard = sRefSet_newCopy (t->tguard);
00173       s->fguard = sRefSet_newCopy (t->fguard);
00174     }
00175 
00176   return s;
00177 }

cstring guardSet_unparse ( guardSet g )
 

Definition at line 303 of file guardSet.c.

00304 {
00305   if (g == guardSet_undefined)
00306     {
00307       return (cstring_makeLiteral ("<no guards>"));
00308     }
00309   else
00310     {
00311       return (message ("not null: %q / prob null: %q",
00312                        sRefSet_unparseDebug (g->tguard),
00313                        sRefSet_unparseDebug (g->fguard)));
00314     }
00315 }


Generated at Fri Nov 3 18:57:59 2000 for LCLint by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000