pub struct IrRegion {
pub until: bool,
pub condition: String,
pub lapse_binding: Option<String>,
pub effects: Vec<IrRegionEffect>,
pub body_removed: String,
pub body_lapsed: String,
pub arm_content: String,
pub arm_case_arms: Vec<(String, String)>,
}Expand description
DR-0043 Decision 5: a rule’s during/until region, pre-rendered as the
three body variants the kernel lowers against. IrRule.body itself is the
condition-HOLDS variant (region spliced inline), so every existing text
scanner and effect-id derivation is untouched; the kernel swaps in
body_removed (region gone – post-lapse suppression) or body_lapsed
(region replaced by its arm) per the region’s durable state. NOT rendered
into the .ir snapshot (derived, deterministic).
Fields§
§until: bool§condition: StringGuard-grammar condition text; the kernel parses and evaluates it atomically inside each advancing commit.
lapse_binding: Option<String>§effects: Vec<IrRegionEffect>§body_removed: String§body_lapsed: String§arm_content: StringThe on lapse arm’s own text, without the ambient statements that
body_lapsed splices around it. The arm is the only part of the rule no
other pass sees (the canonical body is the HOLDS variant), so it is
validated separately and must not re-report the ambient lines.
arm_case_arms: Vec<(String, String)>The (scrutinee, pattern) chain of the case arms enclosing the region,
outermost first. Family B narrowing of the lapse arm starts from the
allowances those arms grant, not from the rule top.