From c44525c27626e04194bf30172dd82e66003e5f3d Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sun, 8 Mar 2020 14:20:48 +0000 Subject: [PATCH] fixed the execution behavior of double patterned action block(e.g. /a/,/b/) --- qse/lib/awk/run.c | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/qse/lib/awk/run.c b/qse/lib/awk/run.c index 6436d1d3..4ee949a9 100644 --- a/qse/lib/awk/run.c +++ b/qse/lib/awk/run.c @@ -1828,39 +1828,22 @@ static int run_pblock (qse_awk_rtx_t* rtx, qse_awk_chain_t* cha, qse_size_t bno) v1 = eval_expression(rtx, ptn); if (!v1) return -1; qse_awk_rtx_refupval (rtx, v1); - - if (qse_awk_rtx_valtobool(rtx, v1)) - { - rtx->active_block = blk; - if (run_block(rtx, blk) <= -1) - { - qse_awk_rtx_refdownval (rtx, v1); - return -1; - } - - rtx->pattern_range_state[bno] = 1; - } - + rtx->pattern_range_state[bno] = qse_awk_rtx_valtobool(rtx, v1); qse_awk_rtx_refdownval (rtx, v1); } - else if (rtx->pattern_range_state[bno] == 1) + + if (rtx->pattern_range_state[bno] == 1) { qse_awk_val_t* v2; v2 = eval_expression(rtx, ptn->next); if (!v2) return -1; qse_awk_rtx_refupval (rtx, v2); + rtx->pattern_range_state[bno] = !qse_awk_rtx_valtobool(rtx, v2); + qse_awk_rtx_refdownval (rtx, v2); rtx->active_block = blk; - if (run_block(rtx, blk) <= -1) - { - qse_awk_rtx_refdownval(rtx, v2); - return -1; - } - - if (qse_awk_rtx_valtobool(rtx, v2)) rtx->pattern_range_state[bno] = 0; - - qse_awk_rtx_refdownval (rtx, v2); + if (run_block(rtx, blk) <= -1) return -1; } } }