X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=program.c;h=1e960f728641a02a44c5f660600031403ae28f3d;hb=9e527b672cea0530effc91bc13e0ce49d552ecdd;hp=ef6d833be6c1ca651008d69a183cab3ee294747f;hpb=5d50462b1e3cc5687f31fad0d295b31fb9934c15;p=calc.git diff --git a/program.c b/program.c index ef6d833..1e960f7 100644 --- a/program.c +++ b/program.c @@ -82,35 +82,38 @@ double call (int id, int nbargs, element_t **args) return 0; } + /* set arguments */ + VERBOSE (DEBUG, fprintf (stdout, "1 arg[0]: %g\n", get_tab (argument, 1))); + tab_t *old_argument = copy_tab (argument); + /* backup context */ workspace_t *tmp = backup_ws (alloc_ws ()); restore_ws (programs[n]); - + VERBOSE (DEBUG, fprintf (stdout, "2 arg[0]: %g\n", get_tab (argument, 1))); + /* set arguments */ - free_tab (argument); - argument = NULL; - if (nbargs > 0) { - def (nbargs, args); - } + argument = def (nbargs, args); + VERBOSE (DEBUG, fprintf (stdout, "3 arg[0]: %g\n", get_tab (argument, 1))); /* evaluate program */ answer = 0; element_t *elements = dupelement (programs[n]->root); + VERBOSE (DEBUG, fprintf (stdout, "4 arg[0]: %g\n", get_tab (argument, 1))); ret = evaluate_element (elements, 0); + VERBOSE (DEBUG, fprintf (stdout, "ret; %g\n", ret)); + VERBOSE (DEBUG, fprintf (stdout, "5 arg[0]: %g\n", get_tab (argument, 1))); delelement (elements); - /* clean arguments */ - if (argument) { - free_tab (argument); - } - argument = NULL; - if (nbargs > 0) { - def (nbargs, args); - } - /* restore context */ backup_ws (programs[n]); restore_ws (tmp); + free_ws (tmp); + VERBOSE (DEBUG, fprintf (stdout, "6 arg[0]: %g\n", get_tab (argument, 1))); + + /* clean arguments */ + free_tab (argument); + argument = old_argument; + VERBOSE (DEBUG, fprintf (stdout, "7 arg[0]: %g\n", get_tab (argument, 1))); return ret; }