diff --git a/src/frontend/define.c b/src/frontend/define.c index 0cf15ee31..94be14b95 100644 --- a/src/frontend/define.c +++ b/src/frontend/define.c @@ -337,35 +337,25 @@ trcopy(struct pnode *tree, char *args, struct pnode *nn) } else return (tree); } else if (tree->pn_func) { - struct func *func; - - func = alloc(struct func); - func->fu_name = copy(tree->pn_func->fu_name); - func->fu_func = tree->pn_func->fu_func; pn = alloc(struct pnode); pn->pn_value = NULL; - pn->pn_func = func; + /* pn_func are pointers to a global constant struct */ + pn->pn_func = tree->pn_func; pn->pn_op = NULL; pn->pn_left = trcopy(tree->pn_left, args, nn); pn->pn_right = NULL; pn->pn_next = NULL; } else if (tree->pn_op) { - struct op *op; - - op = alloc(struct op); - op->op_num = tree->pn_op->op_num; - op->op_arity = tree->pn_op->op_arity; - op->op_func = tree->pn_op->op_func; - op->op_name = copy(tree->pn_op->op_name); pn = alloc(struct pnode); pn->pn_value = NULL; pn->pn_func = NULL; - pn->pn_op = op; + /* pn_op are pointers to a global constant struct */ + pn->pn_op = tree->pn_op; pn->pn_left = trcopy(tree->pn_left, args, nn); - if (op->op_arity == 2) + if (pn->pn_op->op_arity == 2) pn->pn_right = trcopy(tree->pn_right, args, nn); else pn->pn_right = NULL; diff --git a/src/frontend/parse.c b/src/frontend/parse.c index 62eaaa581..3fb03d27c 100644 --- a/src/frontend/parse.c +++ b/src/frontend/parse.c @@ -863,14 +863,9 @@ free_pnode(struct pnode *t) free_pnode(t->pn_left); free_pnode(t->pn_right); free_pnode(t->pn_next); - tfree(t->pn_name); /* va: it is a copy() of original string, can be free'd */ - /* va: tfree struct func, allocated within parser */ -// if (t->pn_func!=NULL) { -// tfree(t->pn_func->fu_name); /* va: name is a copy of original string */ -// tfree(t->pn_func); /* va: t->pn_func->fu_func must not tfree'd */ -// } + tfree(t->pn_name); if (t->pn_value) - vec_free(t->pn_value); /* patch by Stefan Jones */ + vec_free(t->pn_value); tfree(t); }