From 9b79f3b5c90e4e70c4543825bf12258f31b84c20 Mon Sep 17 00:00:00 2001 From: Filipe Rodrigues Date: Mon, 26 Apr 2021 16:05:07 +0100 Subject: [PATCH] Added lifetime to `Parsable` trait. --- dcb-exe/src/inst/basic.rs | 4 ++-- dcb-exe/src/inst/basic/alu.rs | 4 ++-- dcb-exe/src/inst/basic/alu/imm.rs | 4 ++-- dcb-exe/src/inst/basic/alu/reg.rs | 4 ++-- dcb-exe/src/inst/basic/co.rs | 4 ++-- dcb-exe/src/inst/basic/cond.rs | 4 ++-- dcb-exe/src/inst/basic/jmp.rs | 4 ++-- dcb-exe/src/inst/basic/jmp/imm.rs | 4 ++-- dcb-exe/src/inst/basic/jmp/reg.rs | 4 ++-- dcb-exe/src/inst/basic/load.rs | 4 ++-- dcb-exe/src/inst/basic/lui.rs | 4 ++-- dcb-exe/src/inst/basic/mult.rs | 4 ++-- dcb-exe/src/inst/basic/shift.rs | 4 ++-- dcb-exe/src/inst/basic/shift/imm.rs | 4 ++-- dcb-exe/src/inst/basic/shift/reg.rs | 4 ++-- dcb-exe/src/inst/basic/store.rs | 4 ++-- dcb-exe/src/inst/basic/sys.rs | 4 ++-- dcb-exe/src/inst/parse.rs | 4 ++-- 18 files changed, 36 insertions(+), 36 deletions(-) diff --git a/dcb-exe/src/inst/basic.rs b/dcb-exe/src/inst/basic.rs index a16040f..6957711 100644 --- a/dcb-exe/src/inst/basic.rs +++ b/dcb-exe/src/inst/basic.rs @@ -107,8 +107,8 @@ impl TryEncode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { #[rustfmt::skip] let parsers: &[&dyn Fn() -> Result] = &[ &|| alu ::Inst::parse(mnemonic, args, ctx).map(Self::Alu ), diff --git a/dcb-exe/src/inst/basic/alu.rs b/dcb-exe/src/inst/basic/alu.rs index 63765ea..6fadc8f 100644 --- a/dcb-exe/src/inst/basic/alu.rs +++ b/dcb-exe/src/inst/basic/alu.rs @@ -39,8 +39,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { match imm::Inst::parse(mnemonic, args, ctx) { Ok(inst) => Ok(Self::Imm(inst)), Err(ParseError::UnknownMnemonic) => reg::Inst::parse(mnemonic, args, ctx).map(Self::Reg), diff --git a/dcb-exe/src/inst/basic/alu/imm.rs b/dcb-exe/src/inst/basic/alu/imm.rs index 27fc30f..fe05510 100644 --- a/dcb-exe/src/inst/basic/alu/imm.rs +++ b/dcb-exe/src/inst/basic/alu/imm.rs @@ -118,8 +118,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { #[rustfmt::skip] let to_kind = match mnemonic { "addi" => |value: i64| value.try_into().map(Kind::Add ), diff --git a/dcb-exe/src/inst/basic/alu/reg.rs b/dcb-exe/src/inst/basic/alu/reg.rs index 56b0cd1..a62d039 100644 --- a/dcb-exe/src/inst/basic/alu/reg.rs +++ b/dcb-exe/src/inst/basic/alu/reg.rs @@ -132,8 +132,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { #[rustfmt::skip] let kind = match mnemonic { "add" => Kind::Add , diff --git a/dcb-exe/src/inst/basic/co.rs b/dcb-exe/src/inst/basic/co.rs index afdff96..d88f2e1 100644 --- a/dcb-exe/src/inst/basic/co.rs +++ b/dcb-exe/src/inst/basic/co.rs @@ -168,8 +168,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let inst = match mnemonic { "cop0" | "cop1" | "cop2" | "cop3" => { let n = mnemonic[3..].parse().expect("Unable to parse 0..=3"); diff --git a/dcb-exe/src/inst/basic/cond.rs b/dcb-exe/src/inst/basic/cond.rs index 8f9146f..8af17b2 100644 --- a/dcb-exe/src/inst/basic/cond.rs +++ b/dcb-exe/src/inst/basic/cond.rs @@ -120,8 +120,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { // Note: Literals are absolute, not relative // Calculates the offset between a position and the current one diff --git a/dcb-exe/src/inst/basic/jmp.rs b/dcb-exe/src/inst/basic/jmp.rs index d1fab6d..865c52c 100644 --- a/dcb-exe/src/inst/basic/jmp.rs +++ b/dcb-exe/src/inst/basic/jmp.rs @@ -39,8 +39,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { match imm::Inst::parse(mnemonic, args, ctx) { Ok(inst) => Ok(Self::Imm(inst)), Err(ParseError::UnknownMnemonic) => reg::Inst::parse(mnemonic, args, ctx).map(Self::Reg), diff --git a/dcb-exe/src/inst/basic/jmp/imm.rs b/dcb-exe/src/inst/basic/jmp/imm.rs index 328e2c6..9fbeefb 100644 --- a/dcb-exe/src/inst/basic/jmp/imm.rs +++ b/dcb-exe/src/inst/basic/jmp/imm.rs @@ -88,8 +88,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { let (pos, kind) = match mnemonic { "j" => match args { [arg] => (ctx.arg_pos(arg)?, Kind::Jump), diff --git a/dcb-exe/src/inst/basic/jmp/reg.rs b/dcb-exe/src/inst/basic/jmp/reg.rs index 2a1fa9a..95553e0 100644 --- a/dcb-exe/src/inst/basic/jmp/reg.rs +++ b/dcb-exe/src/inst/basic/jmp/reg.rs @@ -73,8 +73,8 @@ impl Encode for Inst { } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let (target, kind) = match mnemonic { "jr" => match *args { [LineArg::Register(target)] => (target, Kind::Jump), diff --git a/dcb-exe/src/inst/basic/load.rs b/dcb-exe/src/inst/basic/load.rs index eb8aefa..ad371a4 100644 --- a/dcb-exe/src/inst/basic/load.rs +++ b/dcb-exe/src/inst/basic/load.rs @@ -114,8 +114,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let kind = match mnemonic { "lb" => Kind::Byte, "lh" => Kind::HalfWord, diff --git a/dcb-exe/src/inst/basic/lui.rs b/dcb-exe/src/inst/basic/lui.rs index 71bc64a..47940d5 100644 --- a/dcb-exe/src/inst/basic/lui.rs +++ b/dcb-exe/src/inst/basic/lui.rs @@ -46,8 +46,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { if mnemonic != "lui" { return Err(ParseError::UnknownMnemonic); } diff --git a/dcb-exe/src/inst/basic/mult.rs b/dcb-exe/src/inst/basic/mult.rs index 8834552..4686abd 100644 --- a/dcb-exe/src/inst/basic/mult.rs +++ b/dcb-exe/src/inst/basic/mult.rs @@ -154,8 +154,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let inst = match mnemonic { "mflo" | "mfhi" | "mtlo" | "mthi" => { let reg = match *args { diff --git a/dcb-exe/src/inst/basic/shift.rs b/dcb-exe/src/inst/basic/shift.rs index 5e16358..87a9531 100644 --- a/dcb-exe/src/inst/basic/shift.rs +++ b/dcb-exe/src/inst/basic/shift.rs @@ -48,8 +48,8 @@ impl TryEncode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result { match imm::Inst::parse(mnemonic, args, ctx) { Ok(inst) => Ok(Self::Imm(inst)), Err(ParseError::UnknownMnemonic) => reg::Inst::parse(mnemonic, args, ctx).map(Self::Reg), diff --git a/dcb-exe/src/inst/basic/shift/imm.rs b/dcb-exe/src/inst/basic/shift/imm.rs index 40d2c60..e3e27a4 100644 --- a/dcb-exe/src/inst/basic/shift/imm.rs +++ b/dcb-exe/src/inst/basic/shift/imm.rs @@ -105,8 +105,8 @@ impl TryEncode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let kind = match mnemonic { "sll" => Kind::LeftLogical, "srl" => Kind::RightLogical, diff --git a/dcb-exe/src/inst/basic/shift/reg.rs b/dcb-exe/src/inst/basic/shift/reg.rs index 889836b..9c3883c 100644 --- a/dcb-exe/src/inst/basic/shift/reg.rs +++ b/dcb-exe/src/inst/basic/shift/reg.rs @@ -91,8 +91,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let kind = match mnemonic { "sllv" => Kind::LeftLogical, "srlv" => Kind::RightLogical, diff --git a/dcb-exe/src/inst/basic/store.rs b/dcb-exe/src/inst/basic/store.rs index 06d8843..1316738 100644 --- a/dcb-exe/src/inst/basic/store.rs +++ b/dcb-exe/src/inst/basic/store.rs @@ -104,8 +104,8 @@ impl Encode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let kind = match mnemonic { "sb" => Kind::Byte, "sh" => Kind::HalfWord, diff --git a/dcb-exe/src/inst/basic/sys.rs b/dcb-exe/src/inst/basic/sys.rs index c40bbdb..26148c5 100644 --- a/dcb-exe/src/inst/basic/sys.rs +++ b/dcb-exe/src/inst/basic/sys.rs @@ -86,8 +86,8 @@ impl TryEncode for Inst { } } -impl Parsable for Inst { - fn parse(mnemonic: &str, args: &[LineArg], _ctx: &Ctx) -> Result { +impl<'a> Parsable<'a> for Inst { + fn parse(mnemonic: &'a str, args: &'a [LineArg], _ctx: &'a Ctx) -> Result { let kind = match mnemonic { "sys" => Kind::Sys, "break" => Kind::Break, diff --git a/dcb-exe/src/inst/parse.rs b/dcb-exe/src/inst/parse.rs index 8116ca1..67602ba 100644 --- a/dcb-exe/src/inst/parse.rs +++ b/dcb-exe/src/inst/parse.rs @@ -13,9 +13,9 @@ use crate::Pos; use std::convert::TryInto; /// Instruction parsing -pub trait Parsable: Sized { +pub trait Parsable<'a>: Sized + 'a { /// Parses this instruction - fn parse(mnemonic: &str, args: &[LineArg], ctx: &Ctx) -> Result; + fn parse(mnemonic: &'a str, args: &'a [LineArg], ctx: &'a Ctx) -> Result; } /// Parsing context