}
if (u.need_polarise && seg->will_polarise) {
seg->seg_inverted= seg->tr_backwards ^ u.train_polarity_inverted;
- if (seg->i->invertible) actual_inversions_segment(seg);
- else assert(!seg->seg_inverted);
+ if (seg->i->invertible) {
+ actual_inversions_segment(seg);
+ Segment *interferer= segment_interferes(0,seg);
+ if (interferer && !interferer->will_polarise &&
+ interferer->i->invertible) {
+ /* no provision for interfering invertible segments
+ * with opposing ideas about neutral polarity */
+ interferer->seg_inverted= seg->seg_inverted;
+ actual_inversions_segment(interferer);
+ }
+ } else {
+ assert(!seg->seg_inverted);
+ }
}
seg->now_present= seg->pred_present=
seg->pred_vacated= seg->will_polarise= 0;