stackmach.c | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 0 | 25 | 0.0 |
branch | 0 | 2 | 0.0 |
condition | n/a | ||
subroutine | n/a | ||
pod | n/a | ||
total | 0 | 27 | 0.0 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | #include "stackmach.h" | ||||||
2 | |||||||
3 | double | ||||||
4 | 0 | i_op_run(int codes[], size_t code_size, double parms[], size_t parm_size) { | |||||
5 | double stack[100]; | ||||||
6 | 0 | double *sp = stack; | |||||
7 | |||||||
8 | 0 | 0 | while (code_size) { | ||||
9 | 0 | switch (*codes++) { | |||||
10 | case bcAdd: | ||||||
11 | 0 | sp[-2] += sp[-1]; | |||||
12 | 0 | --sp; | |||||
13 | 0 | break; | |||||
14 | |||||||
15 | case bcSubtract: | ||||||
16 | 0 | sp[-2] -= sp[-1]; | |||||
17 | 0 | --sp; | |||||
18 | 0 | break; | |||||
19 | |||||||
20 | case bcDiv: | ||||||
21 | 0 | sp[-2] /= sp[-1]; | |||||
22 | 0 | --sp; | |||||
23 | 0 | break; | |||||
24 | |||||||
25 | case bcMult: | ||||||
26 | 0 | sp[-2] *= sp[-1]; | |||||
27 | 0 | --sp; | |||||
28 | 0 | break; | |||||
29 | |||||||
30 | case bcParm: | ||||||
31 | 0 | *sp++ = parms[*codes++]; | |||||
32 | 0 | --code_size; | |||||
33 | 0 | break; | |||||
34 | |||||||
35 | case bcSin: | ||||||
36 | 0 | sp[-1] = sin(sp[-1]); | |||||
37 | 0 | break; | |||||
38 | |||||||
39 | case bcCos: | ||||||
40 | 0 | sp[-1] = cos(sp[-1]); | |||||
41 | 0 | break; | |||||
42 | |||||||
43 | } | ||||||
44 | 0 | --code_size; | |||||
45 | } | ||||||
46 | |||||||
47 | 0 | return sp[-1]; | |||||
48 | } | ||||||
49 |