#include "stackmach.h"
double
i_op_run(int codes[], size_t code_size, double parms[], size_t parm_size) {
double stack[100];
double *sp = stack;
while (code_size) {
switch (*codes++) {
case bcAdd:
sp[-2] += sp[-1];
--sp;
break;
case bcSubtract:
sp[-2] -= sp[-1];
--sp;
break;
case bcDiv:
sp[-2] /= sp[-1];
--sp;
break;
case bcMult:
sp[-2] *= sp[-1];
--sp;
break;
case bcParm:
*sp++ = parms[*codes++];
--code_size;
break;
case bcSin:
sp[-1] = sin(sp[-1]);
break;
case bcCos:
sp[-1] = cos(sp[-1]);
break;
}
--code_size;
}
return sp[-1];
}