Attachment "lexpand.diffs" to
ticket [781929ffff]
added by
muonics
2003-08-02 18:32:36.
Index: tclBasic.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclBasic.c,v
retrieving revision 1.75.2.5
diff -r1.75.2.5 tclBasic.c
122a123,124
> {"lexpand", (Tcl_CmdProc *) NULL, Tcl_LexpandObjCmd,
> (CompileProc *) NULL, 0},
2985a2988
> Tcl_Obj *expandListObj;
2993a2997,3028
>
> /*
> * Handle the case of arguments that are the result of [lexpand]
> */
>
> expandListObj = Tcl_NewListObj(0, NULL);
>
> for (i = 0 ; i < objc ; i++) {
> if (objv[i] -> typePtr == &tclExpandListType) {
> Tcl_Obj *argObj = Tcl_DuplicateObj(objv[i]);
> int elemc, elemNum;
>
> Tcl_ListObjIndex(interp, argObj, 0, &argObj);
> Tcl_ListObjLength(interp, argObj, &elemc);
>
> for (elemNum = 0 ; elemNum < elemc ; elemNum++) {
> Tcl_Obj *elemObj;
>
> Tcl_ListObjIndex(interp, argObj, elemNum, &elemObj);
> Tcl_ListObjAppendElement(interp, expandListObj, elemObj);
> }
>
> } else {
> Tcl_ListObjAppendElement(interp, expandListObj, objv[i]);
> }
> }
>
> /*
> * Extract the new argument array from the list object
> */
>
> Tcl_ListObjGetElements(interp, expandListObj, &objc, (Tcl_Obj ***)&objv);
Index: tclCmdIL.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclCmdIL.c,v
retrieving revision 1.47.2.2
diff -r1.47.2.2 tclCmdIL.c
2012a2013,2049
> /*----------------------------------------------------------------------
> *
> * Tcl_LexpandObjCmd --
> *
> * This object-based procedure is invoked to process the "lexpand" Tcl
> * command. See the user documentation for details on what it does.
> *
> * Results:
> * A standard Tcl object result.
> *
> * Side effects:
> * See the user documentation.
> *
> *----------------------------------------------------------------------
> */
>
> /* ARGSUSED */
> int
> Tcl_LexpandObjCmd(dummy, interp, objc, objv)
> ClientData dummy; /* Not used. */
> Tcl_Interp *interp; /* Current interpreter. */
> int objc; /* Number of arguments. */
> Tcl_Obj *CONST objv[]; /* Argument objects. */
> {
>
> Tcl_Obj *objResult; /* Pointer to expand-list object result */
>
> objc--; objv++;
>
> objResult = Tcl_NewListObj(objc, objv);
> objResult -> typePtr = &tclExpandListType;
>
> Tcl_SetObjResult(interp, objResult);
>
> return TCL_OK;
> }
>
Index: tclInt.h
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclInt.h,v
retrieving revision 1.118.2.3
diff -r1.118.2.3 tclInt.h
1561a1562
> extern Tcl_ObjType tclExpandListType;
1867a1869,1870
> Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]));
> EXTERN int Tcl_LexpandObjCmd _ANSI_ARGS_((ClientData clientData,
Index: tclListObj.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclListObj.c,v
retrieving revision 1.13
diff -r1.13 tclListObj.c
50a51,58
>
> Tcl_ObjType tclExpandListType = {
> "lexpand", /* name */
> FreeListInternalRep, /* freeIntRepProc */
> DupListInternalRep, /* dupIntRepProc */
> UpdateStringOfList, /* updateStringProc */
> SetListFromAny /* setFromAnyProc */
> };