diff options
Diffstat (limited to 'llvm/utils/Burg/string.c')
| -rw-r--r-- | llvm/utils/Burg/string.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/llvm/utils/Burg/string.c b/llvm/utils/Burg/string.c new file mode 100644 index 00000000000..9b69c3045ff --- /dev/null +++ b/llvm/utils/Burg/string.c @@ -0,0 +1,65 @@ +char rcsid_string[] = "$Id$"; + +#include <stdio.h> +#include <string.h> +#include "b.h" +#include "fe.h" + +static StrTableElement newStrTableElement ARGS((void)); + +StrTable +newStrTable() +{ + return (StrTable) zalloc(sizeof(struct strTable)); +} + +static StrTableElement +newStrTableElement() +{ + return (StrTableElement) zalloc(sizeof(struct strTableElement)); +} + +void +dumpStrTable(t) StrTable t; +{ + List e; + IntList r; + + printf("Begin StrTable\n"); + for (e = t->elems; e; e = e->next) { + StrTableElement el = (StrTableElement) e->x; + printf("%s: ", el->str); + for (r = el->erulenos; r; r = r->next) { + int i = r->x; + printf("(%d)", i); + } + printf("\n"); + } + printf("End StrTable\n"); +} + +StrTableElement +addString(t, s, eruleno, new) StrTable t; char *s; int eruleno; int *new; +{ + List l; + StrTableElement ste; + + assert(t); + for (l = t->elems; l; l = l->next) { + StrTableElement e = (StrTableElement) l->x; + + assert(e); + if (!strcmp(s, e->str)) { + e->erulenos = newIntList(eruleno, e->erulenos); + *new = 0; + return e; + } + } + ste = newStrTableElement(); + ste->erulenos = newIntList(eruleno, 0); + ste->str = (char *) zalloc(strlen(s) + 1); + strcpy(ste->str, s); + t->elems = newList(ste, t->elems); + *new = 1; + return ste; +} |

