Browse Source

frontend/define.c, cleanup `ft_substdef()'

pre-master-46
rlar 11 years ago
parent
commit
f33d9953b3
  1. 49
      src/frontend/define.c

49
src/frontend/define.c

@ -300,44 +300,35 @@ ft_substdef(const char *name, struct pnode *args)
static struct pnode * static struct pnode *
trcopy(struct pnode *tree, char *arg_names, struct pnode *args) trcopy(struct pnode *tree, char *arg_names, struct pnode *args)
{ {
struct pnode *pn;
struct dvec *d;
char *s;
int i;
if (tree->pn_value) { if (tree->pn_value) {
d = tree->pn_value;
struct dvec *d = tree->pn_value;
if ((d->v_length == 0) && strcmp(d->v_name, "list")) { if ((d->v_length == 0) && strcmp(d->v_name, "list")) {
/* Yep, it's a formal parameter. Substitute for it. /* Yep, it's a formal parameter. Substitute for it.
* IMPORTANT: we never free parse trees, so we * IMPORTANT: we never free parse trees, so we
* needn't worry that they aren't trees here. * needn't worry that they aren't trees here.
*/ */
s = arg_names;
i = 1;
while (*s) {
char *s = arg_names;
int i;
for (i = 1; *s; i++) {
if (eq(s, d->v_name)) if (eq(s, d->v_name))
break;
else
i++;
return ntharg(i, args);
s = strchr(s, '\0') + 1; s = strchr(s, '\0') + 1;
} }
if (*s)
return ntharg(i, args);
else
return tree;
} else {
return tree; return tree;
} }
} else if (tree->pn_func) {
return tree;
}
if (tree->pn_func) {
pn = alloc_pnode();
struct pnode *pn = alloc_pnode();
/* pn_func are pointers to a global constant struct */ /* pn_func are pointers to a global constant struct */
pn->pn_func = tree->pn_func; pn->pn_func = tree->pn_func;
@ -345,9 +336,12 @@ trcopy(struct pnode *tree, char *arg_names, struct pnode *args)
pn->pn_left = trcopy(tree->pn_left, arg_names, args); pn->pn_left = trcopy(tree->pn_left, arg_names, args);
pn->pn_left->pn_use++; pn->pn_left->pn_use++;
} else if (tree->pn_op) {
return pn;
}
if (tree->pn_op) {
pn = alloc_pnode();
struct pnode *pn = alloc_pnode();
/* pn_op are pointers to a global constant struct */ /* pn_op are pointers to a global constant struct */
pn->pn_op = tree->pn_op; pn->pn_op = tree->pn_op;
@ -360,12 +354,11 @@ trcopy(struct pnode *tree, char *arg_names, struct pnode *args)
pn->pn_right->pn_use++; pn->pn_right->pn_use++;
} }
} else {
fprintf(cp_err, "trcopy: Internal Error: bad parse node\n");
return NULL;
return pn;
} }
return pn;
fprintf(cp_err, "trcopy: Internal Error: bad parse node\n");
return NULL;
} }

Loading…
Cancel
Save