diff --git a/src/rose/eod.c b/src/rose/eod.c index 249e7a9c..dd471c97 100644 --- a/src/rose/eod.c +++ b/src/rose/eod.c @@ -55,19 +55,32 @@ void initContext(const struct RoseEngine *t, u64a offset, fatbit_clear(scratch->aqa); } -static really_inline -void roseEodExec_i(const struct RoseEngine *t, u64a offset, - struct hs_scratch *scratch, UNUSED const char is_streaming) { - assert(t); - assert(scratch->core_info.buf || scratch->core_info.hbuf); - assert(!scratch->core_info.buf || !scratch->core_info.hbuf); - assert(!can_stop_matching(scratch)); +void roseStreamEodExec(const struct RoseEngine *t, u64a offset, + struct hs_scratch *scratch) { + assert(scratch); + assert(t->requiresEodCheck); + DEBUG_PRINTF("ci buf %p/%zu his %p/%zu\n", scratch->core_info.buf, + scratch->core_info.len, scratch->core_info.hbuf, + scratch->core_info.hlen); + + // We should not have been called if we've already been told to terminate + // matching. + assert(!told_to_stop_matching(scratch)); + + if (t->maxBiAnchoredWidth != ROSE_BOUND_INF + && offset > t->maxBiAnchoredWidth) { + DEBUG_PRINTF("bailing, we are beyond max width\n"); + /* also some of the history/state may be stale */ + return; + } if (!t->eodProgramOffset) { DEBUG_PRINTF("no eod program\n"); return; } + initContext(t, offset, scratch); + DEBUG_PRINTF("running eod program at %u\n", t->eodProgramOffset); // There should be no pending delayed literals. @@ -85,26 +98,3 @@ void roseEodExec_i(const struct RoseEngine *t, u64a offset, roseRunProgram(t, scratch, t->eodProgramOffset, som, offset, match_len, in_anchored, in_catchup, from_mpv, skip_mpv_catchup); } - -void roseEodExec(const struct RoseEngine *t, u64a offset, - struct hs_scratch *scratch) { - assert(scratch); - assert(t->requiresEodCheck); - DEBUG_PRINTF("ci buf %p/%zu his %p/%zu\n", scratch->core_info.buf, - scratch->core_info.len, scratch->core_info.hbuf, - scratch->core_info.hlen); - - // We should not have been called if we've already been told to terminate - // matching. - assert(!told_to_stop_matching(scratch)); - - if (t->maxBiAnchoredWidth != ROSE_BOUND_INF - && offset > t->maxBiAnchoredWidth) { - DEBUG_PRINTF("bailing, we are beyond max width\n"); - /* also some of the history/state may be stale */ - return; - } - - initContext(t, offset, scratch); - roseEodExec_i(t, offset, scratch, 1); -} diff --git a/src/rose/rose.h b/src/rose/rose.h index e3537774..ca8bf353 100644 --- a/src/rose/rose.h +++ b/src/rose/rose.h @@ -43,8 +43,8 @@ void roseBlockExec(const struct RoseEngine *t, struct hs_scratch *scratch); /* assumes core_info in scratch has been init to point to data */ void roseStreamExec(const struct RoseEngine *t, struct hs_scratch *scratch); -void roseEodExec(const struct RoseEngine *t, u64a offset, - struct hs_scratch *scratch); +void roseStreamEodExec(const struct RoseEngine *t, u64a offset, + struct hs_scratch *scratch); hwlmcb_rv_t rosePureLiteralCallback(size_t start, size_t end, u32 id, void *context); diff --git a/src/runtime.c b/src/runtime.c index 95f21d84..7da41d29 100644 --- a/src/runtime.c +++ b/src/runtime.c @@ -532,7 +532,7 @@ void rawEodExec(hs_stream_t *id, hs_scratch_t *scratch) { return; } - roseEodExec(rose, id->offset, scratch); + roseStreamEodExec(rose, id->offset, scratch); } static never_inline