Add seti and int operators

This commit is contained in:
2019-11-23 12:21:14 +01:00
parent f0e00ff018
commit 99f616e1e4
16 changed files with 153 additions and 66 deletions

View File

@@ -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;
}
}