static RegExpRunStatus ExecuteRegExpImpl(JSContext *cx, RegExpStatics *res, RegExpShared &re, HandleLinearString input, size_t *lastIndex, MatchPairs &matches) { RegExpRunStatus status = re.execute(cx, input, lastIndex, matches); if (status == RegExpRunStatus_Success && res) { if (!res->updateFromMatchPairs(cx, input, matches)) return RegExpRunStatus_Error; } return status; }
static RegExpRunStatus ExecuteRegExpImpl(JSContext* cx, RegExpStatics* res, RegExpShared& re, HandleLinearString input, size_t searchIndex, MatchPairs* matches) { RegExpRunStatus status = re.execute(cx, input, searchIndex, matches); if (status == RegExpRunStatus_Success && res) { if (matches) { if (!res->updateFromMatchPairs(cx, input, *matches)) return RegExpRunStatus_Error; } else { res->updateLazily(cx, input, &re, searchIndex); } } return status; }
static RegExpRunStatus ExecuteRegExpImpl(JSContext *cx, RegExpStatics *res, RegExpShared &re, Handle<JSLinearString*> input, const jschar *chars, size_t length, size_t *lastIndex, MatchConduit &matches) { RegExpRunStatus status; /* Switch between MatchOnly and IncludeSubpatterns modes. */ if (matches.isPair) { size_t lastIndex_orig = *lastIndex; /* Only one MatchPair slot provided: execute short-circuiting regexp. */ status = re.executeMatchOnly(cx, chars, length, lastIndex, *matches.u.pair); if (status == RegExpRunStatus_Success && res) res->updateLazily(cx, input, &re, lastIndex_orig); } else { /* Vector of MatchPairs provided: execute full regexp. */ status = re.execute(cx, chars, length, lastIndex, *matches.u.pairs); if (status == RegExpRunStatus_Success && res) res->updateFromMatchPairs(cx, input, *matches.u.pairs); } return status; }