X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=program.c;h=70ce6c12f943cc5519ba1b2e74d73843d264c5f7;hb=7d32325ab262aaf9cb62151de5a9c889cb5ebfab;hp=1e960f728641a02a44c5f660600031403ae28f3d;hpb=9e527b672cea0530effc91bc13e0ce49d552ecdd;p=calc.git diff --git a/program.c b/program.c index 1e960f7..70ce6c1 100644 --- a/program.c +++ b/program.c @@ -73,8 +73,11 @@ void prog (int id, element_t *root) double call (int id, int nbargs, element_t **args) { + int i; double ret = 0; + VERBOSE (DEBUG, fprintf (stdout, "new call (%d)\n", id)); + /* look for program */ int n = lookfor_program (id); if (n == -1) { @@ -82,38 +85,46 @@ 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); + /* display debug information */ + VERBOSE (DEBUG, fprintf (stdout, "nbargs: %d\n", nbargs)); + for (i = 0; i < nbargs; i++) { + VERBOSE (DEBUG, fprintf (stdout, "argument %d\n", i + 1); print_element (args[i], 0)); + } + VERBOSE (DEBUG, fprintf (stdout, "program\n"); print_element (programs[n]->root, 0)); /* 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 */ - argument = def (nbargs, args); - VERBOSE (DEBUG, fprintf (stdout, "3 arg[0]: %g\n", get_tab (argument, 1))); + VERBOSE (DEBUG, fprintf (stdout, "argument before evaluation (%d)\n", size_tab (argument))); + for (i = 0; i < size_tab (argument); i++) { + VERBOSE (DEBUG, fprintf (stdout, "arg %d value: %g\n", i + 1, get_tab (argument, i + 1))); + } + VERBOSE (DEBUG, fprintf (stdout, "evaluate %d args\n", nbargs)); + tab_t *new_argument = def (nbargs, args); + tab_t *old_argument = argument; + argument = new_argument; + VERBOSE (DEBUG, fprintf (stdout, "argument after evaluation (%d)\n", size_tab (argument))); + for (i = 0; i < size_tab (argument); i++) { + VERBOSE (DEBUG, fprintf (stdout, "arg %d value: %g\n", i + 1, get_tab (argument, i + 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); /* 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; }