MCPcopy Create free account
hub / github.com/boostorg/spirit / execute

Method execute

example/qi/compiler_tutorial/calc8/vm.cpp:17–160  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15namespace client
16{
17 int vmachine::execute(
18 std::vector<int> const& code
19 , std::vector<int>::const_iterator pc
20 , std::vector<int>::iterator frame_ptr
21 )
22 {
23 std::vector<int>::iterator stack_ptr = frame_ptr;
24
25 while (pc != code.end())
26 {
27 BOOST_ASSERT(pc != code.end());
28
29 switch (*pc++)
30 {
31 case op_neg:
32 stack_ptr[-1] = -stack_ptr[-1];
33 break;
34
35 case op_not:
36 stack_ptr[-1] = !bool(stack_ptr[-1]);
37 break;
38
39 case op_add:
40 --stack_ptr;
41 stack_ptr[-1] += stack_ptr[0];
42 break;
43
44 case op_sub:
45 --stack_ptr;
46 stack_ptr[-1] -= stack_ptr[0];
47 break;
48
49 case op_mul:
50 --stack_ptr;
51 stack_ptr[-1] *= stack_ptr[0];
52 break;
53
54 case op_div:
55 --stack_ptr;
56 stack_ptr[-1] /= stack_ptr[0];
57 break;
58
59 case op_eq:
60 --stack_ptr;
61 stack_ptr[-1] = bool(stack_ptr[-1] == stack_ptr[0]);
62 break;
63
64 case op_neq:
65 --stack_ptr;
66 stack_ptr[-1] = bool(stack_ptr[-1] != stack_ptr[0]);
67 break;
68
69 case op_lt:
70 --stack_ptr;
71 stack_ptr[-1] = bool(stack_ptr[-1] < stack_ptr[0]);
72 break;
73
74 case op_lte:

Callers 1

mainFunction · 0.45

Calls 2

endMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected