Tcl Source Code

Artifact [1e594e47f0]
Login

Artifact 1e594e47f03017034dcc393d4c1c83d574c9dd9d:

Attachment "1119369" to ticket [1119369fff] added by msofer 2005-02-10 04:44:47.
Index: generic/tclBasic.c
===================================================================
RCS file: /cvsroot/tcl/tcl/generic/tclBasic.c,v
retrieving revision 1.140
diff -u -r1.140 tclBasic.c
--- generic/tclBasic.c	28 Jan 2005 01:49:50 -0000	1.140
+++ generic/tclBasic.c	9 Feb 2005 21:41:58 -0000
@@ -3754,11 +3754,22 @@
 	 * everything into a string and back out again.
 	 */
 	if ((objPtr->typePtr == &tclListType) && /* is a list... */
-		(objPtr->bytes == NULL) /* ...without a string rep */) {
-	    register List *listRepPtr =
+		(objPtr->bytes == NULL) /* ...without a string rep */) {	    
+	    List *listRepPtr =
 		(List *) objPtr->internalRep.twoPtrValue.ptr1;
-	    result = Tcl_EvalObjv(interp, listRepPtr->elemCount,
-		    listRepPtr->elements, flags);
+	    int i, objc = listRepPtr->elemCount;
+	    Tcl_Obj **objv;
+
+	    objv = (Tcl_Obj **) TclStackAlloc(interp, objc*sizeof(Tcl_Obj *));
+	    for (i=0; i < objc; i++) {
+		objv[i] = listRepPtr->elements[i];
+		Tcl_IncrRefCount(objv[i]);
+	    }
+	    result = Tcl_EvalObjv(interp, objc, objv, flags);
+	    for (i=0; i < objc; i++) {
+		TclDecrRefCount(objv[i]);
+	    }
+	    TclStackFree(interp);
 	} else {
 	    script = Tcl_GetStringFromObj(objPtr, &numSrcBytes);
 	    result = Tcl_EvalEx(interp, script, numSrcBytes, flags);