From 0329ed83267fa6898270648eac91b47901428971 Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Thu, 15 Oct 2026 09:58:31 +0300 Subject: [PATCH] fix range selection during bracket removal scanning --- src/syntaxer.cpp | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/syntaxer.cpp b/src/syntaxer.cpp index 8da1b5f..a4ad568 100644 --- a/src/syntaxer.cpp +++ b/src/syntaxer.cpp @@ -539,6 +539,28 @@ static void find_top_prio_op_range(const std::vector& mp, int& start, int& } } +// find operation ranges that are of selected priority (target_prio) +// accounting for future token convolution into compound values +static void find_select_prio_op_ranges_after_conv(const std::vector& mp, std::vector& ranges, int target_prio) +{ + for (int i = 0, l = mp.size(), recording_range = 0; i < l; i++) + { + if (mp[i] == target_prio && !recording_range) + { + recording_range = 1; + ranges.emplace_back(i, i); + } + else if (mp[i] == target_prio && recording_range) + { + ranges.back().finish = i; + } + else if (mp[i] < target_prio && recording_range) + { + recording_range = 0; + } + } +} + static void find_select_prio_op_ranges(const std::vector& mp, std::vector& ranges, int target_prio) { for (int i = 0, l = mp.size(), prio = 0, recording_range = 0; i < l; i++) @@ -919,7 +941,7 @@ static void remove_extra_brackets(std::vector& tv) create_prios_vector(tv, mp); std::vector ranges; - find_select_prio_op_ranges(mp, ranges, current_prio); + find_select_prio_op_ranges_after_conv(mp, ranges, current_prio); for (int r_no = ranges.size() - 1; r_no >= 0; r_no--) { @@ -927,7 +949,7 @@ static void remove_extra_brackets(std::vector& tv) create_prios_vector(tv, mp); ranges.clear(); - find_select_prio_op_ranges(mp, ranges, current_prio); + find_select_prio_op_ranges_after_conv(mp, ranges, current_prio); const Range &r = ranges[r_no]; int max_child_rank = max_rank(tv, mp, r, current_prio);