Tcl Source Code

Artifact [c0353fafe3]
Login

Artifact c0353fafe39fdb8c09d7e866f2573c62f4b23580:

Attachment "lsort-indices-diff.txt" to ticket [1017532fff] added by nobody 2004-08-27 18:55:53.
*** tcl8.4.6/generic/tclCmdIL.c	Thu Jul 17 13:29:19 2003
--- tclCmdIL.c	Fri Aug 27 04:48:36 2004
***************
*** 3255,3261 ****
      int objc;			/* Number of arguments. */
      Tcl_Obj *CONST objv[];	/* Argument values. */
  {
!     int i, index, unique;
      Tcl_Obj *resultPtr;
      int length;
      Tcl_Obj *cmdPtr, **listObjPtrs;
--- 3255,3261 ----
      int objc;			/* Number of arguments. */
      Tcl_Obj *CONST objv[];	/* Argument values. */
  {
!     int i, index, unique, indices;
      Tcl_Obj *resultPtr;
      int length;
      Tcl_Obj *cmdPtr, **listObjPtrs;
***************
*** 3266,3272 ****
                                           * comparison function */
      static CONST char *switches[] = {
  	"-ascii", "-command", "-decreasing", "-dictionary", "-increasing",
! 	"-index", "-integer", "-real", "-unique", (char *) NULL
      };
  
      resultPtr = Tcl_GetObjResult(interp);
--- 3266,3272 ----
                                           * comparison function */
      static CONST char *switches[] = {
  	"-ascii", "-command", "-decreasing", "-dictionary", "-increasing",
! 	"-index", "-integer", "-real", "-unique", "-indices", (char *) NULL
      };
  
      resultPtr = Tcl_GetObjResult(interp);
***************
*** 3286,3291 ****
--- 3286,3292 ----
      sortInfo.resultCode = TCL_OK;
      cmdPtr = NULL;
      unique = 0;
+     indices = 0;
      for (i = 1; i < objc-1; i++) {
  	if (Tcl_GetIndexFromObj(interp, objv[i], switches, "option", 0, &index)
  		!= TCL_OK) {
***************
*** 3337,3342 ****
--- 3338,3346 ----
  	    case 8:			/* -unique */
  		unique = 1;
  		break;
+ 	    case 9:                     /* -indices */
+ 		indices = 1;
+ 		break;
  	}
      }
      if (sortInfo.sortMode == SORTMODE_COMMAND) {
***************
*** 3383,3398 ****
  	Tcl_ResetResult(interp);
  	resultPtr = Tcl_GetObjResult(interp);
  	if (unique) {
! 	    for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		if (elementPtr->count == 0) {
! 		    Tcl_ListObjAppendElement(interp, resultPtr,
  			    elementPtr->objPtr);
  		}
  	    }
  	} else {
! 	    for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		Tcl_ListObjAppendElement(interp, resultPtr,
  			elementPtr->objPtr);
  	    }
  	}
      }
--- 3387,3418 ----
  	Tcl_ResetResult(interp);
  	resultPtr = Tcl_GetObjResult(interp);
  	if (unique) {
! 	    if (indices) {
! 		for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		    if (elementPtr->count == 0) {
! 			Tcl_ListObjAppendElement(interp, resultPtr,
! 			    Tcl_NewIntObj(elementPtr - &elementArray[0]));
! 		    }
! 		}
! 	    } else {
! 		for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		    if (elementPtr->count == 0) {
! 	 		Tcl_ListObjAppendElement(interp, resultPtr,
  			    elementPtr->objPtr);
+ 		    }
  		}
  	    }
  	} else {
! 	    if (indices) {
! 		for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		    Tcl_ListObjAppendElement(interp, resultPtr,
! 			Tcl_NewIntObj(elementPtr - &elementArray[0]));
! 		}
! 	    } else {
! 		for (; elementPtr != NULL; elementPtr = elementPtr->nextPtr){
! 		    Tcl_ListObjAppendElement(interp, resultPtr,
  			elementPtr->objPtr);
+ 		}
  	    }
  	}
      }