|
|
|
@ -11,66 +11,66 @@ 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");
|
|
|
|
|
|
|
|
|
|
throw std::logic_error ("infinite 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");
|
|
|
|
|
|
|
|
|
|
throw std::logic_error ("infinite loop");
|
|
|
|
|
|
|
|
|
|
runtime.setPC (runtime.getPC()-arg0-1);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|