summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstanton <stanton>1999-04-28 17:06:06 (GMT)
committerstanton <stanton>1999-04-28 17:06:06 (GMT)
commita12837eeef8ecf52959c787988f8a45eb8baf704 (patch)
tree856e7536adf9af9ca2fbd629f5843a04f50f9e00
parent5bec7274093b637944fb3f2d53d71901734f877f (diff)
downloadtcl-a12837eeef8ecf52959c787988f8a45eb8baf704.zip
tcl-a12837eeef8ecf52959c787988f8a45eb8baf704.tar.gz
tcl-a12837eeef8ecf52959c787988f8a45eb8baf704.tar.bz2
* 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.
-rw-r--r--generic/tclListObj.c4
-rw-r--r--generic/tclObj.c10
-rw-r--r--generic/tclStringObj.c14
-rw-r--r--mac/tclMacResource.c5
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 <Errors.h>
@@ -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);
}
/*