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

Method execute

example/qi/compiler_tutorial/mini_c/vm.cpp:16–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers 1

mainFunction · 0.45

Calls 1

beginMethod · 0.45

Tested by

no test coverage detected