[SS] Feb162004 - In the process of writing the GC for the references package, I needed to know what [Tcl_Obj] [Tcl_ObjType%|%types] aren't able to represent a valid reference. Numerical types are an example, but I wanted the full list of types defined inside the core. To reach the goal I wrote the little script at the end of the page, that I hope is sane enough to provide the full list. This is the list of types defined in the .c and .h files under the /generic directory. For every type there is the [C] symbol name, and the name to pass to the '''Tcl_GetObjType''' function to get the pointer to the type stucture. For tcl8.6.1: %|C Symbol|Name|% &| `assembleCodeType` | "assemblecode" |& &| `dictIteratorType` | "dictIterator" |& &| `encodingType` | "encoding" |& &| `exprCodeType` | "exprcode" |& &| `indexType` | "index" |& &| `lambdaType` | "lambdaExpr" |& &| `levelReferenceType` | "levelReference" |& &| `localVarNameType` | "localVarName" |& &| `nsNameType` | "nsName" |& &| `oldBooleanType` | "boolean" |& &| `substCodeType` | "substcode" |& &| `tclBignumType` | "bignum" |& &| `tclBooleanType` | "booleanString" |& &| `tclByteArrayType` | "bytearray" |& &| `tclByteCodeType` | "bytecode" |& &| `tclChannelType` | "channel" |& &| `tclCmdNameType` | "cmdName" |& &| `tclDictType` | "dict" |& &| `tclDoubleType` | "double" |& &| `tclEnsembleCmdType` | "ensembleCommand" |& &| `tclFsPathType` | "path" |& &| `tclInstNameType` | "instname" |& &| `tclIntType` | "int" |& &| `tclListType` | "list" |& &| `tclNsVarNameType` | "namespaceVarName" |& &| `tclParsedVarNameType` | "parsedVarName" |& &| `tclProcBodyType` | "procbody" |& &| `tclRegexpType` | "regexp" |& &| `tclStringType` | "string" |& &| `tclWideIntType` | "wideInt" |& For tk8.6.1: %|C Symbol|Name|% &| `mmObjType` | "mm" |& &| `optionObjType` | "option" |& &| `pixelObjType` | "pixel" |& &| `styleObjType` | "style" |& &| `tkBitmapObjType` | "bitmap" |& &| `tkBorderObjType` | "border" |& &| `tkColorObjType` | "color" |& &| `tkFontObjType` | "font" |& &| `tkStateKeyObjType` | "statekey" |& &| `tkTextIndexType` | "textindex" |& &| `windowObjType` | "window" |& ---- The following is the script used to get the list. Please report any bug of the script, or additional types defined in well known Tcl extensions! ====== set files [glob {/home/antirez/SVC/tcltk/CVS/tcl/generic/*.[ch]}] append re {Tcl_ObjType\s+([A-z]+?)\s+=\s+} append re \{ append re {\s+"([A-z]+?)"} foreach f $files { set fd [open $f] set text [read $fd] close $fd set types [regexp -all -inline $re $text] foreach {- cname name} $types { puts [format "%-20.20s \"%s\"" $cname $name] } } ====== [DKF]: Don't forget to list the types defined by Tk as well. And you might want to check for platform-specific types too. <> Tcl Library