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