Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / sum.cpp
blob18648cc2ac9e8635d28372fc3344ad0e8793f394
1 // 'sum' function
3 #include "stdafx.h"
4 #include "defs.h"
6 #define A p3
7 #define B p4
8 #define I p5
9 #define X p6
11 void
12 eval_sum(void)
14 int i, j, k;
16 // 1st arg (quoted)
18 X = cadr(p1);
19 if (!issymbol(X))
20 stop("sum: 1st arg?");
22 // 2nd arg
24 push(caddr(p1));
25 eval();
26 j = pop_integer();
27 if (j == (int) 0x80000000)
28 stop("sum: 2nd arg?");
30 // 3rd arg
32 push(cadddr(p1));
33 eval();
34 k = pop_integer();
35 if (k == (int) 0x80000000)
36 stop("sum: 3rd arg?");
38 // 4th arg
40 p1 = caddddr(p1);
42 B = get_binding(X);
43 A = get_arglist(X);
45 push_integer(0);
47 for (i = j; i <= k; i++) {
48 push_integer(i);
49 I = pop();
50 set_binding(X, I);
51 push(p1);
52 eval();
53 add();
56 set_binding_and_arglist(X, B, A);