diff options
author | hobbs <hobbs> | 2000-03-30 04:36:08 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2000-03-30 04:36:08 (GMT) |
commit | 5f7fd015c795c68b50b9f34e28deb81c5f5549d2 (patch) | |
tree | 6b5f76b81d605204fdd5800eab13e5da6f72abeb /generic | |
parent | 903cf0c3a7c1b8a6e73f5991bae107beb43e9d21 (diff) | |
download | tcl-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.c | 18 | ||||
-rw-r--r-- | generic/tclCompile.c | 21 |
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 |