diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-07-08 10:57:11 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-07-08 10:57:11 (GMT) |
commit | adecc7a1e1a45aab0805e6cb440eb3adf09e486a (patch) | |
tree | 4fe8a274a2300c18c6843b1249e2b33e343b895f /generic/tclIndexObj.c | |
parent | 7747ac024f699006066d1eb7919fab3f7715d835 (diff) | |
parent | 38cfc0dc1366ca379dae1e0b46b49c953362b043 (diff) | |
download | tcl-adecc7a1e1a45aab0805e6cb440eb3adf09e486a.zip tcl-adecc7a1e1a45aab0805e6cb440eb3adf09e486a.tar.gz tcl-adecc7a1e1a45aab0805e6cb440eb3adf09e486a.tar.bz2 |
merge trunk
Diffstat (limited to 'generic/tclIndexObj.c')
-rw-r--r-- | generic/tclIndexObj.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c index b206b35..85e0730 100644 --- a/generic/tclIndexObj.c +++ b/generic/tclIndexObj.c @@ -302,6 +302,10 @@ Tcl_GetIndexFromObjStruct( entryPtr = NEXT_ENTRY(entryPtr, offset), idx++) { for (p1 = key, p2 = *entryPtr; *p1 == *p2; p1++, p2++) { if (*p1 == '\0') { + if (p1 == key) { + /* empty keys never match */ + continue; + } index = idx; goto done; } @@ -356,26 +360,31 @@ Tcl_GetIndexFromObjStruct( * Produce a fancy error message. */ - int count; + int count = 0; TclNewObj(resultPtr); + entryPtr = tablePtr; + while ((*entryPtr != NULL) && !**entryPtr) { + entryPtr = NEXT_ENTRY(entryPtr, offset); + } Tcl_AppendStringsToObj(resultPtr, (numAbbrev>1 && !(flags & TCL_EXACT) ? "ambiguous " : "bad "), msg, " \"", key, NULL); - if (STRING_AT(tablePtr, offset, 0) == NULL) { + if (*entryPtr == NULL) { Tcl_AppendStringsToObj(resultPtr, "\": no valid options", NULL); } else { Tcl_AppendStringsToObj(resultPtr, "\": must be ", - STRING_AT(tablePtr, offset, 0), NULL); - for (entryPtr = NEXT_ENTRY(tablePtr, offset), count = 0; - *entryPtr != NULL; - entryPtr = NEXT_ENTRY(entryPtr, offset), count++) { + *entryPtr, NULL); + entryPtr = NEXT_ENTRY(entryPtr, offset); + while (*entryPtr != NULL) { if (*NEXT_ENTRY(entryPtr, offset) == NULL) { Tcl_AppendStringsToObj(resultPtr, (count > 0 ? "," : ""), " or ", *entryPtr, NULL); - } else { + } else if (**entryPtr) { Tcl_AppendStringsToObj(resultPtr, ", ", *entryPtr, NULL); + count++; } + entryPtr = NEXT_ENTRY(entryPtr, offset); } } Tcl_SetObjResult(interp, resultPtr); |