Index: TODO =================================================================== diff -u -ra660aaf6e696daa25336c6fbe1be90498d7f3607 -reaf3e9fdf5dd9b17e58f4d31e9c6a43e0cf907e7 --- TODO (.../TODO) (revision a660aaf6e696daa25336c6fbe1be90498d7f3607) +++ TODO (.../TODO) (revision eaf3e9fdf5dd9b17e58f4d31e9c6a43e0cf907e7) @@ -1588,6 +1588,8 @@ to NSF_DESTROY_CALLED to distinguish between attempted and successful destroy method invocations (important for cleanup) +- fix potential crash in + ::nx::Object info method definition ::nsf::methods::object::instvar TODO: - handing of xo::at_cleanup in serializer @@ -1604,12 +1606,6 @@ - use term "callprotection" in documentation for public|protected (to be consistent with info command) -get definition of ::nsf::methods::object::instvar -should never happen, maybe someone deleted the alias (null) for object ::xo::Attribute -procPtr 0x102ecd1c1 NsfObjDispatch 0x102ebe556 name instvar -alias instvar // ::xo::Attribute public alias instvar ::nsf::methods::object::instvar // - - - extend coro regression test - subcmd Index: generic/nsf.c =================================================================== diff -u -r16ecd9a1e7a06eb966b2d51d4a1c59457ab25d11 -reaf3e9fdf5dd9b17e58f4d31e9c6a43e0cf907e7 --- generic/nsf.c (.../nsf.c) (revision 16ecd9a1e7a06eb966b2d51d4a1c59457ab25d11) +++ generic/nsf.c (.../nsf.c) (revision eaf3e9fdf5dd9b17e58f4d31e9c6a43e0cf907e7) @@ -1155,7 +1155,6 @@ Tcl_DStringInit(dsPtr); Tcl_DStringAppend(dsPtr, methodName, objNameLength); regObject = GetObjectFromNsName(interp, Tcl_DStringValue(dsPtr), fromClassNS); - /*fprintf(stderr, "GetRegObject %s -> %p\n", Tcl_DStringValue(dsPtr), regObject);*/ if (regObject) { *methodName1 = procName; } @@ -1263,9 +1262,11 @@ } else if (*methodName == ':') { cmd = Tcl_GetCommandFromObj(interp, methodObj); referencedObject = GetRegObject(interp, cmd, methodName, methodName1, fromClassNS); - if (referencedObject) { - *regObject = referencedObject; - *defObject = referencedObject; + *regObject = referencedObject; + *defObject = referencedObject; + if (referencedObject == NULL) { + /* the cmd was not registered on an object or class */ + cmd = NULL; } } else { *methodName1 = methodName; @@ -15412,8 +15413,9 @@ Tcl_DStringInit(dsPtr); cmd = ResolveMethodName(interp, class->nsPtr, methodNameObj, dsPtr, ®Object, &defObject, &methodName1, &fromClassNS); - /*fprintf(stderr, "NsfClassInfoMethodMethod object %p regObject %p defObject %p fromClass %d\n", - &class->object,regObject,defObject,fromClassNS);*/ + /*fprintf(stderr, + "NsfClassInfoMethodMethod object %p regObject %p defObject %p fromClass %d cmd %p\n", + &class->object,regObject,defObject,fromClassNS, cmd);*/ result = ListMethod(interp, regObject ? regObject : &class->object, defObject ? defObject : &class->object,