if ((root != NULL) && (root != ERROR_OP)) {
int i;
for (i = 0; i < root->nbops; i++) {
- if ((root->ops[i] != NULL) && (root->ops[i] != ERROR_OP)) {
- delelement (root->ops[i]);
- }
+ delelement (root->ops[i]);
}
if (root->nbops) {
free (root->ops);
delelement (root);
return ERROR_OP;
}
- element_t **prog = NULL;
- new = newelement (Code, 0, 5);
- root = new;
- prog = &root;
+ root = newelement (Code, 0, 5);
do {
new = parser (str + 1, &str, 0);
delelement (root);
return ERROR_OP;
}
- element_t *newprog = newelement (Code, (*prog)->nbops + 1, 5);
- for (i = 0; i < (*prog)->nbops; i++) {
- newprog->ops[i] = (*prog)->ops[i];
- (*prog)->ops[i] = NULL;
+ element_t *newprog = newelement (Code, root->nbops + 1, 5);
+ for (i = 0; i < root->nbops; i++) {
+ newprog->ops[i] = root->ops[i];
+ root->ops[i] = NULL;
}
- newprog->ops[(*prog)->nbops] = new;
- delelement (*prog);
- (*prog) = newprog;
+ newprog->ops[root->nbops] = new;
+ delelement (root);
+ root = newprog;
} while (*str == ',');
if (*str != '}') {
VERBOSE (DEBUG, fprintf (stdout, "loop...\n"));
temp = dupelement (cond);
- if (!evaluate_element (temp, 0)) {
+ double test = evaluate_element (temp, 0);
+ delelement (temp);
+ if (!test) {
break;
}
if (action) {
temp = dupelement (action);
ret = evaluate_element (temp, 0);
+ delelement (temp);
}
}
int i;
for (i = 0; i < nbcalls; i++) {
ret = evaluate_element (prog[i], 0);
- prog[i] = NULL;
}
return ret;
}
/* evaluate program */
element_t *elements = dupelement ((programs + n)->root);
ret = evaluate_element (elements, 0);
+ delelement (elements);
/* restore context */
answer = tmp.answer;