Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / for.cpp
blob7f384ed7357a9e0c109ed7f8cd8a32fe226beeac
1 // 'for' 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_for(void)
14 int i, j, k;
16 // 1st arg (quoted)
18 X = cadr(p1);
19 if (!issymbol(X))
20 stop("for: 1st arg?");
22 // 2nd arg
24 push(caddr(p1));
25 eval();
26 j = pop_integer();
27 if (j == (int) 0x80000000)
28 stop("for: 2nd arg?");
30 // 3rd arg
32 push(cadddr(p1));
33 eval();
34 k = pop_integer();
35 if (k == (int) 0x80000000)
36 stop("for: 3rd arg?");
38 // remaining args
40 p1 = cddddr(p1);
42 B = get_binding(X);
43 A = get_arglist(X);
45 for (i = j; i <= k; i++) {
46 push_integer(i);
47 I = pop();
48 set_binding(X, I);
49 p2 = p1;
50 while (iscons(p2)) {
51 push(car(p2));
52 eval();
53 pop();
54 p2 = cdr(p2);
58 set_binding_and_arglist(X, B, A);
60 // return value
62 push_symbol(NIL);