diff options
Diffstat (limited to 'tmp.c')
| -rw-r--r-- | tmp.c | 69 |
1 files changed, 0 insertions, 69 deletions
@@ -1,69 +0,0 @@ -#include "tmp.h" -#include "type.h" -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> - -const struct stentry *tmp_create(struct fn *fn, const struct type *t) -{ - static const char fmt[] = "__tmp%zu"; - int r = snprintf(NULL, 0, fmt, fn->ntmps); - char *s = NULL, *tname = NULL; - struct tmp *tmp; - - if (!(tname = type_name(t))) - goto failure; - else if (r < 0) - { - fprintf(stderr, "%s: snprintf(3) failed\n", __func__); - goto failure; - } - else if (!(s = malloc(r + 1))) - { - perror("malloc(3)"); - goto failure; - } - - snprintf(s, r + 1, fmt, fn->ntmps++); - - if (!(tmp = malloc(sizeof *tmp))) - { - perror("realloc(3)"); - goto failure; - } - - *tmp = (struct tmp) - { - .tk = - { - .type = ID, - .s = s, - .loc.f = "(temporary)" - }, - - .e = - { - .tk = &tmp->tk, - .t = t - } - }; - - if (!fn->tmps) - fn->tmps = tmp; - else - for (struct tmp *t = fn->tmps; t ; t = t->next) - if (!t->next) - { - t->next = tmp; - break; - } - - fprintf(stderr, "\tcreating temporary variable %s, type %s\n", s, tname); - free(tname); - return &tmp->e; - -failure: - free(s); - free(tname); - return NULL; -} |
