Basic arithmetic and jump labels

This commit is contained in:
2019-11-17 21:02:35 +01:00
commit b84557b3e1
34 changed files with 1350 additions and 0 deletions

33
src/interpret/value.cpp Normal file
View File

@@ -0,0 +1,33 @@
#include <interpret/errors.hpp>
#include <interpret/value.hpp>
namespace Interpret
{
int & Value::GetValue(Execute::Registers & registers)
{
if (type == ValueType::ImmediateInteger)
{
return integer;
}
return registers.registers[registerIndex];
}
void Value::CreateFromToken(Token::Token const & token)
{
if (token.type == Token::TokenType::ImmediateInteger)
{
type = ValueType::ImmediateInteger;
integer = std::get<int>(token.data);
}
else if (token.type == Token::TokenType::Register)
{
type = ValueType::Register;
registerIndex = static_cast<int>(std::get<Token::RegisterType>(token.data));
}
else
{
throw Internal::BadTokenForValue(token);
}
}
}