Build a synthetic `Name` for a mutual block's `Named` entry: `Ix. . `. Disambiguates alpha-equivalent blocks that share an `addr` but have different member names. Used by `compile/mutual.rs` to register each mutual block under a Muts-tagged meta so kernel ingress can discover and process it via `ingress_muts_block`.
(&self, first_member: &crate::env::Name)
| 97 | /// Muts-tagged meta so kernel ingress can discover and process it via |
| 98 | /// `ingress_muts_block`. |
| 99 | pub fn muts_name(&self, first_member: &crate::env::Name) -> crate::env::Name { |
| 100 | use crate::env::{Name, NameData}; |
| 101 | let base = Name::str(Name::str(Name::anon(), "Ix".to_string()), self.hex()); |
| 102 | // Append each component of `first_member` to the base, preserving |
| 103 | // numeric vs string parts. |
| 104 | fn go(base: Name, name: &Name) -> Name { |
| 105 | match name.as_data() { |
| 106 | NameData::Anonymous(_) => base, |
| 107 | NameData::Str(parent, s, _) => Name::str(go(base, parent), s.clone()), |
| 108 | NameData::Num(parent, n, _) => Name::num(go(base, parent), n.clone()), |
| 109 | } |
| 110 | } |
| 111 | go(base, first_member) |
| 112 | } |
| 113 | |
| 114 | /// Constructs an address from a 64-character hexadecimal string. |
| 115 | pub fn from_hex(hex: &str) -> Option<Self> { |