Index: generic/nsf.c =================================================================== diff -u -rf2c0f8e055015e58f3fa7bd338c872a2b7d76113 -rcd96543a3a6fb25ec8e52548892d12d244208a1a --- generic/nsf.c (.../nsf.c) (revision f2c0f8e055015e58f3fa7bd338c872a2b7d76113) +++ generic/nsf.c (.../nsf.c) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) @@ -7976,7 +7976,7 @@ } else { result = NsfVarErrMsg(interp, "expected ", ObjStr(pPtr->converterArg), " but got \"", ObjStr(objPtr), - "\" for parameter ", pPtr->name, NULL); + "\" for parameter \"", pPtr->name, "\"", NULL); } } } else { @@ -7986,8 +7986,9 @@ if (*value == '-' && (pPtr->flags & NSF_ARG_CHECK_NONPOS) && isalpha(*(value+1)) - && strchr(value+1, ' ') == 0) { - NsfLog(interp, NSF_LOG_WARN, "Value '%s' of parameter %s could be a non-positional argument", + /* && strchr(value+1, ' ') == 0 */ + ) { + NsfLog(interp, NSF_LOG_WARN, "Value '%s' of parameter '%s' could be a non-positional argument", value, pPtr->name); } } @@ -8016,7 +8017,7 @@ *clientData = (ClientData)INT2PTR(bool); } else { NsfVarErrMsg(interp, "expected boolean value but got \"", ObjStr(objPtr), - "\" for parameter ", pPtr->name, NULL); + "\" for parameter \"", pPtr->name, "\"", NULL); } *outObjPtr = objPtr; return result; @@ -8034,7 +8035,7 @@ *outObjPtr = objPtr; } else { NsfVarErrMsg(interp, "expected integer but got \"", ObjStr(objPtr), - "\" for parameter ", pPtr->name, NULL); + "\" for parameter \"", pPtr->name, "\"", NULL); } return result; } @@ -8113,6 +8114,22 @@ } static int +ConvertToParameter(Tcl_Interp *interp, Tcl_Obj *objPtr, NsfParam CONST *pPtr, + ClientData *clientData, Tcl_Obj **outObjPtr) { + CONST char *value = ObjStr(objPtr); + + *outObjPtr = objPtr; + /*fprintf(stderr, "convert to parameter '%s' t '%s'\n", value, pPtr->type);*/ + if (*value == ':' || (*value == '-' && *(value + 1) == ':')) { + return NsfObjErrType(interp, objPtr, pPtr->type, pPtr->name); + } + + *clientData = (char *)ObjStr(objPtr); + *outObjPtr = objPtr; + return TCL_OK; +} + +static int ConvertViaCmd(Tcl_Interp *interp, Tcl_Obj *objPtr, NsfParam CONST *pPtr, ClientData *clientData, Tcl_Obj **outObjPtr) { Tcl_Obj *ov[5], *savedResult; @@ -8312,6 +8329,8 @@ result = ParamOptionSetConverter(interp, paramPtr, "relation", ConvertToRelation); paramPtr->flags |= NSF_ARG_RELATION; /*paramPtr->type = "tclobj";*/ + } else if (strncmp(option, "parameter", 9) == 0) { + result = ParamOptionSetConverter(interp, paramPtr, "parameter", ConvertToParameter); } else if (length >= 6 && strncmp(option, "type=", 5) == 0) { if (paramPtr->converter != ConvertToObject && paramPtr->converter != ConvertToClass) @@ -8574,7 +8593,7 @@ return result; } } - if (nrNonposArgs > 0) { + if (nrNonposArgs > 0 && argsc > 1) { for (i=0; i < argsc; i++) { (paramsPtr + i)->flags |= NSF_ARG_CHECK_NONPOS; } @@ -13366,8 +13385,8 @@ if (theobj || thecls) { ObjectSystemFree(interp, osPtr); - NsfLog(interp, NSF_LOG_WARN, "Base %s class exists already; ignoring definition", - theobj ? object : class); + NsfLog(interp, NSF_LOG_WARN, "Base class '%s' exists already; ignoring definition", + theobj ? objectName : className); return TCL_OK; }