From a12837eeef8ecf52959c787988f8a45eb8baf704 Mon Sep 17 00:00:00 2001 From: stanton Date: Wed, 28 Apr 1999 17:06:06 +0000 Subject: * mac/tclMacResource.c: * generic/tclListObj.c: * generic/tclObj.c: * generic/tclStringObj.c: Changed to avoid freeing the string representation before freeing the internal rep. This helps with debugging since the string rep will still be valid when the free proc is invoked. --- generic/tclListObj.c | 4 ++-- generic/tclObj.c | 10 +++++----- generic/tclStringObj.c | 14 +++++++------- mac/tclMacResource.c | 5 +++-- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/generic/tclListObj.c b/generic/tclListObj.c index aceaa7a..d4b3aba 100644 --- a/generic/tclListObj.c +++ b/generic/tclListObj.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclListObj.c,v 1.4 1999/04/16 00:46:50 stanton Exp $ + * RCS: @(#) $Id: tclListObj.c,v 1.5 1999/04/28 17:06:06 stanton Exp $ */ #include "tclInt.h" @@ -236,11 +236,11 @@ Tcl_SetListObj(objPtr, objc, objv) * Free any old string rep and any internal rep for the old type. */ - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->typePtr = NULL; + Tcl_InvalidateStringRep(objPtr); /* * Set the object's type to "list" and initialize the internal rep. diff --git a/generic/tclObj.c b/generic/tclObj.c index c4895ee..d44b520 100644 --- a/generic/tclObj.c +++ b/generic/tclObj.c @@ -9,7 +9,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclObj.c,v 1.5 1999/04/16 00:46:50 stanton Exp $ + * RCS: @(#) $Id: tclObj.c,v 1.6 1999/04/28 17:06:06 stanton Exp $ */ #include "tclInt.h" @@ -926,13 +926,13 @@ Tcl_SetBooleanObj(objPtr, boolValue) panic("Tcl_SetBooleanObj called with shared object"); } - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->internalRep.longValue = (boolValue? 1 : 0); objPtr->typePtr = &tclBooleanType; + Tcl_InvalidateStringRep(objPtr); } /* @@ -1284,13 +1284,13 @@ Tcl_SetDoubleObj(objPtr, dblValue) panic("Tcl_SetDoubleObj called with shared object"); } - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->internalRep.doubleValue = dblValue; objPtr->typePtr = &tclDoubleType; + Tcl_InvalidateStringRep(objPtr); } /* @@ -1552,13 +1552,13 @@ Tcl_SetIntObj(objPtr, intValue) panic("Tcl_SetIntObj called with shared object"); } - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->internalRep.longValue = (long) intValue; objPtr->typePtr = &tclIntType; + Tcl_InvalidateStringRep(objPtr); } /* @@ -1917,13 +1917,13 @@ Tcl_SetLongObj(objPtr, longValue) panic("Tcl_SetLongObj called with shared object"); } - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->internalRep.longValue = longValue; objPtr->typePtr = &tclIntType; + Tcl_InvalidateStringRep(objPtr); } /* diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c index c0261c7..e7d3ae7 100644 --- a/generic/tclStringObj.c +++ b/generic/tclStringObj.c @@ -14,7 +14,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclStringObj.c,v 1.4 1999/04/16 00:46:53 stanton Exp $ + * RCS: @(#) $Id: tclStringObj.c,v 1.5 1999/04/28 17:06:06 stanton Exp $ */ #include "tclInt.h" @@ -222,12 +222,6 @@ Tcl_SetStringObj(objPtr, bytes, length) panic("Tcl_SetStringObj called with shared object"); } - Tcl_InvalidateStringRep(objPtr); - if (length < 0) { - length = (bytes? strlen(bytes) : 0); - } - TclInitStringRep(objPtr, bytes, length); - /* * Set the type to NULL and free any internal rep for the old type. */ @@ -236,6 +230,12 @@ Tcl_SetStringObj(objPtr, bytes, length) oldTypePtr->freeIntRepProc(objPtr); } objPtr->typePtr = NULL; + + Tcl_InvalidateStringRep(objPtr); + if (length < 0) { + length = (bytes? strlen(bytes) : 0); + } + TclInitStringRep(objPtr, bytes, length); } /* diff --git a/mac/tclMacResource.c b/mac/tclMacResource.c index 312ef42..0c1a372 100644 --- a/mac/tclMacResource.c +++ b/mac/tclMacResource.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclMacResource.c,v 1.5 1999/04/16 00:47:21 stanton Exp $ + * RCS: @(#) $Id: tclMacResource.c,v 1.6 1999/04/28 17:06:07 stanton Exp $ */ #include @@ -1589,13 +1589,14 @@ Tcl_SetOSTypeObj( Tcl_RegisterObjType(&osType); } - Tcl_InvalidateStringRep(objPtr); if ((oldTypePtr != NULL) && (oldTypePtr->freeIntRepProc != NULL)) { oldTypePtr->freeIntRepProc(objPtr); } objPtr->internalRep.longValue = newOSType; objPtr->typePtr = &osType; + + Tcl_InvalidateStringRep(objPtr); } /* -- cgit v0.12