From 77bbfb10fdb823cacb168564882b4fbe2e7be4cc Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 28 Dec 2020 18:15:42 +0000 Subject: [PATCH] rustc panics, probably due to syntax error Signed-off-by: Ian Jackson --- wdriver.rs | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/wdriver.rs b/wdriver.rs index 75dbb049..7b2463f1 100644 --- a/wdriver.rs +++ b/wdriver.rs @@ -153,24 +153,28 @@ pub trait Subst : Clone + Sized { } #[throws(AE)] - fn subst(&self, s: &dyn AsRef) -> String { - let s = s.as_ref(); - let re = Regex::new(r"@(\w+)@").expect("bad re!"); - let mut errs = vec![]; - let out = re.replace_all(s, |caps: ®ex::Captures| { - let kw = caps.get(1).expect("$1 missing!").as_str(); - if kw == "" { return "".to_owned() } - let v = self.get(kw); - v.unwrap_or_else(||{ - errs.push(kw.to_owned()); - "".to_owned() - }) - }); - if ! errs.is_empty() { - throw!(anyhow!("bad substitution(s) {:?} in {:?}", - &errs, s)); + fn subst(&self, s: &dyn AsRef -> String { + #[throws(AE)] + fn inner(self_: &Self, s: &dyn AsRef -> String { + let s = s.as_ref(); + let re = Regex::new(r"@(\w+)@").expect("bad re!"); + let mut errs = vec![]; + let out = re.replace_all(s, |caps: ®ex::Captures| { + let kw = caps.get(1).expect("$1 missing!").as_str(); + if kw == "" { return "".to_owned() } + let v = self.get(kw); + v.unwrap_or_else(||{ + errs.push(kw.to_owned()); + "".to_owned() + }) + }); + if ! errs.is_empty() { + throw!(anyhow!("bad substitution(s) {:?} in {:?}", + &errs, s)); + } + out.into() } - out.into() + inner(self, s)? } #[throws(AE)] -- 2.30.2