// test: echo -e 'si\t\t (pi / 2)' | calc.exe | grep -q '=> 1'
// test: echo -e '\t\t' | calc.exe | grep -q 'print'
// test: echo -e '1 + 1;\nans + 1' | calc.exe | grep -qv 2
-// test: echo -e 'mem (3)\nsto (4, pi)' | calc.exe | grep -q error
+// test: echo -e 'mem\nmem (3)\nsto (4, pi)' | calc.exe | grep -q "error out of bound"
// test: echo -e 'sto (2, 3)\nmem (2)\ndisp' | calc.exe | grep -q 'storage: 0 3$'
// test: echo -e 'disp' | calc.exe | grep -q "storage: 0 0 0 0 0 0 0 0 0 0"
// test: echo -e 'sto (3, 10)\ndisp' | calc.exe | grep -q "storage: 0 0 10 0 0 0 0 0 0 0"
Ln, Log, Exp,
Erfc, Erf,
Abs, Ceil, Floor,
- Store, Recall, Inc, Dec, Disp, Mem, Clear,
+ Store, Recall, Inc, Dec, Disp, Memory, Clear,
Quit, Help,
Ans, E, Pi,
Equal, Diff, Ge, Le, Gt, Lt,
{ "inc", Inc, 1, 3, 5},
{ "dec", Dec, 1, 3, 5},
{ "disp", Disp, 0, 4, 9},
- { "mem", Mem, 1, 3, 5},
+ { "mem", Memory, 1, 3, 5},
{ "clr", Clear, 0, 3, 9},
{ "quit", Quit, 0, 4, 9},
{ "help", Help, 0, 4, 9},
case Inc: func = "Increase"; break;
case Dec: func = "Decrease"; break;
case Disp: func = "Display"; break;
- case Mem: func = "Memory"; break;
+ case Memory: func = "Memory"; break;
case Clear: func = "Clear"; break;
case Quit: func = "Quit"; break;
case Help: func = "Help"; break;
case Div:
case Mod:
case Pow:
- case Store:
case Equal:
case Diff:
case Ge:
case Or:
if (root->ops[1]) {
op1 = evaluate_element (root->ops[1], nextmask);
- } else if (root->func != Store) {
+ } else {
VERBOSE (WARNING, fprintf (stdout, "error while evaluating (op[1])\n"));
return 0;
}
case Inc:
case Dec:
case Not:
- case Mem:
case Cond:
case Prog:
case Arg:
return 0;
}
break;
+ case Memory:
+ if (root->ops[0] == NULL) {
+ op0 = -1;
+ } else {
+ op0 = (int)evaluate_element (root->ops[0], 0);
+ if (op0 < 0) {
+ VERBOSE (WARNING, fprintf (stdout, "error incorrect memory size (%d)\n", (int)op0));
+ return 0;
+ }
+ }
+ break;
case Push:
case Print:
op0 = (root->ops[0]) ? evaluate_element (root->ops[0], 0) : answer;
break;
+ case Store:
case Put:
if (root->ops[0]) {
op0 = evaluate_element (root->ops[0], 0);
case Abs: return fabs (op0);
case Ceil: return ceil (op0);
case Floor: return floor (op0);
- case Store: return store ((int)op0, (op1) ? op1 : answer);
+ case Store: return store ((int)op0, op1);
case Recall: return recall ((int)op0);
case Inc: return increase ((int)op0);
case Dec: return decrease ((int)op0);
case Disp: display (); break;
- case Mem: memory ((int)op0); break;
+ case Memory: return memory ((root->ops[0]) ? (int)op0 : -1);
case Clear: clear (); break;
case Quit: quit (); break;
case Help: help (); break;