Add seti and int operators
This commit is contained in:
@@ -42,7 +42,7 @@ namespace Interpret
|
||||
return v;
|
||||
}
|
||||
|
||||
throw ExpectedRegister(token);
|
||||
throw ExpectedValue(token);
|
||||
}
|
||||
|
||||
void AddArithmeticArguments(ArithmeticStatement & statement, unsigned const operandIndex, std::vector<Token::Token> const & tokens)
|
||||
@@ -193,9 +193,27 @@ namespace Interpret
|
||||
return statement;
|
||||
}
|
||||
|
||||
case Token::OperandType::SetInteger:
|
||||
{
|
||||
auto statement = std::make_unique<SetStatement>();
|
||||
statement->firstArgument = GetRegisterArgument(operandIndex + 1u, tokens);
|
||||
statement->secondArgument = GetImmediateOrRegisterArgument(operandIndex + 2u, tokens);
|
||||
|
||||
return statement;
|
||||
}
|
||||
|
||||
case Token::OperandType::Interrupt:
|
||||
{
|
||||
auto statement = std::make_unique<InterruptStatement>();
|
||||
statement->firstArgument = GetImmediateOrRegisterArgument(operandIndex + 1u, tokens);
|
||||
|
||||
return statement;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
auto statement = std::make_unique<NoArgumentStatement>();
|
||||
|
||||
// TODO throw error?
|
||||
statement->function = [](Execute::Flags & flags, Execute::Registers & registers) { std::puts("ExtractStatement: Extracted unhandled operator type"); };
|
||||
return statement;
|
||||
@@ -218,12 +236,15 @@ namespace Interpret
|
||||
case Token::OperandType::LessThanInteger:
|
||||
case Token::OperandType::GreaterThanInteger:
|
||||
case Token::OperandType::EqualInteger:
|
||||
case Token::OperandType::SetInteger:
|
||||
return 2;
|
||||
|
||||
case Token::OperandType::Jump:
|
||||
case Token::OperandType::Interrupt:
|
||||
return 1;
|
||||
|
||||
default:
|
||||
std::printf("WARNING: returning default argument length of 0 for operand type %i\n", static_cast<int>(type));
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user