product.cpp 732 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. // 'product' function
  2. #include "stdafx.h"
  3. #include "defs.h"
  4. #define A p3
  5. #define B p4
  6. #define I p5
  7. #define X p6
  8. void
  9. eval_product(void)
  10. {
  11. int i, j, k;
  12. // 1st arg (quoted)
  13. X = cadr(p1);
  14. if (!issymbol(X))
  15. stop("product: 1st arg?");
  16. // 2nd arg
  17. push(caddr(p1));
  18. eval();
  19. j = pop_integer();
  20. if (j == (int) 0x80000000)
  21. stop("product: 2nd arg?");
  22. // 3rd arg
  23. push(cadddr(p1));
  24. eval();
  25. k = pop_integer();
  26. if (k == (int) 0x80000000)
  27. stop("product: 3rd arg?");
  28. // 4th arg
  29. p1 = caddddr(p1);
  30. B = get_binding(X);
  31. A = get_arglist(X);
  32. push_integer(1);
  33. for (i = j; i <= k; i++) {
  34. push_integer(i);
  35. I = pop();
  36. set_binding(X, I);
  37. push(p1);
  38. eval();
  39. multiply();
  40. }
  41. set_binding_and_arglist(X, B, A);
  42. }