chiark / gitweb /
rustc panics, probably due to syntax error
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Dec 2020 18:15:42 +0000 (18:15 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 28 Dec 2020 18:17:34 +0000 (18:17 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wdriver.rs

index 75dbb049f979067a97b8b6739d978393465365d1..7b2463f14ede4c129e2f8253737235ef7eb0a242 100644 (file)
@@ -153,24 +153,28 @@ pub trait Subst : Clone + Sized {
   }
 
   #[throws(AE)]
-  fn subst(&self, s: &dyn AsRef<str>) -> 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: &regex::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<str> -> String {
+    #[throws(AE)]
+    fn inner(self_: &Self, s: &dyn AsRef<str> -> 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: &regex::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)]