Lines Matching refs:fp
2699 // fp The top frame pointer when called. At return, a new
2708 inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int64_t savePatIdx, UErrorCode &status) {
2720 return fp;
2722 fp = (REStackFrame *)(newFP - fFrameSize); // in case of realloc of stack.
2725 int64_t *source = (int64_t *)fp;
2738 fp->fPatIdx = savePatIdx;
2802 REStackFrame *fp = resetStack();
2804 fp->fPatIdx = 0;
2805 fp->fInputIdx = startIdx;
2824 op = (int32_t)pat[fp->fPatIdx];
2829 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2830 printf("inputIdx=%d inputChar=%x sp=%3d activeLimit=%d ", fp->fInputIdx,
2831 UTEXT_CURRENT32(fInputText), (int64_t *)fp-fStack->getBuffer(), fActiveLimit);
2832 fPattern->dumpOp(fp->fPatIdx);
2835 fp->fPatIdx++;
2848 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2853 if (fp->fInputIdx < fActiveLimit) {
2854 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2857 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2863 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2874 op = (int32_t)pat[fp->fPatIdx]; // Fetch the second operand
2875 fp->fPatIdx++;
2883 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2902 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2904 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2911 fp = StateSave(fp, opValue, status);
2918 if (toEnd && fp->fInputIdx != fActiveLimit) {
2920 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2927 // fp->fExtra[opValue] - The start of a completed capture group
2933 fp->fExtra[opValue+2] = fp->fInputIdx;
2939 U_ASSERT(fp->fExtra[opValue+2] >= 0); // Start pos for this group must be set.
2940 fp->fExtra[opValue] = fp->fExtra[opValue+2]; // Tentative start becomes real.
2941 fp->fExtra[opValue+1] = fp->fInputIdx; // End position
2942 U_ASSERT(fp->fExtra[opValue] <= fp->fExtra[opValue+1]);
2949 if (fp->fInputIdx >= fAnchorLimit) {
2956 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2964 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && ((void)UTEXT_PREVIOUS32(fInputText), UTEXT_PREVIOUS32(fInputText))==0x0d)) {
2981 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2987 if (fp->fInputIdx >= fAnchorLimit) {
2993 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3004 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3010 if (fp->fInputIdx >= fAnchorLimit) {
3018 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3024 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && UTEXT_PREVIOUS32(fInputText)==0x0d)) {
3029 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3036 if (fp->fInputIdx >= fAnchorLimit) {
3044 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3046 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3053 if (fp->fInputIdx != fAnchorStart) {
3054 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3061 if (fp->fInputIdx == fAnchorStart) {
3067 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3069 if ((fp->fInputIdx < fAnchorLimit) &&
3076 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3083 U_ASSERT(fp->fInputIdx >= fAnchorStart);
3084 if (fp->fInputIdx <= fAnchorStart) {
3089 U_ASSERT(fp->fInputIdx <= fAnchorLimit);
3090 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3094 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3101 UBool success = isWordBoundary(fp->fInputIdx);
3104 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3112 UBool success = isUWordBoundary(fp->fInputIdx);
3115 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3123 if (fp->fInputIdx >= fActiveLimit) {
3125 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3129 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3136 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3138 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3145 if (!((fMatch && fp->fInputIdx==fMatchEnd) || (fMatch==FALSE && fp->fInputIdx==fActiveStart))) {
3146 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3158 if (fp->fInputIdx >= fActiveLimit) {
3160 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3164 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3170 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3184 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3186 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3192 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3196 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3198 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3202 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3206 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3208 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3211 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3217 if (fp->fInputIdx >= fActiveLimit) {
3225 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3232 if (c == 0x0d && fp->fInputIdx < fActiveLimit && UTEXT_CURRENT32(fInputText) == 0x0a) {
3234 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3238 if (fp->fInputIdx >= fActiveLimit) {
3248 if (fp->fInputIdx < fAnchorLimit) {
3249 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3265 if (fp->fInputIdx >= fActiveLimit) {
3267 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3275 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3289 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3292 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3302 if (fp->fInputIdx >= fActiveLimit) {
3304 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3310 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3316 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3322 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3327 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3333 if (fp->fInputIdx >= fActiveLimit) {
3335 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3338 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3346 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3353 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3359 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3367 if (fp->fInputIdx >= fActiveLimit) {
3370 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3374 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3381 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3384 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3392 if (fp->fInputIdx >= fActiveLimit) {
3395 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3399 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3405 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3406 if (c==0x0d && fp->fInputIdx < fActiveLimit) {
3411 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3422 if (fp->fInputIdx >= fActiveLimit) {
3425 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3429 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3435 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3437 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3444 fp->fPatIdx = opValue;
3453 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
3454 fp->fPatIdx = opValue; // Then JMP.
3468 int64_t prevInputIdx = fp->fExtra[frameLoc];
3469 U_ASSERT(prevInputIdx <= fp->fInputIdx);
3470 if (prevInputIdx < fp->fInputIdx) {
3472 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
3473 fp->fPatIdx = opValue;
3474 fp->fExtra[frameLoc] = fp->fInputIdx;
3484 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
3488 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3489 fp->fPatIdx += 3;
3495 U_ASSERT(loopLoc>fp->fPatIdx);
3498 fp = StateSave(fp, loopLoc+1, status);
3501 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3508 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
3511 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
3526 fp = StateSave(fp, fp->fPatIdx, status);
3528 fp->fPatIdx = opValue + 4; // Loop back.
3536 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
3540 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3541 fp->fPatIdx += 3;
3547 U_ASSERT(loopLoc>fp->fPatIdx);
3551 fp = StateSave(fp, fp->fPatIdx, status);
3553 fp->fPatIdx = loopLoc+1; // Continue with stuff after repeated block
3561 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
3564 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
3586 fp->fPatIdx = opValue + 4; // Loop back.
3592 fp = StateSave(fp, opValue + 4, status);
3608 if (newFP == (int64_t *)fp) {
3613 newFP[i] = ((int64_t *)fp)[i];
3615 fp = (REStackFrame *)newFP;
3623 int64_t groupStartIdx = fp->fExtra[opValue];
3624 int64_t groupEndIdx = fp->fExtra[opValue+1];
3628 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
3632 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3658 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3660 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3670 int64_t groupStartIdx = fp->fExtra[opValue];
3671 int64_t groupEndIdx = fp->fExtra[opValue+1];
3675 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
3679 utext_setNativeIndex(fInputText, fp->fInputIdx);
3714 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3716 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3725 fp->fExtra[opValue] = fp->fInputIdx;
3731 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3732 fp->fPatIdx += 1;
3735 int64_t savedInputIdx = fp->fExtra[dataLoc];
3736 U_ASSERT(savedInputIdx <= fp->fInputIdx);
3737 if (savedInputIdx < fp->fInputIdx) {
3738 fp->fPatIdx = opValue; // JMP
3740 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no progress in loop.
3751 fData[opValue+1] = fp->fInputIdx;
3772 newFP[i] = ((int64_t *)fp)[i];
3774 fp = (REStackFrame *)newFP;
3777 fp->fInputIdx = fData[opValue+1];
3790 if (fp->fInputIdx < fActiveLimit) {
3791 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3795 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3802 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3815 op = (int32_t)pat[fp->fPatIdx];
3816 fp->fPatIdx++;
3827 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3847 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3849 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3862 fData[opValue+1] = fp->fInputIdx;
3868 fActiveLimit = fp->fInputIdx;
3880 int32_t minML = (int32_t)pat[fp->fPatIdx++];
3881 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
3890 *lbStartIdx = fp->fInputIdx - minML;
3903 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
3907 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3917 fp = StateSave(fp, fp->fPatIdx-3, status);
3918 fp->fInputIdx = *lbStartIdx;
3926 if (fp->fInputIdx != fActiveLimit) {
3932 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3953 int32_t minML = (int32_t)pat[fp->fPatIdx++];
3954 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
3955 int32_t continueLoc = (int32_t)pat[fp->fPatIdx++];
3959 U_ASSERT(continueLoc > fp->fPatIdx);
3966 *lbStartIdx = fp->fInputIdx - minML;
3979 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
3987 fp->fPatIdx = continueLoc;
3993 fp = StateSave(fp, fp->fPatIdx-4, status);
3994 fp->fInputIdx = *lbStartIdx;
4002 if (fp->fInputIdx != fActiveLimit) {
4008 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4032 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4049 int64_t ix = fp->fInputIdx;
4071 if (ix == fp->fInputIdx) {
4072 fp->fPatIdx++; // skip the URX_LOOP_C op.
4079 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
4083 fp->fExtra[stackLoc] = fp->fInputIdx;
4084 fp->fInputIdx = ix;
4089 fp = StateSave(fp, fp->fPatIdx, status);
4090 fp->fPatIdx++;
4110 ix = fp->fInputIdx;
4132 if (ix == fp->fInputIdx) {
4133 fp->fPatIdx++; // skip the URX_LOOP_C op.
4140 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
4144 fp->fExtra[stackLoc] = fp->fInputIdx;
4145 fp->fInputIdx = ix;
4150 fp = StateSave(fp, fp->fPatIdx, status);
4151 fp->fPatIdx++;
4159 backSearchIndex = fp->fExtra[opValue];
4160 U_ASSERT(backSearchIndex <= fp->fInputIdx);
4161 if (backSearchIndex == fp->fInputIdx) {
4172 U_ASSERT(fp->fInputIdx > 0);
4173 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
4175 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
4179 fp->fInputIdx > backSearchIndex &&
4181 int32_t prevOp = (int32_t)pat[fp->fPatIdx-2];
4184 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
4189 fp = StateSave(fp, fp->fPatIdx-1, status);
4212 fMatchEnd = fp->fInputIdx;
4224 fFrame = fp; // The active stack frame when the engine stopped.
4296 REStackFrame *fp = resetStack();
4298 fp->fPatIdx = 0;
4299 fp->fInputIdx = startIdx;
4318 op = (int32_t)pat[fp->fPatIdx];
4323 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
4324 printf("inputIdx=%d inputChar=%x sp=%3d activeLimit=%d ", fp->fInputIdx,
4325 UTEXT_CURRENT32(fInputText), (int64_t *)fp-fStack->getBuffer(), fActiveLimit);
4326 fPattern->dumpOp(fp->fPatIdx);
4329 fp->fPatIdx++;
4342 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4347 if (fp->fInputIdx < fActiveLimit) {
4349 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4356 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4368 op = (int32_t)pat[fp->fPatIdx]; // Fetch the second operand
4369 fp->fPatIdx++;
4375 const UChar * pInp = inputBuf + fp->fInputIdx;
4393 fp->fInputIdx += stringLen;
4395 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4402 fp = StateSave(fp, opValue, status);
4409 if (toEnd && fp->fInputIdx != fActiveLimit) {
4411 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4418 // fp->fExtra[opValue] - The start of a completed capture group
4424 fp->fExtra[opValue+2] = fp->fInputIdx;
4430 U_ASSERT(fp->fExtra[opValue+2] >= 0); // Start pos for this group must be set.
4431 fp->fExtra[opValue] = fp->fExtra[opValue+2]; // Tentative start becomes real.
4432 fp->fExtra[opValue+1] = fp->fInputIdx; // End position
4433 U_ASSERT(fp->fExtra[opValue] <= fp->fExtra[opValue+1]);
4439 if (fp->fInputIdx < fAnchorLimit-2) {
4442 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4445 if (fp->fInputIdx >= fAnchorLimit) {
4454 if (fp->fInputIdx == fAnchorLimit-1) {
4456 U16_GET(inputBuf, fAnchorStart, fp->fInputIdx, fAnchorLimit, c);
4459 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && inputBuf[fp->fInputIdx-1]==0x0d)) {
4466 } else if (fp->fInputIdx == fAnchorLimit-2 &&
4467 inputBuf[fp->fInputIdx]==0x0d && inputBuf[fp->fInputIdx+1]==0x0a) {
4473 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4479 if (fp->fInputIdx >= fAnchorLimit-1) {
4481 if (fp->fInputIdx == fAnchorLimit-1) {
4483 if (inputBuf[fp->fInputIdx] == 0x0a) {
4497 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4503 if (fp->fInputIdx >= fAnchorLimit) {
4511 UChar32 c = inputBuf[fp->fInputIdx];
4516 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && inputBuf[fp->fInputIdx-1]==0x0d)) {
4521 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4528 if (fp->fInputIdx >= fAnchorLimit) {
4536 if (inputBuf[fp->fInputIdx] != 0x0a) {
4537 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4544 if (fp->fInputIdx != fAnchorStart) {
4545 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4552 if (fp->fInputIdx == fAnchorStart) {
4558 UChar c = inputBuf[fp->fInputIdx - 1];
4559 if ((fp->fInputIdx < fAnchorLimit) &&
4566 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4573 U_ASSERT(fp->fInputIdx >= fAnchorStart);
4574 if (fp->fInputIdx <= fAnchorStart) {
4579 U_ASSERT(fp->fInputIdx <= fAnchorLimit);
4580 UChar c = inputBuf[fp->fInputIdx - 1];
4583 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4590 UBool success = isChunkWordBoundary((int32_t)fp->fInputIdx);
4593 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4601 UBool success = isUWordBoundary(fp->fInputIdx);
4604 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4612 if (fp->fInputIdx >= fActiveLimit) {
4614 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4619 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4624 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4631 if (!((fMatch && fp->fInputIdx==fMatchEnd) || (fMatch==FALSE && fp->fInputIdx==fActiveStart))) {
4632 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4644 if (fp->fInputIdx >= fActiveLimit) {
4646 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4653 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4667 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4668 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4673 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4677 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4678 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4681 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4685 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4686 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4688 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4694 if (fp->fInputIdx >= fActiveLimit) {
4697 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4699 U16_BACK_1(inputBuf, 0, fp->fInputIdx);
4708 if (c == 0x0d && fp->fInputIdx < fActiveLimit && inputBuf[fp->fInputIdx] == 0x0a) {
4709 fp->fInputIdx++;
4713 if (fp->fInputIdx >= fActiveLimit) {
4723 if (fp->fInputIdx < fAnchorLimit) {
4724 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4740 if (fp->fInputIdx >= fActiveLimit) {
4742 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4751 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4764 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4774 if (fp->fInputIdx >= fActiveLimit) {
4776 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4783 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4795 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4802 if (fp->fInputIdx >= fActiveLimit) {
4804 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4812 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4828 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4836 if (fp->fInputIdx >= fActiveLimit) {
4839 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4845 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4849 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4859 if (fp->fInputIdx >= fActiveLimit) {
4862 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4869 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4870 if (c==0x0d && fp->fInputIdx < fActiveLimit) {
4872 if (inputBuf[fp->fInputIdx] == 0x0a) {
4873 U16_FWD_1(inputBuf, fp->fInputIdx, fActiveLimit);
4884 if (fp->fInputIdx >= fActiveLimit) {
4887 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4893 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4896 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4903 fp->fPatIdx = opValue;
4912 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
4913 fp->fPatIdx = opValue; // Then JMP.
4927 int32_t prevInputIdx = (int32_t)fp->fExtra[frameLoc];
4928 U_ASSERT(prevInputIdx <= fp->fInputIdx);
4929 if (prevInputIdx < fp->fInputIdx) {
4931 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
4932 fp->fPatIdx = opValue;
4933 fp->fExtra[frameLoc] = fp->fInputIdx;
4943 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
4947 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
4948 fp->fPatIdx += 3;
4954 U_ASSERT(loopLoc>fp->fPatIdx);
4957 fp = StateSave(fp, loopLoc+1, status);
4960 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4967 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
4970 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
4985 fp = StateSave(fp, fp->fPatIdx, status);
4987 fp->fPatIdx = opValue + 4; // Loop back.
4995 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
4999 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
5000 fp->fPatIdx += 3;
5006 U_ASSERT(loopLoc>fp->fPatIdx);
5010 fp = StateSave(fp, fp->fPatIdx, status);
5012 fp->fPatIdx = loopLoc+1; // Continue with stuff after repeated block
5020 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
5023 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
5045 fp->fPatIdx = opValue + 4; // Loop back.
5051 fp = StateSave(fp, opValue + 4, status);
5067 if (newFP == (int64_t *)fp) {
5072 newFP[i] = ((int64_t *)fp)[i];
5074 fp = (REStackFrame *)newFP;
5082 int64_t groupStartIdx = fp->fExtra[opValue];
5083 int64_t groupEndIdx = fp->fExtra[opValue+1];
5085 int64_t inputIndex = fp->fInputIdx;
5088 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
5104 fp->fInputIdx = inputIndex;
5106 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5114 int64_t groupStartIdx = fp->fExtra[opValue];
5115 int64_t groupEndIdx = fp->fExtra[opValue+1];
5119 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
5123 CaseFoldingUCharIterator inputItr(inputBuf, fp->fInputIdx, fActiveLimit);
5156 fp->fInputIdx = inputItr.getIndex();
5158 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5166 fp->fExtra[opValue] = fp->fInputIdx;
5172 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
5173 fp->fPatIdx += 1;
5176 int32_t savedInputIdx = (int32_t)fp->fExtra[dataLoc];
5177 fp->fInputIdx);
5178 if (savedInputIdx < fp->fInputIdx) {
5179 fp->fPatIdx = opValue; // JMP
5181 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no progress in loop.
5192 fData[opValue+1] = fp->fInputIdx;
5213 newFP[i] = ((int64_t *)fp)[i];
5215 fp = (REStackFrame *)newFP;
5218 fp->fInputIdx = fData[opValue+1];
5228 if (fp->fInputIdx < fActiveLimit) {
5230 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5237 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5248 op = (int32_t)pat[fp->fPatIdx];
5249 fp->fPatIdx++;
5259 CaseFoldingUCharIterator inputIterator(inputBuf, fp->fInputIdx, fActiveLimit);
5276 fp->fInputIdx = inputIterator.getIndex();
5278 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5290 fData[opValue+1] = fp->fInputIdx;
5296 fActiveLimit = fp->fInputIdx;
5308 int32_t minML = (int32_t)pat[fp->fPatIdx++];
5309 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
5318 *lbStartIdx = fp->fInputIdx - minML;
5329 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
5333 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5343 fp = StateSave(fp, fp->fPatIdx-3, status);
5344 fp->fInputIdx = *lbStartIdx;
5352 if (fp->fInputIdx != fActiveLimit) {
5358 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5379 int32_t minML = (int32_t)pat[fp->fPatIdx++];
5380 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
5381 int32_t continueLoc = (int32_t)pat[fp->fPatIdx++];
5385 U_ASSERT(continueLoc > fp->fPatIdx);
5392 *lbStartIdx = fp->fInputIdx - minML;
5403 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
5411 fp->fPatIdx = continueLoc;
5417 fp = StateSave(fp, fp->fPatIdx-4, status);
5418 fp->fInputIdx = *lbStartIdx;
5426 if (fp->fInputIdx != fActiveLimit) {
5432 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5456 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5473 int32_t ix = (int32_t)fp->fInputIdx;
5496 if (ix == fp->fInputIdx) {
5497 fp->fPatIdx++; // skip the URX_LOOP_C op.
5504 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
5508 fp->fExtra[stackLoc] = fp->fInputIdx;
5509 fp->fInputIdx = ix;
5514 fp = StateSave(fp, fp->fPatIdx, status);
5515 fp->fPatIdx++;
5535 ix = (int32_t)fp->fInputIdx;
5558 if (ix == fp->fInputIdx) {
5559 fp->fPatIdx++; // skip the URX_LOOP_C op.
5566 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
5570 fp->fExtra[stackLoc] = fp->fInputIdx;
5571 fp->fInputIdx = ix;
5576 fp = StateSave(fp, fp->fPatIdx, status);
5577 fp->fPatIdx++;
5585 backSearchIndex = (int32_t)fp->fExtra[opValue];
5586 U_ASSERT(backSearchIndex <= fp->fInputIdx);
5587 if (backSearchIndex == fp->fInputIdx) {
5598 U_ASSERT(fp->fInputIdx > 0);
5600 U16_PREV(inputBuf, 0, fp->fInputIdx, prevC); // !!!: should this 0 be one of f*Limit?
5603 fp->fInputIdx > backSearchIndex &&
5604 inputBuf[fp->fInputIdx-1] == 0x0d) {
5605 int32_t prevOp = (int32_t)pat[fp->fPatIdx-2];
5608 U16_BACK_1(inputBuf, 0, fp->fInputIdx);
5613 fp = StateSave(fp, fp->fPatIdx-1, status);
5636 fMatchEnd = fp->fInputIdx;
5648 fFrame = fp; // The active stack frame when the engine stopped.