]> git.imager.perl.org - imager.git/blob - stackmach.c
merge the thickline branch polygon fix
[imager.git] / stackmach.c
1 #include "stackmach.h"
2
3 double
4 i_op_run(int codes[], size_t code_size, double parms[], size_t parm_size) {
5   double stack[100];
6   double *sp = stack;
7
8   while (code_size) {
9     switch (*codes++) {
10     case bcAdd:
11       sp[-2] += sp[-1];
12       --sp;
13       break;
14
15     case bcSubtract:
16       sp[-2] -= sp[-1];
17       --sp;
18       break;
19
20     case bcDiv:
21       sp[-2] /= sp[-1];
22       --sp;
23       break;
24
25     case bcMult:
26       sp[-2] *= sp[-1];
27       --sp;
28       break;
29
30     case bcParm:
31       *sp++ = parms[*codes++];
32       --code_size;
33       break;
34
35     case bcSin:
36       sp[-1] = sin(sp[-1]);
37       break;
38       
39     case bcCos:
40       sp[-1] = cos(sp[-1]);
41       break;
42       
43     }
44     --code_size;
45   }
46   
47   return sp[-1];
48 }
49