diff --git a/src/nfa/nfa_api_queue.h b/src/nfa/nfa_api_queue.h index d8079292..75c15cce 100644 --- a/src/nfa/nfa_api_queue.h +++ b/src/nfa/nfa_api_queue.h @@ -196,6 +196,14 @@ static really_inline s64a q_cur_loc(const struct mq *q) { return q->items[q->cur].location; } +/** \brief Returns the type of the last event in the queue. */ +static really_inline u32 q_last_type(const struct mq *q) { + assert(q->cur < q->end); + assert(q->end > 0); + assert(q->end <= MAX_MQE_LEN); + return q->items[q->end - 1].type; +} + /** \brief Returns the location (relative to the beginning of the current data * buffer) of the last event in the queue. */ static really_inline s64a q_last_loc(const struct mq *q) { diff --git a/src/rose/catchup.c b/src/rose/catchup.c index b9fcd784..77b12b49 100644 --- a/src/rose/catchup.c +++ b/src/rose/catchup.c @@ -379,7 +379,7 @@ void ensureEnd(struct mq *q, UNUSED u32 qi, s64a final_loc) { DEBUG_PRINTF("ensure MQE_END %lld for queue %u\n", final_loc, qi); if (final_loc >= q_last_loc(q)) { /* TODO: ensure situation does not arise */ - assert(q->items[q->end - 1].type != MQE_END); + assert(q_last_type(q) != MQE_END); pushQueueNoMerge(q, MQE_END, final_loc); } } diff --git a/src/rose/match.c b/src/rose/match.c index 32224c24..be9bc35e 100644 --- a/src/rose/match.c +++ b/src/rose/match.c @@ -758,7 +758,7 @@ found_miracle: q_skip_forward_to(q, miracle_loc); - if (q->items[q->end - 1].type == MQE_START) { + if (q_last_type(q) == MQE_START) { DEBUG_PRINTF("miracle caused infix to die\n"); return 0; } @@ -853,7 +853,7 @@ char roseTestLeftfix(const struct RoseEngine *t, const struct RoseRole *tr, } } - if (q_cur_loc(q) < loc || q->items[q->end - 1].type != MQE_START) { + if (q_cur_loc(q) < loc || q_last_type(q) != MQE_START) { if (left->infix) { if (infixTooOld(q, loc)) { DEBUG_PRINTF("infix %u died of old age\n", ri); diff --git a/src/rose/stream.c b/src/rose/stream.c index aab79a29..b100eeae 100644 --- a/src/rose/stream.c +++ b/src/rose/stream.c @@ -167,7 +167,7 @@ found_miracle: DEBUG_PRINTF("skip q forward, %lld to %lld\n", begin_loc, miracle_loc); q_skip_forward_to(q, miracle_loc); - if (q->items[q->end - 1].type == MQE_START) { + if (q_last_type(q) == MQE_START) { DEBUG_PRINTF("miracle caused infix to die\n"); return MIRACLE_DEAD; }