summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorhobbs <hobbs>2000-03-30 04:36:08 (GMT)
committerhobbs <hobbs>2000-03-30 04:36:08 (GMT)
commit5f7fd015c795c68b50b9f34e28deb81c5f5549d2 (patch)
tree6b5f76b81d605204fdd5800eab13e5da6f72abeb /generic
parent903cf0c3a7c1b8a6e73f5991bae107beb43e9d21 (diff)
downloadtcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.zip
tcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.tar.gz
tcl-5f7fd015c795c68b50b9f34e28deb81c5f5549d2.tar.bz2
* generic/tclCompile.c (TclCleanupByteCode): made ByteCode cleanup
more aware of TCL_BYTECODE_PRECOMPILED flagged structs (gen'd by tbcload), to correctly clean them up. * generic/tclClock.c (FormatClock): moved check for empty format earlier, commented 0 result return value
Diffstat (limited to 'generic')
-rw-r--r--generic/tclClock.c18
-rw-r--r--generic/tclCompile.c21
2 files changed, 35 insertions, 4 deletions
diff --git a/generic/tclClock.c b/generic/tclClock.c
index b155b4d..8b2bc53 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.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: tclClock.c,v 1.8 2000/01/26 03:37:40 hobbs Exp $
+ * RCS: @(#) $Id: tclClock.c,v 1.9 2000/03/30 04:36:11 hobbs Exp $
*/
#include "tcl.h"
@@ -282,6 +282,13 @@ FormatClock(interp, clockVal, useGMT, format)
Tcl_MutexUnlock(&clockMutex);
#endif
+ /*
+ * If the user gave us -format "", just return now
+ */
+ if (*format == '\0') {
+ return TCL_OK;
+ }
+
#ifndef HAVE_TM_ZONE
/*
* This is a kludge for systems not having the timezone string in
@@ -340,7 +347,14 @@ FormatClock(interp, clockVal, useGMT, format)
tzset();
}
#endif
- if ((result == 0) && (*format != '\0')) {
+
+ if (result == 0) {
+ /*
+ * A zero return is the error case (can also mean the strftime
+ * didn't get enough space to write into). We know it doesn't
+ * mean that we wrote zero chars because the check for an empty
+ * format string is above.
+ */
Tcl_AppendStringsToObj(Tcl_GetObjResult(interp),
"bad format string \"", format, "\"", (char *) NULL);
return TCL_ERROR;
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index ed7500f..7a9f64d 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.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: tclCompile.c,v 1.19 1999/12/12 02:26:41 hobbs Exp $
+ * RCS: @(#) $Id: tclCompile.c,v 1.20 2000/03/30 04:36:11 hobbs Exp $
*/
#include "tclInt.h"
@@ -553,9 +553,26 @@ TclCleanupByteCode(codePtr)
* only need to 1) decrement the ref counts of the LiteralEntry's in
* its literal array, 2) call the free procs for the auxiliary data
* items, and 3) free the ByteCode structure's heap object.
+ *
+ * The case for TCL_BYTECODE_PRECOMPILED (precompiled ByteCodes,
+ * like those generated from tbcload) is special, as they doesn't
+ * make use of the global literal table. They instead maintain
+ * private references to their literals which must be decremented.
*/
- if (interp != NULL) {
+ if (codePtr->flags & TCL_BYTECODE_PRECOMPILED) {
+ register Tcl_Obj *objPtr;
+
+ objArrayPtr = codePtr->objArrayPtr;
+ for (i = 0; i < numLitObjects; i++) {
+ objPtr = *objArrayPtr;
+ if (objPtr) {
+ Tcl_DecrRefCount(objPtr);
+ }
+ objArrayPtr++;
+ }
+ codePtr->numLitObjects = 0;
+ } else if (interp != NULL) {
/*
* If the interp has already been freed, then Tcl will have already
* forcefully released all the literals used by ByteCodes compiled