| 152 | /// Roundtrip an Ix.Name N times. Each iteration: decode → build → drop old. |
| 153 | #[unsafe(no_mangle)] |
| 154 | pub extern "C" fn rs_refcount_roundtrip_loop( |
| 155 | name: LeanIxName<LeanBorrowed<'_>>, |
| 156 | n: usize, |
| 157 | ) -> LeanIxName<LeanOwned> { |
| 158 | let mut rust_name = name.decode(); |
| 159 | for _ in 0..n { |
| 160 | let mut cache = LeanBuildCache::new(); |
| 161 | let lean_name = LeanIxName::build(&mut cache, &rust_name); |
| 162 | rust_name = lean_name.decode(); |
| 163 | // lean_name dropped here → lean_dec_ref |
| 164 | } |
| 165 | let mut cache = LeanBuildCache::new(); |
| 166 | LeanIxName::build(&mut cache, &rust_name) |
| 167 | } |
| 168 | |
| 169 | // ============================================================================= |
| 170 | // Nested collection traversal with borrows |