Index: generic/nsf.c =================================================================== diff -u -rb33c80a289d2b5bbf8727c4f30cbafbdddb1f9c1 -r2e90c0205abcb6a2fa8e60531b5f19730195b6f9 --- generic/nsf.c (.../nsf.c) (revision b33c80a289d2b5bbf8727c4f30cbafbdddb1f9c1) +++ generic/nsf.c (.../nsf.c) (revision 2e90c0205abcb6a2fa8e60531b5f19730195b6f9) @@ -5028,9 +5028,13 @@ static NsfCmdList * CmdListRemoveFromList(NsfCmdList **cmdList, NsfCmdList *delCL) { register NsfCmdList *c = *cmdList, *del = NULL; + + assert(delCL); + if (c == NULL) { return NULL; } + if (c == delCL) { *cmdList = c->nextPtr; del = c; @@ -6082,6 +6086,9 @@ Tcl_Obj *resultSet, NsfClass *cl, ClientData clientData, int *new, int appendResult, CONST char *pattern, NsfObject *matchObject) { + + assert(cl); + Tcl_CreateHashEntry(destTablePtr, (char *)cl, new); if (*new) { if (appendResult) { @@ -7422,7 +7429,11 @@ for ( ; clPtr; clPtr = clPtr->nextPtr) { Tcl_HashSearch hSrch; - Tcl_HashEntry *hPtr = &clPtr->cl->instances ? + Tcl_HashEntry *hPtr; + + assert(clPtr->cl); + + hPtr = &clPtr->cl->instances ? Tcl_FirstHashEntry(&clPtr->cl->instances, &hSrch) : NULL; /* recalculate the commands of all class-filter registrations */ @@ -7460,9 +7471,13 @@ for (clPtr = ComputeOrder(cl, SUB_CLASSES); clPtr; clPtr = clPtr->nextPtr) { Tcl_HashSearch hSrch; - Tcl_HashEntry *hPtr = &clPtr->cl->instances ? - Tcl_FirstHashEntry(&clPtr->cl->instances, &hSrch) : NULL; - NsfClassOpt *opt = clPtr->cl->opt; + Tcl_HashEntry *hPtr; + NsfClassOpt *opt; + + assert(clPtr->cl); + hPtr = &clPtr->cl->instances ? Tcl_FirstHashEntry(&clPtr->cl->instances, &hSrch) : NULL; + + opt = clPtr->cl->opt; if (opt) { CmdListRemoveContextClassFromList(&opt->classfilters, removeClass, GuardDel); } @@ -9144,6 +9159,7 @@ */ NsfObject *invokeObj = (NsfObject *)cp; + assert(invokeObj); if (invokeObj->flags & NSF_DELETED) { /* * When we try to invoke a deleted object, the cmd (alias) is @@ -9299,10 +9315,14 @@ proc == NsfSetterMethod ) { TclCmdClientData *tcd = (TclCmdClientData *)cp; + + assert(tcd); tcd->object = object; assert((CmdIsProc(cmd) == 0)); } else if (proc == NsfProcAliasMethod) { TclCmdClientData *tcd = (TclCmdClientData *)cp; + + assert(tcd); tcd->object = object; assert((CmdIsProc(cmd) == 0)); cscPtr->flags |= NSF_CSC_CALL_IS_TRANSPARENT; @@ -11366,6 +11386,7 @@ /* TODO: for the time being, we do not return an error here */ } } else if (paramPtr->converter != ConvertViaCmd && + paramPtr->slotObj && strcmp(ObjStr(paramPtr->slotObj), NsfGlobalStrings[NSF_METHOD_PARAMETER_SLOT_OBJ]) != 0) { @@ -13422,7 +13443,7 @@ CmdListRemoveList(&opt->mixins, GuardDel); CmdListRemoveList(&opt->filters, GuardDel); FREE(NsfObjectOpt, opt); - opt = object->opt = 0; + object->opt = 0; } } @@ -13906,7 +13927,7 @@ if ((clopt) && (!recreate)) { FREE(NsfClassOpt, clopt); - clopt = cl->opt = 0; + cl->opt = 0; } /* @@ -14730,13 +14751,12 @@ if (pos<0) pos--; /*fprintf(stderr, "remainder = '%s' pos = %ld\n", remainder, pos);*/ *mapvalue = pos; - ForwardArgString = remainder; c = *ForwardArgString; } if (c == '%') { Tcl_Obj *list = NULL, **listElements; - int nrArgs = objc-1, nrPosArgs = objc-firstPosArg, nrElements = 0; + int nrArgs = objc-1, nrPosArgs = objc - firstPosArg, nrElements = 0; char c1, *firstActualArgument = nrArgs>0 ? ObjStr(objv[1]) : NULL; c = *++ForwardArgString; @@ -14769,8 +14789,10 @@ } } else if (tcd->subcommands) { /* deprecated part */ if (Tcl_ListObjGetElements(interp, tcd->subcommands, &nrElements, &listElements) != TCL_OK) { - return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(list)); + return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(tcd->subcommands)); } + } else { + assert(nrElements <= nrPosArgs); } /*fprintf(stderr, "nrElements=%d, nra=%d firstPos %d objc %d\n", nrElements, nrArgs, firstPosArg, objc);*/ @@ -17085,15 +17107,15 @@ NsfObject *ensembleObject = NsfGetObjectFromCmdPtr(cmd); Tcl_HashTable *cmdTablePtr = ensembleObject && ensembleObject->nsPtr ? Tcl_Namespace_cmdTablePtr(ensembleObject->nsPtr) : NULL; - + + if (cmdTablePtr == NULL || ensembleObject == NULL) { + /* nothing to do */ + continue; + } if (ensembleObject->flags & NSF_IS_SLOT_CONTAINER) { /* Don't report slot container */ continue; } - if (cmdTablePtr == NULL) { - /* nothing to do */ - continue; - } if (prefix == NULL) { DSTRING_INIT(dsPtr); @@ -18998,6 +19020,7 @@ } else { /* No arguments were provided. */ oc = -1; + ov = NULL; } result = NextGetArguments(interp, oc, ov, &cscPtr, &methodName, @@ -19668,7 +19691,7 @@ break; case CurrentoptionMethodpathIdx: - cscPtr = CallStackGetTopFrame(interp, &framePtr); + (void) CallStackGetTopFrame(interp, &framePtr); Tcl_SetObjResult(interp, CallStackMethodPath(interp, framePtr)); break; @@ -19782,7 +19805,7 @@ break; case CurrentoptionIsnextcallIdx: { - cscPtr = CallStackGetTopFrame(interp, &framePtr); + (void)CallStackGetTopFrame(interp, &framePtr); framePtr = CallStackNextFrameOfType(Tcl_CallFrame_callerPtr(framePtr), FRAME_IS_NSF_METHOD|FRAME_IS_NSF_CMETHOD); cscPtr = framePtr ? Tcl_CallFrame_clientData(framePtr) : NULL; @@ -19847,7 +19870,7 @@ NsfVarImport(Tcl_Interp *interp, NsfObject *object, const char *cmdName, int objc, Tcl_Obj *CONST objv[]) { int i, result = TCL_OK; - for (i=0; iparamsPtr; paramPtr->name; paramPtr++, i++) { + for (i = 1, paramPtr = paramDefs->paramsPtr; paramPtr->name; paramPtr++, i++) { /* * Set the new value always when the object is not yet initialized @@ -20854,12 +20879,12 @@ #if 0 fprintf(stderr, "NsfOResidualargsMethod %s %2d ", ObjectName(object), objc); - for(i=0; i determined = '%s' parentNs %s\n", nameString, ObjStr(tmpName), parentNsPtr->fullName);*/ - nameString = ObjStr(tmpName); + //nameString = ObjStr(tmpName); } result = NsfCAllocMethod_(interp, cl, nameObj, parentNsPtr); @@ -22291,10 +22325,10 @@ Tcl_InitHashTable(dups, TCL_STRING_KEYS); /* guards are ignored */ NsfClassListAddPerClassMixins(interp, class, &mixinClasses, &checkList); - result = ListMethodKeysClassList(interp, mixinClasses, - withSource, pattern, - AggregatedMethodType(withMethodtype), withCallprotection, - withPath, dups, &class->object, 0); + (void) ListMethodKeysClassList(interp, mixinClasses, + withSource, pattern, + AggregatedMethodType(withMethodtype), withCallprotection, + withPath, dups, &class->object, 0); NsfClassListFree(checkList); NsfClassListFree(mixinClasses); @@ -22329,7 +22363,7 @@ CONST char *patternString, NsfObject *patternObj) { NsfClassOpt *opt = class->opt; Tcl_Obj *resultObj; - int rc; + int result = TCL_OK; Tcl_ResetResult(interp); resultObj = Tcl_GetObjResult(interp); @@ -22352,6 +22386,7 @@ } else if (withClosure) { Tcl_HashTable objTable, *commandTable = &objTable; + int rc; MEM_COUNT_ALLOC("Tcl_InitHashTable", commandTable); Tcl_InitHashTable(commandTable, TCL_ONE_WORD_KEYS); @@ -22365,10 +22400,10 @@ MEM_COUNT_FREE("Tcl_InitHashTable", commandTable); } else { - rc = opt ? MixinInfo(interp, opt->classmixins, patternString, withGuards, patternObj) : TCL_OK; + result = opt ? MixinInfo(interp, opt->classmixins, patternString, withGuards, patternObj) : TCL_OK; } - return TCL_OK; + return result; } /* @@ -22510,6 +22545,7 @@ listObj = NsfParamDefsSyntax(paramsPtr); break; } + assert(listObj); Tcl_SetObjResult(interp, listObj); DECR_REF_COUNT2("paramDefsObj", listObj); Index: generic/nsfDebug.c =================================================================== diff -u -rb37bf2deab94b6294509fa79bb7b922d6e8a5635 -r2e90c0205abcb6a2fa8e60531b5f19730195b6f9 --- generic/nsfDebug.c (.../nsfDebug.c) (revision b37bf2deab94b6294509fa79bb7b922d6e8a5635) +++ generic/nsfDebug.c (.../nsfDebug.c) (revision 2e90c0205abcb6a2fa8e60531b5f19730195b6f9) @@ -106,26 +106,24 @@ CallFrame *f = iPtr->framePtr, *v = iPtr->varFramePtr; Tcl_Obj *varCmdObj; - NsfNewObj(varCmdObj); + varCmdObj = Tcl_NewObj(); fprintf (stderr, " TCL STACK:\n"); if (f == 0) fprintf(stderr, "- "); while (f) { - Tcl_Obj *cmdObj; - NsfNewObj(cmdObj); + Tcl_Obj *cmdObj = Tcl_NewObj(); fprintf(stderr, "\tFrame=%p ", f); if (f && f->isProcCallFrame && f->procPtr && f->procPtr->cmdPtr) { fprintf(stderr,"caller %p ", Tcl_CallFrame_callerPtr(f)); fprintf(stderr,"callerV %p ", Tcl_CallFrame_callerVarPtr(f)); Tcl_GetCommandFullName(interp, (Tcl_Command)f->procPtr->cmdPtr, cmdObj); fprintf(stderr, "%s (%p) lvl=%d\n", ObjStr(cmdObj), f->procPtr->cmdPtr, f->level); - DECR_REF_COUNT(cmdObj); } else { if (f && f->varTablePtr) { fprintf(stderr, "var_table = %p ", f->varTablePtr); } fprintf(stderr, "- \n"); } - + DECR_REF_COUNT(cmdObj); f = f->callerPtr; } @@ -138,10 +136,10 @@ } if (v && v->isProcCallFrame && v->procPtr && v->procPtr->cmdPtr) { Tcl_GetCommandFullName(interp, (Tcl_Command) v->procPtr->cmdPtr, varCmdObj); - if (varCmdObj) { - fprintf(stderr, " %s (%d)\n", ObjStr(varCmdObj), v->level); - } - } else fprintf(stderr, "- \n"); + fprintf(stderr, " %s (%d)\n", ObjStr(varCmdObj), v->level); + } else { + fprintf(stderr, "- \n"); + } DECR_REF_COUNT(varCmdObj); } Index: generic/nsfInt.h =================================================================== diff -u -r3b654bd0096ee0be729cbdefa63c0d981a708828 -r2e90c0205abcb6a2fa8e60531b5f19730195b6f9 --- generic/nsfInt.h (.../nsfInt.h) (revision 3b654bd0096ee0be729cbdefa63c0d981a708828) +++ generic/nsfInt.h (.../nsfInt.h) (revision 2e90c0205abcb6a2fa8e60531b5f19730195b6f9) @@ -207,7 +207,6 @@ #ifdef __WIN32__ # define NSF_INLINE -# define NsfNewObj(A) A=Tcl_NewObj() # define DECR_REF_COUNT(A) \ MEM_COUNT_FREE("INCR_REF_COUNT" #A,A); Tcl_DecrRefCount(A) #else @@ -221,15 +220,13 @@ # define NSF_INLINE # endif # ifdef USE_TCL_STUBS -# define NsfNewObj(A) A=Tcl_NewObj() # define DECR_REF_COUNT(A) \ MEM_COUNT_FREE("INCR_REF_COUNT" #A,A); assert((A)->refCount > -1); \ Tcl_DecrRefCount(A) # define DECR_REF_COUNT2(name,A) \ MEM_COUNT_FREE("INCR_REF_COUNT-" name,A); assert((A)->refCount > -1); \ Tcl_DecrRefCount(A) # else -# define NsfNewObj(A) TclNewObj(A) # define DECR_REF_COUNT(A) \ MEM_COUNT_FREE("INCR_REF_COUNT" #A,A); TclDecrRefCount(A) # define DECR_REF_COUNT2(name,A) \