Index: xotcl/generic/xotcl.c =================================================================== diff -u -rfda7a40548bb07598ac92453064c2d844d6b12da -r3eed8eb06e3bcc8a17de2d9d130f0caae5ea4123 --- xotcl/generic/xotcl.c (.../xotcl.c) (revision fda7a40548bb07598ac92453064c2d844d6b12da) +++ xotcl/generic/xotcl.c (.../xotcl.c) (revision 3eed8eb06e3bcc8a17de2d9d130f0caae5ea4123) @@ -1,4 +1,4 @@ -/* $Id: xotcl.c,v 1.30 2004/11/19 01:41:32 neumann Exp $ +/* $Id: xotcl.c,v 1.31 2004/11/19 22:59:37 neumann Exp $ * * XOTcl - Extended OTcl * @@ -4255,10 +4255,12 @@ ObjStr(objv[2]), "'", 0); result = TCL_ERROR; } - /* be sure to reset unknown flag */ - RUNTIME_STATE(in)->unknown = 0; + } } + /* be sure to reset unknown flag */ + if (unknown) + RUNTIME_STATE(in)->unknown = 0; #ifdef DISPATCH_TRACE printExit(in,"DISPATCH", objc,objv, result); @@ -5376,6 +5378,7 @@ nobjc = 1; } csc->callType |= XOTCL_CSC_CALL_IS_NEXT; + RUNTIME_STATE(in)->unknown = 0; result = DoCallProcCheck(cp, (ClientData)obj, in, nobjc, nobjv, cmd, obj, *cl, *method, frameType, 1/*fromNext*/); @@ -10010,17 +10013,17 @@ if (isNonPositionalArg(in, argStr, nonPosArgsDefc, nonPosArgsDefv, &varName)) { i++; - if (i > argsc) + if (i >= argsc) return XOTclVarErrMsg(in, "Non positional arg '", - ObjStr(argsv[1]), "': value missing", + argStr, "': value missing", NULL); Tcl_SetVar2(in, varName, 0, ObjStr(argsv[i]), 0); } else { endOfNonPosArgsReached = 1; } } - if (endOfNonPosArgsReached) { + if (endOfNonPosArgsReached && i < argsc) { if (ordinaryArgsCounter >= ordinaryArgsDefc) { return XOTclObjErrArgCnt(in, NULL, ObjStr(nonPosArgs->ordinaryArgs)); }