33 lines
702 B
C++
33 lines
702 B
C++
#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);
|
|
}
|
|
}
|
|
} |