Home | History | Annotate | Download | only in i18n

Lines Matching defs:fp

2693 //       fp           The top frame pointer when called.  At return, a new 
2702 inline REStackFrame *RegexMatcher::StateSave(REStackFrame *fp, int64_t savePatIdx, UErrorCode &status) {
2714 return fp;
2716 fp = (REStackFrame *)(newFP - fFrameSize); // in case of realloc of stack.
2719 int64_t *source = (int64_t *)fp;
2732 fp->fPatIdx = savePatIdx;
2796 REStackFrame *fp = resetStack();
2798 fp->fPatIdx = 0;
2799 fp->fInputIdx = startIdx;
2818 op = (int32_t)pat[fp->fPatIdx];
2823 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2824 printf("inputIdx=%d inputChar=%x sp=%3d activeLimit=%d ", fp->fInputIdx,
2825 UTEXT_CURRENT32(fInputText), (int64_t *)fp-fStack->getBuffer(), fActiveLimit);
2826 fPattern->dumpOp(fp->fPatIdx);
2829 fp->fPatIdx++;
2842 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2847 if (fp->fInputIdx < fActiveLimit) {
2848 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2851 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2859 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
2861 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
2875 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2876 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2877 if (fp->fInputIdx > backSearchIndex) {
2878 fp = StateSave(fp, fp->fPatIdx, status);
2880 fp->fPatIdx++; // Skip the LOOP_C, we just did that
2887 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2899 op = (int32_t)pat[fp->fPatIdx]; // Fetch the second operand
2900 fp->fPatIdx++;
2909 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2931 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2934 if (fp->fInputIdx > backSearchIndex && fStack->size()) {
2936 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
2938 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
2955 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2956 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
2957 if (fp->fInputIdx > backSearchIndex) {
2958 fp = StateSave(fp, fp->fPatIdx, status);
2960 fp->fPatIdx++; // Skip the LOOP_C, we just did that
2966 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2973 fp = StateSave(fp, opValue, status);
2980 if (toEnd && fp->fInputIdx != fActiveLimit) {
2982 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
2989 // fp->fExtra[opValue] - The start of a completed capture group
2995 fp->fExtra[opValue+2] = fp->fInputIdx;
3001 U_ASSERT(fp->fExtra[opValue+2] >= 0); // Start pos for this group must be set.
3002 fp->fExtra[opValue] = fp->fExtra[opValue+2]; // Tentative start becomes real.
3003 fp->fExtra[opValue+1] = fp->fInputIdx; // End position
3004 U_ASSERT(fp->fExtra[opValue] <= fp->fExtra[opValue+1]);
3011 if (fp->fInputIdx >= fAnchorLimit) {
3018 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3026 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && ((void)UTEXT_PREVIOUS32(fInputText), UTEXT_PREVIOUS32(fInputText))==0x0d)) {
3043 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3049 if (fp->fInputIdx >= fAnchorLimit) {
3055 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3066 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3072 if (fp->fInputIdx >= fAnchorLimit) {
3080 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3086 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && UTEXT_PREVIOUS32(fInputText)==0x0d)) {
3091 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3098 if (fp->fInputIdx >= fAnchorLimit) {
3106 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3108 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3115 if (fp->fInputIdx != fAnchorStart) {
3116 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3123 if (fp->fInputIdx == fAnchorStart) {
3129 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3131 if ((fp->fInputIdx < fAnchorLimit) &&
3138 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3145 U_ASSERT(fp->fInputIdx >= fAnchorStart);
3146 if (fp->fInputIdx <= fAnchorStart) {
3151 U_ASSERT(fp->fInputIdx <= fAnchorLimit);
3152 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3156 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3163 UBool success = isWordBoundary(fp->fInputIdx);
3166 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3174 UBool success = isUWordBoundary(fp->fInputIdx);
3177 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3185 if (fp->fInputIdx >= fActiveLimit) {
3187 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3191 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3198 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3200 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3207 if (!((fMatch && fp->fInputIdx==fMatchEnd) || (fMatch==FALSE && fp->fInputIdx==fActiveStart))) {
3208 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3220 if (fp->fInputIdx >= fActiveLimit) {
3222 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3226 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3232 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3246 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3248 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3254 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3258 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3260 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3264 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3268 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
3270 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3273 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3279 if (fp->fInputIdx >= fActiveLimit) {
3287 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3294 if (c == 0x0d && fp->fInputIdx < fActiveLimit && UTEXT_CURRENT32(fInputText) == 0x0a) {
3296 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3300 if (fp->fInputIdx >= fActiveLimit) {
3310 if (fp->fInputIdx < fAnchorLimit) {
3311 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3327 if (fp->fInputIdx >= fActiveLimit) {
3329 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3337 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3351 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3355 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
3357 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
3379 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3380 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3381 if (fp->fInputIdx > backSearchIndex) {
3382 fp = StateSave(fp, fp->fPatIdx, status);
3384 fp->fPatIdx++; // Skip the LOOP_C, we just did that
3390 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3400 if (fp->fInputIdx >= fActiveLimit) {
3402 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3408 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3414 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3420 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3426 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
3428 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
3452 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3453 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3454 if (fp->fInputIdx > backSearchIndex) {
3455 fp = StateSave(fp, fp->fPatIdx, status);
3457 fp->fPatIdx++; // Skip the LOOP_C, we just did that
3463 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3469 if (fp->fInputIdx >= fActiveLimit) {
3471 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3474 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3482 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3489 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3496 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
3498 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
3522 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3523 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3524 if (fp->fInputIdx > backSearchIndex) {
3525 fp = StateSave(fp, fp->fPatIdx, status);
3527 fp->fPatIdx++; // Skip the LOOP_C, we just did that
3533 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3541 if (fp->fInputIdx >= fActiveLimit) {
3544 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3548 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3555 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3558 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3566 if (fp->fInputIdx >= fActiveLimit) {
3569 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3573 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3579 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3580 if (c==0x0d && fp->fInputIdx < fActiveLimit) {
3585 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3596 if (fp->fInputIdx >= fActiveLimit) {
3599 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3603 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3609 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3611 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3618 fp->fPatIdx = opValue;
3627 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
3628 fp->fPatIdx = opValue; // Then JMP.
3642 int64_t prevInputIdx = fp->fExtra[frameLoc];
3643 U_ASSERT(prevInputIdx <= fp->fInputIdx);
3644 if (prevInputIdx < fp->fInputIdx) {
3646 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
3647 fp->fPatIdx = opValue;
3648 fp->fExtra[frameLoc] = fp->fInputIdx;
3658 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
3662 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3663 fp->fPatIdx += 3;
3669 U_ASSERT(loopLoc>fp->fPatIdx);
3672 fp = StateSave(fp, loopLoc+1, status);
3675 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3682 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
3685 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
3700 fp = StateSave(fp, fp->fPatIdx, status);
3702 fp->fPatIdx = opValue + 4; // Loop back.
3710 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
3714 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3715 fp->fPatIdx += 3;
3721 U_ASSERT(loopLoc>fp->fPatIdx);
3725 fp = StateSave(fp, fp->fPatIdx, status);
3727 fp->fPatIdx = loopLoc+1; // Continue with stuff after repeated block
3735 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
3738 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
3760 fp->fPatIdx = opValue + 4; // Loop back.
3766 fp = StateSave(fp, opValue + 4, status);
3782 if (newFP == (int64_t *)fp) {
3787 newFP[i] = ((int64_t *)fp)[i];
3789 fp = (REStackFrame *)newFP;
3798 int64_t groupStartIdx = fp->fExtra[opValue];
3799 int64_t groupEndIdx = fp->fExtra[opValue+1];
3803 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
3814 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3819 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3821 if (fp->fInputIdx > fActiveLimit) {
3823 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
3825 if (fp->fInputIdx == fActiveLimit) {
3828 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
3836 fp->fExtra[opValue] = fp->fInputIdx;
3842 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
3843 fp->fPatIdx += 1;
3846 int64_t savedInputIdx = fp->fExtra[dataLoc];
3847 U_ASSERT(savedInputIdx <= fp->fInputIdx);
3848 if (savedInputIdx < fp->fInputIdx) {
3849 fp->fPatIdx = opValue; // JMP
3851 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no progress in loop.
3862 fData[opValue+1] = fp->fInputIdx;
3883 newFP[i] = ((int64_t *)fp)[i];
3885 fp = (REStackFrame *)newFP;
3888 fp->fInputIdx = fData[opValue+1];
3898 if (fp->fInputIdx < fActiveLimit) {
3899 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3903 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3911 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
3913 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
3927 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3928 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3929 if (fp->fInputIdx > backSearchIndex) {
3930 fp = StateSave(fp, fp->fPatIdx, status);
3932 fp->fPatIdx++; // Skip the LOOP_C, we just did that
3939 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
3952 op = (int32_t)pat[fp->fPatIdx];
3953 fp->fPatIdx++;
3969 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
3988 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
3992 if (c != U_SENTINEL && (fp->fInputIdx <= fActiveLimit)) {
4007 if (fp->fInputIdx > backSearchIndex && fStack->size()) {
4009 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
4011 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
4041 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4042 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
4043 if (fp->fInputIdx > backSearchIndex) {
4044 fp = StateSave(fp, fp->fPatIdx, status);
4046 fp->fPatIdx++; // Skip the LOOP_C, we just did that
4052 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4065 fData[opValue+1] = fp->fInputIdx;
4071 fActiveLimit = fp->fInputIdx;
4083 int32_t minML = (int32_t)pat[fp->fPatIdx++];
4084 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
4093 *lbStartIdx = fp->fInputIdx - minML;
4106 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
4110 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4120 fp = StateSave(fp, fp->fPatIdx-3, status);
4121 fp->fInputIdx = *lbStartIdx;
4129 if (fp->fInputIdx != fActiveLimit) {
4135 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4156 int32_t minML = (int32_t)pat[fp->fPatIdx++];
4157 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
4158 int32_t continueLoc = (int32_t)pat[fp->fPatIdx++];
4162 U_ASSERT(continueLoc > fp->fPatIdx);
4169 *lbStartIdx = fp->fInputIdx - minML;
4182 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
4190 fp->fPatIdx = continueLoc;
4196 fp = StateSave(fp, fp->fPatIdx-4, status);
4197 fp->fInputIdx = *lbStartIdx;
4205 if (fp->fInputIdx != fActiveLimit) {
4211 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4235 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4252 int64_t ix = fp->fInputIdx;
4274 if (ix == fp->fInputIdx) {
4275 fp->fPatIdx++; // skip the URX_LOOP_C op.
4282 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
4286 fp->fExtra[stackLoc] = fp->fInputIdx;
4288 backSearchIndex = fp
4290 fp->fInputIdx = ix;
4295 fp = StateSave(fp, fp->fPatIdx, status);
4296 fp->fPatIdx++;
4316 ix = fp->fInputIdx;
4338 if (ix == fp->fInputIdx) {
4339 fp->fPatIdx++; // skip the URX_LOOP_C op.
4346 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
4350 fp->fExtra[stackLoc] = fp->fInputIdx;
4352 backSearchIndex = fp->fInputIdx;
4354 fp->fInputIdx = ix;
4359 fp = StateSave(fp, fp->fPatIdx, status);
4360 fp->fPatIdx++;
4368 backSearchIndex = fp->fExtra[opValue];
4369 U_ASSERT(backSearchIndex <= fp->fInputIdx);
4370 if (backSearchIndex == fp->fInputIdx) {
4381 U_ASSERT(fp->fInputIdx > 0);
4382 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
4384 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
4388 fp->fInputIdx > backSearchIndex &&
4390 int32_t prevOp = (int32_t)pat[fp->fPatIdx-2];
4393 fp->fInputIdx = UTEXT_GETNATIVEINDEX(fInputText);
4398 fp = StateSave(fp, fp->fPatIdx-1, status);
4421 fMatchEnd = fp->fInputIdx;
4433 fFrame = fp; // The active stack frame when the engine stopped.
4505 REStackFrame *fp = resetStack();
4507 fp->fPatIdx = 0;
4508 fp->fInputIdx = startIdx;
4527 op = (int32_t)pat[fp->fPatIdx];
4532 UTEXT_SETNATIVEINDEX(fInputText, fp->fInputIdx);
4533 printf("inputIdx=%d inputChar=%x sp=%3d activeLimit=%d ", fp->fInputIdx,
4534 UTEXT_CURRENT32(fInputText), (int64_t *)fp-fStack->getBuffer(), fActiveLimit);
4535 fPattern->dumpOp(fp->fPatIdx);
4538 fp->fPatIdx++;
4551 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4556 if (fp->fInputIdx < fActiveLimit) {
4558 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4567 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
4569 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
4570 int64_t reverseIndex = fp->fInputIdx;
4580 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4581 fp->fInputIdx = reverseIndex;
4582 if (fp->fInputIdx > backSearchIndex) {
4583 fp = StateSave(fp, fp->fPatIdx, status);
4585 fp->fPatIdx++; // Skip the LOOP_C, we just did that
4592 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4604 op = (int32_t)pat[fp->fPatIdx]; // Fetch the second operand
4605 fp->fPatIdx++;
4611 if (fp->fInputIdx + stringLen > fActiveLimit) {
4614 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4618 const UChar * pInp = inputBuf + fp->fInputIdx;
4638 fp->fInputIdx += stringLen;
4641 if (fp->fInputIdx > backSearchIndex && fStack->size()) {
4643 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
4645 int64_t reverseIndex = fp->fInputIdx;
4661 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4662 fp->fInputIdx = reverseIndex;
4663 if (fp->fInputIdx > backSearchIndex) {
4664 fp = StateSave(fp, fp->fPatIdx, status);
4666 fp->fPatIdx++; // Skip the LOOP_C, we just did that
4672 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4679 fp = StateSave(fp, opValue, status);
4686 if (toEnd && fp->fInputIdx != fActiveLimit) {
4688 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4695 // fp->fExtra[opValue] - The start of a completed capture group
4701 fp->fExtra[opValue+2] = fp->fInputIdx;
4707 U_ASSERT(fp->fExtra[opValue+2] >= 0); // Start pos for this group must be set.
4708 fp->fExtra[opValue] = fp->fExtra[opValue+2]; // Tentative start becomes real.
4709 fp->fExtra[opValue+1] = fp->fInputIdx; // End position
4710 U_ASSERT(fp->fExtra[opValue] <= fp->fExtra[opValue+1]);
4716 if (fp->fInputIdx < fAnchorLimit-2) {
4719 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4722 if (fp->fInputIdx >= fAnchorLimit) {
4731 if (fp->fInputIdx == fAnchorLimit-1) {
4733 U16_GET(inputBuf, fAnchorStart, fp->fInputIdx, fAnchorLimit, c);
4736 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && inputBuf[fp->fInputIdx-1]==0x0d)) {
4743 } else if (fp->fInputIdx == fAnchorLimit-2 &&
4744 inputBuf[fp->fInputIdx]==0x0d && inputBuf[fp->fInputIdx+1]==0x0a) {
4750 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4756 if (fp->fInputIdx >= fAnchorLimit-1) {
4758 if (fp->fInputIdx == fAnchorLimit-1) {
4760 if (inputBuf[fp->fInputIdx] == 0x0a) {
4774 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4780 if (fp->fInputIdx >= fAnchorLimit) {
4788 UChar32 c = inputBuf[fp->fInputIdx];
4793 if ( !(c==0x0a && fp->fInputIdx>fAnchorStart && inputBuf[fp->fInputIdx-1]==0x0d)) {
4798 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4805 if (fp->fInputIdx >= fAnchorLimit) {
4813 if (inputBuf[fp->fInputIdx] != 0x0a) {
4814 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4821 if (fp->fInputIdx != fAnchorStart) {
4822 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4829 if (fp->fInputIdx == fAnchorStart) {
4835 UChar c = inputBuf[fp->fInputIdx - 1];
4836 if ((fp->fInputIdx < fAnchorLimit) &&
4843 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4850 U_ASSERT(fp->fInputIdx >= fAnchorStart);
4851 if (fp->fInputIdx <= fAnchorStart) {
4856 U_ASSERT(fp->fInputIdx <= fAnchorLimit);
4857 UChar c = inputBuf[fp->fInputIdx - 1];
4860 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4867 UBool success = isChunkWordBoundary((int32_t)fp->fInputIdx);
4870 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4878 UBool success = isUWordBoundary(fp->fInputIdx);
4881 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4889 if (fp->fInputIdx >= fActiveLimit) {
4891 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4896 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4901 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4908 if (!((fMatch && fp->fInputIdx==fMatchEnd) || (fMatch==FALSE && fp->fInputIdx==fActiveStart))) {
4909 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4921 if (fp->fInputIdx >= fActiveLimit) {
4923 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
4930 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4944 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4945 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4950 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4954 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4955 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4958 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4962 if (fp->fInputIdx >= fActiveLimit) goto GC_Done;
4963 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4965 U16_PREV(inputBuf, 0, fp->fInputIdx, c);
4971 if (fp->fInputIdx >= fActiveLimit) {
4974 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
4976 U16_BACK_1(inputBuf, 0, fp->fInputIdx);
4985 if (c == 0x0d && fp->fInputIdx < fActiveLimit && inputBuf[fp->fInputIdx] == 0x0a) {
4986 fp->fInputIdx++;
4990 if (fp->fInputIdx >= fActiveLimit) {
5000 if (fp->fInputIdx < fAnchorLimit) {
5001 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5017 if (fp->fInputIdx >= fActiveLimit) {
5019 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5028 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5042 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
5044 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
5046 int64_t reverseIndex = fp->fInputIdx;
5065 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5066 fp->fInputIdx = reverseIndex;
5067 if (fp->fInputIdx > backSearchIndex) {
5068 fp = StateSave(fp, fp->fPatIdx, status);
5070 fp->fPatIdx++; // Skip the LOOP_C, we just did that
5076 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5086 if (fp->fInputIdx >= fActiveLimit) {
5088 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5095 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5109 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
5111 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
5113 int64_t reverseIndex = fp->fInputIdx;
5134 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5135 fp->fInputIdx = reverseIndex;
5136 if (fp->fInputIdx > backSearchIndex) {
5137 fp = StateSave(fp, fp->fPatIdx, status);
5139 fp->fPatIdx++; // Skip the LOOP_C, we just did that
5145 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5152 if (fp->fInputIdx >= fActiveLimit) {
5154 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5162 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5179 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
5181 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
5183 int64_t reverseIndex = fp->fInputIdx;
5204 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5205 fp->fInputIdx = reverseIndex;
5206 if (fp->fInputIdx > reverseIndex) {
5207 fp = StateSave(fp, fp->fPatIdx, status);
5209 fp->fPatIdx++; // Skip the LOOP_C, we just did that
5215 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5223 if (fp->fInputIdx >= fActiveLimit) {
5226 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5232 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5236 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5246 if (fp->fInputIdx >= fActiveLimit) {
5249 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5256 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5257 if (c==0x0d && fp->fInputIdx < fActiveLimit) {
5259 if (inputBuf[fp->fInputIdx] == 0x0a) {
5260 U16_FWD_1(inputBuf, fp->fInputIdx, fActiveLimit);
5271 if (fp->fInputIdx >= fActiveLimit) {
5274 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5280 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5283 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5290 fp->fPatIdx = opValue;
5299 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
5300 fp->fPatIdx = opValue; // Then JMP.
5314 int32_t prevInputIdx = (int32_t)fp->fExtra[frameLoc];
5315 U_ASSERT(prevInputIdx <= fp->fInputIdx);
5316 if (prevInputIdx < fp->fInputIdx) {
5318 fp = StateSave(fp, fp->fPatIdx, status); // State save to loc following current
5319 fp->fPatIdx = opValue;
5320 fp->fExtra[frameLoc] = fp->fInputIdx;
5330 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
5334 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
5335 fp->fPatIdx += 3;
5341 U_ASSERT(loopLoc>fp->fPatIdx);
5344 fp = StateSave(fp, loopLoc+1, status);
5347 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5354 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
5357 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
5372 fp = StateSave(fp, fp->fPatIdx, status);
5374 fp->fPatIdx = opValue + 4; // Loop back.
5382 fp->fExtra[opValue] = 0; // Set the loop counter variable to zero
5386 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
5387 fp->fPatIdx += 3;
5393 U_ASSERT(loopLoc>fp->fPatIdx);
5397 fp = StateSave(fp, fp->fPatIdx, status);
5399 fp->fPatIdx = loopLoc+1; // Continue with stuff after repeated block
5407 U_ASSERT(opValue>0 && opValue < fp->fPatIdx-2);
5410 int64_t *pCounter = &fp->fExtra[URX_VAL(initOp)];
5432 fp->fPatIdx = opValue + 4; // Loop back.
5438 fp = StateSave(fp, opValue + 4, status);
5454 if (newFP == (int64_t *)fp) {
5459 newFP[i] = ((int64_t *)fp)[i];
5461 fp = (REStackFrame *)newFP;
5470 int64_t groupStartIdx = fp->fExtra[opValue];
5471 int64_t groupEndIdx = fp->fExtra[opValue+1];
5476 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
5487 if (fp->fInputIdx + len <= fActiveLimit) {
5489 if (u_strncmp(inputBuf+groupStartIdx, inputBuf+fp->fInputIdx, (int32_t)len) == 0) {
5493 if (u_strncasecmp(inputBuf+groupStartIdx, inputBuf+fp->fInputIdx,
5504 fp->fInputIdx += len; // Match. Advance current input position.
5506 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no match.
5514 fp->fExtra[opValue] = fp->fInputIdx;
5520 int32_t instrOperandLoc = (int32_t)fp->fPatIdx;
5521 fp->fPatIdx += 1;
5524 int32_t savedInputIdx = (int32_t)fp->fExtra[dataLoc];
5525 U_ASSERT(savedInputIdx <= fp->fInputIdx);
5526 if (savedInputIdx < fp->fInputIdx) {
5527 fp->fPatIdx = opValue; // JMP
5529 fp = (REStackFrame *)fStack->popFrame(fFrameSize); // FAIL, no progress in loop.
5540 fData[opValue+1] = fp->fInputIdx;
5561 newFP[i] = ((int64_t *)fp)[i];
5563 fp = (REStackFrame *)newFP;
5566 fp->fInputIdx = fData[opValue+1];
5576 if (fp->fInputIdx < fActiveLimit) {
5578 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5587 if (fp->fInputIdx > backSearchIndex && fStack->size() > fFrameSize) {
5589 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
5591 int64_t reverseIndex = fp->fInputIdx;
5604 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5605 fp->fInputIdx = reverseIndex;
5606 if (fp->fInputIdx > backSearchIndex) {
5607 fp = StateSave(fp, fp->fPatIdx, status);
5609 fp->fPatIdx++; // Skip the LOOP_C, we just did that
5616 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5629 op = (int32_t)pat[fp->fPatIdx];
5630 fp->fPatIdx++;
5645 int32_t originalInputIdx = fp->fInputIdx;
5652 if (fp->fInputIdx < fActiveLimit) { // don't read past end of string
5658 U_ASSERT(fp->fInputIdx < fActiveLimit);
5659 U16_NEXT(inputBuf, fp->fInputIdx, fActiveLimit, c);
5676 if (fp->fInputIdx <= fActiveLimit && c_is_valid) {
5692 if (fp->fInputIdx > backSearchIndex && fStack->size()) {
5694 if (URX_LOOP_C == URX_TYPE(pat[prevFrame->fPatIdx]) && fp->fInputIdx <= prevFrame->fInputIdx) {
5722 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5723 fp->fInputIdx = reverseIndex;
5724 if (fp->fInputIdx > backSearchIndex) {
5725 fp = StateSave(fp, fp->fPatIdx, status);
5727 fp->fPatIdx++; // Skip the LOOP_C, we just did that
5733 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5746 fData[opValue+1] = fp->fInputIdx;
5752 fActiveLimit = fp->fInputIdx;
5764 int32_t minML = (int32_t)pat[fp->fPatIdx++];
5765 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
5774 *lbStartIdx = fp->fInputIdx - minML;
5785 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
5789 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5799 fp = StateSave(fp, fp->fPatIdx-3, status);
5800 fp->fInputIdx = *lbStartIdx;
5808 if (fp->fInputIdx != fActiveLimit) {
5814 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5835 int32_t minML = (int32_t)pat[fp->fPatIdx++];
5836 int32_t maxML = (int32_t)pat[fp->fPatIdx++];
5837 int32_t continueLoc = (int32_t)pat[fp->fPatIdx++];
5841 U_ASSERT(continueLoc > fp->fPatIdx);
5848 *lbStartIdx = fp->fInputIdx - minML;
5859 if (*lbStartIdx < 0 || *lbStartIdx < fp->fInputIdx - maxML) {
5867 fp->fPatIdx = continueLoc;
5873 fp = StateSave(fp, fp->fPatIdx-4, status);
5874 fp->fInputIdx = *lbStartIdx;
5882 if (fp->fInputIdx != fActiveLimit) {
5888 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5912 fp = (REStackFrame *)fStack->popFrame(fFrameSize);
5929 int32_t ix = (int32_t)fp->fInputIdx;
5952 if (ix == fp->fInputIdx) {
5953 fp->fPatIdx++; // skip the URX_LOOP_C op.
5960 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
5964 fp->fExtra[stackLoc] = fp->fInputIdx;
5966 backSearchIndex = fp->fInputIdx;
5968 fp->fInputIdx = ix;
5973 fp = StateSave(fp, fp->fPatIdx, status);
5974 fp->fPatIdx++;
5994 ix = (int32_t)fp->fInputIdx;
6017 if (ix == fp->fInputIdx) {
6018 fp->fPatIdx++; // skip the URX_LOOP_C op.
6025 int32_t loopcOp = (int32_t)pat[fp->fPatIdx];
6029 fp->fExtra[stackLoc] = fp->fInputIdx;
6031 backSearchIndex = fp->fInputIdx;
6033 fp->fInputIdx = ix;
6038 fp = StateSave(fp, fp->fPatIdx, status);
6039 fp->fPatIdx++;
6047 backSearchIndex = (int32_t)fp->fExtra[opValue];
6048 U_ASSERT(backSearchIndex <= fp->fInputIdx);
6049 if (backSearchIndex == fp->fInputIdx) {
6060 U_ASSERT(fp->fInputIdx > 0);
6062 U16_PREV(inputBuf, 0, fp->fInputIdx, prevC); // !!!: should this 0 be one of f*Limit?
6065 fp->fInputIdx > backSearchIndex &&
6066 inputBuf[fp->fInputIdx-1] == 0x0d) {
6067 int32_t prevOp = (int32_t)pat[fp->fPatIdx-2];
6070 U16_BACK_1(inputBuf, 0, fp->fInputIdx);
6075 fp = StateSave(fp, fp->fPatIdx-1, status);
6098 fMatchEnd = fp->fInputIdx;
6110 fFrame = fp; // The active stack frame when the engine stopped.