Diff
Not logged in

Differences From Artifact [f31ac427e6]:

To Artifact [093b84aa8a]:


353
354
355
356
357
358
359
360

361
362
363
364
365
366
367
353
354
355
356
357
358
359

360
361
362
363
364
365
366
367







-
+







	    /*
	     * It's the number of substitutions, plus one for the matchVar at
	     * index 0
	     */

	    objc = info.nsubs + 1;
	    if (all <= 1) {
		resultPtr = Tcl_NewObj();
		TclNewObj(resultPtr);
	    }
	}
	for (i = 0; i < objc; i++) {
	    Tcl_Obj *newPtr;

	    if (indices) {
		size_t start, end;
380
381
382
383
384
385
386




387
388
389

390
391
392
393
394
395
396
397
398
399
400
401
402

403
404
405
406
407
408
409
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396




397
398
399
400
401
402

403
404
405
406
407
408
409
410







+
+
+
+



+


-
-
-
-






-
+







		     * Adjust index so it refers to the last character in the
		     * match instead of the first character after the match.
		     */

		    if (end + 1 >= offset + 1) {
			end--;
		    }
		    TclNewIndexObj(objs[0], start);
		    TclNewIndexObj(objs[1], end);

		    newPtr = Tcl_NewListObj(2, objs);
		} else {
		    start = TCL_INDEX_NONE;
		    end = TCL_INDEX_NONE;
		    TclNewObj(newPtr);
		}

		TclNewIndexObj(objs[0], start);
		TclNewIndexObj(objs[1], end);

		newPtr = Tcl_NewListObj(2, objs);
	    } else {
		if (i <= (int)info.nsubs) {
		    newPtr = Tcl_GetRange(objPtr,
			    offset + info.matches[i].start,
			    offset + info.matches[i].end - 1);
		} else {
		    newPtr = Tcl_NewObj();
		    TclNewObj(newPtr);
		}
	    }
	    if (doinline) {
		if (Tcl_ListObjAppendElement(interp, resultPtr, newPtr)
			!= TCL_OK) {
		    Tcl_DecrRefCount(newPtr);
		    Tcl_DecrRefCount(resultPtr);
3784
3785
3786
3787
3788
3789
3790


3791
3792
3793



3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794


3795
3796
3797
3798
3799
3800
3801
3802
3803


3804
3805
3806
3807
3808
3809
3810







+
+

-
-
+
+
+






-
-







	for (j=0 ; j<=info.nsubs ; j++) {
	    if (indexVarObj != NULL) {
		Tcl_Obj *rangeObjAry[2];

		if (info.matches[j].end + 1 > 1) {
		    TclNewIndexObj(rangeObjAry[0], info.matches[j].start);
		    TclNewIndexObj(rangeObjAry[1], info.matches[j].end-1);
		    Tcl_ListObjAppendElement(NULL, indicesObj,
			    Tcl_NewListObj(2, rangeObjAry));
		} else {
		    TclNewIndexObj(rangeObjAry[1], -1);
		    rangeObjAry[0] = rangeObjAry[1];
		    TclNewIndexObj(rangeObjAry[0], -1);
		    Tcl_ListObjAppendElement(NULL, indicesObj,
			    rangeObjAry[0]);
		}

		/*
		 * Never fails; the object is always clean at this point.
		 */

		Tcl_ListObjAppendElement(NULL, indicesObj,
			Tcl_NewListObj(2, rangeObjAry));
	    }

	    if (matchVarObj != NULL) {
		Tcl_Obj *substringObj;

		substringObj = Tcl_GetRange(stringObj,
			info.matches[j].start, info.matches[j].end-1);