Index: generic/nsf.c =================================================================== diff -u -N -r3ebbf610e7283069e36fd24ab85a590a4b2fb67d -rc86c077585d0ea7664dc3791e21a577927655da8 --- generic/nsf.c (.../nsf.c) (revision 3ebbf610e7283069e36fd24ab85a590a4b2fb67d) +++ generic/nsf.c (.../nsf.c) (revision c86c077585d0ea7664dc3791e21a577927655da8) @@ -203,6 +203,9 @@ static Nsf_TypeConverter ConvertToNothing, ConvertViaCmd, ConvertToObjpattern; +static const char * autonamePrefix = "::nsf::__#"; +static const int autonamePrefixLength = 10; + /* * Tcl_Obj Types for Next Scripting Objects */ @@ -29103,7 +29106,7 @@ Tcl_DString ds, *dsPtr = &ds; Tcl_DStringInit(dsPtr); - Tcl_DStringAppend(dsPtr, "::nsf::__#", 10); + Tcl_DStringAppend(dsPtr, autonamePrefix, autonamePrefixLength); NewTclCommand(interp, dsPtr); @@ -32591,6 +32594,7 @@ NsfObject *newObject = NULL; Tcl_Obj *actualNameObj, *methodObj, *tmpObj = NULL; int result, nameLength; + bool autoNameCreate; const char *nameString; Tcl_Namespace *parentNsPtr; @@ -32619,6 +32623,7 @@ */ if (unlikely(NSValidObjectName(nameString, (size_t)nameLength) == 0)) { result = NsfPrintError(interp, "cannot allocate object - illegal name '%s'", nameString); + autoNameCreate = NSF_FALSE; goto create_method_exit; } @@ -32640,11 +32645,18 @@ /* fprintf(stderr, " **** fixed name is '%s'\n", nameString); */ INCR_REF_COUNT(tmpObj); actualNameObj = tmpObj; + autoNameCreate = NSF_FALSE; } else { parentNsPtr = NULL; actualNameObj = nameObj; /* fprintf(stderr, " **** used specified name is '%s'\n", nameString); */ + + /* + * Check for autname prefix string. This string is always an absolute path + * name, so it is sufficient to test here. + */ + autoNameCreate = (strncmp(autonamePrefix, nameString, autonamePrefixLength) == 0); } /* @@ -32770,6 +32782,10 @@ } create_method_exit: + if (autoNameCreate && result == TCL_OK) { + newObject->flags |= NSF_IS_AUTONAMED; + } + if (tmpObj != NULL) { DECR_REF_COUNT(tmpObj); } @@ -32957,7 +32973,7 @@ } Tcl_DStringAppend(dsPtr, "::__#", 5); } else { - Tcl_DStringAppend(dsPtr, "::nsf::__#", 10); + Tcl_DStringAppend(dsPtr, autonamePrefix, autonamePrefixLength); } NewTclCommand(interp, dsPtr); @@ -32990,16 +33006,6 @@ } } - { - Tcl_Obj *resultObj; - NsfObject *object; - - resultObj = Tcl_GetObjResult(interp); - if (GetObjectFromObj(interp, resultObj, &object) == TCL_OK) { - object->flags |= NSF_IS_AUTONAMED; - } - } - DECR_REF_COUNT(fullnameObj); Tcl_DStringFree(dsPtr);