diff --git a/arbitrile.cpp b/arbitrile.cpp index 94d0f179..0ba5e9f2 100644 --- a/arbitrile.cpp +++ b/arbitrile.cpp @@ -513,6 +513,10 @@ EX void load(const string& fname, bool after_sliding IS(false)) { else if(ep.eat("treestate(")) { rulegen::parse_treestate(c, ep); } + else if(ep.eat("first_treestate(")) { + rulegen::rule_root = ep.iparse(); + ep.force_eat(")"); + } else if(ep.eat("yendor_backsteps(")) { c.yendor_backsteps = ep.iparse(); ep.force_eat(")"); diff --git a/rulegen.cpp b/rulegen.cpp index aa02fe94..c327b5b4 100644 --- a/rulegen.cpp +++ b/rulegen.cpp @@ -1620,10 +1620,8 @@ EX void parse_treestate(arb::arbi_tiling& c, exp_parser& ep) { } EX void verify_parsed_treestates() { - println(hlog, arb::current.shapes[0].connections); - println(hlog, arb::current.shapes[1].connections); - println(hlog, arb::current.shapes[0].stretch_shear); - for(auto& ts: treestates) println(hlog, ts.rules); + if(rule_root < 0 || rule_root >= isize(treestates)) + throw hr_parse_exception("undefined treestate as root"); for(auto& ts: treestates) for(auto& r: ts.rules) { if(r < 0 && !among(r, DIR_PARENT, DIR_LEFT, DIR_RIGHT)) throw hr_parse_exception("negative number in treestates");