mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-30 17:56:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef INTERPRETER_CONTROLOPCODES_H_INCLUDED
 | |
| #define INTERPRETER_CONTROLOPCODES_H_INCLUDED
 | |
| 
 | |
| #include <stdexcept>
 | |
| 
 | |
| #include "opcodes.hpp"
 | |
| #include "runtime.hpp"
 | |
| 
 | |
| namespace Interpreter
 | |
| {
 | |
|     class OpReturn : public Opcode0
 | |
|     {
 | |
|         public:
 | |
|         
 | |
|             virtual void execute (Runtime& runtime)
 | |
|             {
 | |
|                 runtime.setPC (-1);
 | |
|             }           
 | |
|     };
 | |
|     
 | |
|     class OpSkipZero : public Opcode0
 | |
|     {
 | |
|         public:
 | |
|         
 | |
|             virtual void execute (Runtime& runtime)
 | |
|             {
 | |
|                 Type_Integer data = runtime[0].mInteger;
 | |
|                 runtime.pop();
 | |
|                 
 | |
|                 if (data==0)
 | |
|                     runtime.setPC (runtime.getPC()+1);
 | |
|             }           
 | |
|     };    
 | |
|     
 | |
|     class OpSkipNonZero : public Opcode0
 | |
|     {
 | |
|         public:
 | |
|         
 | |
|             virtual void execute (Runtime& runtime)
 | |
|             {
 | |
|                 Type_Integer data = runtime[0].mInteger;
 | |
|                 runtime.pop();
 | |
|                 
 | |
|                 if (data!=0)
 | |
|                     runtime.setPC (runtime.getPC()+1);
 | |
|             }           
 | |
|     };      
 | |
|     
 | |
|     class OpJumpForward : public Opcode1
 | |
|     {
 | |
|         public:
 | |
|         
 | |
|             virtual void execute (Runtime& runtime, unsigned int arg0)
 | |
|             {
 | |
|                 if (arg0==0)
 | |
|                     throw std::logic_error ("inifite loop");
 | |
|                 
 | |
|                 runtime.setPC (runtime.getPC()+arg0-1);
 | |
|             }           
 | |
|     };        
 | |
| 
 | |
|     class OpJumpBackward : public Opcode1
 | |
|     {
 | |
|         public:
 | |
|         
 | |
|             virtual void execute (Runtime& runtime, unsigned int arg0)
 | |
|             {
 | |
|                 if (arg0==0)
 | |
|                     throw std::logic_error ("inifite loop");
 | |
|                 
 | |
|                 runtime.setPC (runtime.getPC()-arg0-1);
 | |
|             }           
 | |
|     };        
 | |
| }
 | |
| 
 | |
| #endif
 |