Index: TODO =================================================================== diff -u -re415f4153e7750b77616795150822b91db1ba9d4 -r507acdb9edb4f73339590c097aee004401cedc45 --- TODO (.../TODO) (revision e415f4153e7750b77616795150822b91db1ba9d4) +++ TODO (.../TODO) (revision 507acdb9edb4f73339590c097aee004401cedc45) @@ -2044,6 +2044,8 @@ - added returns handling for nx in serializer - extended regression test +- provide warning if nonpositional argument is passed more than once + TODO: - check performance implications of value conflict checker Index: generic/nsf.c =================================================================== diff -u -rbb18837f55b64ecdaf970c9e77624bc30f4c417a -r507acdb9edb4f73339590c097aee004401cedc45 --- generic/nsf.c (.../nsf.c) (revision bb18837f55b64ecdaf970c9e77624bc30f4c417a) +++ generic/nsf.c (.../nsf.c) (revision 507acdb9edb4f73339590c097aee004401cedc45) @@ -11957,6 +11957,12 @@ return TCL_ERROR; } + if (pcPtr->flags[j] & NSF_ARG_SET) { + NsfLog(interp, NSF_LOG_WARN, "Non-positional parameter %s was passed more than once", + nppPtr->name); + } + pcPtr->flags[j] |= NSF_ARG_SET; + if (pcPtr->flags[j] & NSF_PC_MUST_DECR) { pcPtr->status |= NSF_PC_STATUS_MUST_DECR; } Index: generic/nsfInt.h =================================================================== diff -u -ra82b93b0eb26ab0e3e815ffc229bd61b7d5ef2cc -r507acdb9edb4f73339590c097aee004401cedc45 --- generic/nsfInt.h (.../nsfInt.h) (revision a82b93b0eb26ab0e3e815ffc229bd61b7d5ef2cc) +++ generic/nsfInt.h (.../nsfInt.h) (revision 507acdb9edb4f73339590c097aee004401cedc45) @@ -375,6 +375,7 @@ #define NSF_ARG_IS_CONVERTER 0x2000 #define NSF_ARG_IS_ENUMERATION 0x4000 #define NSF_ARG_CHECK_NONPOS 0x8000 +#define NSF_ARG_SET 0x10000 /* Disallowed parameter options */ #define NSF_DISALLOWED_ARG_METHOD_PARAMETER (NSF_ARG_METHOD|NSF_ARG_INITCMD|NSF_ARG_RELATION)