diff options
| author | donal.k.fellows@manchester.ac.uk <dkf> | 2014-01-09 21:20:23 (GMT) |
|---|---|---|
| committer | donal.k.fellows@manchester.ac.uk <dkf> | 2014-01-09 21:20:23 (GMT) |
| commit | 4aa0402e774719d5bde6de666876df9607d61f62 (patch) | |
| tree | fe3896fd636563de7504eb24bce205cf9f547457 /generic/tclVar.c | |
| parent | 8bf48ad5587163c9d5efb09245c0ff6d24db142a (diff) | |
| parent | 1dd57e7f83b454f114c495ecec9d81fcfa8c13f6 (diff) | |
| download | tcl-4aa0402e774719d5bde6de666876df9607d61f62.zip tcl-4aa0402e774719d5bde6de666876df9607d61f62.tar.gz tcl-4aa0402e774719d5bde6de666876df9607d61f62.tar.bz2 | |
merge trunk
Diffstat (limited to 'generic/tclVar.c')
| -rw-r--r-- | generic/tclVar.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/generic/tclVar.c b/generic/tclVar.c index af1a563..4694cd8 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -3850,6 +3850,53 @@ ArrayNamesCmd( /* *---------------------------------------------------------------------- * + * TclFindArrayPtrElements -- + * + * Fill out a hash table (which *must* use Tcl_Obj* keys) with an entry + * for each existing element of the given array. The provided hash table + * is assumed to be initially empty. + * + * Result: + * none + * + * Side effects: + * The keys of the array gain an extra reference. The supplied hash table + * has elements added to it. + * + *---------------------------------------------------------------------- + */ + +void +TclFindArrayPtrElements( + Var *arrayPtr, + Tcl_HashTable *tablePtr) +{ + Var *varPtr; + Tcl_HashSearch search; + + if ((arrayPtr == NULL) || !TclIsVarArray(arrayPtr) + || TclIsVarUndefined(arrayPtr)) { + return; + } + + for (varPtr=VarHashFirstVar(arrayPtr->value.tablePtr, &search); + varPtr!=NULL ; varPtr=VarHashNextVar(&search)) { + Tcl_HashEntry *hPtr; + Tcl_Obj *nameObj; + int dummy; + + if (TclIsVarUndefined(varPtr)) { + continue; + } + nameObj = VarHashGetKey(varPtr); + hPtr = Tcl_CreateHashEntry(tablePtr, (char *) nameObj, &dummy); + Tcl_SetHashValue(hPtr, nameObj); + } +} + +/* + *---------------------------------------------------------------------- + * * ArraySetCmd -- * * This object-based function is invoked to process the "array set" Tcl |
