More parser implementation

This commit is contained in:
2022-03-13 15:44:48 -05:00
parent 19eb4d57f3
commit 643e8d5749
6 changed files with 231 additions and 89 deletions
+7 -4
View File
@@ -59,6 +59,9 @@ impl Display for InvalidOpcode {
impl std::error::Error for InvalidOpcode {}
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub struct InvalidMnemonic<'a>(pub &'a str);
impl Display for Opcode {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
@@ -163,10 +166,10 @@ impl TryFrom<u8> for Opcode {
}
}
impl TryFrom<&str> for Opcode {
type Error = InvalidOpcode;
impl<'a> TryFrom<&'a str> for Opcode {
type Error = InvalidMnemonic<'a>;
fn try_from(value: &str) -> Result<Self, Self::Error> {
fn try_from(value: &'a str) -> Result<Self, Self::Error> {
use Opcode::*;
Ok(match value {
"nop" => Nop,
@@ -212,7 +215,7 @@ impl TryFrom<&str> for Opcode {
"popr" => Popr,
"peekr" => Peekr,
"debug" => Debug,
_ => return Err(InvalidOpcode(255))
_ => return Err(InvalidMnemonic(value))
})
}
}