chiark / gitweb /
piece aliases: tolerate missing alias for shapelib backs
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 19:04:03 +0000 (19:04 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 19:22:15 +0000 (19:22 +0000)
We might be running in an environment where the alias is not defined.
Eg, otterlib.

This is a bit nasty really, since it means that broken game specs,
where some of the cards are busted, don't get spotted.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/shapelib.rs

index 1bdcc97867b0a07b3d1980e97294c887c95c4880..f5ad04d7581dede5a63a21db7f48a211faa412c8 100644 (file)
@@ -390,19 +390,26 @@ impl Contents {
       face.xform.scale[0] *= -1.;
       faces.push(face);
     } else if let Some(back_spec) = &idata.group.d.back {
-      let p = back_spec.load_occult(pcaliases)?;
-      let p = p.into();
-      back = Some(p);
+      match back_spec.load_occult(pcaliases) {
+        Err(SpecError::AliasNotFound) => { },
+        Err(e) => throw!(e),
+        Ok(p) => {
+          let p = p.into();
+          back = Some(p);
+        }
+      }
     }
     faces.shrink_to_fit();
 
     let occultable = match &idata.occ {
       OccData::None => None,
       OccData::Back(ilk) => {
-        let back = if let Some(back) = &back { back }
-        else { throw!(internal_error_bydebug(&self)) };
-        let back = back.clone();
-        Some((ilk.clone(), back))
+        if let Some(back) = &back {
+          let back = back.clone();
+          Some((ilk.clone(), back))
+        } else {
+          None // We got AliasNotFound, ah well
+        }
       },
       OccData::Internal(occ) => {
         let name = occ.item_name.clone();