1 /*=============================================================================
2     Copyright (c) 2001-2014 Joel de Guzman
3 
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 =============================================================================*/
7 #include "vm.hpp"
8 
9 namespace client
10 {
execute(std::vector<int> const & code)11     void vmachine::execute(std::vector<int> const& code)
12     {
13         std::vector<int>::const_iterator pc = code.begin();
14         stack_ptr = stack.begin();
15 
16         while (pc != code.end())
17         {
18             switch (*pc++)
19             {
20                 case op_neg:
21                     stack_ptr[-1] = -stack_ptr[-1];
22                     break;
23 
24                 case op_add:
25                     --stack_ptr;
26                     stack_ptr[-1] += stack_ptr[0];
27                     break;
28 
29                 case op_sub:
30                     --stack_ptr;
31                     stack_ptr[-1] -= stack_ptr[0];
32                     break;
33 
34                 case op_mul:
35                     --stack_ptr;
36                     stack_ptr[-1] *= stack_ptr[0];
37                     break;
38 
39                 case op_div:
40                     --stack_ptr;
41                     stack_ptr[-1] /= stack_ptr[0];
42                     break;
43 
44                 case op_int:
45                     *stack_ptr++ = *pc++;
46                     break;
47             }
48         }
49     }
50 }
51