Basic arithmetic and jump labels
This commit is contained in:
57
include/interpret/statement.hpp
Normal file
57
include/interpret/statement.hpp
Normal file
@@ -0,0 +1,57 @@
|
||||
#pragma once
|
||||
#include <execute/flags.hpp>
|
||||
#include <execute/registers.hpp>
|
||||
#include <execute/state.hpp>
|
||||
#include <interpret/value.hpp>
|
||||
|
||||
namespace Interpret
|
||||
{
|
||||
struct Statement
|
||||
{
|
||||
virtual void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) = 0;
|
||||
};
|
||||
|
||||
struct NoArgumentStatement : Statement
|
||||
{
|
||||
void (* function)(Execute::Flags & flags, Execute::Registers & registers);
|
||||
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
|
||||
};
|
||||
|
||||
struct OneArgumentStatement : Statement
|
||||
{
|
||||
void (* function)(Execute::Flags & flags, int argument1);
|
||||
Value firstArgument;
|
||||
|
||||
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
|
||||
};
|
||||
|
||||
struct TwoArgumentStatement : Statement
|
||||
{
|
||||
void (* function)(Execute::Flags & flags, int argument1, int argument2);
|
||||
Value firstArgument;
|
||||
Value secondArgument;
|
||||
|
||||
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
|
||||
};
|
||||
|
||||
struct ThreeArgumentStatement : Statement
|
||||
{
|
||||
void (* function)(Execute::Flags & flags, int argument1, int argument2, int & argument3);
|
||||
Value firstArgument;
|
||||
Value secondArgument;
|
||||
Value thirdArgument;
|
||||
|
||||
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
|
||||
};
|
||||
|
||||
struct JumpStatement : Statement
|
||||
{
|
||||
private:
|
||||
std::string const label;
|
||||
|
||||
public:
|
||||
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
|
||||
|
||||
JumpStatement(std::string const & label);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user