Index: TODO =================================================================== diff -u -N -r2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879 -r531982261a0deb399b608a42d4469af3d3041399 --- TODO (.../TODO) (revision 2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879) +++ TODO (.../TODO) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -2030,6 +2030,10 @@ - fixed bug with required last object parameter without provided value - extended regression test +- new printf-style error message generator: NsfPrintError() +- simplified error handling: removed NsfVarErrMsg() and NsfErrMsg() + and replaced it by NsfPrintError() + TODO: - "-returns" Index: generic/nsf.c =================================================================== diff -u -N -r2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879 -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsf.c (.../nsf.c) (revision 2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879) +++ generic/nsf.c (.../nsf.c) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -297,7 +297,7 @@ va_list ap; if (RUNTIME_STATE(interp)->debugLevel >= requiredLevel) { - CONST char *level = requiredLevel == NSF_LOG_WARN ? "Warning" : "Inform"; + CONST char *level = requiredLevel == NSF_LOG_WARN ? "Warning" : "Notice"; Tcl_DString cmdString, ds; Tcl_DStringInit(&ds); @@ -2887,7 +2887,7 @@ * the command anyway, since its parent is currently being * deleted. */ - NsfLog(interp, NSF_LOG_INFORM, "Destroy failed for object %s, perform low level deletion", + NsfLog(interp, NSF_LOG_NOTICE, "Destroy failed for object %s, perform low level deletion", ObjectName(object)); if (object->teardown) { @@ -3380,9 +3380,8 @@ */ Tcl_Obj *bootstrapObj = Tcl_GetVar2Ex(interp, "::nsf::bootstrap", NULL, TCL_GLOBAL_ONLY); if (bootstrapObj == NULL) { - result = NsfVarErrMsg(interp, "Method '", methodName, "' of ", ObjectName(object), - " cannot be overwritten. Derive e.g. a sub-class!", - (char *) NULL); + result = NsfPrintError(interp, "Method '%s' of %s cannot be overwritten. " + "Derive e.g. a sub-class!", methodName, ObjectName(object)); } else { result = TCL_OK; } @@ -4118,15 +4117,13 @@ if (acResult == TCL_ERROR) { Tcl_Obj *sr = Tcl_GetObjResult(interp); INCR_REF_COUNT(sr); - NsfVarErrMsg(interp, "Error in Assertion: {", - ObjStr(checkFailed->content), "} in proc '", - methodName, "'\n\n", ObjStr(sr), (char *) NULL); + NsfPrintError(interp, "Error in Assertion: {%s} in proc '%s'\n%s", + ObjStr(checkFailed->content), methodName, ObjStr(sr)); DECR_REF_COUNT(sr); return TCL_ERROR; } - return NsfVarErrMsg(interp, "Assertion failed check: {", - ObjStr(checkFailed->content), "} in proc '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "Assertion failed check: {%s} in proc '%s'", + ObjStr(checkFailed->content), methodName); } Tcl_SetObjResult(interp, savedObjResult); @@ -4231,10 +4228,9 @@ } } if (opt->checkoptions == CHECK_NONE && ocArgs>0) { - return NsfVarErrMsg(interp, "Unknown check option in command '", - ObjectName(object), " check ", ObjStr(arg), - "', valid: all pre post object-invar class-invar", - (char *) NULL); + return NsfPrintError(interp, "Unknown check option in command '%s' check %s, ", + "valid: all pre post object-invar class-invar", + ObjectName(object), ObjStr(arg)); } return TCL_OK; } @@ -4437,8 +4433,8 @@ nameObj = ovName[0]; guardObj = ovName[2]; /*fprintf(stderr, "mixinadd name = '%s', guard = '%s'\n", ObjStr(name), ObjStr(guard));*/ - } /*else return NsfVarErrMsg(interp, "mixin registration '", ObjStr(name), - "' has too many elements.", (char *) NULL);*/ + } /*else return NsfPrintError(interp, "mixin registration '%s' has too many elements", + ObjStr(name));*/ } if (GetClassFromObj(interp, nameObj, &mixin, baseClass) != TCL_OK) @@ -4577,7 +4573,7 @@ int new; if (inst->flags & NSF_TCL_DELETE) { - NsfLog(interp, NSF_LOG_INFORM, "Object %s is apparently deleted", ObjectName(inst)); + NsfLog(interp, NSF_LOG_NOTICE, "Object %s is apparently deleted", ObjectName(inst)); continue; } @@ -5387,11 +5383,7 @@ } else if (result == TCL_ERROR) { Tcl_Obj *sr = Tcl_GetObjResult(interp); INCR_REF_COUNT(sr); - - /* fprintf(stderr, " +++ ERROR\n");*/ - - NsfVarErrMsg(interp, "Guard Error: '", ObjStr(guardObj), "'\n\n", - ObjStr(sr), (char *) NULL); + NsfPrintError(interp, "Guard Error: '%s'\n%s", ObjStr(guardObj), ObjStr(sr)); DECR_REF_COUNT(sr); return TCL_ERROR; } @@ -5586,8 +5578,7 @@ return TCL_OK; } } - return NsfVarErrMsg(interp, "info (*)guard: can't find filter/mixin ", - interceptorName, (char *) NULL); + return NsfPrintError(interp, "info guard: can't find filter/mixin %s", interceptorName); } /* @@ -5610,14 +5601,13 @@ } if (!(cmd = FilterSearch(interp, ObjStr(nameObj), startingObject, startingClass, &cl))) { - if (startingObject) - return NsfVarErrMsg(interp, "object filter: can't find filterproc on: ", - ObjectName(startingObject), " - proc: ", - ObjStr(nameObj), (char *) NULL); - else - return NsfVarErrMsg(interp, "class filter: can't find filterproc on: ", - ClassName(startingClass), " - proc: ", - ObjStr(nameObj), (char *) NULL); + if (startingObject) { + return NsfPrintError(interp, "object filter: can't find filterproc '%s' on %s ", + ObjStr(nameObj), ObjectName(startingObject)); + } else { + return NsfPrintError(interp, "class filter: can't find filterproc '%s' on %s ", + ObjStr(nameObj), ClassName(startingClass)); + } } /*fprintf(stderr, " +++ adding filter %s cl %p\n", ObjStr(nameObj), cl);*/ @@ -6298,9 +6288,9 @@ */ /*if (strstr(varNameString, "::") || *varNameString == ':') {*/ if (*varNameString == ':') { - return NsfVarErrMsg(interp, "variable name \"", varNameString, - "\" must not contain namespace separator or colon prefix", - (char *) NULL); + return NsfPrintError(interp, "variable name \"%s\" must not contain " + "namespace separator or colon prefix", + varNameString); } return TCL_OK; } @@ -7139,8 +7129,8 @@ */ Tcl_DeleteCommandFromToken(interp, cmd); NsfCleanupObject(invokeObj, "alias-delete1"); - return NsfVarErrMsg(interp, "Trying to dispatch deleted object via method '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "Trying to dispatch deleted object via method '%s'", + methodName); } /* @@ -7576,7 +7566,7 @@ * {1} Class ::State * {2} Class ::State -parameter x */ - NsfLog(interp, NSF_LOG_INFORM, "Don't invoke object %s this way. Register object via alias...", methodName); + NsfLog(interp, NSF_LOG_NOTICE, "Don't invoke object %s this way. Register object via alias...", methodName); cmd = NULL; } else if (IsClassNsName(methodName)) { @@ -7854,9 +7844,8 @@ /*fprintf(stderr, "--- No unknown method Name %s objv[%d] %s\n", ObjStr(methodObj), 1, ObjStr(objv[1]));*/ - result = NsfVarErrMsg(interp, ObjectName(object), - ": unable to dispatch method '", - ObjStr(objv[1]), "'", (char *) NULL); + result = NsfPrintError(interp, "%s: unable to dispatch method '%s'", + ObjectName(object), ObjStr(objv[1])); } return result; @@ -7975,9 +7964,8 @@ if (success == 1) { *clientData = (ClientData)objPtr; } else { - result = NsfVarErrMsg(interp, "expected ", ObjStr(pPtr->converterArg), - " but got \"", ObjStr(objPtr), - "\" for parameter \"", pPtr->name, "\"", NULL); + result = NsfPrintError(interp, "expected %s but got \"%s\" for parameter \"%s\"", + ObjStr(pPtr->converterArg), ObjStr(objPtr), pPtr->name); } } } else { @@ -8017,8 +8005,8 @@ if (result == TCL_OK) { *clientData = (ClientData)INT2PTR(bool); } else { - NsfVarErrMsg(interp, "expected boolean value but got \"", ObjStr(objPtr), - "\" for parameter \"", pPtr->name, "\"", NULL); + NsfPrintError(interp, "expected boolean value but got \"%s\" for parameter \"%s\"", + ObjStr(objPtr), pPtr->name); } *outObjPtr = objPtr; return result; @@ -8035,8 +8023,8 @@ *clientData = (ClientData)INT2PTR(i); *outObjPtr = objPtr; } else { - NsfVarErrMsg(interp, "expected integer but got \"", ObjStr(objPtr), - "\" for parameter \"", pPtr->name, "\"", NULL); + NsfPrintError(interp, "expected integer but got \"%s\" for parameter \"%s\"", + ObjStr(objPtr), pPtr->name); } return result; } @@ -8250,8 +8238,8 @@ ParamOptionSetConverter(Tcl_Interp *interp, NsfParam *paramPtr, CONST char *typeName, NsfTypeConverter *converter) { if (paramPtr->converter) { - return NsfVarErrMsg(interp, "Refuse to redefine parameter converter to use ", - typeName, (char *) NULL); + return NsfPrintError(interp, "Refuse to redefine parameter converter to use %s", + typeName); } paramPtr->converter = converter; paramPtr->nrArgs = 1; @@ -8295,53 +8283,45 @@ if (*option == '0') { paramPtr->flags |= NSF_ARG_ALLOW_EMPTY; } else if (*option != '1') { - return NsfVarErrMsg(interp, - "lower bound of multiplicty in ", argString, " not supported", - (char *) NULL); + return NsfPrintError(interp, "lower bound of multiplicty in %s not supported", argString); } /* check upper bound */ option = dotdot + 2; if (*option == '*' || *option == 'n') { if ((paramPtr->flags & (NSF_ARG_INITCMD|NSF_ARG_RELATION|NSF_ARG_METHOD|NSF_ARG_SWITCH)) != 0) { - return NsfVarErrMsg(interp, - "option multivalued not allowed for \"initcmd\", \"method\", \"relation\" or \"switch\"\n", - (char *) NULL); + return NsfPrintError(interp, + "option multivalued not allowed for \"initcmd\", \"method\", \"relation\" or \"switch\"\n"); } paramPtr->flags |= NSF_ARG_MULTIVALUED; } else if (*option != '1') { - return NsfVarErrMsg(interp, - "upper bound of multiplicty in ", argString, " not supported", - (char *) NULL); + return NsfPrintError(interp, "upper bound of multiplicty in %s not supported", argString); } //fprintf(stderr, "%s set multivalued option %s\n", paramPtr->name, option); } else if (strncmp(option, "multivalued", 11) == 0) { fprintf(stderr, "******* multivalued is deprecated, use instead multiplicity 1..*\n"); if ((paramPtr->flags & (NSF_ARG_INITCMD|NSF_ARG_RELATION|NSF_ARG_METHOD|NSF_ARG_SWITCH)) != 0) - return NsfVarErrMsg(interp, - "option multivalued not allowed for \"initcmd\", \"method\", \"relation\" or \"switch\"\n", - (char *) NULL); + return NsfPrintError(interp, + "option multivalued not allowed for \"initcmd\", \"method\", \"relation\" or \"switch\"\n"); paramPtr->flags |= NSF_ARG_MULTIVALUED; } else if (strncmp(option, "noarg", 5) == 0) { if ((paramPtr->flags & NSF_ARG_METHOD) == 0) { - return NsfVarErrMsg(interp, "option noarg only allowed for parameter type \"method\"", - (char *) NULL); + return NsfPrintError(interp, "option noarg only allowed for parameter type \"method\""); } paramPtr->flags |= NSF_ARG_NOARG; paramPtr->nrArgs = 0; } else if (length >= 4 && strncmp(option, "arg=", 4) == 0) { if ((paramPtr->flags & (NSF_ARG_METHOD|NSF_ARG_RELATION)) == 0 && paramPtr->converter != ConvertViaCmd) - return NsfVarErrMsg(interp, - "option arg= only allowed for \"method\", \"relation\" or \"user-defined converter\"", - (char *) NULL); + return NsfPrintError(interp, + "option arg= only allowed for \"method\", \"relation\" or user-defined converter"); paramPtr->converterArg = Tcl_NewStringObj(option+4, length-4); INCR_REF_COUNT(paramPtr->converterArg); } else if (strncmp(option, "switch", 6) == 0) { if (*paramPtr->name != '-') { - return NsfVarErrMsg(interp, - "invalid parameter type \"switch\" for argument ", paramPtr->name, - "; type \"switch\" only allowed for non-positional arguments", - (char *) NULL); + return NsfPrintError(interp, + "invalid parameter type \"switch\" for argument \"%s\"; " + "type \"switch\" only allowed for non-positional arguments", + paramPtr->name); } result = ParamOptionSetConverter(interp, paramPtr, "switch", ConvertToSwitch); paramPtr->flags |= NSF_ARG_SWITCH; @@ -8372,7 +8352,7 @@ } else if (length >= 6 && strncmp(option, "type=", 5) == 0) { if (paramPtr->converter != ConvertToObject && paramPtr->converter != ConvertToClass) - return NsfVarErrMsg(interp, "option type= only allowed for object or class", (char *) NULL); + return NsfPrintError(interp, "option type= only allowed for object or class"); paramPtr->converterArg = Tcl_NewStringObj(option+5, length-5); INCR_REF_COUNT(paramPtr->converterArg); } else if (length >= 6 && strncmp(option, "slot=", 5) == 0) { @@ -8403,7 +8383,7 @@ } if ((paramPtr->flags & disallowedOptions)) { - return NsfVarErrMsg(interp, "Parameter option '", option, "' not allowed", (char *) NULL); + return NsfPrintError(interp, "Parameter option '%s' not allowed", option); } return result; @@ -8422,9 +8402,9 @@ result = Tcl_ListObjGetElements(interp, arg, &npac, &npav); if (result != TCL_OK || npac < 1 || npac > 2) { - return NsfVarErrMsg(interp, "wrong # of elements in parameter definition for method ", - ObjStr(procNameObj), " (should be 1 or 2 list elements): ", - ObjStr(arg), (char *) NULL); + return NsfPrintError(interp, "wrong # of elements in parameter definition for method '%s'" + " (should be 1 or 2 list elements): %s", + ObjStr(procNameObj), ObjStr(arg)); } argString = ObjStr(npav[0]); @@ -8499,9 +8479,8 @@ if (npac == 2) { if (disallowedFlags & NSF_ARG_HAS_DEFAULT) { - NsfVarErrMsg(interp, "parameter \"", argString, - "\" is not allowed to have default \"", - ObjStr(npav[1]), "\"", (char *) NULL); + NsfPrintError(interp, "parameter \"%s\" is not allowed to have default \"%s\"", + argString, ObjStr(npav[1])); goto param_error; } @@ -8517,8 +8496,8 @@ */ paramPtr->flags &= ~NSF_ARG_REQUIRED; } else if (paramPtr->flags & NSF_ARG_SUBST_DEFAULT) { - NsfVarErrMsg(interp, "parameter option substdefault specified for parameter \"", - paramPtr->name, "\" without default value", (char *) NULL); + NsfPrintError(interp, "parameter option substdefault specified for parameter \"%s\"" + " without default value", paramPtr->name); goto param_error; } @@ -8574,9 +8553,7 @@ } } if ((paramPtr->flags & NSF_ARG_IS_CONVERTER) && paramPtr->converter != ConvertViaCmd) { - return NsfVarErrMsg(interp, - "option 'convert' only allowed for application-defined converters", - (char *) NULL); + return NsfPrintError(interp, "option 'convert' only allowed for application-defined converters"); } if (converterNameObj != paramPtr->converterName) { DECR_REF_COUNT(converterNameObj); @@ -8612,8 +8589,7 @@ result = Tcl_ListObjGetElements(interp, args, &argsc, &argsv); if (result != TCL_OK) { - return NsfVarErrMsg(interp, "cannot break down non-positional args: ", - ObjStr(args), (char *) NULL); + return NsfPrintError(interp, "cannot break down non-positional args: %s", ObjStr(args)); } if (argsc > 0) { @@ -8779,10 +8755,9 @@ int result; if (precondition && !postcondition) { - return NsfVarErrMsg(interp, ClassName(cl), " method '", nameStr, - "'; when specifying a precondition (", ObjStr(precondition), - ") a postcondition must be specified as well", - (char *) NULL); + return NsfPrintError(interp, "%s method '%s'; when specifying a precondition (%s)" + " a postcondition must be specified as well", + ClassName(cl), nameStr, ObjStr(precondition)); } /* if both, args and body are empty strings, we delete the method */ @@ -8930,7 +8905,7 @@ if (withEarlybinding) { Tcl_Command cmd = Tcl_GetCommandFromObj(interp, tcd->cmdName); if (cmd == NULL) { - result = NsfVarErrMsg(interp, "cannot lookup command '", ObjStr(tcd->cmdName), "'", (char *) NULL); + result = NsfPrintError(interp, "cannot lookup command '%s'", ObjStr(tcd->cmdName)); goto forward_process_options_exit; } tcd->objProc = Tcl_Command_objProc(cmd); @@ -9224,11 +9199,11 @@ *freeArgumentVector = 0; if (!cscPtr) { - return NsfVarErrMsg(interp, "next: can't find self", (char *) NULL); + return NsfPrintError(interp, "next: can't find self"); } if (!cscPtr->cmdPtr) { - return NsfErrMsg(interp, "next: no executing proc", TCL_STATIC); + return NsfPrintError(interp, "next: no executing proc"); } oc = Tcl_CallFrame_objc(framePtr); @@ -9662,7 +9637,7 @@ int NsfKObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { if (objc < 2) - return NsfVarErrMsg(interp, "wrong # of args for K", (char *) NULL); + return NsfPrintError(interp, "wrong # of args for K"); Tcl_SetObjResult(interp, objv[1]); return TCL_OK; @@ -10125,7 +10100,7 @@ if (resultObj) { if (GetClassFromObj(interp, resultObj, &resultClass, NULL) != TCL_OK) { - NsfErrMsg(interp, "default superclass is not a class", TCL_STATIC); + NsfPrintError(interp, "default superclass is not a class"); } /* fprintf(stderr, "DefaultSuperClass for %s got from var %s\n", ClassName(cl), ObjStr(nameObj)); */ @@ -10529,8 +10504,7 @@ structures. */ if (!IsMetaClass(interp, object->cl, 1)) { - return NsfVarErrMsg(interp, "cannot turn object into a class", - (char *) NULL); + return NsfPrintError(interp, "cannot turn object into a class"); } } else { /* The target class is not a meta class. */ @@ -10539,8 +10513,7 @@ ClassName(cl), NsfObjectIsClass(object) );*/ if (NsfObjectIsClass(object)) { - return NsfVarErrMsg(interp, "cannot turn class into an object ", - (char *) NULL); + return NsfPrintError(interp, "cannot turn class into an object "); } } (void)RemoveInstance(object, object->cl); @@ -10811,9 +10784,9 @@ Nsf_PopFrameObj(interp, framePtr); if (otherPtr == NULL) { - return NsfVarErrMsg(interp, "can't import variable ", ObjStr(varName), - " into method scope: can't find variable on ", ObjectName(object), - (char *) NULL); + return NsfPrintError(interp, "can't import variable %s into method scope: " + "can't find variable on %s", + ObjStr(varName), ObjectName(object)); } /* @@ -10826,10 +10799,9 @@ * see Tcl_VariableObjCmd ... */ if (arrayPtr) { - return NsfVarErrMsg(interp, "can't make instance variable ", ObjStr(varName), - " on ", ObjectName(object), - ": Variable cannot be an element in an array;", - " use e.g. an alias.", (char *) NULL); + return NsfPrintError(interp, "can't make instance variable %s on %s: " + "Variable cannot be an element in an array; use e.g. an alias.", + ObjStr(varName), ObjectName(object)); } newName = varName; @@ -10866,10 +10838,9 @@ */ if (!new) { /*fprintf(stderr, "GetIntoScope createalias\n");*/ - if (varPtr == otherPtr) - return NsfVarErrMsg(interp, "can't instvar to variable itself", - (char *) NULL); - + if (varPtr == otherPtr) { + return NsfPrintError(interp, "can't instvar to variable itself"); + } if (TclIsVarLink(varPtr)) { /* we try to make the same instvar again ... this is ok */ Var *linkPtr = valueOfVar(Var, varPtr, linkPtr); @@ -10889,11 +10860,9 @@ } } else if (!TclIsVarUndefined(varPtr)) { - return NsfVarErrMsg(interp, "varname '", varNameString, - "' exists already", (char *) NULL); + return NsfPrintError(interp, "varname '%s' exists already", varNameString); } else if (TclIsVarTraced(varPtr)) { - return NsfVarErrMsg(interp, "varname '", varNameString, - "' has traces: can't use for instvar", (char *) NULL); + return NsfPrintError(interp, "varname '%s' has traces: can't use for instvar", varNameString); } } @@ -10909,9 +10878,8 @@ TclIsVarLink(varPtr), TclIsVarTraced(varPtr), TclIsVarUndefined(varPtr)); */ } else { - return NsfVarErrMsg(interp, cmdName, - " cannot import variable '", varNameString, - "' into method scope; not called from a method frame", (char *) NULL); + return NsfPrintError(interp, "%s cannot import variable '%s' into method scope; " + "not called from a method frame", cmdName, varNameString); } return TCL_OK; } @@ -10928,8 +10896,8 @@ if (object->nsPtr) { int rc = NSDeleteCmd(interp, object->nsPtr, methodName); if (rc < 0) - return NsfVarErrMsg(interp, ObjectName(object), " cannot delete method '", methodName, - "' of object ", ObjectName(object), (char *) NULL); + return NsfPrintError(interp, "%s cannot delete method '%s' of object %s", + ObjectName(object), methodName, ObjectName(object)); } return TCL_OK; } @@ -10946,9 +10914,9 @@ AssertionRemoveProc(opt->assertions, methodName); rc = NSDeleteCmd(interp, cl->nsPtr, methodName); - if (rc < 0) - return NsfVarErrMsg(interp, ClassName(cl), " cannot delete method '", methodName, - "' of class ", ClassName(cl), (char *) NULL); + if (rc < 0) { + return NsfPrintError(interp, "%s: cannot delete method '%s'", ClassName(cl), methodName); + } return TCL_OK; } @@ -11061,11 +11029,11 @@ pos --; } if (ForwardArgString == remainder || abs(pos) > totalargs) { - return NsfVarErrMsg(interp, "forward: invalid index specified in argument ", - ObjStr(ForwardArgObj), (char *) NULL); + return NsfPrintError(interp, "forward: invalid index specified in argument %s", + ObjStr(ForwardArgObj)); } if (!remainder || *remainder != ' ') { - return NsfVarErrMsg(interp, "forward: invaild syntax in '", ObjStr(ForwardArgObj), - "' use: %@ ", (char *) NULL); + return NsfPrintError(interp, "forward: invalid syntax in '%s'; use: %@ ", + ObjStr(ForwardArgObj)); } ForwardArgString = ++remainder; @@ -11102,17 +11070,15 @@ if (c1 != '\0') { if (Tcl_ListObjIndex(interp, ForwardArgObj, 1, &list) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: %1 must be followed by a valid list, given: '", - ObjStr(ForwardArgObj), "'", (char *) NULL); + return NsfPrintError(interp, "forward: %%1 must be followed by a valid list, given: '%s'", + ObjStr(ForwardArgObj)); } if (Tcl_ListObjGetElements(interp, list, &nrElements, &listElements) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: %1 contains invalid list '", - ObjStr(list), "'", (char *) NULL); + return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(list)); } } else if (tcd->subcommands) { /* deprecated part */ if (Tcl_ListObjGetElements(interp, tcd->subcommands, &nrElements, &listElements) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: %1 contains invalid list '", - ObjStr(list), "'", (char *) NULL); + return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(list)); } } /*fprintf(stderr, "nrElements=%d, nra=%d firstPos %d objc %d\n", @@ -11136,13 +11102,10 @@ /*fprintf(stderr, "process flag '%s'\n", firstActualArgument);*/ if (Tcl_ListObjGetElements(interp, ForwardArgObj, &nrElements, &listElements) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: '", ForwardArgString, "' is not a valid list", - (char *) NULL); + return NsfPrintError(interp, "forward: '%s' is not a valid list", ForwardArgString); } if (nrElements < 1 || nrElements > 2) { - return NsfVarErrMsg(interp, "forward: '", ForwardArgString, - "' must contain 1 or 2 arguments", - (char *) NULL); + return NsfPrintError(interp, "forward: '%s': must contain 1 or 2 arguments", ForwardArgString); } firstElementString = ObjStr(listElements[0]); firstElementString++; /* we skip the dash */ @@ -11194,16 +11157,15 @@ } else if (c == 'a' && !strncmp(ForwardArgString, "argcl", 4)) { if (Tcl_ListObjIndex(interp, ForwardArgObj, 1, &list) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: %argclindex must by a valid list, given: '", - ForwardArgString, "'", (char *) NULL); + return NsfPrintError(interp, "forward: %%argclindex must by a valid list, given: '%s'", + ForwardArgString); } if (Tcl_ListObjGetElements(interp, list, &nrElements, &listElements) != TCL_OK) { - return NsfVarErrMsg(interp, "forward: %argclindex contains invalid list '", - ObjStr(list), "'", (char *) NULL); + return NsfPrintError(interp, "forward: %%argclindex contains invalid list '%s'", ObjStr(list)); } if (nrArgs >= nrElements) { - return NsfVarErrMsg(interp, "forward: not enough elements in specified list of ARGC argument ", - ForwardArgString, (char *) NULL); + return NsfPrintError(interp, "forward: not enough elements in specified list of ARGC argument %s", + ForwardArgString); } *out = listElements[nrArgs]; } else if (c == '%') { @@ -11472,10 +11434,9 @@ assert(tcd->object==GetSelfObj(interp)); if (self == NULL) { - return NsfVarErrMsg(interp, "no object active for alias '", - Tcl_GetCommandName(interp, tcd->aliasCmd), - "'; don't call aliased methods via namespace paths", - (char *) NULL); + return NsfPrintError(interp, "no object active for alias '%s'; " + "don't call aliased methods via namespace paths", + Tcl_GetCommandName(interp, tcd->aliasCmd)); } return MethodDispatch((ClientData)self, interp, objc, objv, tcd->aliasedCmd, self, tcd->class, methodName, 0, 0); @@ -11618,8 +11579,7 @@ if (result != TCL_OK) { Tcl_Obj *res = Tcl_DuplicateObj(Tcl_GetObjResult(interp)); /* save the result */ INCR_REF_COUNT(res); - NsfVarErrMsg(interp, ObjStr(res), " during '", ObjectName(object), " ", - methodName, "'", (char *) NULL); + NsfPrintError(interp, "%s during '%s.%s", ObjStr(res), ObjectName(object), methodName); DECR_REF_COUNT(res); } @@ -11733,8 +11693,7 @@ } else { Tcl_Obj *resultObj = Tcl_GetObjResult(interp); INCR_REF_COUNT(resultObj); - NsfVarErrMsg(interp, "invalid value in \"", ObjStr(objPtr), "\": ", - ObjStr(resultObj), (char *) NULL); + NsfPrintError(interp, "invalid value in \"%s\": %s", ObjStr(objPtr), ObjStr(resultObj)); DECR_REF_COUNT(resultObj); DECR_REF_COUNT(*outObjPtr); *flags &= ~NSF_PC_MUST_DECR; @@ -11773,8 +11732,7 @@ } if (objc == 0 && ((pPtr->flags & NSF_ARG_ALLOW_EMPTY) == 0)) { - return NsfVarErrMsg(interp, "invalid parameter value: list is not allowed to be empty", - (char *) NULL); + return NsfPrintError(interp, "invalid parameter value: list is not allowed to be empty"); } /* @@ -11809,8 +11767,7 @@ } else { Tcl_Obj *resultObj = Tcl_GetObjResult(interp); INCR_REF_COUNT(resultObj); - NsfVarErrMsg(interp, "invalid value in \"", ObjStr(objPtr), "\": ", - ObjStr(resultObj), (char *) NULL); + NsfPrintError(interp, "invalid value in \"%s\": %s", ObjStr(objPtr), ObjStr(resultObj)); DECR_REF_COUNT(resultObj); break; } @@ -11915,12 +11872,11 @@ } } } else if (pPtr->flags & NSF_ARG_REQUIRED) { - return NsfVarErrMsg(interp, - pcPtr->object ? ObjectName(pcPtr->object) : "", - pcPtr->object ? " " : "", - ObjStr(pcPtr->full_objv[0]), ": required argument '", - pPtr->nameObj ? ObjStr(pPtr->nameObj) : pPtr->name, - "' is missing", (char *) NULL); + return NsfPrintError(interp, "%s%s%s: required argument '%s' is missing", + pcPtr->object ? ObjectName(pcPtr->object) : "", + pcPtr->object ? " " : "", + ObjStr(pcPtr->full_objv[0]), + pPtr->nameObj ? ObjStr(pPtr->nameObj) : pPtr->name); } else { /* * Use as dummy default value an arbitrary symbol, which must @@ -12004,9 +11960,7 @@ } } else { - Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "Argument for parameter '", objStr, "' expected", (char *) NULL); - return TCL_ERROR; + return NsfPrintError(interp, "Argument for parameter '%s' expected", objStr); } } flagCount++; @@ -12278,11 +12232,11 @@ return TCL_OK; } } else if (((Command *)cmd)->objProc == NsfForwardMethod) { - return NsfVarErrMsg(interp, "info params: could not obtain parameter definition for forwarder '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "info params: could not obtain parameter definition for forwarder '%s'", + methodName); } else if (((Command *)cmd)->objProc != NsfObjDispatch) { - return NsfVarErrMsg(interp, "info params: could not obtain parameter definition for method '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "info params: could not obtain parameter definition for method '%s'", + methodName); } else { /* procPtr == NsfObjDispatch, be quiet */ return TCL_OK; @@ -12868,7 +12822,7 @@ return TCL_OK; } } - return NsfVarErrMsg(interp, "'", pattern, "' is not a forwarder", (char *) NULL); + return NsfPrintError(interp, "'%s' is not a forwarder", pattern); } return ListMethodKeys(interp, tablePtr, NULL, pattern, NSF_METHODTYPE_FORWARDER, CallprotectionAllIdx, 0, NULL, NULL, 0); @@ -13099,8 +13053,7 @@ fprintf(stderr, "fixed count %d\n", count); /*NsfShowStack(interp);*/ - /* return NsfVarErrMsg(interp, "wrong activation count for object ", - ObjectName(object), (char *) NULL);*/ + /*return NsfPrintError(interp, "wrong activation count for object %s", ObjectName(object));*/ } } #endif @@ -13135,8 +13088,7 @@ cmd = Tcl_GetCommandFromObj(interp, cmdName); if (cmd == NULL) { - return NsfVarErrMsg(interp, "cannot lookup command '", - ObjStr(cmdName), "'", (char *) NULL); + return NsfPrintError(interp, "cannot lookup command '%s'", ObjStr(cmdName)); } cmd = GetOriginalCommand(cmd); @@ -13186,9 +13138,9 @@ */ newObjProc = NsfProcAliasMethod; if (withFrame && withFrame != FrameDefaultIdx) { - return NsfVarErrMsg(interp, - "cannot use -frame object|method in alias for scripted command '", - ObjStr(cmdName), "'", (char *) NULL); + return NsfPrintError(interp, + "cannot use -frame object|method in alias for scripted command '%s'", + ObjStr(cmdName)); } } @@ -13450,14 +13402,13 @@ if ((result = Tcl_ListObjGetElements(interp, systemMethodsObj, &oc, &ov)) == TCL_OK) { if (oc % 2) { ObjectSystemFree(interp, osPtr); - return NsfErrMsg(interp, "System methods must be provided as pairs", TCL_STATIC); + return NsfPrintError(interp, "System methods must be provided as pairs"); } for (i=0; iosPtr = osPtr; @@ -13579,8 +13530,7 @@ } if (cmd == NULL) { - return NsfVarErrMsg(interp, "cannot lookup command '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "cannot lookup command '%s'", methodName); } if (withFrame && withFrame != FrameDefaultIdx) { @@ -13590,9 +13540,8 @@ proc == NsfObjscopedMethod || proc == NsfSetterMethod || proc == NsfObjDispatch) { - return NsfVarErrMsg(interp, - "cannot use -frame object|method in dispatch for command '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, "cannot use -frame object|method in dispatch for command '%s'", + methodName); } if (withFrame == FrameObjectIdx) { @@ -13628,9 +13577,9 @@ Tcl_Obj *CONST *objv; if (withFrame && withFrame != FrameDefaultIdx) { - return NsfVarErrMsg(interp, - "cannot use -frame object|method in dispatch for plain method name '", - methodName, "'", (char *) NULL); + return NsfPrintError(interp, + "cannot use -frame object|method in dispatch for plain method name '%s'", + methodName); } if (nobjc >= 1) { @@ -13656,9 +13605,8 @@ NsfColonCmd(Tcl_Interp *interp, int nobjc, Tcl_Obj *CONST nobjv[]) { NsfObject *self = GetSelfObj(interp); if (!self) { - return NsfVarErrMsg(interp, "Cannot resolve 'self', " - "probably called outside the context of an Next Scripting Object", - (char *) NULL); + return NsfPrintError(interp, "Cannot resolve 'self', " + "probably called outside the context of an Next Scripting Object"); } /* fprintf(stderr, "Colon dispatch %s.%s\n", ObjectName(self),ObjStr(nobjv[0]));*/ return ObjectDispatch(self, interp, nobjc, nobjv, NSF_CM_NO_SHIFT); @@ -13805,8 +13753,7 @@ if (varname) { result = GetInstVarIntoCurrentScope(interp, cmdName, object, varname, alias); } else { - result = NsfVarErrMsg(interp, "invalid variable specification '", - ObjStr(objv[i]), "'", (char *) NULL); + result = NsfPrintError(interp, "invalid variable specification '%s'", ObjStr(objv[i])); } } } @@ -13842,7 +13789,7 @@ */ slave = Tcl_GetSlave(interp, ObjStr(objv[2])); if (!slave) { - return NsfVarErrMsg(interp, "Creation of slave interpreter failed", (char *) NULL); + return NsfPrintError(interp, "Creation of slave interpreter failed"); } if (Nsf_Init(slave) == TCL_ERROR) { return TCL_ERROR; @@ -13977,9 +13924,8 @@ if (!cmd) { Tcl_DStringFree(dsPtr); - return NsfVarErrMsg(interp, "Cannot lookup object method '", - methodName, "' for object ", ObjectName(object), - (char *) NULL); + return NsfPrintError(interp, "Cannot lookup object method '%s' for object %s", + methodName, ObjectName(object)); } Tcl_DStringFree(dsPtr); @@ -14014,7 +13960,7 @@ { NsfObject *containerObject = NsfGetObjectFromCmdPtr(cmd); if (containerObject == NULL) { - return NsfVarErrMsg(interp, "slot container must be an object", (char *) NULL); + return NsfPrintError(interp, "slot container must be an object"); } flag = NSF_IS_SLOT_CONTAINER; if (valueObj) { @@ -14039,8 +13985,8 @@ Tcl_Obj **objPtr; if (valueObj == NULL && methodproperty == MethodpropertySlotobjIdx) { - return NsfVarErrMsg(interp, "Option 'slotobj' of method ", methodName, - " requires argument '", (char *) NULL); + return NsfPrintError(interp, "Option 'slotobj' of method '%s' requires argument", + methodName); } paramDefs = ParamDefsGet(cmd); @@ -14103,20 +14049,17 @@ int result; if (!self) { - return NsfVarErrMsg(interp, - "Cannot resolve 'self', probably called outside the context of an Next Scripting Object", - (char *) NULL); + return NsfPrintError(interp, "Cannot resolve 'self', " + "probably called outside the context of an Next Scripting Object"); } if (withLocal) { NsfClass *cl = self->cl; CONST char *methodName = ObjStr(methodObj); Tcl_Command cmd = FindMethod(cl->nsPtr, methodName); if (cmd == NULL) { - return NsfVarErrMsg(interp, ObjectName(self), - ": unable to dispatch local method '", - methodName, "' in class ", ClassName(cl), - (char *) NULL); + return NsfPrintError(interp, "%s: unable to dispatch local method '%s' in class %s", + ObjectName(self), methodName, ClassName(cl)); } result = MethodDispatch((ClientData)self, interp, nobjc+2, nobjv, cmd, self, cl, methodName, 0, 0); @@ -14169,8 +14112,7 @@ object = GetObjectFromNsName(interp, name, &fromClassNS); if (object == NULL) { - return NsfVarErrMsg(interp, "argument 1 '", ObjStr(fromNs), "' is not an object", - NULL); + return NsfPrintError(interp, "argument 1 '%s' is not an object", ObjStr(fromNs)); } cl = fromClassNS ? (NsfClass *)object : NULL; @@ -14179,8 +14121,8 @@ toNsPtr = ObjFindNamespace(interp, toNs); if (!toNsPtr) - return NsfVarErrMsg(interp, "CopyCmds: Destination namespace ", - ObjStr(toNs), " does not exist", (char *) NULL); + return NsfPrintError(interp, "CopyCmds: Destination namespace %s does not exist", + ObjStr(toNs)); /* * copy all procs & commands in the ns */ @@ -14228,9 +14170,7 @@ */ cmd = Tcl_FindCommand(interp, oldName, NULL, TCL_GLOBAL_ONLY); if (cmd == NULL) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "can't copy ", " \"", - oldName, "\": command doesn't exist", - (char *) NULL); + NsfPrintError(interp, "can't copy \"%s\": commend doesn't exist", oldName); DECR_REF_COUNT(newFullCmdName); DECR_REF_COUNT(oldFullCmdName); return TCL_ERROR; @@ -14288,7 +14228,7 @@ DECR_REF_COUNT(newFullCmdName); DECR_REF_COUNT(oldFullCmdName); DECR_REF_COUNT(arglistObj); - return NsfVarErrMsg(interp, "No object for assertions", (char *) NULL); + return NsfPrintError(interp, "No object for assertions"); } DSTRING_INIT(dsPtr); @@ -14367,8 +14307,8 @@ if (fromNsPtr) { toNsPtr = ObjFindNamespace(interp, toNs); if (!toNsPtr) - return NsfVarErrMsg(interp, "CopyVars: Destination namespace ", - ObjStr(toNs), " does not exist", (char *) NULL); + return NsfPrintError(interp, "CopyVars: Destination namespace %s does not exist", + ObjStr(toNs)); object = GetObjectFromString(interp, ObjStr(fromNs)); destFullName = toNsPtr->fullName; @@ -14379,12 +14319,12 @@ } else { NsfObject *newObject; if (GetObjectFromObj(interp, fromNs, &object) != TCL_OK) { - return NsfVarErrMsg(interp, "CopyVars: Origin object/namespace ", - ObjStr(fromNs), " does not exist", (char *) NULL); + return NsfPrintError(interp, "CopyVars: Origin object/namespace %s does not exist", + ObjStr(fromNs)); } if (GetObjectFromObj(interp, toNs, &newObject) != TCL_OK) { - return NsfVarErrMsg(interp, "CopyVars: Destination object/namespace ", - ObjStr(toNs), " does not exist", (char *) NULL); + return NsfPrintError(interp, "CopyVars: Destination object/namespace %s does not exist", + ObjStr(toNs)); } varTablePtr = object->varTablePtr; destFullNameObj = newObject->cmdName; @@ -14569,8 +14509,7 @@ cl = (NsfClass *)object; if (valueObj == NULL) { - return NsfVarErrMsg(interp, "metaclass must be specified as third argument", - (char *) NULL); + return NsfPrintError(interp, "metaclass must be specified as third argument"); } GetClassFromObj(interp, valueObj, &metaClass, NULL); if (!metaClass) return NsfObjErrType(interp, valueObj, "class", ""); @@ -14733,12 +14672,12 @@ Tcl_SetObjResult(interp, object->cmdName); return TCL_OK; } else { - return NsfVarErrMsg(interp, "No current object", (char *) NULL); + return NsfPrintError(interp, "No current object"); } } if (!object && selfoption != CurrentoptionCallinglevelIdx) { - return NsfVarErrMsg(interp, "No current object", (char *) NULL); + return NsfPrintError(interp, "No current object"); } switch (selfoption) { @@ -14749,7 +14688,7 @@ CONST char *procName = Tcl_GetCommandName(interp, cscPtr->cmdPtr); Tcl_SetResult(interp, (char *)procName, TCL_VOLATILE); } else { - return NsfVarErrMsg(interp, "Can't find proc", (char *) NULL); + return NsfPrintError(interp, "Can't find proc"); } break; @@ -14800,8 +14739,7 @@ Tcl_SetObjResult(interp, Tcl_NewStringObj(MethodNameString(cscPtr->filterStackEntry->calledProc), -1)); } else { - result = NsfVarErrMsg(interp, "called from outside of a filter", - (char *) NULL); + result = NsfPrintError(interp, "called from outside of a filter"); } break; @@ -14840,9 +14778,7 @@ if (cscPtr) { Tcl_SetObjResult(interp, FilterFindReg(interp, object, cscPtr->cmdPtr)); } else { - result = NsfVarErrMsg(interp, - "called from outside of a filter", - (char *) NULL); + result = NsfPrintError(interp, "called from outside of a filter"); } break; @@ -14877,7 +14813,7 @@ Tcl_SetObjResult(interp, object->cmdName); return TCL_OK; } else { - return NsfVarErrMsg(interp, "No current object", (char *) NULL); + return NsfPrintError(interp, "No current object"); } } @@ -14914,10 +14850,8 @@ int result; if (*methodName == '-' || *methodName == ':') { - return NsfVarErrMsg(interp, - "invalid setter name \"", methodName, "\" (must not start with a dash or colon)", - (char *) NULL); - + return NsfPrintError(interp, "invalid setter name \"%s\" (must not start with a dash or colon)", + methodName); } setterClientData = NEW(SetterCmdClientData); @@ -15170,9 +15104,7 @@ if (result == TCL_OK) { paramWrapperPtr = (NsfParamWrapper *) objPtr->internalRep.twoPtrValue.ptr1; } else { - return NsfVarErrMsg(interp, - "invalid value constraints \"", ObjStr(objPtr), "\"", - (char *) NULL); + return NsfPrintError(interp, "invalid value constraints \"%s\"", ObjStr(objPtr)); } } paramPtr = paramWrapperPtr->paramPtr; @@ -15225,13 +15157,10 @@ if (autoname) { Tcl_SetObjResult(interp, autoname); DECR_REF_COUNT(autoname); - } - else - return NsfVarErrMsg(interp, - "Autoname failed. Probably format string (with %) was not well-formed", - (char *) NULL); - return TCL_OK; + return TCL_OK; + } + return NsfPrintError(interp, "Autoname failed. Probably format string (with %%) was not well-formed"); } /* @@ -15585,8 +15514,8 @@ } } - return NsfVarErrMsg(interp, "Filterguard: can't find filter ", - filter, " on ", ObjectName(object), (char *) NULL); + return NsfPrintError(interp, "Filterguard: can't find filter %s on %s", + filter, ObjectName(object)); } /* @@ -15606,9 +15535,8 @@ if (!Tcl_Interp_varFramePtr(interp)) { CallStackRestoreSavedFrames(interp, &ctx); - return NsfVarErrMsg(interp, "instvar used on ", ObjectName(object), - ", but callstack is not in procedure scope", - (char *) NULL); + return NsfPrintError(interp, "instvar used on %s, but callstack is not in procedure scope", + ObjectName(object)); } result = NsfImportvar(interp, object, ObjStr(objv[0]), objc-1, objv+1); @@ -15645,8 +15573,8 @@ } } - return NsfVarErrMsg(interp, "Mixinguard: can't find mixin ", - ObjStr(mixin), " on ", ObjectName(object), (char *) NULL); + return NsfPrintError(interp, "Mixinguard: can't find mixin %s on %s", + ObjStr(mixin), ObjectName(object)); } /* @@ -15718,10 +15646,8 @@ } default: { - return NsfVarErrMsg(interp, ObjectName(object), - " configure: unexpected argument '", - ObjStr(objv[i]), - "' between parameters", (char *) NULL); + return NsfPrintError(interp, "%s configure: unexpected argument '%s' between parameters", + ObjectName(object), ObjStr(objv[i])); } } } @@ -15857,7 +15783,7 @@ if (RUNTIME_STATE(interp)->exitHandlerDestroyRound != NSF_EXITHANDLER_OFF) { fprintf(stderr, "### Can't make objects volatile during shutdown\n"); - return NsfVarErrMsg(interp, "Can't make objects volatile during shutdown\n", NULL); + return NsfPrintError(interp, "Can't make objects volatile during shutdown"); } CallStackUseActiveFrame(interp, &ctx); @@ -15897,10 +15823,10 @@ /* * Make sure the var table exists and the varname is in there */ - if (NSRequireVariableOnObj(interp, object, varname, flgs) == 0) - return NsfVarErrMsg(interp, "Can't lookup (and create) variable ", - varname, " on ", ObjectName(object), (char *) NULL); - + if (NSRequireVariableOnObj(interp, object, varname, flgs) == 0) { + return NsfPrintError(interp, "Can't lookup (and create) variable %s on %s", + varname, ObjectName(object)); + } Nsf_PushFrameObj(interp, object, framePtr); /* * much of this is copied from Tcl, since we must avoid @@ -15926,8 +15852,8 @@ Tcl_ResetResult(interp); if (!foundEvent) { - return NsfVarErrMsg(interp, "can't wait for variable '", varname, - "': would wait forever", (char *) NULL); + return NsfPrintError(interp, "can't wait for variable '%s'; would wait forever", + varname); } return TCL_OK; } @@ -15957,8 +15883,7 @@ /*fprintf(stderr, " **** class '%s' wants to alloc '%s'\n", ClassName(cl), nameString);*/ if (!NSCheckColons(nameString, 0)) { - return NsfVarErrMsg(interp, "Cannot allocate object -- illegal name '", - nameString, "'", (char *) NULL); + return NsfPrintError(interp, "Cannot allocate object - illegal name '%s'", nameString); } if (IsMetaClass(interp, cl, 1) == 0) { @@ -15974,9 +15899,9 @@ } if (newObj == NULL) { - return NsfVarErrMsg(interp, "alloc failed to create '", nameString, - "' (possibly parent namespace does not exist)", - (char *) NULL); + return NsfPrintError(interp, "alloc failed to create '%s' " + "(possibly parent namespace does not exist)", + nameString); } Tcl_SetObjResult(interp, nameObj); @@ -16001,8 +15926,7 @@ /*fprintf(stderr, " **** class '%s' wants to alloc '%s'\n", ClassName(cl), nameString);*/ if (!NSCheckColons(nameString, 0)) { - return NsfVarErrMsg(interp, "Cannot allocate object -- illegal name '", - nameString, "'", (char *) NULL); + return NsfPrintError(interp, "Cannot allocate object - illegal name '%s'", nameString); } /* @@ -16148,7 +16072,7 @@ nameObj = Tcl_GetObjResult(interp); if (GetObjectFromObj(interp, nameObj, &newObject) != TCL_OK) { - result = NsfErrMsg(interp, "couldn't find result of alloc", TCL_STATIC); + result = NsfPrintError(interp, "couldn't find result of alloc"); goto create_method_exit; } @@ -16182,10 +16106,8 @@ NsfObject *object; if (GetObjectFromObj(interp, obj, &object) != TCL_OK) { - /* TODO: remove me */ - fprintf(stderr, "**** nsf object %s does not exist\n", ObjStr(obj)); - return NsfVarErrMsg(interp, "Can't destroy object ", - ObjStr(obj), " that does not exist.", (char *) NULL); + return NsfPrintError(interp, "Can't destroy object %s that does not exist", + ObjStr(obj)); } return DoDealloc(interp, object); @@ -16214,8 +16136,8 @@ } } - return NsfVarErrMsg(interp, "filterguard: can't find filter ", - filter, " on ", ClassName(cl), (char *) NULL); + return NsfPrintError(interp, "filterguard: can't find filter %s on %s", + filter, ClassName(cl)); } /* @@ -16248,8 +16170,8 @@ } } - return NsfVarErrMsg(interp, "mixinguard: can't find mixin ", - ObjStr(mixin), " on ", ClassName(cl), (char *) NULL); + return NsfPrintError(interp, "mixinguard: can't find mixin %s on %s", + ObjStr(mixin), ClassName(cl)); } /* @@ -16379,8 +16301,7 @@ NsfObject *object; if (GetObjectFromObj(interp, nameObj, &object) != TCL_OK) - return NsfVarErrMsg(interp, "can't recreate non existing object ", - ObjStr(nameObj), (char *) NULL); + return NsfPrintError(interp, "can't recreate non existing object %s", ObjStr(nameObj)); return RecreateObject(interp, cl, object, objc, objv); } @@ -16417,13 +16338,13 @@ static int NsfCheckRequiredArgs(Tcl_Interp *interp, CONST char *name, Tcl_Obj *valueObj) { if (value == NULL) { - return NsfVarErrMsg(interp, "required arg: '", name, "' missing", - (char *) NULL); + return NsfPrintError(interp, "required arg: '%s' missing", name); } Tcl_ResetResult(interp); Tcl_SetIntObj(Tcl_GetObjResult(interp), 1); return TCL_OK; } + /*************************** * End check Methods ***************************/ Index: generic/nsf.decls =================================================================== diff -u -N -rcd96543a3a6fb25ec8e52548892d12d244208a1a -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsf.decls (.../nsf.decls) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) +++ generic/nsf.decls (.../nsf.decls) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -1,4 +1,4 @@ -# nx.decls -- +# -*- Tcl -*- nx.decls -- # # This file contains the declarations for all supported public # functions that are exported by the Next scripting library via the stubs table. @@ -72,68 +72,62 @@ int flgs) } declare 14 generic { - int NsfErrMsg(Tcl_Interp *interp, char *msg, Tcl_FreeProc *type) + void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc) } declare 15 generic { - int NsfVarErrMsg(Tcl_Interp *interp, ...) + int NsfPrintError(Tcl_Interp *interp, CONST char *fmt, ...) } declare 16 generic { - void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc) -} -declare 17 generic { int NsfErrInProc (Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName) } -declare 18 generic { - int NsfErrBadVal_(Tcl_Interp *interp, char *expected, char *value) -} -declare 19 generic { +declare 17 generic { int NsfObjErrType(Tcl_Interp *interp, Tcl_Obj *nm, CONST char *type, char *parameterName) } -declare 20 generic { +declare 18 generic { void NsfStackDump (Tcl_Interp *interp) } -declare 21 generic { +declare 19 generic { void NsfSetObjClientData(Nsf_Object *obj, ClientData data) } -declare 22 generic { +declare 20 generic { ClientData NsfGetObjClientData(Nsf_Object *obj) } -declare 23 generic { +declare 21 generic { void NsfSetClassClientData(Nsf_Class *cl, ClientData data) } -declare 24 generic { +declare 22 generic { ClientData NsfGetClassClientData(Nsf_Class *cl) } -declare 25 generic { +declare 23 generic { void NsfRequireObjNamespace(Tcl_Interp *interp, Nsf_Object *obj) } -declare 26 generic { +declare 24 generic { int NsfErrBadVal(Tcl_Interp *interp, char *context, char *expected, CONST char *value) } -declare 27 generic { +declare 25 generic { int NsfNextObjCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) } -declare 28 generic { +declare 26 generic { int NsfCallMethodWithArgs(ClientData cd, Tcl_Interp *interp, Tcl_Obj *method, Tcl_Obj *arg, int objc, Tcl_Obj *CONST objv[], int flags) } -declare 29 generic { +declare 27 generic { int NsfObjErrArgCnt(Tcl_Interp *interp, Tcl_Obj *cmdName, Tcl_Obj *methodName, char *arglist) } -declare 30 generic { +declare 28 generic { int NsfAddObjectMethod(Tcl_Interp *interp, struct Nsf_Object *obj, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags) } -declare 31 generic { +declare 29 generic { int NsfAddClassMethod(Tcl_Interp *interp, struct Nsf_Class *cl, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags) } -declare 32 generic { +declare 30 generic { int NsfCreate(Tcl_Interp *in, Nsf_Class *class, Tcl_Obj *name, ClientData data, int objc, Tcl_Obj *CONST objv[]) } Index: generic/nsfDecls.h =================================================================== diff -u -N -rcd96543a3a6fb25ec8e52548892d12d244208a1a -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsfDecls.h (.../nsfDecls.h) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) +++ generic/nsfDecls.h (.../nsfDecls.h) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -104,117 +104,105 @@ Tcl_Interp *interp, CONST char *name1, CONST char *name2, int flgs); #endif -#ifndef NsfErrMsg_TCL_DECLARED -#define NsfErrMsg_TCL_DECLARED -/* 14 */ -EXTERN int NsfErrMsg(Tcl_Interp *interp, char *msg, - Tcl_FreeProc *type); -#endif -#ifndef NsfVarErrMsg_TCL_DECLARED -#define NsfVarErrMsg_TCL_DECLARED -/* 15 */ -EXTERN int NsfVarErrMsg(Tcl_Interp *interp, ...); -#endif #ifndef NsfDStringPrintf_TCL_DECLARED #define NsfDStringPrintf_TCL_DECLARED -/* 16 */ +/* 14 */ EXTERN void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); #endif +#ifndef NsfPrintError_TCL_DECLARED +#define NsfPrintError_TCL_DECLARED +/* 15 */ +EXTERN int NsfPrintError(Tcl_Interp *interp, CONST char *fmt, ...); +#endif #ifndef NsfErrInProc_TCL_DECLARED #define NsfErrInProc_TCL_DECLARED -/* 17 */ +/* 16 */ EXTERN int NsfErrInProc(Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName); #endif -#ifndef NsfErrBadVal__TCL_DECLARED -#define NsfErrBadVal__TCL_DECLARED -/* 18 */ -EXTERN int NsfErrBadVal_(Tcl_Interp *interp, char *expected, - char *value); -#endif #ifndef NsfObjErrType_TCL_DECLARED #define NsfObjErrType_TCL_DECLARED -/* 19 */ +/* 17 */ EXTERN int NsfObjErrType(Tcl_Interp *interp, Tcl_Obj *nm, CONST char *type, char *parameterName); #endif #ifndef NsfStackDump_TCL_DECLARED #define NsfStackDump_TCL_DECLARED -/* 20 */ +/* 18 */ EXTERN void NsfStackDump(Tcl_Interp *interp); #endif #ifndef NsfSetObjClientData_TCL_DECLARED #define NsfSetObjClientData_TCL_DECLARED -/* 21 */ +/* 19 */ EXTERN void NsfSetObjClientData(Nsf_Object *obj, ClientData data); #endif #ifndef NsfGetObjClientData_TCL_DECLARED #define NsfGetObjClientData_TCL_DECLARED -/* 22 */ +/* 20 */ EXTERN ClientData NsfGetObjClientData(Nsf_Object *obj); #endif #ifndef NsfSetClassClientData_TCL_DECLARED #define NsfSetClassClientData_TCL_DECLARED -/* 23 */ +/* 21 */ EXTERN void NsfSetClassClientData(Nsf_Class *cl, ClientData data); #endif #ifndef NsfGetClassClientData_TCL_DECLARED #define NsfGetClassClientData_TCL_DECLARED -/* 24 */ +/* 22 */ EXTERN ClientData NsfGetClassClientData(Nsf_Class *cl); #endif #ifndef NsfRequireObjNamespace_TCL_DECLARED #define NsfRequireObjNamespace_TCL_DECLARED -/* 25 */ +/* 23 */ EXTERN void NsfRequireObjNamespace(Tcl_Interp *interp, Nsf_Object *obj); #endif #ifndef NsfErrBadVal_TCL_DECLARED #define NsfErrBadVal_TCL_DECLARED -/* 26 */ +/* 24 */ EXTERN int NsfErrBadVal(Tcl_Interp *interp, char *context, char *expected, CONST char *value); #endif #ifndef NsfNextObjCmd_TCL_DECLARED #define NsfNextObjCmd_TCL_DECLARED -/* 27 */ +/* 25 */ EXTERN int NsfNextObjCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); #endif #ifndef NsfCallMethodWithArgs_TCL_DECLARED #define NsfCallMethodWithArgs_TCL_DECLARED -/* 28 */ +/* 26 */ EXTERN int NsfCallMethodWithArgs(ClientData cd, Tcl_Interp *interp, Tcl_Obj *method, Tcl_Obj *arg, int objc, Tcl_Obj *CONST objv[], int flags); #endif #ifndef NsfObjErrArgCnt_TCL_DECLARED #define NsfObjErrArgCnt_TCL_DECLARED -/* 29 */ +/* 27 */ EXTERN int NsfObjErrArgCnt(Tcl_Interp *interp, Tcl_Obj *cmdName, Tcl_Obj *methodName, char *arglist); #endif #ifndef NsfAddObjectMethod_TCL_DECLARED #define NsfAddObjectMethod_TCL_DECLARED -/* 30 */ +/* 28 */ EXTERN int NsfAddObjectMethod(Tcl_Interp *interp, struct Nsf_Object *obj, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); #endif #ifndef NsfAddClassMethod_TCL_DECLARED #define NsfAddClassMethod_TCL_DECLARED -/* 31 */ +/* 29 */ EXTERN int NsfAddClassMethod(Tcl_Interp *interp, struct Nsf_Class *cl, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); #endif #ifndef NsfCreate_TCL_DECLARED #define NsfCreate_TCL_DECLARED -/* 32 */ +/* 30 */ EXTERN int NsfCreate(Tcl_Interp *in, Nsf_Class *class, Tcl_Obj *name, ClientData data, int objc, Tcl_Obj *CONST objv[]); @@ -242,25 +230,23 @@ Tcl_Obj * (*nsf_ObjSetVar2) (struct Nsf_Object *obj, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, Tcl_Obj *value, int flgs); /* 11 */ Tcl_Obj * (*nsf_ObjGetVar2) (struct Nsf_Object *obj, Tcl_Interp *interp, Tcl_Obj *name1, Tcl_Obj *name2, int flgs); /* 12 */ int (*nsfUnsetInstVar2) (struct Nsf_Object *obj, Tcl_Interp *interp, CONST char *name1, CONST char *name2, int flgs); /* 13 */ - int (*nsfErrMsg) (Tcl_Interp *interp, char *msg, Tcl_FreeProc *type); /* 14 */ - int (*nsfVarErrMsg) (Tcl_Interp *interp, ...); /* 15 */ - void (*nsfDStringPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 16 */ - int (*nsfErrInProc) (Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName); /* 17 */ - int (*nsfErrBadVal_) (Tcl_Interp *interp, char *expected, char *value); /* 18 */ - int (*nsfObjErrType) (Tcl_Interp *interp, Tcl_Obj *nm, CONST char *type, char *parameterName); /* 19 */ - void (*nsfStackDump) (Tcl_Interp *interp); /* 20 */ - void (*nsfSetObjClientData) (Nsf_Object *obj, ClientData data); /* 21 */ - ClientData (*nsfGetObjClientData) (Nsf_Object *obj); /* 22 */ - void (*nsfSetClassClientData) (Nsf_Class *cl, ClientData data); /* 23 */ - ClientData (*nsfGetClassClientData) (Nsf_Class *cl); /* 24 */ - void (*nsfRequireObjNamespace) (Tcl_Interp *interp, Nsf_Object *obj); /* 25 */ - int (*nsfErrBadVal) (Tcl_Interp *interp, char *context, char *expected, CONST char *value); /* 26 */ - int (*nsfNextObjCmd) (ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); /* 27 */ - int (*nsfCallMethodWithArgs) (ClientData cd, Tcl_Interp *interp, Tcl_Obj *method, Tcl_Obj *arg, int objc, Tcl_Obj *CONST objv[], int flags); /* 28 */ - int (*nsfObjErrArgCnt) (Tcl_Interp *interp, Tcl_Obj *cmdName, Tcl_Obj *methodName, char *arglist); /* 29 */ - int (*nsfAddObjectMethod) (Tcl_Interp *interp, struct Nsf_Object *obj, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); /* 30 */ - int (*nsfAddClassMethod) (Tcl_Interp *interp, struct Nsf_Class *cl, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); /* 31 */ - int (*nsfCreate) (Tcl_Interp *in, Nsf_Class *class, Tcl_Obj *name, ClientData data, int objc, Tcl_Obj *CONST objv[]); /* 32 */ + void (*nsfDStringPrintf) (Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc); /* 14 */ + int (*nsfPrintError) (Tcl_Interp *interp, CONST char *fmt, ...); /* 15 */ + int (*nsfErrInProc) (Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName); /* 16 */ + int (*nsfObjErrType) (Tcl_Interp *interp, Tcl_Obj *nm, CONST char *type, char *parameterName); /* 17 */ + void (*nsfStackDump) (Tcl_Interp *interp); /* 18 */ + void (*nsfSetObjClientData) (Nsf_Object *obj, ClientData data); /* 19 */ + ClientData (*nsfGetObjClientData) (Nsf_Object *obj); /* 20 */ + void (*nsfSetClassClientData) (Nsf_Class *cl, ClientData data); /* 21 */ + ClientData (*nsfGetClassClientData) (Nsf_Class *cl); /* 22 */ + void (*nsfRequireObjNamespace) (Tcl_Interp *interp, Nsf_Object *obj); /* 23 */ + int (*nsfErrBadVal) (Tcl_Interp *interp, char *context, char *expected, CONST char *value); /* 24 */ + int (*nsfNextObjCmd) (ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); /* 25 */ + int (*nsfCallMethodWithArgs) (ClientData cd, Tcl_Interp *interp, Tcl_Obj *method, Tcl_Obj *arg, int objc, Tcl_Obj *CONST objv[], int flags); /* 26 */ + int (*nsfObjErrArgCnt) (Tcl_Interp *interp, Tcl_Obj *cmdName, Tcl_Obj *methodName, char *arglist); /* 27 */ + int (*nsfAddObjectMethod) (Tcl_Interp *interp, struct Nsf_Object *obj, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); /* 28 */ + int (*nsfAddClassMethod) (Tcl_Interp *interp, struct Nsf_Class *cl, CONST char *nm, Tcl_ObjCmdProc *proc, ClientData cd, Tcl_CmdDeleteProc *dp, int flags); /* 29 */ + int (*nsfCreate) (Tcl_Interp *in, Nsf_Class *class, Tcl_Obj *name, ClientData data, int objc, Tcl_Obj *CONST objv[]); /* 30 */ } NsfStubs; #ifdef __cplusplus @@ -330,81 +316,73 @@ #define NsfUnsetInstVar2 \ (nsfStubsPtr->nsfUnsetInstVar2) /* 13 */ #endif -#ifndef NsfErrMsg -#define NsfErrMsg \ - (nsfStubsPtr->nsfErrMsg) /* 14 */ -#endif -#ifndef NsfVarErrMsg -#define NsfVarErrMsg \ - (nsfStubsPtr->nsfVarErrMsg) /* 15 */ -#endif #ifndef NsfDStringPrintf #define NsfDStringPrintf \ - (nsfStubsPtr->nsfDStringPrintf) /* 16 */ + (nsfStubsPtr->nsfDStringPrintf) /* 14 */ #endif +#ifndef NsfPrintError +#define NsfPrintError \ + (nsfStubsPtr->nsfPrintError) /* 15 */ +#endif #ifndef NsfErrInProc #define NsfErrInProc \ - (nsfStubsPtr->nsfErrInProc) /* 17 */ + (nsfStubsPtr->nsfErrInProc) /* 16 */ #endif -#ifndef NsfErrBadVal_ -#define NsfErrBadVal_ \ - (nsfStubsPtr->nsfErrBadVal_) /* 18 */ -#endif #ifndef NsfObjErrType #define NsfObjErrType \ - (nsfStubsPtr->nsfObjErrType) /* 19 */ + (nsfStubsPtr->nsfObjErrType) /* 17 */ #endif #ifndef NsfStackDump #define NsfStackDump \ - (nsfStubsPtr->nsfStackDump) /* 20 */ + (nsfStubsPtr->nsfStackDump) /* 18 */ #endif #ifndef NsfSetObjClientData #define NsfSetObjClientData \ - (nsfStubsPtr->nsfSetObjClientData) /* 21 */ + (nsfStubsPtr->nsfSetObjClientData) /* 19 */ #endif #ifndef NsfGetObjClientData #define NsfGetObjClientData \ - (nsfStubsPtr->nsfGetObjClientData) /* 22 */ + (nsfStubsPtr->nsfGetObjClientData) /* 20 */ #endif #ifndef NsfSetClassClientData #define NsfSetClassClientData \ - (nsfStubsPtr->nsfSetClassClientData) /* 23 */ + (nsfStubsPtr->nsfSetClassClientData) /* 21 */ #endif #ifndef NsfGetClassClientData #define NsfGetClassClientData \ - (nsfStubsPtr->nsfGetClassClientData) /* 24 */ + (nsfStubsPtr->nsfGetClassClientData) /* 22 */ #endif #ifndef NsfRequireObjNamespace #define NsfRequireObjNamespace \ - (nsfStubsPtr->nsfRequireObjNamespace) /* 25 */ + (nsfStubsPtr->nsfRequireObjNamespace) /* 23 */ #endif #ifndef NsfErrBadVal #define NsfErrBadVal \ - (nsfStubsPtr->nsfErrBadVal) /* 26 */ + (nsfStubsPtr->nsfErrBadVal) /* 24 */ #endif #ifndef NsfNextObjCmd #define NsfNextObjCmd \ - (nsfStubsPtr->nsfNextObjCmd) /* 27 */ + (nsfStubsPtr->nsfNextObjCmd) /* 25 */ #endif #ifndef NsfCallMethodWithArgs #define NsfCallMethodWithArgs \ - (nsfStubsPtr->nsfCallMethodWithArgs) /* 28 */ + (nsfStubsPtr->nsfCallMethodWithArgs) /* 26 */ #endif #ifndef NsfObjErrArgCnt #define NsfObjErrArgCnt \ - (nsfStubsPtr->nsfObjErrArgCnt) /* 29 */ + (nsfStubsPtr->nsfObjErrArgCnt) /* 27 */ #endif #ifndef NsfAddObjectMethod #define NsfAddObjectMethod \ - (nsfStubsPtr->nsfAddObjectMethod) /* 30 */ + (nsfStubsPtr->nsfAddObjectMethod) /* 28 */ #endif #ifndef NsfAddClassMethod #define NsfAddClassMethod \ - (nsfStubsPtr->nsfAddClassMethod) /* 31 */ + (nsfStubsPtr->nsfAddClassMethod) /* 29 */ #endif #ifndef NsfCreate #define NsfCreate \ - (nsfStubsPtr->nsfCreate) /* 32 */ + (nsfStubsPtr->nsfCreate) /* 30 */ #endif #endif /* defined(USE_NSF_STUBS) && !defined(USE_NSF_STUB_PROCS) */ Index: generic/nsfError.c =================================================================== diff -u -N -rcd96543a3a6fb25ec8e52548892d12d244208a1a -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsfError.c (.../nsfError.c) (revision cd96543a3a6fb25ec8e52548892d12d244208a1a) +++ generic/nsfError.c (.../nsfError.c) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -19,9 +19,8 @@ * * NsfDStringPrintf -- * - * Set a Tcl_DString to a formatted value. This function - * currently copies at most TCL_DSTRING_STATIC_SIZE characters - * into the DString (this limit might be lifted in the future) + * Appends to a Tcl_DString a formatted value. This function + * iterates until it has sufficiently memory allocated. * * Results: * None. @@ -35,43 +34,59 @@ void NsfDStringPrintf(Tcl_DString *dsPtr, CONST char *fmt, va_list apSrc) { - int result; - va_list ap; + int result, avail = dsPtr->spaceAvl, offset = dsPtr->length; + va_list ap; + + va_copy(ap, apSrc); + result = vsnprintf(Tcl_DStringValue(dsPtr) + offset, avail, fmt, ap); + va_end(ap); + while (result >= avail) { + + Tcl_DStringSetLength(dsPtr, avail + 4096); + avail = dsPtr->spaceAvl; + /* fprintf(stderr, "NsfDStringPrintf must iterate, new avail %d\n", avail);*/ + va_copy(ap, apSrc); - result = vsnprintf(Tcl_DStringValue(dsPtr), TCL_DSTRING_STATIC_SIZE, fmt, ap); + result = vsnprintf(Tcl_DStringValue(dsPtr) + offset, avail, fmt, ap); va_end(ap); - - Tcl_DStringSetLength(dsPtr, result < TCL_DSTRING_STATIC_SIZE ? result : TCL_DSTRING_STATIC_SIZE); + } + Tcl_DStringSetLength(dsPtr, result); } +/* + *---------------------------------------------------------------------- + * + * NsfPrintError -- + * + * Produce a formatted error message with a printf like semantics + * + * Results: + * TCL_ERROR + * + * Side effects: + * Sets the result message. + * + *---------------------------------------------------------------------- + */ int -NsfErrMsg(Tcl_Interp *interp, char *msg, Tcl_FreeProc* type) { - Tcl_SetResult(interp, msg, type); - return TCL_ERROR; -} +NsfPrintError(Tcl_Interp *interp, CONST char *fmt, ...) { + va_list ap; + Tcl_DString ds; -int -NsfVarErrMsg TCL_VARARGS_DEF (Tcl_Interp *, arg1) { - va_list argList; - char *string; - Tcl_Interp *interp; + Tcl_DStringInit(&ds); - interp = TCL_VARARGS_START(Tcl_Interp *, arg1, argList); - Tcl_ResetResult(interp); - while (1) { - string = va_arg(argList, char *); - if (string == NULL) { - break; - } - Tcl_AppendResult(interp, string, (char *) NULL); - } - va_end(argList); - return TCL_ERROR; -} + va_start(ap, fmt); + NsfDStringPrintf(&ds, fmt, ap); + va_end(ap); + Tcl_SetResult(interp, Tcl_DStringValue(&ds), TCL_VOLATILE); + Tcl_DStringFree(&ds); + return TCL_ERROR; +} + int NsfErrInProc(Tcl_Interp *interp, Tcl_Obj *objName, Tcl_Obj *clName, CONST char *procName) { @@ -131,15 +146,6 @@ return TCL_ERROR; } -int -NsfErrBadVal_(Tcl_Interp *interp, char *expected, char *value) { - fprintf(stderr, "Deprecated call, recompile your program with nsf 1.5 or newer\n"); - Tcl_ResetResult(interp); - Tcl_AppendResult(interp, ": expected ", expected, " but got '", - value, "'", (char *) NULL); - return TCL_ERROR; -} - extern int NsfObjErrType(Tcl_Interp *interp, Tcl_Obj *value, CONST char *type, char *parameterName) { Tcl_ResetResult(interp); Index: generic/nsfInt.h =================================================================== diff -u -N -rf2c0f8e055015e58f3fa7bd338c872a2b7d76113 -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsfInt.h (.../nsfInt.h) (revision f2c0f8e055015e58f3fa7bd338c872a2b7d76113) +++ generic/nsfInt.h (.../nsfInt.h) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -840,7 +840,7 @@ #define FRAME_IS_NSF_METHOD 0x20000 #define FRAME_IS_NSF_CMETHOD 0x40000 -#define NSF_LOG_INFORM 2 +#define NSF_LOG_NOTICE 2 #define NSF_LOG_WARN 1 #if !defined(NDEBUG) Index: generic/nsfStubInit.c =================================================================== diff -u -N -rf2c0f8e055015e58f3fa7bd338c872a2b7d76113 -r531982261a0deb399b608a42d4469af3d3041399 --- generic/nsfStubInit.c (.../nsfStubInit.c) (revision f2c0f8e055015e58f3fa7bd338c872a2b7d76113) +++ generic/nsfStubInit.c (.../nsfStubInit.c) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -50,25 +50,23 @@ Nsf_ObjSetVar2, /* 11 */ Nsf_ObjGetVar2, /* 12 */ NsfUnsetInstVar2, /* 13 */ - NsfErrMsg, /* 14 */ - NsfVarErrMsg, /* 15 */ - NsfDStringPrintf, /* 16 */ - NsfErrInProc, /* 17 */ - NsfErrBadVal_, /* 18 */ - NsfObjErrType, /* 19 */ - NsfStackDump, /* 20 */ - NsfSetObjClientData, /* 21 */ - NsfGetObjClientData, /* 22 */ - NsfSetClassClientData, /* 23 */ - NsfGetClassClientData, /* 24 */ - NsfRequireObjNamespace, /* 25 */ - NsfErrBadVal, /* 26 */ - NsfNextObjCmd, /* 27 */ - NsfCallMethodWithArgs, /* 28 */ - NsfObjErrArgCnt, /* 29 */ - NsfAddObjectMethod, /* 30 */ - NsfAddClassMethod, /* 31 */ - NsfCreate, /* 32 */ + NsfDStringPrintf, /* 14 */ + NsfPrintError, /* 15 */ + NsfErrInProc, /* 16 */ + NsfObjErrType, /* 17 */ + NsfStackDump, /* 18 */ + NsfSetObjClientData, /* 19 */ + NsfGetObjClientData, /* 20 */ + NsfSetClassClientData, /* 21 */ + NsfGetClassClientData, /* 22 */ + NsfRequireObjNamespace, /* 23 */ + NsfErrBadVal, /* 24 */ + NsfNextObjCmd, /* 25 */ + NsfCallMethodWithArgs, /* 26 */ + NsfObjErrArgCnt, /* 27 */ + NsfAddObjectMethod, /* 28 */ + NsfAddClassMethod, /* 29 */ + NsfCreate, /* 30 */ }; /* !END!: Do not edit above this line. */ Index: library/xotcl/library/store/XOTclGdbm/xotclgdbm.c =================================================================== diff -u -N -r8eddf67371ec031084a6ef98fdec21e38dff85ff -r531982261a0deb399b608a42d4469af3d3041399 --- library/xotcl/library/store/XOTclGdbm/xotclgdbm.c (.../xotclgdbm.c) (revision 8eddf67371ec031084a6ef98fdec21e38dff85ff) +++ library/xotcl/library/store/XOTclGdbm/xotclgdbm.c (.../xotclgdbm.c) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -40,8 +40,8 @@ /* name not in hashtab - create new db */ if (NsfGetObjClientData(obj)) - return NsfVarErrMsg(in, "Called open on '", TclObjStr(obj->cmdName), - "', but open database was not closed before.", 0); + return NsfPrintError(in, "Called open on '%s', but open database was not closed before", + TclObjStr(obj->cmdName)); db = (db_t*) ckalloc (sizeof(db_t)); db->lastSearchKey = NULL; @@ -55,9 +55,8 @@ if (db->db == NULL) { ckfree ((char*) db); db = (db_t*) NULL ; - return NsfVarErrMsg(in, "Open on '", TclObjStr(obj->cmdName), - "' failed with '", TclObjStr(objv[1]),"': ", - gdbm_strerror(gdbm_errno), 0); + return NsfPrintError(in, "Open on '%s' failed with '%s': %s ", + TclObjStr(obj->cmdName), TclObjStr(objv[1]), gdbm_strerror(gdbm_errno)); } /* * success @@ -77,8 +76,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called close on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called close on '%s', but database was not opened yet", + TclObjStr(obj->cmdName),); gdbm_close(db->db); ckfree ((char*)db); NsfSetObjClientData(obj, 0); @@ -100,8 +99,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called names on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called names on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); Tcl_DStringInit(&result); key = gdbm_firstkey(db->db); @@ -137,8 +136,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called set on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called set on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key.dptr = TclObjStr(objv[1]); key.dsize = objv[1]->length + 1; @@ -153,8 +152,7 @@ free(content.dptr); } else { /* key not found */ - return NsfVarErrMsg(in, "no such variable '", key.dptr, - "'", 0); + return NsfPrintError(in, "no such variable '%s'", key.dptr); } } else { /* set value */ @@ -164,8 +162,7 @@ /*fprintf(stderr,"setting %s to '%s'\n",key.dptr,content.dptr);*/ Tcl_SetObjResult(in, objv[2]); } else { - return NsfVarErrMsg(in, "set of variable '", TclObjStr(obj->cmdName), - "' failed.", 0); + return NsfPrintError(in, "set of variable '%s' failed", TclObjStr(obj->cmdName)); } } return TCL_OK; @@ -183,8 +180,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called exists on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called exists on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key.dptr = TclObjStr(objv[1]); key.dsize = objv[1]->length + 1; @@ -210,8 +207,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key.dptr = TclObjStr(objv[1]); key.dsize = objv[1]->length + 1; @@ -221,8 +218,8 @@ if (ret == 0) { return TCL_OK; } else { - return NsfVarErrMsg(in, "Tried to unset '", TclObjStr(objv[1]), - "' but key does not exist.", 0); + return NsfPrintError(in, "Tried to unset '%s' but key does not exist", + TclObjStr(objv[1])); } } @@ -237,10 +234,10 @@ return NsfObjErrArgCnt(in, obj->cmdName, "firstkey"); db = (db_t*) NsfGetObjClientData(obj); - if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); - + if (!db) { + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); + } if (db->lastSearchKey != 0) { ckfree((char*) db->lastSearchKey->dptr); ckfree((char*) db->lastSearchKey); @@ -276,12 +273,11 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); if (db->lastSearchKey == 0) - return NsfVarErrMsg(in, - "nextkey invoked, but no search was started on '", - TclObjStr(obj->cmdName), "'", 0); + return NsfPrintError(in, "nextkey invoked, but no search was started on '%s'", + TclObjStr(obj->cmdName)); newkey = gdbm_nextkey(db->db, *db->lastSearchKey); Index: library/xotcl/library/store/XOTclSdbm/xotclsdbm.c =================================================================== diff -u -N -r8eddf67371ec031084a6ef98fdec21e38dff85ff -r531982261a0deb399b608a42d4469af3d3041399 --- library/xotcl/library/store/XOTclSdbm/xotclsdbm.c (.../xotclsdbm.c) (revision 8eddf67371ec031084a6ef98fdec21e38dff85ff) +++ library/xotcl/library/store/XOTclSdbm/xotclsdbm.c (.../xotclsdbm.c) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -70,8 +70,8 @@ /* name not in hashtab - create new db */ if (NsfGetObjClientData(obj)) - return NsfVarErrMsg(in, "Called open on '", TclObjStr(obj->cmdName), - "', but open database was not closed before.", 0); + return NsfPrintError(in, "Called open on '%s', but open database was not closed before", + TclObjStr(obj->cmdName); db = (db_t*) ckalloc (sizeof(db_t)); @@ -98,8 +98,8 @@ ckfree ((char*) db); db = (db_t*) NULL ; - return NsfVarErrMsg(in, "Open on '", TclObjStr(obj->cmdName), - "' failed with '", TclObjStr(objv[1]),"'.", 0); + return NsfPrintError(in, "Open on '%s' failed with '%s'", + TclObjStr(obj->cmdName), TclObjStr(objv[1])); } else { /* * success @@ -119,9 +119,10 @@ return NsfObjErrArgCnt(in, obj->cmdName, "close"); db = (db_t*) NsfGetObjClientData(obj); - if (!db) - return NsfVarErrMsg(in, "Called close on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + if (!db) { + return NsfPrintError(in, "Called close on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); + } sdbm_close (db->db); /*ckfree((char*)db->name);*/ @@ -145,8 +146,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called names on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called names on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); Tcl_DStringInit(&result); key = sdbm_firstkey(db->db); @@ -180,8 +181,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called set on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called set on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key.dptr = TclObjStr(objv[1]); key.dsize = objv[1]->length + 1; @@ -195,23 +196,21 @@ Tcl_SetObjResult(in, r); } else { /* key not found */ - return NsfVarErrMsg(in, "no such variable '", key.dptr, - "'", 0); + return NsfPrintError(in, "no such variable '%s'", key.dptr); } } else { /* set value */ if (db->mode == O_RDONLY) { - return NsfVarErrMsg(in, "Trying to set '", TclObjStr(obj->cmdName), - "', but database is in read mode.", 0); + return NsfPrintError(in, "Trying to set '%s', but database is in read mode", + TclObjStr(obj->cmdName)); } content.dptr = TclObjStr(objv[2]); content.dsize = objv[2]->length + 1; if (sdbm_store(db->db, key, content, SDBM_REPLACE) == 0) { /*fprintf(stderr,"setting %s to '%s'\n",key.dptr,content.dptr);*/ Tcl_SetObjResult(in, objv[2]); } else { - return NsfVarErrMsg(in, "set of variable '", TclObjStr(obj->cmdName), - "' failed.", 0); + return NsfPrintError(in, "set of variable '%s' failed", TclObjStr(obj->cmdName)); } } return TCL_OK; @@ -229,8 +228,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called exists on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called exists on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key.dptr = TclObjStr(objv[1]); key.dsize = objv[1]->length + 1; @@ -256,12 +255,12 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); /* check for read mode */ if (db->mode == O_RDONLY) { - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database is in read mode.", 0); + return NsfPrintError(in, "Called unset on '%s', but database is in read mode", + TclObjStr(obj->cmdName)); } key.dptr = TclObjStr(objv[1]); @@ -272,8 +271,7 @@ if (ret == 0) { return TCL_OK; } else { - return NsfVarErrMsg(in, "Tried to unset '", TclObjStr(objv[1]), - "' but key does not exist.", 0); + return NsfPrintError(in, "Tried to unset '%s', but key does not exist", TclObjStr(objv[1])); } } @@ -293,8 +291,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); key = sdbm_firstkey(db->db); @@ -321,8 +319,8 @@ db = (db_t*) NsfGetObjClientData(obj); if (!db) - return NsfVarErrMsg(in, "Called unset on '", TclObjStr(obj->cmdName), - "', but database was not opened yet.", 0); + return NsfPrintError(in, "Called unset on '%s', but database was not opened yet", + TclObjStr(obj->cmdName)); newkey = sdbm_nextkey(db->db); Index: tests/parameters.test =================================================================== diff -u -N -r2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879 -r531982261a0deb399b608a42d4469af3d3041399 --- tests/parameters.test (.../parameters.test) (revision 2cd96f38dddd3c2c2a3ab71abf68ac7f5ad7d879) +++ tests/parameters.test (.../parameters.test) (revision 531982261a0deb399b608a42d4469af3d3041399) @@ -529,7 +529,7 @@ ? {D public method foo {s:switch} {return 1}} \ - {invalid parameter type "switch" for argument s; type "switch" only allowed for non-positional arguments} + {invalid parameter type "switch" for argument "s"; type "switch" only allowed for non-positional arguments} D public method foo {a b {-c 1} {-d} x {-end 100}} { set result [list]