From 22ffb60ec312ffd6a39722c8b79be6680d81c825 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Sat, 25 Dec 2021 21:32:34 +0100 Subject: [PATCH] rulegen:: improved overzealous xsidefreeze detection --- rulegen.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rulegen.cpp b/rulegen.cpp index 136df950..28c66a01 100644 --- a/rulegen.cpp +++ b/rulegen.cpp @@ -848,6 +848,8 @@ void trace_root_path(vector& rp, twalker cw) { if(flags & w_parent_reverse) reverse(rp.begin(), rp.end()); } +EX int parent_updates; + /** which neighbor will become the parent of c */ EX twalker get_parent_dir(twalker& cw) { @@ -1141,7 +1143,8 @@ int get_side(twalker what) { handle_distance_errors(); steps++; if(steps > max_getside) { debuglist = {what, to_what, wl, wr}; - throw rulegen_failure("xsidefreeze"); + if(parent_updates) throw rulegen_retry("xsidefreeze"); + else throw rulegen_failure("xsidefreeze"); } bool gl = wl.at->dist <= wr.at->dist; bool gr = wl.at->dist >= wr.at->dist; @@ -1695,6 +1698,7 @@ EX void rules_iteration() { while(c) { c->code = MYSTERY; c = c->next; } clear_codes(); + parent_updates = 0; cq = important;