Index: TODO =================================================================== diff -u -rcd96543a3a6fb25ec8e52548892d12d244208a1a -r38b96e36c03950b6d2617d8e0bb8477913172a89 --- TODO (.../TODO) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) +++ TODO (.../TODO) (revision 38b96e36c03950b6d2617d8e0bb8477913172a89) @@ -2012,8 +2012,14 @@ - new parameter checker "parameter", performing an approximate checking for valid parameter specs - set NSF_ARG_CHECK_NONPOS only when there are multiple arguments -- remove space checking for NSF_ARG_CHECK_NONPOS in favor of parameter checker +- remove space checking in values for NSF_ARG_CHECK_NONPOS in favor of parameter checker +- make "... info children ?pattern?" compliant with XOTcl 1; + if pattern contains no wildcard and is no absolute path, nsf completes it. + (eg. Object create o; Object create o:x; o info children x" will return ::o::x) +- extended regression test + + TODO: - "-returns" Index: generic/nsf.c =================================================================== diff -u -rcd96543a3a6fb25ec8e52548892d12d244208a1a -r38b96e36c03950b6d2617d8e0bb8477913172a89 --- generic/nsf.c (.../nsf.c) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) +++ generic/nsf.c (.../nsf.c) (revision 38b96e36c03950b6d2617d8e0bb8477913172a89) @@ -12750,12 +12750,20 @@ ListChildren(Tcl_Interp *interp, NsfObject *object, CONST char *pattern, int classesOnly, NsfClass *type) { NsfObject *childObject; - Tcl_HashTable *cmdTablePtr; if (!object->nsPtr) return TCL_OK; - cmdTablePtr = Tcl_Namespace_cmdTablePtr(object->nsPtr); if (pattern && NoMetaChars(pattern)) { + Tcl_DString ds, *dsPtr = &ds; + Tcl_DStringInit(dsPtr); + + if (*pattern != ':') { + /* build a fully qualified name */ + Tcl_DStringAppend(dsPtr, object->nsPtr->fullName, -1); + Tcl_DStringAppend(dsPtr, "::", 2); + Tcl_DStringAppend(dsPtr, pattern, -1); + pattern = Tcl_DStringValue(dsPtr); + } if ((childObject = GetObjectFromString(interp, pattern)) && (!classesOnly || NsfObjectIsClass(childObject)) && @@ -12766,10 +12774,12 @@ } else { Tcl_SetObjResult(interp, NsfGlobalObjs[NSF_EMPTY]); } + Tcl_DStringFree(dsPtr); } else { Tcl_Obj *list = Tcl_NewListObj(0, NULL); Tcl_HashSearch hSrch; + Tcl_HashTable *cmdTablePtr = Tcl_Namespace_cmdTablePtr(object->nsPtr); Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(cmdTablePtr, &hSrch); char *key; Index: library/xotcl/tests/speedtest.xotcl =================================================================== diff -u -rbedb248602f8940383c0f4a10bb4f99b3a5f2c4f -r38b96e36c03950b6d2617d8e0bb8477913172a89 --- library/xotcl/tests/speedtest.xotcl (.../speedtest.xotcl) (revision bedb248602f8940383c0f4a10bb4f99b3a5f2c4f) +++ library/xotcl/tests/speedtest.xotcl (.../speedtest.xotcl) (revision 38b96e36c03950b6d2617d8e0bb8477913172a89) @@ -300,6 +300,7 @@ Test new -cmd {llength [c info children]} -expected $ccount Test new -cmd {c info children ::c::5} -expected ::c::5 +Test new -cmd {c info children 5} -expected ::c::5 Test new -count 1 -cmd {llength [Object info instances]} -expected $ocount