From 2350428e54ca4408047188d5e874c7c027246112 Mon Sep 17 00:00:00 2001 From: "K.Kosako" Date: Tue, 20 Jun 2017 16:30:21 +0900 Subject: [PATCH] update called_state even if guarded by MARK1 --- src/regcomp.c | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/regcomp.c b/src/regcomp.c index 34c87ef..6e804d6 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -3926,17 +3926,26 @@ setup_called_state_call(Node* node, int state) break; case NODE_ENCLOSURE: - if (! NODE_IS_MARK1(node)) { + { EnclosureNode* en = ENCLOSURE_(node); - NODE_STATUS_ADD(node, NST_MARK1); - - if (en->type == ENCLOSURE_MEMORY) - en->m.called_state |= state; - - setup_called_state_call(NODE_BODY(node), state); - - NODE_STATUS_REMOVE(node, NST_MARK1); + if (en->type == ENCLOSURE_MEMORY) { + if (NODE_IS_MARK1(node)) { + if ((~en->m.called_state & state) != 0) { + en->m.called_state |= state; + setup_called_state_call(NODE_BODY(node), state); + } + } + else { + NODE_STATUS_ADD(node, NST_MARK1); + en->m.called_state |= state; + setup_called_state_call(NODE_BODY(node), state); + NODE_STATUS_REMOVE(node, NST_MARK1); + } + } + else { + setup_called_state_call(NODE_BODY(node), state); + } } break; -- 2.40.0