Tcl_Obj(3tcl) Tcl Library Procedures Tcl_Obj(3tcl) ______________________________________________________________________________ NAME Tcl_NewObj, Tcl_DuplicateObj, Tcl_IncrRefCount, Tcl_DecrRefCount, Tcl_IsShared, Tcl_InvalidateStringRep - Tcl SYNOPSIS #include Tcl_Obj * Tcl_NewObj() Tcl_Obj * Tcl_DuplicateObj(objPtr) Tcl_IncrRefCount(objPtr) Tcl_DecrRefCount(objPtr) int Tcl_IsShared(objPtr) Tcl_InvalidateStringRep(objPtr) ARGUMENTS Tcl_Obj *objPtr (in) Tcl_NewObj ______________________________________________________________________________ INTRODUCTION Tcl Tcl () Tcl_GetIntFromObj Tcl_ListObjAppendElement Tcl (dual-ported) Tcl Tcl Tcl Tcl Tcl (cache) Tcl : Tcl_Obj Tcl_GetStringFromObj Tcl_GetString Tcl_Obj Tcl_Obj Tcl Tcl (typed) Tcl Tcl_RegisterObjType THE TCL_OBJ STRUCTURE Tcl Tcl_Obj typedef struct Tcl_Obj { int refCount; char *bytes; int length; Tcl_ObjType *typePtr; union { long longValue; double doubleValue; VOID *otherValuePtr; struct { VOID *ptr1; VOID *ptr2; } twoPtrValue; } internalRep; } Tcl_Obj; bytes length (counted) (binary string) null bytes length length null null null C C Tcl_GetStringFromObj Tcl_GetString bytes NULL typePtr Tcl_ObjType typePtr is NULL internalRep () refCount (STORAGE MANAGEMENT OF OBJECTS) Tcl_Obj refCount Tcl_IncrRefCount Tcl_IsShared Tcl : typePtr NULL Tcl_NewObj Tcl_NewStringObj Tcl_GetStringFromObj Tcl_GetString Tcl_SetStringObj Tcl_GetIntFromObj typePtr: Tcl_ListObjReplace Tcl_GetStringFromObj Tcl_GetString Tcl_ListObjReplace C Tcl_GetBooleanFromObj Tcl_ListObjIndex Tcl_InvalidateStringRep C Tcl_AppendToObj Tcl_ListObjIndex Tcl_ConvertToType typePtr Tcl_RegisterObjType EXAMPLE OF THE LIFETIME OF AN OBJECT : set x 123 x bytes 123 length 3 typePtr NULL puts "x is $x" x ( bytes NULL) incr x incr Tcl_GetIntFromObj x () internalRep.longValue 123 typePtr Tcl_ObjType incr ( Tcl_InvalidateStringRep) puts "x is now $x" x () 124 STORAGE MANAGEMENT OF OBJECTS Tcl Tcl_NewObj Tcl_NewStringObj refCount 0 Tcl_IncrRefCount Tcl_DecrRefCount refCount 1 Tcl_IncrRefCount () Tcl_DecrRefCount Tcl_DecrRefCount lappend linsert Tcl_IsShared Tcl_DuplicateObj refCount 0"" linsert index objc-3 objv[1] listPtr = objv[1]; if (Tcl_IsShared(listPtr)) { listPtr = Tcl_DuplicateObj(listPtr); } result = Tcl_ListObjReplace(interp, listPtr, index, 0, (objc-3), &(objv[3])); incr ()() SEE ALSO Tcl_ConvertToType, Tcl_GetIntFromObj, Tcl_ListObjAppendElement, Tcl_ListObjIndex, Tcl_ListObjReplace, Tcl_RegisterObjType KEYWORDS internal representation, object, object creation, object type, reference counting, string representation, type conversion [] [] 2001/10/30 Linux man : http://cmpp.linuxforum.net man man https://github.com/man-pages-zh/manpages- zh Tcl 8.0 Tcl_Obj(3tcl)