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

ltokenList.c File Reference

#include "lclintMacros.nf"
#include "llbasic.h"

Go to the source code of this file.

Functions

ltokenList ltokenList_new ()
ltokenList ltokenList_singleton (ltoken l)
ltokenList ltokenList_push ( ltokenList s, ltoken el)
void ltokenList_addh (ltokenList s, ltoken el)
void ltokenList_reset (ltokenList s)
bool ltokenList_isFinished (ltokenList s)
void ltokenList_advance (ltokenList s)
ltoken ltokenList_head (ltokenList s)
bool ltokenList_equal (ltokenList s1, ltokenList s2)
ltokenList ltokenList_copy (ltokenList s)
void ltokenList_removeCurrent (ltokenList s)
ltoken ltokenList_current (ltokenList s)
cstring ltokenList_unparse (ltokenList s)
void ltokenList_free (ltokenList s)


Function Documentation

void ltokenList_addh ( ltokenList s,
ltoken el )
 

Definition at line 91 of file ltokenList.c.

Referenced by abstract_init(), ltokenList_copy(), ltokenList_push(), and makeCTypesNode().

00092 {
00093   llassert (ltokenList_isDefined (s));
00094 
00095   if (s->nspace <= 0)
00096     ltokenList_grow (s);
00097 
00098   s->nspace--;
00099   s->elements[s->nelements] = el;
00100   s->nelements++;
00101 }

void ltokenList_advance ( ltokenList s )
 

Definition at line 119 of file ltokenList.c.

Referenced by makeEnumSpecNode().

00120 {
00121   if (ltokenList_isDefined (s))
00122     {
00123       s->current++;
00124       llassert (s->current <= s->nelements);
00125     }
00126 }

ltokenList ltokenList_copy ( ltokenList s )
 

Definition at line 167 of file ltokenList.c.

Referenced by abstract_init(), and sigNode_copy().

00168 {
00169   ltokenList r = ltokenList_new ();
00170 
00171   ltokenList_elements (s, x)
00172   {
00173     ltokenList_addh (r, ltoken_copy (x));
00174   } end_ltokenList_elements;
00175 
00176   return r;
00177 }

ltoken ltokenList_current ( ltokenList s )
 

Definition at line 195 of file ltokenList.c.

Referenced by makeEnumSpecNode().

00196 {
00197   llassert (ltokenList_isDefined (s) && s->current >= 0 && s->current < s->nelements);
00198   return (s->elements[s->current]);
00199 }

bool ltokenList_equal ( ltokenList s1,
ltokenList s2 )
 

Definition at line 136 of file ltokenList.c.

Referenced by sigNode_equal().

00137 {
00138   if (ltokenList_isUndefined (s1))
00139     {
00140       return (ltokenList_isEmpty (s2));
00141     }
00142   else
00143     {
00144       if (ltokenList_isUndefined (s2))
00145         {
00146           return ltokenList_isEmpty (s1);
00147         }
00148       else
00149         {
00150           int i;
00151           int size = s1->nelements;
00152           
00153           if (s2->nelements != size)
00154             return FALSE;
00155           
00156           for (i = 0; i < size; i++)
00157             {
00158               if (!ltoken_similar (s1->elements[i], s2->elements[i]))
00159                 return FALSE;
00160             }
00161           return TRUE;
00162         }
00163     }
00164 }

void ltokenList_free ( ltokenList s )
 

Definition at line 224 of file ltokenList.c.

Referenced by makeAbstBodyNode2(), makePostfixTermNode(), sigNode_free(), and traitRefNode_free().

00225 {
00226   if (ltokenList_isDefined (s))
00227     {
00228       sfree (s->elements);
00229       sfree (s);
00230     }
00231 }

ltoken ltokenList_head ( ltokenList s )
 

Definition at line 129 of file ltokenList.c.

Referenced by lclTypeSpecNode_errorToken().

00130 {
00131   llassert (ltokenList_isDefined (s) && s->nelements > 0);
00132   return (s->elements[0]);
00133 }

bool ltokenList_isFinished ( ltokenList s )
 

Definition at line 113 of file ltokenList.c.

Referenced by makeEnumSpecNode().

00114 {
00115   return (ltokenList_isUndefined(s) || (s->current == s->nelements));
00116 }

ltokenList ltokenList_new ( )
 

Definition at line 36 of file ltokenList.c.

Referenced by abstract_init(), ltokenList_copy(), makeCTypesNode(), and makeEnumSpecNode2().

00037 {
00038   ltokenList s = (ltokenList) dmalloc (sizeof (*s));
00039   
00040   s->nelements = 0;
00041   s->nspace = ltokenListBASESIZE;
00042   s->elements = (ltoken *) 
00043     dmalloc (sizeof (*s->elements) * ltokenListBASESIZE);
00044   s->current = 0;
00045 
00046   return (s);
00047 }

ltokenList ltokenList_push ( ltokenList s,
ltoken el )
 

Definition at line 84 of file ltokenList.c.

00085 {
00086   ltokenList_addh (s, el);
00087   return s;
00088 }

void ltokenList_removeCurrent ( ltokenList s )
 

Definition at line 180 of file ltokenList.c.

Referenced by makeEnumSpecNode().

00181 {
00182   int i;
00183   llassert (ltokenList_isDefined (s) && s->current >= 0 && s->current < s->nelements);
00184 
00185   for (i = s->current; i < s->nelements - 1; i++)
00186     {
00187       s->elements[i] = s->elements[i+1];
00188     }
00189 
00190   s->nelements--;
00191   s->nspace++;
00192 }

void ltokenList_reset ( ltokenList s )
 

Definition at line 104 of file ltokenList.c.

Referenced by makeEnumSpecNode().

00105 {
00106   if (ltokenList_isDefined (s))
00107     {
00108       s->current = 0;
00109     }
00110 }

ltokenList ltokenList_singleton ( ltoken l )
 

Definition at line 50 of file ltokenList.c.

Referenced by makeTypeSpecifier().

00051 {
00052   ltokenList s = (ltokenList) dmalloc (sizeof (*s));
00053 
00054   s->nelements = 1;
00055   s->nspace = ltokenListBASESIZE - 1;
00056   s->elements = (ltoken *) dmalloc (sizeof (*s->elements) * ltokenListBASESIZE);
00057   s->elements[0] = l;
00058   s->current = 0;
00059 
00060   return (s);
00061 }

cstring ltokenList_unparse ( ltokenList s )
 

Definition at line 202 of file ltokenList.c.

Referenced by printLeaves2().

00203 {
00204   int i;
00205   cstring st = cstring_undefined;
00206 
00207   if (ltokenList_isDefined (s))
00208     {
00209       for (i = 0; i < s->nelements; i++)
00210         {
00211           if (i == 0)
00212             {
00213               st = cstring_copy (ltoken_unparse (s->elements[i]));
00214             }
00215           else
00216             st = message ("%q, %s", st, ltoken_unparse (s->elements[i]));
00217         }
00218     }
00219 
00220   return st;
00221 }


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