diff options
author | Miguel Sofer <miguel.sofer@gmail.com> | 2004-05-06 04:41:52 (GMT) |
---|---|---|
committer | Miguel Sofer <miguel.sofer@gmail.com> | 2004-05-06 04:41:52 (GMT) |
commit | fcc10d4dd68b2d659c7554f1d07781320a75a74b (patch) | |
tree | eb1d8657ba0059d390e61248cdb27928523dca9a /generic/tclInt.h | |
parent | fb4ad76021c0fb42e1515cbabaec082a4704d394 (diff) | |
download | tcl-fcc10d4dd68b2d659c7554f1d07781320a75a74b.zip tcl-fcc10d4dd68b2d659c7554f1d07781320a75a74b.tar.gz tcl-fcc10d4dd68b2d659c7554f1d07781320a75a74b.tar.bz2 |
* generic/tclInt.h:
* generic/tclObj.c (TclFreeObj): made TclFreeObj use the new macro
TclFreeObjMacro(), so that the allocation and freeing of Tcl_Obj
is defined in a single spot (the macros in tclInt.h), with the
exception of the TCL_MEM_DEBUG case.
The #ifdef logic for the corresponding macros has been reformulated
to make it clearer.
Diffstat (limited to 'generic/tclInt.h')
-rw-r--r-- | generic/tclInt.h | 68 |
1 files changed, 35 insertions, 33 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h index 361a7ea..4b74c7b 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInt.h,v 1.157 2004/05/04 20:09:33 dgp Exp $ + * RCS: @(#) $Id: tclInt.h,v 1.158 2004/05/06 04:41:53 msofer Exp $ */ #ifndef _TCLINT @@ -2139,39 +2139,22 @@ EXTERN Tcl_Obj *TclPtrIncrWideVar _ANSI_ARGS_((Tcl_Interp *interp, Var *varPtr, # define TclDecrRefCount(objPtr) \ if (--(objPtr)->refCount <= 0) { \ - if (((objPtr)->typePtr != NULL) \ - && ((objPtr)->typePtr->freeIntRepProc != NULL)) { \ - (objPtr)->typePtr->freeIntRepProc(objPtr); \ - } \ - if (((objPtr)->bytes != NULL) \ - && ((objPtr)->bytes != tclEmptyStringRep)) { \ - ckfree((char *) (objPtr)->bytes); \ - } \ - TclFreeObjStorage(objPtr); \ - TclIncrObjsFreed(); \ - } -#endif /* TCL_MEM_DEBUG */ - -#ifdef TCL_MEM_DEBUG -EXTERN void TclDbInitNewObj _ANSI_ARGS_((Tcl_Obj *objPtr)); - -# define TclDbNewObj(objPtr, file, line) \ - TclIncrObjsAllocated(); \ - (objPtr) = (Tcl_Obj *) Tcl_DbCkalloc(sizeof(Tcl_Obj), (file), (line)); \ - TclDbInitNewObj(objPtr); + TclFreeObjMacro(objPtr); \ + } -# define TclNewObj(objPtr) \ - TclDbNewObj(objPtr, __FILE__, __LINE__); - -# define TclDecrRefCount(objPtr) \ - Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__) - -# define TclNewListObjDirect(objc, objv) \ - TclDbNewListObjDirect(objc, objv, __FILE__, __LINE__) - -#undef USE_THREAD_ALLOC +#define TclFreeObjMacro(objPtr) \ + if (((objPtr)->typePtr != NULL) \ + && ((objPtr)->typePtr->freeIntRepProc != NULL)) { \ + (objPtr)->typePtr->freeIntRepProc(objPtr); \ + } \ + if (((objPtr)->bytes != NULL) \ + && ((objPtr)->bytes != tclEmptyStringRep)) { \ + ckfree((char *) (objPtr)->bytes); \ + } \ + TclFreeObjStorage(objPtr); \ + TclIncrObjsFreed() -#elif defined(PURIFY) +#if defined(PURIFY) /* * The PURIFY mode is like the regular mode, but instead of doing block @@ -2205,7 +2188,7 @@ EXTERN void TclpSetAllocCache _ANSI_ARGS_((void *)); # define TclFreeObjStorage(objPtr) \ TclThreadFreeObj((objPtr)) -#else /* not TCL_MEM_DEBUG */ +#else /* not PURIFY or USE_THREAD_ALLOC */ #ifdef TCL_THREADS /* declared in tclObj.c */ @@ -2227,7 +2210,26 @@ extern Tcl_Mutex tclObjMutex; (objPtr)->internalRep.otherValuePtr = (VOID *) tclFreeObjList; \ tclFreeObjList = (objPtr); \ Tcl_MutexUnlock(&tclObjMutex) +#endif + +#else /* TCL_MEM_DEBUG */ +EXTERN void TclDbInitNewObj _ANSI_ARGS_((Tcl_Obj *objPtr)); + +# define TclDbNewObj(objPtr, file, line) \ + TclIncrObjsAllocated(); \ + (objPtr) = (Tcl_Obj *) Tcl_DbCkalloc(sizeof(Tcl_Obj), (file), (line)); \ + TclDbInitNewObj(objPtr); + +# define TclNewObj(objPtr) \ + TclDbNewObj(objPtr, __FILE__, __LINE__); + +# define TclDecrRefCount(objPtr) \ + Tcl_DbDecrRefCount(objPtr, __FILE__, __LINE__) +# define TclNewListObjDirect(objc, objv) \ + TclDbNewListObjDirect(objc, objv, __FILE__, __LINE__) + +#undef USE_THREAD_ALLOC #endif /* TCL_MEM_DEBUG */ /* |