mirror of
https://github.com/mawww/kakoune.git
synced 2024-11-29 10:02:57 +03:00
Fix order of evaluation issue when compiling regex alternations
The previous implementation was relying on the left hand side of the assignement's side effects to be sequenced before the right hand side evaluation (so --split_pos was expected to have taken place) This is actually counter to C++17 which guarantees evaluation of the right hand side of the assignement first. For some reason this is not the case with GCC on linux.
This commit is contained in:
parent
cbdd200e73
commit
80fcfebca8
@ -753,7 +753,10 @@ private:
|
|||||||
{
|
{
|
||||||
auto node = compile_node<direction>(child);
|
auto node = compile_node<direction>(child);
|
||||||
if (child != index+1)
|
if (child != index+1)
|
||||||
m_program.instructions[--split_pos].param.split = CompiledRegex::Param::Split{.offset = offset(node, split_pos), .prioritize_parent = true};
|
{
|
||||||
|
--split_pos;
|
||||||
|
m_program.instructions[split_pos].param.split = {.offset = offset(node, split_pos), .prioritize_parent = true};
|
||||||
|
}
|
||||||
if (get_node(child).children_end != end)
|
if (get_node(child).children_end != end)
|
||||||
{
|
{
|
||||||
auto jump = push_inst(CompiledRegex::Jump);
|
auto jump = push_inst(CompiledRegex::Jump);
|
||||||
|
Loading…
Reference in New Issue
Block a user