Something went wrong. Try again.
OpenMW is an open implementation of the Morrowind engine
Something went wrong. Try again.
1.5 kB · 68 lines
C++
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#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: void execute(Runtime& runtime) override { runtime.setPC(-1); } };
class OpSkipZero : public Opcode0 { public: void execute(Runtime& runtime) override { Type_Integer data = runtime[0].mInteger; runtime.pop();
if (data == 0) runtime.setPC(runtime.getPC() + 1); } };
class OpSkipNonZero : public Opcode0 { public: void execute(Runtime& runtime) override { Type_Integer data = runtime[0].mInteger; runtime.pop();
if (data != 0) runtime.setPC(runtime.getPC() + 1); } };
class OpJumpForward : public Opcode1 { public: void execute(Runtime& runtime, unsigned int arg0) override { if (arg0 == 0) throw std::logic_error("infinite loop");
runtime.setPC(runtime.getPC() + arg0 - 1); } };
class OpJumpBackward : public Opcode1 { public: void execute(Runtime& runtime, unsigned int arg0) override { if (arg0 == 0) throw std::logic_error("infinite loop");
runtime.setPC(runtime.getPC() - arg0 - 1); } };}
#endif