00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 # include "lclintMacros.nf"
00033 # include "llbasic.h"
00034
00035 declaratorInvNodeList
00036 declaratorInvNodeList_new ()
00037 {
00038 declaratorInvNodeList s = (declaratorInvNodeList) dmalloc (sizeof (*s));
00039
00040 s->nelements = 0;
00041
00042 s->nspace = declaratorInvNodeListBASESIZE;
00043 s->elements = (declaratorInvNode *)
00044 dmalloc (sizeof (*s->elements) * declaratorInvNodeListBASESIZE);
00045
00046 return (s);
00047 }
00048
00049 static void
00050 declaratorInvNodeList_grow (declaratorInvNodeList s)
00051 {
00052 int i;
00053 declaratorInvNode *newelements;
00054
00055 s->nspace = declaratorInvNodeListBASESIZE + s->nspace;
00056
00057 newelements = (declaratorInvNode *)
00058 dmalloc (sizeof (*newelements) * (s->nelements + s->nspace));
00059
00060 if (newelements == (declaratorInvNode *) 0)
00061 {
00062 llfatalerror (cstring_makeLiteral ("declaratorInvNodeList_grow: out of memory!"));
00063 }
00064
00065 for (i = 0; i < s->nelements; i++)
00066 {
00067 newelements[i] = s->elements[i];
00068 }
00069
00070 sfree (s->elements);
00071 s->elements = newelements;
00072 }
00073
00074 declaratorInvNodeList
00075 declaratorInvNodeList_add (declaratorInvNodeList s, declaratorInvNode el)
00076 {
00077 if (s->nspace <= 0)
00078 {
00079 declaratorInvNodeList_grow (s);
00080 }
00081
00082 s->nspace--;
00083 s->elements[s->nelements] = el;
00084 s->nelements++;
00085
00086 return s;
00087 }
00088
00089 cstring
00090 declaratorInvNodeList_unparse (declaratorInvNodeList s)
00091 {
00092 int i;
00093 cstring st = cstring_undefined;
00094
00095 for (i = 0; i < s->nelements; i++)
00096 {
00097 st = message ("%q%q", st, declaratorInvNode_unparse (s->elements[i]));
00098 }
00099
00100 return st;
00101 }
00102
00103 void
00104 declaratorInvNodeList_free (declaratorInvNodeList s)
00105 {
00106 int i;
00107 for (i = 0; i < s->nelements; i++)
00108 {
00109 declaratorInvNode_free (s->elements[i]);
00110 }
00111
00112 sfree (s->elements);
00113 sfree (s);
00114 }