Result: done Files: crates/nikaia-std/src/tools/text_tiers.nika crates/nikaia-std/src/tools/lowered/text_tiers.rs crates/nikaia-std/src/tools/lowered/check_defaults.rs tests/compiler/tests/a_let_mut_literal_into_an_owned_variant.nika tests/compiler/tests/a_let_mut_literal_into_an_owned_variant.stdout Commit: text tiers: a let mut literal assigned another literal stays one binding of literals Body: The defect was not the join over the if: let mut why = "a"; why = "b"; held.push(E::V(why)) failed the same way, while let why = "a" and an unassigned let mut ran. A plain reassignment dropped the binding’s literal mark, so its keeping in an owned field never declared the let String. Now an assignment of another literal (also an if/match of literals) keeps the mark: the binding is declared String and the emitter builds each assigned literal (ADR-282 D17, one binding). The struct-field shape was refused NK1106 before, the variant shapes reached rustc E0308. Side effect in tools: check_defaults_fold’s owner (a literal reassigned, then lent to a String parameter) is now declared String, as let p = "x"; g(p) already was. Fixes: #1010 Tests: new a_let_mut_literal_into_an_owned_variant (if, match arm, struct field) failed on the unfixed compiler (NK1106 on the struct field; the variant probe rustc Mismatched types); passes now; 44 tests named tier/literal/let_mut green at both settings; sequences guard figure unchanged (gate guards green) Gate: green Deviation: none Found: none Needs: none Changelog: A let mut text literal assigned another literal and then kept in an owned field or variant is declared owned text (#1010), instead of reaching rustc with a type mismatch. Owner: none Disk freed: 0 Rs2nika: none Pushed: a788d16db25bb30250b0b4c417d5d317e6e9ac5c

This site is open source. Improve this page.