correct switching context
[calc.git] / parser.c
index 4e360ddaf70bec25ea4cb46ad72bd2bb12aa276e..74e980b39c4dac2ea4e3f812d7fe0483c8e9989e 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -175,8 +175,8 @@ keyword_t functions[NB_FUNCTIONS] = {
     { "pop",  Pop, 0, 3, 5},
     { "push", Push, 1, 4, 5},
     { "put",  Put, 2, 3, 5},
-    { "set",  Set, MAX_ARGS, 3, 9},
-    { "show",  Show, 0, 4, 9},
+    { "set",  Set, MAX_ARGS, 3, 5},
+    { "show",  Show, 0, 4, 5},
 };
 
 #define NB_CONSTANTS 3
@@ -871,12 +871,17 @@ double call (int id, int nbops, element_t **ops)
     element_t *elements = dupelement ((programs + n)->root);
     ret = evaluate_element (elements, 0);
     delelement (elements);
+    (programs + n)->answer = answer;
+    (programs + n)->storage = storage;
+    (programs + n)->storage_size = storage_size;
+    (programs + n)->stack = stack;
+    (programs + n)->stack_size = stack_size;
 
     /* restore context */
     answer = tmp.answer;
     storage = tmp.storage;
-    storage = tmp.storage;
-    stack_size = tmp.stack_size;
+    storage_size = tmp.storage_size;
+    stack = tmp.stack;
     stack_size = tmp.stack_size;
 
     return ret;