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

Method execute

example/qi/compiler_tutorial/conjure2/vm.cpp:17–157  ·  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 (true)
26 {
27 switch (*pc++)
28 {
29 case op_neg:
30 stack_ptr[-1] = -stack_ptr[-1];
31 break;
32
33 case op_not:
34 stack_ptr[-1] = !bool(stack_ptr[-1]);
35 break;
36
37 case op_add:
38 --stack_ptr;
39 stack_ptr[-1] += stack_ptr[0];
40 break;
41
42 case op_sub:
43 --stack_ptr;
44 stack_ptr[-1] -= stack_ptr[0];
45 break;
46
47 case op_mul:
48 --stack_ptr;
49 stack_ptr[-1] *= stack_ptr[0];
50 break;
51
52 case op_div:
53 --stack_ptr;
54 stack_ptr[-1] /= stack_ptr[0];
55 break;
56
57 case op_eq:
58 --stack_ptr;
59 stack_ptr[-1] = bool(stack_ptr[-1] == stack_ptr[0]);
60 break;
61
62 case op_neq:
63 --stack_ptr;
64 stack_ptr[-1] = bool(stack_ptr[-1] != stack_ptr[0]);
65 break;
66
67 case op_lt:
68 --stack_ptr;
69 stack_ptr[-1] = bool(stack_ptr[-1] < stack_ptr[0]);
70 break;
71
72 case op_lte:
73 --stack_ptr;
74 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