Index: TODO =================================================================== diff -u -r3f398b58b5e8342bf3bed0e325e29b8c811ef7e2 -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- TODO (.../TODO) (revision 3f398b58b5e8342bf3bed0e325e29b8c811ef7e2) +++ TODO (.../TODO) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -3804,6 +3804,7 @@ - fix typos - extend regression test to improve coverage +- improve branch prediction ======================================================================== TODO: Index: generic/gentclAPI.tcl =================================================================== diff -u -r0b124cd20883dcfc1be0b8527a8e989e9d467ae3 -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- generic/gentclAPI.tcl (.../gentclAPI.tcl) (revision 0b124cd20883dcfc1be0b8527a8e989e9d467ae3) +++ generic/gentclAPI.tcl (.../gentclAPI.tcl) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -137,14 +137,14 @@ set if [list "NsfClass *cl"] append intro \ " NsfClass *cl = NsfObjectToClass(clientData);" \n \ - " if (!cl) return NsfDispatchClientDataError(interp, clientData, \"class\", \"$methodName\");" + " if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, \"class\", \"$methodName\");" } object { set a [list obj] set if [list "NsfObject *obj"] append intro \ " NsfObject *obj = (NsfObject *)clientData;" \n \ - " if (!obj) return NsfDispatchClientDataError(interp, clientData, \"object\", \"$methodName\");" + " if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, \"object\", \"$methodName\");" } "" { append intro " (void)clientData;\n" @@ -270,17 +270,17 @@ ${stub}(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; $intro - if (ArgumentParse(interp, objc, objv, $obj, objv[0], + if (likely(ArgumentParse(interp, objc, objv, $obj, objv[0], method_definitions[$idx].paramDefs, method_definitions[$idx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { $cDefs $pre $releasePC $call $post + } else { + return TCL_ERROR; } } }]} @@ -339,7 +339,7 @@ append fns [genSimpleStub $d(stub) $intro $d(idx) $cDefs $pre $call $post] } elseif {$nrParams == 0} { append pre [subst -nocommands { - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[$d(idx)].paramDefs, NULL, objv[0]); Index: generic/nsf.c =================================================================== diff -u -rfbd7f24c6111a5328c15bb7c47e9a45c9928357f -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- generic/nsf.c (.../nsf.c) (revision fbd7f24c6111a5328c15bb7c47e9a45c9928357f) +++ generic/nsf.c (.../nsf.c) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -1029,7 +1029,9 @@ NSTail(CONST char *string) { register char *p = (char *)string+strlen(string); while (p > string) { - if (*p == ':' && *(p-1) == ':') return p+1; + if (unlikely(*p == ':' && *(p-1) == ':')) { + return p+1; + } p--; } return string; @@ -1521,11 +1523,10 @@ Tcl_Obj *objPtr; Tcl_DString ds, *dsPtr = &ds; - /*fprintf(stderr, "NameInNamespaceObj %s (%p, %s) ", name, nsPtr, nsPtr ? nsPtr->fullName:NULL);*/ - if (!nsPtr) { - nsPtr = Tcl_GetCurrentNamespace(interp); - } - /* fprintf(stderr, " (resolved %p, %s) ", nsPtr, nsPtr ? nsPtr->fullName:NULL);*/ + assert(nsPtr); + + /*fprintf(stderr, "NameInNamespaceObj %s (%p, %s) ", name, nsPtr, nsPtr->fullName);*/ + DSTRING_INIT(dsPtr); DStringAppendQualName(dsPtr, nsPtr, name); objPtr = Tcl_NewStringObj(Tcl_DStringValue(dsPtr), Tcl_DStringLength(dsPtr)); @@ -1653,9 +1654,13 @@ element->clientData = clientData; element->nextPtr = NULL; *nextPtr = element; - if (isNewPtr) *isNewPtr = 1; + if (isNewPtr) { + *isNewPtr = 1; + } } else { - if (isNewPtr) *isNewPtr = 0; + if (isNewPtr) { + *isNewPtr = 0; + } } return nextPtr; } @@ -1819,7 +1824,7 @@ for (; sl; sl = sl->nextPtr) { NsfClass *sc = sl->cl; if (sc->color == GRAY) { cl->color = WHITE; return 0; } - if (sc->color == WHITE && !TopoSort(sc, baseClass, direction)) { + if (unlikely(sc->color == WHITE && !TopoSort(sc, baseClass, direction))) { cl->color = WHITE; if (cl == baseClass) { register NsfClasses *pc; @@ -1833,7 +1838,7 @@ pl->cl = cl; pl->nextPtr = baseClass->order; baseClass->order = pl; - if (cl == baseClass) { + if (unlikely(cl == baseClass)) { register NsfClasses *pc; for (pc = cl->order; pc; pc = pc->nextPtr) { pc->cl->color = WHITE; } } @@ -1872,7 +1877,7 @@ * If computation is successful, return cl->order. * Otherwise clear cl->order. */ - if (TopoSort(cl, cl, SUPER_CLASSES)) { + if (likely(TopoSort(cl, cl, SUPER_CLASSES))) { return cl->order; } else { NsfClassListFree(cl->order); @@ -1908,7 +1913,7 @@ savedOrder = cl->order; cl->order = NULL; - if (TopoSort(cl, cl, SUB_CLASSES)) { + if (likely(TopoSort(cl, cl, SUB_CLASSES))) { order = cl->order; } else { NsfClassListFree(cl->order); @@ -2514,7 +2519,7 @@ if (entryPtr != NULL) { Tcl_Command cmd = (Tcl_Command) Tcl_GetHashValue(entryPtr); - if (Tcl_Command_flags(cmd) & flags) { + if (unlikely(Tcl_Command_flags(cmd) & flags)) { /*fprintf(stderr, "skipped cmd %p flags %.6x & %.6x => %.6x\n", cmd, flags, Tcl_Command_flags(cmd), Tcl_Command_flags(cmd) & flags);*/ continue; @@ -2638,7 +2643,7 @@ Tcl_Obj *methodObj, Tcl_Command *cmdPtr) = containsSpace ? SearchComplexCMethod : SearchSimpleCMethod; - if (!(object->flags & NSF_MIXIN_ORDER_VALID)) { + if (unlikely(object->flags & NSF_MIXIN_ORDER_VALID) == 0) { MixinComputeDefined(interp, object); } @@ -3140,10 +3145,10 @@ Tcl_Obj *objPtr = *objPtrPtr; if (likely(objPtr != NULL)) { char *localName = TclGetString(objPtr); - if ((varName[0] == localName[0]) - && (varName[1] == localName[1]) - && (strcmp(varName, localName) == 0)) { - return (Tcl_Var) &varFramePtr->compiledLocals[i]; + if (unlikely(varName[0] == localName[0] + && varName[1] == localName[1] + && strcmp(varName, localName) == 0)) { + return (Tcl_Var) &varFramePtr->compiledLocals[i]; } } } @@ -3265,7 +3270,7 @@ * Case 1: The variable is to be resolved in global scope, proceed in * resolver chain */ - if (flags & TCL_GLOBAL_ONLY) { + if (unlikely(flags & TCL_GLOBAL_ONLY)) { /*fprintf(stderr, "global-scoped lookup for var '%s' in NS '%s'\n", varName, nsPtr->fullName);*/ return TCL_CONTINUE; @@ -3476,7 +3481,7 @@ return var; } - if (!object) { + if (unlikely(!object)) { return NULL; } @@ -3742,9 +3747,9 @@ * We have an object and create the variable if not found */ assert(object); - if (object->nsPtr) { + if (unlikely(object->nsPtr != NULL)) { varTablePtr = Tcl_Namespace_varTablePtr(object->nsPtr); - } else if (object->varTablePtr) { + } else if (likely(object->varTablePtr != NULL)) { varTablePtr = object->varTablePtr; } else { /* @@ -3764,11 +3769,13 @@ INCR_REF_COUNT(keyObj); var = (Tcl_Var)VarHashCreateVar(varTablePtr, keyObj, NULL); - if (var) { + if (likely(var != NULL)) { #if defined(VAR_RESOLVER_TRACE) fprintf(stderr, ".... found in hash-table %s %p flags %.6x ns %p\n", varName, var, ((Var *)var)->flags, object->nsPtr); #endif + /* make coverage analysis easier */ + assert(1); } else { /* * We failed to find the variable, therefore we create it new @@ -3820,7 +3827,7 @@ /*fprintf(stderr, "InterpColonCmdResolver %s flags %.6x\n", cmdName, flags);*/ - if ((*cmdName == ':' && *(cmdName + 1) == ':') || flags & TCL_GLOBAL_ONLY) { + if (likely((*cmdName == ':' && *(cmdName + 1) == ':') || flags & TCL_GLOBAL_ONLY)) { /* fully qualified names and global lookups are not for us */ return TCL_CONTINUE; } @@ -4061,7 +4068,7 @@ assert(nsPtr); MEM_COUNT_FREE("NSNamespace", nsPtr); Tcl_Namespace_refCount(nsPtr)--; - if (Tcl_Namespace_refCount(nsPtr) == 0 && (Tcl_Namespace_flags(nsPtr) & NS_DEAD)) { + if (unlikely(Tcl_Namespace_refCount(nsPtr) == 0 && (Tcl_Namespace_flags(nsPtr) & NS_DEAD))) { /* * The namespace refCount has reached 0, we have to free * it. unfortunately, NamespaceFree() is not exported @@ -4166,7 +4173,7 @@ if (object->teardown && !(object->flags & NSF_DESTROY_CALLED)) { int result = DispatchDestroyMethod(interp, object, 0); - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { /* * The destroy method failed. However, we have to remove * the command anyway, since its parent is currently being @@ -4626,9 +4633,9 @@ assert(*name == ':' && *(name + 1) == ':'); cmd = Tcl_FindCommand(interp, name, NULL, TCL_GLOBAL_ONLY); - if (cmd) { + if (likely(cmd != NULL)) { Tcl_Command importedCmd = TclGetOriginalCommand(cmd); - if (importedCmd) { + if (unlikely(importedCmd != NULL)) { cmd = importedCmd; } } @@ -4704,8 +4711,8 @@ * counter > 0, and b) the commands originating namespace must be the global * one. See also Tcl_HideCommand() and Tcl_ExposeCommand(). */ - if (likely(Tcl_Command_cmdEpoch(cmdPtr) == 0 || - ((Command *)cmdPtr)->nsPtr != iPtr->globalNsPtr)) { + if (Tcl_Command_cmdEpoch(cmdPtr) == 0 || + ((Command *)cmdPtr)->nsPtr != iPtr->globalNsPtr) { return NULL; } @@ -4759,7 +4766,7 @@ /*fprintf(stderr, "GetObjectFromString name = '%s'\n", name);*/ cmd = NSFindCommand(interp, name); - if (cmd && CmdIsNsfObject(cmd)) { + if (likely(cmd && CmdIsNsfObject(cmd))) { /*fprintf(stderr, "GetObjectFromString %s => %p\n", name, Tcl_Command_objClientData(cmd));*/ return (NsfObject *)Tcl_Command_objClientData(cmd); } @@ -5150,7 +5157,7 @@ CmdListAdd(NsfCmdList **cList, Tcl_Command c, NsfClass *clorobj, int noDuplicates, int atEnd) { NsfCmdList *l, *nextPtr, *new; - if (atEnd) { + if (unlikely(atEnd)) { l = *cList; nextPtr = NULL; } else { @@ -5161,7 +5168,7 @@ /* * check for duplicates, if necessary */ - if (noDuplicates) { + if (unlikely(noDuplicates)) { NsfCmdList *h = l, **end = NULL; while (h) { if (h->cmdPtr == c) { @@ -5188,7 +5195,7 @@ new->clorobj = clorobj; new->nextPtr = nextPtr; - if (l) { + if (unlikely(l != NULL)) { /* * append new element at the end */ @@ -5284,7 +5291,7 @@ */ static void CmdListDeleteCmdListEntry(NsfCmdList *del, NsfFreeCmdListClientData *freeFct) { - if (freeFct) { + if (unlikely(freeFct != NULL)) { (*freeFct)(del); } NsfCommandRelease(del->cmdPtr); @@ -6246,15 +6253,15 @@ NsfObject *inst = (NsfObject *)Tcl_GetHashKey(tablePtr, hPtr); Command *cmdPtr; - if (inst->flags & NSF_TCL_DELETE) { + if (unlikely(inst->flags & NSF_TCL_DELETE)) { NsfLog(interp, NSF_LOG_NOTICE, "Object %s is apparently deleted", ObjectName(inst)); continue; } cmdPtr = (Command *)inst->id; assert(cmdPtr); - if (cmdPtr && (cmdPtr->nsPtr->flags & NS_DYING)) { + if (unlikely(cmdPtr && (cmdPtr->nsPtr->flags & NS_DYING))) { NsfLog(interp, NSF_LOG_WARN, "Namespace of %s is apparently deleted", ObjectName(inst)); continue; } @@ -6273,7 +6280,7 @@ * hide|expose] mechanism. However, we still want to process hidden and * re-exposed objects during cleanup like ordinary, exposed ones. */ - if (object == NULL) { + if (unlikely(object == NULL)) { object = GetHiddenObjectFromCmd(interp, inst->id); } assert(object); @@ -7814,8 +7821,8 @@ *---------------------------------------------------------------------- * MethodHandleObj -- * - * Builds a methodHandle from a method name. In case the method - * name is fully qualified, it is simply returned. + * Builds a methodHandle from a method name. We assume, the methodName is + * not fully qualified (i.e. it must not start with a colon). * * Results: * fresh Tcl_Obj @@ -7829,18 +7836,13 @@ MethodHandleObj(NsfObject *object, int withPer_object, CONST char *methodName) { Tcl_Obj *resultObj; - if (*methodName == ':') { - /* - * If we have a methodName starting with ":" and we made it so far, - * we assume it is correct. - */ - resultObj = Tcl_NewStringObj(methodName, -1); - } else { - resultObj = Tcl_NewStringObj(withPer_object ? "" : "::nsf::classes", -1); - assert(object); - Tcl_AppendObjToObj(resultObj, object->cmdName); - Tcl_AppendStringsToObj(resultObj, "::", methodName, (char *) NULL); - } + assert(object); + assert(*methodName != ':'); + + resultObj = Tcl_NewStringObj(withPer_object ? "" : "::nsf::classes", -1); + Tcl_AppendObjToObj(resultObj, object->cmdName); + Tcl_AppendStringsToObj(resultObj, "::", methodName, (char *) NULL); + return resultObj; } @@ -8278,7 +8280,7 @@ NsfClassListFree(subClasses); FREE(NsfClass**, scl); - if (!TransitiveSuperClasses(cl)) { + if (unlikely(!TransitiveSuperClasses(cl))) { NsfClasses *l; /* * Cycle in the superclass graph, backtrack @@ -8411,10 +8413,10 @@ */ codePtr = bodyObj->internalRep.otherValuePtr; - if (((Interp *) *codePtr->interpHandle != iPtr) - || (codePtr->compileEpoch != iPtr->compileEpoch) - || (codePtr->nsPtr != nsPtr) - || (codePtr->nsEpoch != nsPtr->resolverEpoch)) { + if (unlikely(((Interp *) *codePtr->interpHandle != iPtr) + || (codePtr->compileEpoch != iPtr->compileEpoch) + || (codePtr->nsPtr != nsPtr) + || (codePtr->nsEpoch != nsPtr->resolverEpoch))) { #if defined(VAR_RESOLVER_TRACE) fprintf(stderr, "ByteCompiled bytecode not valid proc %p cmd %p method %s\n", @@ -8434,6 +8436,8 @@ } } #endif + /* dummy statement for coverage analysis */ + assert(1); goto doCompilation; } return TCL_OK; @@ -9114,7 +9118,7 @@ cscPtr->flags, (cscPtr->flags & NSF_CSC_CALL_IS_NRE), pcPtr);*/ #if defined(NSF_WITH_ASSERTIONS) - if (opt && object->teardown && (opt->checkoptions & CHECK_POST)) { + if (unlikely(opt && object->teardown && (opt->checkoptions & CHECK_POST))) { int rc; /* * Even, when the returned result != TCL_OK, run assertion to report @@ -9139,7 +9143,7 @@ CscFinish(interp, cscPtr, result, "scripted finalize"); } #else - if (pcPtr) { + if (unlikely(pcPtr != NULL)) { ParseContextRelease(pcPtr); } #endif @@ -9226,7 +9230,7 @@ * if not: just step forward to the next filter */ - if (cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER) { + if (unlikely(cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER)) { NsfCmdList *cmdList; /* * seek cmd in obj's filterOrder @@ -9274,7 +9278,7 @@ } #if defined(NSF_WITH_ASSERTIONS) - if (opt && (opt->checkoptions & CHECK_PRE) && + if (unlikely(opt && (opt->checkoptions & CHECK_PRE)) && (result = AssertionCheck(interp, object, cl, methodName, CHECK_PRE)) == TCL_ERROR) { goto prep_done; } @@ -9402,7 +9406,7 @@ } #if defined(NSF_WITH_ASSERTIONS) - if (object->opt) { + if (unlikely(object->opt != NULL)) { CheckOptions co = object->opt->checkoptions; if ((co & CHECK_INVAR)) { result = AssertionCheckInvars(interp, object, Tcl_GetCommandName(interp, cmd), co); @@ -9513,7 +9517,7 @@ NsfObject *invokeObj = (NsfObject *)cp; assert(invokeObj); - if (invokeObj->flags & NSF_DELETED) { + if (unlikely(invokeObj->flags & NSF_DELETED)) { /* * When we try to invoke a deleted object, the cmd (alias) is * automatically removed. Note that the cmd might be still referenced @@ -9553,7 +9557,7 @@ /*fprintf(stderr, "ensemble dispatch %s objc %d\n", methodName, objc);*/ - if (objc < 2) { + if (unlikely(objc < 2)) { CallFrame frame, *framePtr = &frame; Nsf_PushFrameCsc(interp, cscPtr, framePtr); result = DispatchDefaultMethod(interp, invokeObj, objv[0], NSF_CSC_IMMEDIATE); @@ -9567,13 +9571,13 @@ cscPtr->objv = objv; Nsf_PushFrameCsc(interp, cscPtr, framePtr); - if (self->nsPtr) { + if (likely(self->nsPtr != NULL)) { cmd = FindMethod(self->nsPtr, methodName); /*fprintf(stderr, "... objv[0] %s method %p %s csc %p\n", ObjStr(objv[0]), cmd, methodName, cscPtr); */ - if (cmd) { + if (likely(cmd != NULL)) { /* * In order to allow [next] to be called in an ensemble method, * an extra call-frame is needed. This CSC frame is typed as @@ -9822,9 +9826,9 @@ */ if (likely(result == TCL_OK)) { - if ((flags & NSF_CSC_METHOD_IS_UNKNOWN) - || ((cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER) && rst->unknown) - ) { + if (unlikely((flags & NSF_CSC_METHOD_IS_UNKNOWN) + || ((cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER) && rst->unknown) + )) { result = DispatchUnknownMethod(interp, object, cscPtr->objc, cscPtr->objv, NULL, cscPtr->objv[0], (cscPtr->flags & NSF_CSC_CALL_NO_UNKNOWN)|NSF_CSC_IMMEDIATE); @@ -9839,12 +9843,12 @@ * Resetting mixin and filter stacks */ - if ((flags & NSF_CSC_MIXIN_STACK_PUSHED) && object->mixinStack) { + if (unlikely(flags & NSF_CSC_MIXIN_STACK_PUSHED) && object->mixinStack) { /* fprintf(stderr, "MixinStackPop %s.%s %p %s\n", ObjectName(object), methodName, object->mixinStack, msg);*/ MixinStackPop(object); } - if ((flags & NSF_CSC_FILTER_STACK_PUSHED) && object->filterStack) { + if (unlikely(flags & NSF_CSC_FILTER_STACK_PUSHED) && object->filterStack) { /* fprintf(stderr, "FilterStackPop %s.%s %p %s\n", ObjectName(object), methodName, object->filterStack, msg);*/ FilterStackPop(object); @@ -9924,7 +9928,7 @@ shift = 1; methodObj = objv[1]; methodName = ObjStr(methodObj); - if (FOR_COLON_RESOLVER(methodName)) { + if (unlikely(FOR_COLON_RESOLVER(methodName))) { return NsfPrintError(interp, "%s: method name '%s' must not start with a colon", ObjectName(object), methodName); } @@ -9954,12 +9958,12 @@ /*fprintf(stderr, "obj refCount of %p after incr %d (ObjectDispatch) %s\n", object, object->refCount, methodName);*/ - if (!(objflags & NSF_FILTER_ORDER_VALID)) { + if (unlikely((objflags & NSF_FILTER_ORDER_VALID) == 0)) { FilterComputeDefined(interp, object); objflags = object->flags; } - if (!(objflags & NSF_MIXIN_ORDER_VALID)) { + if (unlikely((objflags & NSF_MIXIN_ORDER_VALID) == 0)) { MixinComputeDefined(interp, object); objflags = object->flags; } @@ -9976,7 +9980,7 @@ assert((flags & (NSF_CSC_MIXIN_STACK_PUSHED|NSF_CSC_FILTER_STACK_PUSHED)) == 0); - if (((objflags & NSF_FILTER_ORDER_DEFINED_AND_VALID) == NSF_FILTER_ORDER_DEFINED_AND_VALID)) { + if (unlikely((objflags & NSF_FILTER_ORDER_DEFINED_AND_VALID) == NSF_FILTER_ORDER_DEFINED_AND_VALID)) { if (rst->doFilters && !rst->guardCount) { NsfCallStackContent *cscPtr1 = CallStackGetTopFrame0(interp); @@ -9996,7 +10000,7 @@ } } - if (cmd == NULL && (flags & NSF_CM_LOCAL_METHOD)) { + if (unlikely(cmd == NULL && (flags & NSF_CM_LOCAL_METHOD))) { /* * We require a local method. If the local method is found, we set always * the cmd and sometimes the class (if it is a class specific method). @@ -10019,7 +10023,7 @@ object ? ObjectName(object) : NULL, methodName, cl, cl ? ClassName(cl) : "NONE", cmd);*/ - } else if (*methodName == ':') { + } else if (unlikely(*methodName == ':')) { NsfObject *regObject; int fromClassNS = 0; @@ -10028,16 +10032,12 @@ * object on which the method was registered. */ - if (methodObj == NULL) { - methodObj = Tcl_NewStringObj(methodName, -1); - } - INCR_REF_COUNT(methodObj); cmd = ResolveMethodName(interp, NULL, methodObj, NULL, ®Object, NULL, NULL, &fromClassNS); DECR_REF_COUNT(methodObj); - if (cmd) { + if (likely(cmd != NULL)) { if (regObject) { if (NsfObjectIsClass(regObject)) { cl = (NsfClass *)regObject; @@ -10079,9 +10079,9 @@ /* * Check if a mixed in method has to be called. */ - if ((objflags & NSF_MIXIN_ORDER_DEFINED_AND_VALID) == NSF_MIXIN_ORDER_DEFINED_AND_VALID - && (flags & (NSF_CM_SYSTEM_METHOD|NSF_CM_INTRINSIC_METHOD)) == 0 - && ((flags & NSF_CM_LOCAL_METHOD) == 0 || cl)) { + if (unlikely((objflags & NSF_MIXIN_ORDER_DEFINED_AND_VALID) == NSF_MIXIN_ORDER_DEFINED_AND_VALID + && (flags & (NSF_CM_SYSTEM_METHOD|NSF_CM_INTRINSIC_METHOD)) == 0 + && ((flags & NSF_CM_LOCAL_METHOD) == 0 || cl))) { /* * The current logic allocates first an entry on the per-object @@ -10238,12 +10238,12 @@ * set currently for fully qualified cmd names and in nsf::object::dispatch. */ - if (cmd && (flags & NSF_CM_IGNORE_PERMISSIONS) == 0) { + if (likely(cmd && (flags & NSF_CM_IGNORE_PERMISSIONS) == 0)) { int cmdFlags = Tcl_Command_flags(cmd); #if !defined(NDEBUG) - if ((cmdFlags & NSF_CMD_CALL_PRIVATE_METHOD) - && ((flags & NSF_CM_LOCAL_METHOD) == 0) + if (unlikely((cmdFlags & NSF_CMD_CALL_PRIVATE_METHOD) + && ((flags & NSF_CM_LOCAL_METHOD) == 0)) ) { /* * Private methods can be only called with the "-local" flag. All cases @@ -10283,7 +10283,7 @@ cscPtr = CscAlloc(interp, &csc, cmd); CscInit(cscPtr, object, cl, cmd, frameType, flags, methodName); - if ((cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER)) { + if (unlikely(cscPtr->frameType == NSF_CSC_TYPE_ACTIVE_FILTER)) { /* run filters is not NRE enabled */ cscPtr->flags |= NSF_CSC_IMMEDIATE; /* @@ -10628,7 +10628,7 @@ NsfStackDump(interp); #endif - if (objc > 1) { + if (likely(objc > 1)) { /* * Normal dispatch; we must not use NSF_CSC_IMMEDIATE here, * otherwise coroutines won't work. @@ -10772,7 +10772,7 @@ Tcl_Obj *objv[3]; int result; - if (pPtr->converterArg) { + if (unlikely(pPtr->converterArg != NULL)) { /*fprintf(stderr, "ConvertToTclobj %s (must be %s)\n", ObjStr(objPtr), ObjStr(pPtr->converterArg));*/ objv[1] = pPtr->converterArg; @@ -10793,10 +10793,10 @@ #if defined(NSF_WITH_VALUE_WARNINGS) if (RUNTIME_STATE(interp)->debugLevel > 0) { char *value = ObjStr(objPtr); - if (*value == '-' - && (pPtr->flags & NSF_ARG_CHECK_NONPOS) - && isalpha(*(value+1)) - && strchr(value+1, ' ') == NULL + if (unlikely(*value == '-' + && (pPtr->flags & NSF_ARG_CHECK_NONPOS) + && isalpha(*(value+1)) + && strchr(value+1, ' ') == NULL) ) { /* * In order to flag a warning, we set the error message and @@ -11156,7 +11156,7 @@ * result-overwriting just harms for result-converters, but saving is * always semantically correct. */ - if ((pPtr->flags & NSF_ARG_IS_CONVERTER) == 0) { + if (unlikely((pPtr->flags & NSF_ARG_IS_CONVERTER) == 0)) { savedResult = Tcl_GetObjResult(interp); /* save the result */ INCR_REF_COUNT(savedResult); } else { @@ -11321,19 +11321,11 @@ static int ParamOptionParse(Tcl_Interp *interp, CONST char *argString, - size_t start, size_t remainder, + size_t start, size_t optionLength, int disallowedOptions, Nsf_Param *paramPtr) { CONST char *dotdot, *option = argString + start; - char *firstComma = memchr(option, ',', remainder); - size_t optionLength; int result = TCL_OK; - if (firstComma == NULL) { - optionLength = remainder; - } else { - optionLength = firstComma - option; - } - /*fprintf(stderr, "ParamOptionParse name %s, option '%s' (%ld) disallowed %.6x\n", paramPtr->name, option, remainder, disallowedOptions);*/ @@ -11362,13 +11354,13 @@ /* check lower bound */ if (*option == '0') { paramPtr->flags |= NSF_ARG_ALLOW_EMPTY; - } else if (*option != '1') { + } else if (unlikely(*option != '1')) { return NsfPrintError(interp, "lower bound of multiplicity in %s not supported", argString); } /* check upper bound */ option = dotdot + 2; if (*option == '*' || *option == 'n') { - if ((paramPtr->flags & (NSF_ARG_SWITCH)) != 0) { + if (unlikely((paramPtr->flags & (NSF_ARG_SWITCH)) != 0)) { return NsfPrintError(interp, "upper bound of multiplicity of '%c' not allowed for \"switch\"\n", *option); } @@ -11546,13 +11538,13 @@ return NsfPrintError(interp, "Parameter option '%s' not allowed", option); } - if ((paramPtr->flags & NSF_ARG_METHOD_INVOCATION) && (paramPtr->flags & NSF_ARG_NOCONFIG)) { + if (unlikely((paramPtr->flags & NSF_ARG_METHOD_INVOCATION) && (paramPtr->flags & NSF_ARG_NOCONFIG))) { return NsfPrintError(interp, "Option 'noconfig' cannot used together with this type of object parameter"); - } else if ((paramPtr->flags & (NSF_ARG_ALIAS|NSF_ARG_FORWARD)) == (NSF_ARG_ALIAS|NSF_ARG_FORWARD)) { + } else if (unlikely((paramPtr->flags & (NSF_ARG_ALIAS|NSF_ARG_FORWARD)) == (NSF_ARG_ALIAS|NSF_ARG_FORWARD))) { return NsfPrintError(interp, "Parameter types 'alias' and 'forward' cannot be used together"); - } else if ((paramPtr->flags & (NSF_ARG_ALIAS|NSF_ARG_INITCMD)) == (NSF_ARG_ALIAS|NSF_ARG_INITCMD)) { + } else if (unlikely((paramPtr->flags & (NSF_ARG_ALIAS|NSF_ARG_INITCMD)) == (NSF_ARG_ALIAS|NSF_ARG_INITCMD))) { return NsfPrintError(interp, "Parameter types 'alias' and 'initcmd' cannot be used together"); - } else if ((paramPtr->flags & (NSF_ARG_FORWARD|NSF_ARG_INITCMD)) == (NSF_ARG_FORWARD|NSF_ARG_INITCMD)) { + } else if (unlikely((paramPtr->flags & (NSF_ARG_FORWARD|NSF_ARG_INITCMD)) == (NSF_ARG_FORWARD|NSF_ARG_INITCMD))) { return NsfPrintError(interp, "Parameter types 'forward' and 'initcmd' cannot be used together"); } @@ -11633,7 +11625,7 @@ /* search for ',' */ for (l = start; l < length; l++) { - if (argString[l] == ',') { + if (unlikely(argString[l] == ',')) { /* skip space from end */ for (end = l; end>0 && isspace((int)argString[end-1]); end--); result = ParamOptionParse(interp, argString, start, end-start, disallowedFlags, paramPtr); @@ -11918,6 +11910,8 @@ Tcl_Obj *ov[4]; int result; + assert(*methodName != ':'); + if (regObject == NULL) {regObject = defObject;} /* Check, if we are allowed to redefine the method */ result = CanRedefineCmd(interp, nsPtr, defObject, methodName); @@ -12173,10 +12167,10 @@ */ cmd = Tcl_GetCommandFromObj(interp, procNameObj); - if (!cmd) { + if (unlikely(cmd == NULL)) { return NsfPrintError(interp, "cannot lookup command '%s'", fullMethodName); } - if (!CmdIsProc(cmd)) { + if (unlikely(!CmdIsProc(cmd))) { return NsfPrintError(interp, "command '%s' is not a proc", fullMethodName); } /* @@ -12197,7 +12191,7 @@ unsigned int dummy; result = ByteCompiled(interp, &dummy, procPtr, fullMethodName); } - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { /* todo: really? error msg? */ return result; } @@ -12264,7 +12258,7 @@ assert(tcd); /*fprintf(stderr, "NsfProcStub %s is called, tcd %p\n", ObjStr(objv[0]), tcd);*/ - if (tcd->paramDefs && tcd->paramDefs->paramsPtr) { + if (likely(tcd->paramDefs && tcd->paramDefs->paramsPtr)) { ParseContext *pcPtr = (ParseContext *) NsfTclStackAlloc(interp, sizeof(ParseContext), "parse context"); ALLOC_ON_STACK(Tcl_Obj*, objc, tov); @@ -12282,7 +12276,7 @@ tcd->paramDefs, objv[0], objc, tov); - if (result == TCL_OK) { + if (likely(result == TCL_OK)) { result = InvokeShadowedProc(interp, tcd->procName, tcd->cmd, pcPtr); } else { /*Tcl_Obj *resultObj = Tcl_GetObjResult(interp); @@ -12298,6 +12292,7 @@ assert(0); /* should never happen */ result = TCL_ERROR; } + return result; } @@ -12356,7 +12351,7 @@ tcd = NEW(NsfProcClientData); cmd = Tcl_CreateObjCommand(interp, procName, NsfProcStub, tcd, NsfProcStubDeleteProc); - if (cmd == NULL) { + if (unlikely(cmd == NULL)) { /* * For some reason, the command could not be created. Let us hope, * we have a useful error message. @@ -14765,7 +14760,7 @@ /*createPart1*/ 1, /*createPart2*/ 1, &arrayPtr); Nsf_PopFrameObj(interp, framePtr); - if (otherPtr == NULL) { + if (unlikely(otherPtr == NULL)) { return NsfPrintError(interp, "can't import variable %s into method scope: " "can't find variable on %s", ObjStr(varName), ObjectName(object)); @@ -14822,7 +14817,7 @@ */ if (!new) { /*fprintf(stderr, "GetIntoScope create alias\n");*/ - if (varPtr == otherPtr) { + if (unlikely(varPtr == otherPtr)) { return NsfPrintError(interp, "can't instvar to variable itself"); } if (TclIsVarLink(varPtr)) { @@ -14846,9 +14841,9 @@ TclCleanupVar(linkPtr, (Var *) NULL); } - } else if (!TclIsVarUndefined(varPtr)) { + } else if (unlikely(TclIsVarUndefined(varPtr) == 0)) { return NsfPrintError(interp, "varName '%s' exists already", varNameString); - } else if (TclIsVarTraced(varPtr)) { + } else if (unlikely(TclIsVarTraced(varPtr) != 0)) { return NsfPrintError(interp, "varName '%s' has traces: can't use for instvar", varNameString); } } @@ -14921,7 +14916,7 @@ flags = (object->nsPtr) ? TCL_LEAVE_ERR_MSG|TCL_NAMESPACE_ONLY : TCL_LEAVE_ERR_MSG; Nsf_PushFrameObj(interp, object, framePtr); - if (valueObj == NULL) { + if (likely(valueObj == NULL)) { resultObj = Tcl_ObjGetVar2(interp, nameObj, NULL, flags); } else { /*fprintf(stderr, "setvar in obj %s: name %s = %s\n", ObjectName(object), ObjStr(nameObj), ObjStr(value));*/ @@ -15160,14 +15155,14 @@ } else if (c == '1' && (c1 == '\0' || c1 == ' ')) { if (c1 != '\0') { - if (Tcl_ListObjIndex(interp, ForwardArgObj, 1, &list) != TCL_OK) { + if (unlikely(Tcl_ListObjIndex(interp, ForwardArgObj, 1, &list) != TCL_OK)) { 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) { + if (unlikely(Tcl_ListObjGetElements(interp, list, &nrElements, &listElements) != TCL_OK)) { return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(list)); } - } else if (tcd->subcommands) { /* deprecated part */ + } else if (unlikely(tcd->subcommands != NULL)) { /* deprecated part */ if (Tcl_ListObjGetElements(interp, tcd->subcommands, &nrElements, &listElements) != TCL_OK) { return NsfPrintError(interp, "forward: %%1 contains invalid list '%s'", ObjStr(tcd->subcommands)); } @@ -15286,7 +15281,7 @@ goto add_to_freelist; } } else { - if (p == ForwardArgString) { + if (likely(p == ForwardArgString)) { *out = ForwardArgObj; } else { Tcl_Obj *newarg = Tcl_NewStringObj(ForwardArgString, -1); @@ -15331,7 +15326,7 @@ tcd->object = NULL; - if (tcd->verbose) { + if (unlikely(tcd->verbose)) { Tcl_Obj *cmd = Tcl_NewListObj(objc, objv); fprintf(stderr, "forwarder calls '%s'\n", ObjStr(cmd)); DECR_REF_COUNT(cmd); @@ -15345,7 +15340,7 @@ } else if (TclObjIsNsfObject(interp, tcd->cmdName, &object)) { /*fprintf(stderr, "CallForwarder NsfObjDispatch object %s, objc=%d\n", ObjStr(tcd->cmdName), objc);*/ - if (objc > 1) { + if (likely(objc > 1)) { result = ObjectDispatch(object, interp, objc, objv, NSF_CSC_IMMEDIATE); } else { result = DispatchDefaultMethod(interp, object, objv[0], NSF_CSC_IMMEDIATE); @@ -15358,7 +15353,7 @@ if (tcd->objframe) { Nsf_PopFrameObj(interp, framePtr); } - if (result == TCL_ERROR && tcd && tcd->onerror) { + if (unlikely(result == TCL_ERROR && tcd && tcd->onerror)) { Tcl_Obj *ov[2]; ov[0] = tcd->onerror; ov[1] = Tcl_GetObjResult(interp); @@ -15393,7 +15388,7 @@ ForwardCmdClientData *tcd = (ForwardCmdClientData *)clientData; int result, inputArg = 1; - if (!tcd || !tcd->object) { + if (unlikely(!tcd || !tcd->object)) { return NsfDispatchClientDataError(interp, tcd, "object", "forwarder"); } @@ -16056,7 +16051,7 @@ "outObj changed %d (%p %p) isok %d\n", pPtr->name, pPtr->type, pPtr->flags & NSF_ARG_IS_CONVERTER, pPtr->flags, objPtr != *outObjPtr, objPtr, *outObjPtr, result == TCL_OK);*/ - if ((pPtr->flags & NSF_ARG_IS_CONVERTER) && objPtr != *outObjPtr) { + if (unlikely(pPtr->flags & NSF_ARG_IS_CONVERTER) && objPtr != *outObjPtr) { *flags |= NSF_PC_MUST_DECR; } else { /* @@ -16529,7 +16524,7 @@ fprintf(stderr, "... positional arg o %d objc %d, nrArgs %d next paramPtr %s\n", o, objc, pPtr->nrArgs, currentParamPtr->name); #endif - if (pPtr->nrArgs == 0) { + if (unlikely(pPtr->nrArgs == 0)) { /* * Allow positional arguments with 0 args for object parameter * aliases, which are always fired. Such parameter are non-consuming, @@ -16540,7 +16535,9 @@ o--; continue; } - if (dashdash) {dashdash = 0;} + if (unlikely(dashdash)) { + dashdash = 0; + } valueObj = argumentObj; } @@ -16556,33 +16553,35 @@ * check, whether it is value is permissible. */ assert(valueObj); - + if (unlikely(ArgumentCheck(interp, valueObj, pPtr, doCheck, &pcPtr->flags[j], &pcPtr->clientData[j], &pcPtr->objv[j]) != TCL_OK)) { if (pcPtr->flags[j] & NSF_PC_MUST_DECR) {pcPtr->status |= NSF_PC_STATUS_MUST_DECR;} return TCL_ERROR; } - + /* * Switches are more tricky: if the flag is provided without * valueInArgument, we take the default and invert it. If valueInArgument * was used, the default inversion must not happen. */ - if (valueInArgument == NULL && pPtr->converter == Nsf_ConvertToSwitch) { - /*fprintf(stderr,"... set INVERT_DEFAULT for '%s' flags %.6x\n", - pPtr->name, pPtr->flags);*/ - pcPtr->flags[j] |= NSF_PC_INVERT_DEFAULT; - } - + if (likely(valueInArgument == NULL)) { + if (unlikely(pPtr->converter == Nsf_ConvertToSwitch)) { + /*fprintf(stderr,"... set INVERT_DEFAULT for '%s' flags %.6x\n", + pPtr->name, pPtr->flags);*/ + pcPtr->flags[j] |= NSF_PC_INVERT_DEFAULT; + } + } + /*fprintf(stderr, "... non-positional pcPtr %p check [%d] obj %p flags %.6x & %p\n", pcPtr, j, pcPtr->objv[j], pcPtr->flags[j], &(pcPtr->flags[j])); */ - + /* * Provide warnings for double-settings. */ - if (pcPtr->flags[j] & NSF_ARG_SET) { + if (unlikely(pcPtr->flags[j] & NSF_ARG_SET)) { Tcl_Obj *cmdLineObj = Tcl_NewListObj(objc-1, objv+1); INCR_REF_COUNT(cmdLineObj); NsfLog(interp, NSF_LOG_WARN, "Non-positional parameter %s was passed more than once (%s%s%s %s)", @@ -16596,7 +16595,7 @@ /* * Embed error message of converter in current context. */ - if (pcPtr->flags[j] & NSF_ARG_WARN) { + if (unlikely(pcPtr->flags[j] & NSF_ARG_WARN)) { Tcl_Obj *resultObj = Tcl_GetObjResult(interp); Tcl_DString ds, *dsPtr = &ds; @@ -16609,15 +16608,13 @@ Tcl_DStringFree(dsPtr); } - if (pcPtr->flags[j] & NSF_PC_MUST_DECR) { + if (unlikely(pcPtr->flags[j] & NSF_PC_MUST_DECR)) { /* fprintf(stderr, "pcPtr %p setting NSF_PC_STATUS_MUST_DECR\n", pcPtr); */ pcPtr->status |= NSF_PC_STATUS_MUST_DECR; } + + assert(pcPtr->varArgs == 0); - if (pcPtr->varArgs) { - break; - } - #if defined(PARSE_TRACE_FULL) fprintf(stderr, "... iterate on o %d objc %d, currentParamPtr %s\n", o, objc, currentParamPtr->name); @@ -16971,7 +16968,7 @@ int outputPerObject = 0; Tcl_Obj *resultObj; - assert(methodName); + assert(methodName && *methodName != ':'); if (!NsfObjectIsClass(regObject)) { withPer_object = 1; /* don't output "object" modifier, if regObject is not a class */ @@ -18033,7 +18030,7 @@ CallFrame *varFramePtr = Tcl_Interp_varFramePtr(interp); Proc *proc = Tcl_CallFrame_procPtr(varFramePtr); - if (proc) { + if (likely(proc != NULL)) { CompiledLocal *ap; Var *varPtr; int i; @@ -18410,6 +18407,8 @@ NsfClass *cl = (withPer_object || ! NsfObjectIsClass(object)) ? NULL : (NsfClass *)object; NsfObject *oldTargetObject, *newTargetObject; + assert(methodName && *methodName != ':'); + cmd = Tcl_GetCommandFromObj(interp, cmdName); if (cmd == NULL) { return NsfPrintError(interp, "cannot lookup command '%s'", ObjStr(cmdName)); @@ -18767,7 +18766,7 @@ methodName, methodproperty, valueObj ? ObjStr(valueObj) : "NULL", cl, cmd);*/ - if (!cmd) { + if (unlikely(cmd == NULL)) { return NsfPrintError(interp, "Cannot lookup %s method '%s' for %s", cl == 0 ? "object " : "", methodName, ObjectName(object)); @@ -18803,7 +18802,7 @@ int bool, result; result = Tcl_GetBooleanFromObj(interp, valueObj, &bool); - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { return result; } if (bool) { @@ -18948,7 +18947,7 @@ size_t j, length; int result; - if (*methodName == '-' || *methodName == ':') { + if (unlikely(*methodName == '-' || *methodName == ':')) { return NsfPrintError(interp, "invalid setter name \"%s\" (must not start with a dash or colon)", methodName); } @@ -19128,7 +19127,7 @@ /*fprintf(stderr, "NsfDispatchCmd obj=%s, cmd m='%s' nobjc %d\n", ObjectName(object), ObjStr(commandObj), nobjc);*/ - if (withIntrinsic && withSystem) { + if (unlikely(withIntrinsic && withSystem)) { return NsfPrintError(interp, "flags '-intrinsic' and '-system' are mutual exclusive"); } @@ -19340,7 +19339,7 @@ NsfObject *self = GetSelfObj(interp); int flags, result; - if (!self) { + if (unlikely(self == NULL)) { return NsfNoCurrentObjectError(interp, ObjStr(nobjv[0])); } @@ -19451,7 +19450,7 @@ /* check, if we work on an object or class namespace */ object = GetObjectFromNsName(interp, name, &fromClassNS); - if (object == NULL) { + if (unlikely(object == NULL)) { return NsfPrintError(interp, "argument 1 '%s' is not an object", ObjStr(fromNs)); } @@ -20070,15 +20069,15 @@ int result = TCL_OK; if (selfoption == 0 || selfoption == CurrentoptionObjectIdx) { - if (object) { + if (likely(object != NULL)) { Tcl_SetObjResult(interp, object->cmdName); return TCL_OK; } else { return NsfNoCurrentObjectError(interp, NULL); } } - if (!object && selfoption != CurrentoptionCallinglevelIdx) { + if (unlikely(!object && selfoption != CurrentoptionCallinglevelIdx)) { return NsfNoCurrentObjectError(interp, NULL); } @@ -20235,7 +20234,7 @@ NsfSelfCmd(Tcl_Interp *interp) { NsfObject *object = GetSelfObj(interp); - if (object) { + if (likely(object != NULL)) { Tcl_SetObjResult(interp, object->cmdName); return TCL_OK; } else { @@ -20286,7 +20285,7 @@ case 1: {varName = ov[0]; break;} case 2: {varName = ov[0]; alias = ov[1]; break;} } - if (varName) { + if (likely(varName != NULL)) { result = GetInstVarIntoCurrentScope(interp, cmdName, object, varName, alias); } else { assert(objv[i]); @@ -20630,14 +20629,9 @@ /*fprintf(stderr, "ParameterCheck paramPtr %p final refCount of wrapper %d can free %d flags %.6x\n", paramPtr, paramWrapperPtr->refCount, paramWrapperPtr->canFree, flags);*/ - if (paramWrapperPtr->refCount == 0) { - fprintf(stderr, "#### ParamSetFromAny2 paramPtr %p manual free\n", paramPtr); - ParamsFree(paramWrapperPtr->paramPtr); - FREE(NsfParamWrapper, paramWrapperPtr); - } else { - paramWrapperPtr->canFree = 1; - } - + assert(paramWrapperPtr->refCount > 0); + paramWrapperPtr->canFree = 1; + if (flags & NSF_PC_MUST_DECR) { DECR_REF_COUNT2("valueObj", outObjPtr); } @@ -21129,7 +21123,7 @@ } object->flags |= NSF_DESTROY_CALLED_SUCCESS; - if ((object->flags & NSF_DURING_DELETE) == 0) { + if (likely((object->flags & NSF_DURING_DELETE) == 0)) { int result; Tcl_Obj *methodObj; @@ -21142,7 +21136,7 @@ /*fprintf(stderr, "call dealloc\n");*/ result = NsfCallMethodWithArgs(interp, (Nsf_Object *)object->cl, methodObj, object->cmdName, 1, NULL, NSF_CSC_IMMEDIATE); - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { /* * In case, the call of the dealloc method has failed above (e.g. NS_DYING), * we have to call dealloc manually, otherwise we have a memory leak @@ -21216,7 +21210,7 @@ CallStackUseActiveFrame(interp, &ctx); } - if (!Tcl_Interp_varFramePtr(interp)) { + if (unlikely(Tcl_Interp_varFramePtr(interp) == NULL)) { CallStackRestoreSavedFrames(interp, &ctx); return NsfPrintError(interp, "instvar used on %s, but call-stack is not in procedure scope", ObjectName(object)); @@ -21499,7 +21493,7 @@ CONST char *vn; callFrameContext ctx = {0, NULL, NULL}; - if (RUNTIME_STATE(interp)->exitHandlerDestroyRound != NSF_EXITHANDLER_OFF) { + if (unlikely(RUNTIME_STATE(interp)->exitHandlerDestroyRound != NSF_EXITHANDLER_OFF)) { fprintf(stderr, "### Can't make objects volatile during shutdown\n"); return NsfPrintError(interp, "Can't make objects volatile during shutdown"); } @@ -21551,7 +21545,7 @@ */ /*fprintf(stderr, " **** class '%s' wants to alloc '%s'\n", ClassName(cl), nameString);*/ - if (!NSCheckColons(nameString, 0)) { + if (unlikely(NSCheckColons(nameString, 0) == 0)) { return NsfPrintError(interp, "Cannot allocate object - illegal name '%s'", nameString); } @@ -21567,7 +21561,7 @@ newObj = (NsfObject *)PrimitiveCCreate(interp, nameObj, parentNsPtr, cl); } - if (newObj == NULL) { + if (unlikely(newObj == NULL)) { return NsfPrintError(interp, "alloc failed to create '%s' " "(possibly parent namespace does not exist)", nameString); @@ -21644,7 +21638,7 @@ Tcl_Namespace *parentNsPtr; ALLOC_ON_STACK(Tcl_Obj*, objc, tov); - if (RUNTIME_STATE(interp)->exitHandlerDestroyRound != NSF_EXITHANDLER_OFF) { + if (unlikely(RUNTIME_STATE(interp)->exitHandlerDestroyRound != NSF_EXITHANDLER_OFF)) { fprintf(stderr, "### Can't create object %s during shutdown\n", ObjStr(objv[1])); return TCL_OK; /* don't fail, if this happens during destroy, it might be canceled */ } @@ -21693,7 +21687,7 @@ /* * Provide protection against recreation if base classes. */ - if (newObject && unlikely(IsBaseClass(newObject))) { + if (unlikely(newObject && unlikely(IsBaseClass(newObject)))) { result = NsfPrintError(interp, "Cannot recreate base class %s", ObjectName(newObject)); goto create_method_exit; } @@ -21725,7 +21719,7 @@ result = CallMethod(cl, interp, methodObj, objc+1, nobjv+1, NSF_CM_IGNORE_PERMISSIONS|NSF_CSC_IMMEDIATE); } - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { goto create_method_exit; } @@ -21748,12 +21742,12 @@ 3, &nameObj, NSF_CSC_IMMEDIATE); } - if (result != TCL_OK) { + if (unlikely(result != TCL_OK)) { goto create_method_exit; } nameObj = Tcl_GetObjResult(interp); - - if (GetObjectFromObj(interp, nameObj, &newObject) != TCL_OK) { + + if (unlikely(GetObjectFromObj(interp, nameObj, &newObject) != TCL_OK)) { result = NsfPrintError(interp, "couldn't find result of alloc"); goto create_method_exit; } @@ -23338,7 +23332,7 @@ * physical destroy round, we can set the counter to an appropriate * value to ensure deletion. */ - if (object->refCount != 1) { + if (unlikely(object->refCount != 1)) { if (object->refCount > 1) { NsfLog(interp, NSF_LOG_WARN, "Have to fix refCount for obj %p refCount %d (name %s)", object, object->refCount, ObjectName(object)); @@ -23350,13 +23344,13 @@ } #if !defined(NDEBUG) - if (object->activationCount != 0) { + if (unlikely(object->activationCount != 0)) { fprintf(stderr, "FinalObjectDeletion obj %p activationcount %d\n", object, object->activationCount); } #endif assert(object->activationCount == 0); - if (object->id) { + if (likely(object->id != NULL)) { /*fprintf(stderr, " ... cmd dealloc %p final delete refCount %d\n", object->id, Tcl_Command_refCount(object->id));*/ @@ -23476,7 +23470,8 @@ CmdListDeleteCmdListEntry(entry, NULL); entry = lastEntry; } - + assert(entry); + deleted++; } } @@ -23493,7 +23488,8 @@ entry; lastEntry = entry, entry = entry->nextPtr) { NsfClass *cl = entry->clorobj; - + + assert(cl); if (!NsfObjectIsClass(&cl->object)) { continue; } Index: generic/nsfAPI.h =================================================================== diff -u -r28648322161a72f3a5e0458fdefc110326322cba -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- generic/nsfAPI.h (.../nsfAPI.h) (revision 28648322161a72f3a5e0458fdefc110326322cba) +++ generic/nsfAPI.h (.../nsfAPI.h) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -516,7 +516,7 @@ static int NsfCAllocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "alloc"); + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "alloc"); if (objc != 2) { @@ -533,25 +533,25 @@ NsfCCreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "create"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "create"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfCCreateMethodIdx].paramDefs, method_definitions[NsfCCreateMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *objectName = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfCCreateMethod(interp, cl, objectName, objc, objv); + } else { + return TCL_ERROR; } } static int NsfCDeallocMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "dealloc"); + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "dealloc"); if (objc != 2) { @@ -568,84 +568,84 @@ NsfCFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "filterguard"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "filterguard"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfCFilterGuardMethodIdx].paramDefs, method_definitions[NsfCFilterGuardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *filter = (CONST char *)pc.clientData[0]; Tcl_Obj *guard = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfCFilterGuardMethod(interp, cl, filter, guard); + } else { + return TCL_ERROR; } } static int NsfCMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "mixinguard"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "mixinguard"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfCMixinGuardMethodIdx].paramDefs, method_definitions[NsfCMixinGuardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *mixin = (Tcl_Obj *)pc.clientData[0]; Tcl_Obj *guard = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfCMixinGuardMethod(interp, cl, mixin, guard); + } else { + return TCL_ERROR; } } static int NsfCNewMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "new"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "new"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfCNewMethodIdx].paramDefs, method_definitions[NsfCNewMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *withChildof = (Tcl_Obj *)pc.clientData[0]; assert(pc.status == 0); return NsfCNewMethod(interp, cl, withChildof, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } static int NsfCRecreateMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "recreate"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "recreate"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfCRecreateMethodIdx].paramDefs, method_definitions[NsfCRecreateMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *objectName = (Tcl_Obj *)pc.clientData[0]; assert(pc.status == 0); return NsfCRecreateMethod(interp, cl, objectName, objc, objv); + } else { + return TCL_ERROR; } } static int NsfCSuperclassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "superclass"); + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "superclass"); if (objc < 1 || objc > 2) { @@ -662,91 +662,89 @@ NsfClassInfoFilterguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "filterguard"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "filterguard"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoFilterguardMethodIdx].paramDefs, method_definitions[NsfClassInfoFilterguardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *filter = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfClassInfoFilterguardMethod(interp, cl, filter); + } else { + return TCL_ERROR; } } static int NsfClassInfoFiltermethodsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "filtermethods"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "filtermethods"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoFiltermethodsMethodIdx].paramDefs, method_definitions[NsfClassInfoFiltermethodsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withGuards = (int )PTR2INT(pc.clientData[0]); CONST char *pattern = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfClassInfoFiltermethodsMethod(interp, cl, withGuards, pattern); + } else { + return TCL_ERROR; } } static int NsfClassInfoForwardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "forward"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "forward"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoForwardMethodIdx].paramDefs, method_definitions[NsfClassInfoForwardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withDefinition = (int )PTR2INT(pc.clientData[0]); CONST char *name = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfClassInfoForwardMethod(interp, cl, withDefinition, name); + } else { + return TCL_ERROR; } } static int NsfClassInfoHeritageMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "heritage"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "heritage"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoHeritageMethodIdx].paramDefs, method_definitions[NsfClassInfoHeritageMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *pattern = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfClassInfoHeritageMethod(interp, cl, pattern); + } else { + return TCL_ERROR; } } static int NsfClassInfoInstancesMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "instances"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "instances"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoInstancesMethodIdx].paramDefs, method_definitions[NsfClassInfoInstancesMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); CONST char *patternString = NULL; NsfObject *patternObject = NULL; @@ -767,40 +765,40 @@ DECR_REF_COUNT2("patternObj", pattern); } return returnCode; + } else { + return TCL_ERROR; } } static int NsfClassInfoMethodMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "method"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "method"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoMethodMethodIdx].paramDefs, method_definitions[NsfClassInfoMethodMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int infomethodsubcmd = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *name = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfClassInfoMethodMethod(interp, cl, infomethodsubcmd, name); + } else { + return TCL_ERROR; } } static int NsfClassInfoMethodsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "methods"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "methods"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoMethodsMethodIdx].paramDefs, method_definitions[NsfClassInfoMethodsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withCallprotection = (int )PTR2INT(pc.clientData[0]); int withClosure = (int )PTR2INT(pc.clientData[1]); int withMethodtype = (int )PTR2INT(pc.clientData[2]); @@ -811,20 +809,20 @@ assert(pc.status == 0); return NsfClassInfoMethodsMethod(interp, cl, withCallprotection, withClosure, withMethodtype, withPath, withSource, pattern); + } else { + return TCL_ERROR; } } static int NsfClassInfoMixinOfMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "mixinof"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "mixinof"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoMixinOfMethodIdx].paramDefs, method_definitions[NsfClassInfoMixinOfMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); int withScope = (int )PTR2INT(pc.clientData[1]); CONST char *patternString = NULL; @@ -846,20 +844,20 @@ DECR_REF_COUNT2("patternObj", pattern); } return returnCode; + } else { + return TCL_ERROR; } } static int NsfClassInfoMixinclassesMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "mixinclasses"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "mixinclasses"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoMixinclassesMethodIdx].paramDefs, method_definitions[NsfClassInfoMixinclassesMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); int withGuards = (int )PTR2INT(pc.clientData[1]); int withHeritage = (int )PTR2INT(pc.clientData[2]); @@ -882,59 +880,59 @@ DECR_REF_COUNT2("patternObj", pattern); } return returnCode; + } else { + return TCL_ERROR; } } static int NsfClassInfoMixinguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "mixinguard"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "mixinguard"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoMixinguardMethodIdx].paramDefs, method_definitions[NsfClassInfoMixinguardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *mixin = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfClassInfoMixinguardMethod(interp, cl, mixin); + } else { + return TCL_ERROR; } } static int NsfClassInfoObjectparameterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "objectparameter"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "objectparameter"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoObjectparameterMethodIdx].paramDefs, method_definitions[NsfClassInfoObjectparameterMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int infoobjectparametersubcmd = (int )PTR2INT(pc.clientData[0]); CONST char *pattern = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfClassInfoObjectparameterMethod(interp, cl, infoobjectparametersubcmd, pattern); + } else { + return TCL_ERROR; } } static int NsfClassInfoSlotobjectsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "slotobjects"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "slotobjects"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoSlotobjectsMethodIdx].paramDefs, method_definitions[NsfClassInfoSlotobjectsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); int withSource = (int )PTR2INT(pc.clientData[1]); NsfClass *withType = (NsfClass *)pc.clientData[2]; @@ -943,20 +941,20 @@ assert(pc.status == 0); return NsfClassInfoSlotobjectsMethod(interp, cl, withClosure, withSource, withType, pattern); + } else { + return TCL_ERROR; } } static int NsfClassInfoSubclassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "subclass"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "subclass"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoSubclassMethodIdx].paramDefs, method_definitions[NsfClassInfoSubclassMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); CONST char *patternString = NULL; NsfObject *patternObject = NULL; @@ -977,26 +975,28 @@ DECR_REF_COUNT2("patternObj", pattern); } return returnCode; + } else { + return TCL_ERROR; } } static int NsfClassInfoSuperclassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfClass *cl = NsfObjectToClass(clientData); - if (!cl) return NsfDispatchClientDataError(interp, clientData, "class", "superclass"); - if (ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], + if (unlikely(cl == NULL)) return NsfDispatchClientDataError(interp, clientData, "class", "superclass"); + if (likely(ArgumentParse(interp, objc, objv, (NsfObject *) cl, objv[0], method_definitions[NsfClassInfoSuperclassMethodIdx].paramDefs, method_definitions[NsfClassInfoSuperclassMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withClosure = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *pattern = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfClassInfoSuperclassMethod(interp, cl, withClosure, pattern); + } else { + return TCL_ERROR; } } @@ -1015,18 +1015,18 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfConfigureCmdIdx].paramDefs, method_definitions[NsfConfigureCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int configureoption = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *value = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfConfigureCmd(interp, configureoption, value); + } else { + return TCL_ERROR; } } @@ -1035,17 +1035,17 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfCurrentCmdIdx].paramDefs, method_definitions[NsfCurrentCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int currentoption = (int )PTR2INT(pc.clientData[0]); assert(pc.status == 0); return NsfCurrentCmd(interp, currentoption); + } else { + return TCL_ERROR; } } @@ -1055,7 +1055,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfDebugCompileEpochIdx].paramDefs, NULL, objv[0]); @@ -1071,7 +1071,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfDebugRunAssertionsCmdIdx].paramDefs, NULL, objv[0]); @@ -1102,19 +1102,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfDirectDispatchCmdIdx].paramDefs, method_definitions[NsfDirectDispatchCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withFrame = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *command = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfDirectDispatchCmd(interp, object, withFrame, command, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } @@ -1123,12 +1123,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfDispatchCmdIdx].paramDefs, method_definitions[NsfDispatchCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withIntrinsic = (int )PTR2INT(pc.clientData[1]); int withSystem = (int )PTR2INT(pc.clientData[2]); @@ -1137,6 +1135,8 @@ assert(pc.status == 0); return NsfDispatchCmd(interp, object, withIntrinsic, withSystem, command, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } @@ -1145,17 +1145,17 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfFinalizeCmdIdx].paramDefs, method_definitions[NsfFinalizeCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withKeepvars = (int )PTR2INT(pc.clientData[0]); assert(pc.status == 0); return NsfFinalizeCmd(interp, withKeepvars); + } else { + return TCL_ERROR; } } @@ -1164,17 +1164,17 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfInterpObjCmdIdx].paramDefs, method_definitions[NsfInterpObjCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *name = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfInterpObjCmd(interp, name, objc, objv); + } else { + return TCL_ERROR; } } @@ -1183,17 +1183,17 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfInvalidateObjectParameterCmdIdx].paramDefs, method_definitions[NsfInvalidateObjectParameterCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfClass *class = (NsfClass *)pc.clientData[0]; assert(pc.status == 0); return NsfInvalidateObjectParameterCmd(interp, class); + } else { + return TCL_ERROR; } } @@ -1202,19 +1202,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfIsCmdIdx].paramDefs, method_definitions[NsfIsCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withComplain = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *constraint = (Tcl_Obj *)pc.clientData[1]; Tcl_Obj *value = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfIsCmd(interp, withComplain, constraint, value); + } else { + return TCL_ERROR; } } @@ -1223,12 +1223,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodAliasCmdIdx].paramDefs, method_definitions[NsfMethodAliasCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withPer_object = (int )PTR2INT(pc.clientData[1]); CONST char *methodName = (CONST char *)pc.clientData[2]; @@ -1238,6 +1236,8 @@ assert(pc.status == 0); return NsfMethodAliasCmd(interp, object, withPer_object, methodName, withFrame, cmdName); + } else { + return TCL_ERROR; } } @@ -1246,19 +1246,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodAssertionCmdIdx].paramDefs, method_definitions[NsfMethodAssertionCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int assertionsubcmd = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *arg = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfMethodAssertionCmd(interp, object, assertionsubcmd, arg); + } else { + return TCL_ERROR; } } @@ -1267,12 +1267,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodCreateCmdIdx].paramDefs, method_definitions[NsfMethodCreateCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withInner_namespace = (int )PTR2INT(pc.clientData[1]); int withPer_object = (int )PTR2INT(pc.clientData[2]); @@ -1286,6 +1284,8 @@ assert(pc.status == 0); return NsfMethodCreateCmd(interp, object, withInner_namespace, withPer_object, withReg_object, methodName, arguments, body, withPrecondition, withPostcondition); + } else { + return TCL_ERROR; } } @@ -1294,19 +1294,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodDeleteCmdIdx].paramDefs, method_definitions[NsfMethodDeleteCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withPer_object = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *methodName = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfMethodDeleteCmd(interp, object, withPer_object, methodName); + } else { + return TCL_ERROR; } } @@ -1315,12 +1315,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodForwardCmdIdx].paramDefs, method_definitions[NsfMethodForwardCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withPer_object = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *method = (Tcl_Obj *)pc.clientData[2]; @@ -1335,6 +1333,8 @@ assert(pc.status == 0); return NsfMethodForwardCmd(interp, object, withPer_object, method, withDefault, withEarlybinding, withMethodprefix, withObjframe, withOnerror, withVerbose, target, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } @@ -1343,12 +1343,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodPropertyCmdIdx].paramDefs, method_definitions[NsfMethodPropertyCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withPer_object = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *methodName = (Tcl_Obj *)pc.clientData[2]; @@ -1358,6 +1356,8 @@ assert(pc.status == 0); return NsfMethodPropertyCmd(interp, object, withPer_object, methodName, methodproperty, value); + } else { + return TCL_ERROR; } } @@ -1382,19 +1382,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMethodSetterCmdIdx].paramDefs, method_definitions[NsfMethodSetterCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int withPer_object = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *parameter = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfMethodSetterCmd(interp, object, withPer_object, parameter); + } else { + return TCL_ERROR; } } @@ -1403,12 +1403,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfMyCmdIdx].paramDefs, method_definitions[NsfMyCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withIntrinsic = (int )PTR2INT(pc.clientData[0]); int withLocal = (int )PTR2INT(pc.clientData[1]); int withSystem = (int )PTR2INT(pc.clientData[2]); @@ -1417,6 +1415,8 @@ assert(pc.status == 0); return NsfMyCmd(interp, withIntrinsic, withLocal, withSystem, methodName, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } @@ -1425,18 +1425,18 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfNSCopyCmdsCmdIdx].paramDefs, method_definitions[NsfNSCopyCmdsCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *fromNs = (Tcl_Obj *)pc.clientData[0]; Tcl_Obj *toNs = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfNSCopyCmdsCmd(interp, fromNs, toNs); + } else { + return TCL_ERROR; } } @@ -1445,18 +1445,18 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfNSCopyVarsCmdIdx].paramDefs, method_definitions[NsfNSCopyVarsCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *fromNs = (Tcl_Obj *)pc.clientData[0]; Tcl_Obj *toNs = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfNSCopyVarsCmd(interp, fromNs, toNs); + } else { + return TCL_ERROR; } } @@ -1497,18 +1497,18 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfObjectPropertyCmdIdx].paramDefs, method_definitions[NsfObjectPropertyCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *objectName = (NsfObject *)pc.clientData[0]; int objectproperty = (int )PTR2INT(pc.clientData[1]); assert(pc.status == 0); return NsfObjectPropertyCmd(interp, objectName, objectproperty); + } else { + return TCL_ERROR; } } @@ -1533,19 +1533,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfObjectSystemCreateCmdIdx].paramDefs, method_definitions[NsfObjectSystemCreateCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *rootClass = (Tcl_Obj *)pc.clientData[0]; Tcl_Obj *rootMetaClass = (Tcl_Obj *)pc.clientData[1]; Tcl_Obj *systemMethods = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfObjectSystemCreateCmd(interp, rootClass, rootMetaClass, systemMethods); + } else { + return TCL_ERROR; } } @@ -1554,12 +1554,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfProcCmdIdx].paramDefs, method_definitions[NsfProcCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withAd = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *procName = (Tcl_Obj *)pc.clientData[1]; Tcl_Obj *arguments = (Tcl_Obj *)pc.clientData[2]; @@ -1568,6 +1566,8 @@ assert(pc.status == 0); return NsfProcCmd(interp, withAd, procName, arguments, body); + } else { + return TCL_ERROR; } } @@ -1577,7 +1577,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfProfileClearDataStubIdx].paramDefs, NULL, objv[0]); @@ -1593,7 +1593,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfProfileGetDataStubIdx].paramDefs, NULL, objv[0]); @@ -1608,19 +1608,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfRelationCmdIdx].paramDefs, method_definitions[NsfRelationCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; int relationtype = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *value = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfRelationCmd(interp, object, relationtype, value); + } else { + return TCL_ERROR; } } @@ -1630,7 +1630,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfSelfCmdIdx].paramDefs, NULL, objv[0]); @@ -1646,7 +1646,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfShowStackCmdIdx].paramDefs, NULL, objv[0]); @@ -1662,7 +1662,7 @@ - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfUnsetUnknownArgsCmdIdx].paramDefs, NULL, objv[0]); @@ -1677,19 +1677,19 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfVarExistsCmdIdx].paramDefs, method_definitions[NsfVarExistsCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withArray = (int )PTR2INT(pc.clientData[0]); NsfObject *object = (NsfObject *)pc.clientData[1]; CONST char *varName = (CONST char *)pc.clientData[2]; assert(pc.status == 0); return NsfVarExistsCmd(interp, withArray, object, varName); + } else { + return TCL_ERROR; } } @@ -1698,17 +1698,17 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfVarImportCmdIdx].paramDefs, method_definitions[NsfVarImportCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfObject *object = (NsfObject *)pc.clientData[0]; assert(pc.status == 0); return NsfVarImportCmd(interp, object, objc-pc.lastObjc, objv+pc.lastObjc); + } else { + return TCL_ERROR; } } @@ -1717,12 +1717,10 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfVarSetCmdIdx].paramDefs, method_definitions[NsfVarSetCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withArray = (int )PTR2INT(pc.clientData[0]); NsfObject *object = (NsfObject *)pc.clientData[1]; Tcl_Obj *varName = (Tcl_Obj *)pc.clientData[2]; @@ -1731,6 +1729,8 @@ assert(pc.status == 0); return NsfVarSetCmd(interp, withArray, object, varName, value); + } else { + return TCL_ERROR; } } @@ -1739,47 +1739,47 @@ ParseContext pc; (void)clientData; - if (ArgumentParse(interp, objc, objv, NULL, objv[0], + if (likely(ArgumentParse(interp, objc, objv, NULL, objv[0], method_definitions[NsfVarUnsetCmdIdx].paramDefs, method_definitions[NsfVarUnsetCmdIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withNocomplain = (int )PTR2INT(pc.clientData[0]); NsfObject *object = (NsfObject *)pc.clientData[1]; Tcl_Obj *varName = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfVarUnsetCmd(interp, withNocomplain, object, varName); + } else { + return TCL_ERROR; } } static int NsfOAutonameMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "autoname"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "autoname"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfOAutonameMethodIdx].paramDefs, method_definitions[NsfOAutonameMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withInstance = (int )PTR2INT(pc.clientData[0]); int withReset = (int )PTR2INT(pc.clientData[1]); Tcl_Obj *name = (Tcl_Obj *)pc.clientData[2]; assert(pc.status == 0); return NsfOAutonameMethod(interp, obj, withInstance, withReset, name); + } else { + return TCL_ERROR; } } static int NsfOClassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "class"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "class"); if (objc < 1 || objc > 2) { @@ -1795,10 +1795,10 @@ static int NsfOCleanupMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "cleanup"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "cleanup"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfOCleanupMethodIdx].paramDefs, NULL, objv[0]); @@ -1811,7 +1811,7 @@ static int NsfOConfigureMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "configure"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "configure"); return NsfOConfigureMethod(interp, obj, objc, objv); @@ -1821,10 +1821,10 @@ static int NsfODestroyMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "destroy"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "destroy"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfODestroyMethodIdx].paramDefs, NULL, objv[0]); @@ -1838,45 +1838,45 @@ NsfOExistsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "exists"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "exists"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfOExistsMethodIdx].paramDefs, method_definitions[NsfOExistsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *varName = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfOExistsMethod(interp, obj, varName); + } else { + return TCL_ERROR; } } static int NsfOFilterGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "filterguard"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "filterguard"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfOFilterGuardMethodIdx].paramDefs, method_definitions[NsfOFilterGuardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *filter = (CONST char *)pc.clientData[0]; Tcl_Obj *guard = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfOFilterGuardMethod(interp, obj, filter, guard); + } else { + return TCL_ERROR; } } static int NsfOInstvarMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "instvar"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "instvar"); return NsfOInstvarMethod(interp, obj, objc, objv); @@ -1887,29 +1887,29 @@ NsfOMixinGuardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "mixinguard"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "mixinguard"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfOMixinGuardMethodIdx].paramDefs, method_definitions[NsfOMixinGuardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { Tcl_Obj *mixin = (Tcl_Obj *)pc.clientData[0]; Tcl_Obj *guard = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfOMixinGuardMethod(interp, obj, mixin, guard); + } else { + return TCL_ERROR; } } static int NsfONoinitMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "noinit"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "noinit"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfONoinitMethodIdx].paramDefs, NULL, objv[0]); @@ -1922,10 +1922,10 @@ static int NsfORequireNamespaceMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "requirenamespace"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "requirenamespace"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfORequireNamespaceMethodIdx].paramDefs, NULL, objv[0]); @@ -1938,7 +1938,7 @@ static int NsfOResidualargsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "residualargs"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "residualargs"); return NsfOResidualargsMethod(interp, obj, objc, objv); @@ -1948,7 +1948,7 @@ static int NsfOUplevelMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "uplevel"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "uplevel"); return NsfOUplevelMethod(interp, obj, objc, objv); @@ -1958,7 +1958,7 @@ static int NsfOUpvarMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "upvar"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "upvar"); return NsfOUpvarMethod(interp, obj, objc, objv); @@ -1968,10 +1968,10 @@ static int NsfOVolatileMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "volatile"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "volatile"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfOVolatileMethodIdx].paramDefs, NULL, objv[0]); @@ -1985,29 +1985,29 @@ NsfObjInfoChildrenMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "children"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "children"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoChildrenMethodIdx].paramDefs, method_definitions[NsfObjInfoChildrenMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfClass *withType = (NsfClass *)pc.clientData[0]; CONST char *pattern = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfObjInfoChildrenMethod(interp, obj, withType, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoClassMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "class"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "class"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfObjInfoClassMethodIdx].paramDefs, NULL, objv[0]); @@ -2021,107 +2021,107 @@ NsfObjInfoFilterguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "filterguard"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "filterguard"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoFilterguardMethodIdx].paramDefs, method_definitions[NsfObjInfoFilterguardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *filter = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoFilterguardMethod(interp, obj, filter); + } else { + return TCL_ERROR; } } static int NsfObjInfoFiltermethodsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "filtermethods"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "filtermethods"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoFiltermethodsMethodIdx].paramDefs, method_definitions[NsfObjInfoFiltermethodsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withGuards = (int )PTR2INT(pc.clientData[0]); int withOrder = (int )PTR2INT(pc.clientData[1]); CONST char *pattern = (CONST char *)pc.clientData[2]; assert(pc.status == 0); return NsfObjInfoFiltermethodsMethod(interp, obj, withGuards, withOrder, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoForwardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "forward"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "forward"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoForwardMethodIdx].paramDefs, method_definitions[NsfObjInfoForwardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withDefinition = (int )PTR2INT(pc.clientData[0]); CONST char *name = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfObjInfoForwardMethod(interp, obj, withDefinition, name); + } else { + return TCL_ERROR; } } static int NsfObjInfoHasMixinMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "hasmixin"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "hasmixin"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoHasMixinMethodIdx].paramDefs, method_definitions[NsfObjInfoHasMixinMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfClass *class = (NsfClass *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoHasMixinMethod(interp, obj, class); + } else { + return TCL_ERROR; } } static int NsfObjInfoHasTypeMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "hastype"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "hastype"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoHasTypeMethodIdx].paramDefs, method_definitions[NsfObjInfoHasTypeMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfClass *class = (NsfClass *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoHasTypeMethod(interp, obj, class); + } else { + return TCL_ERROR; } } static int NsfObjInfoHasnamespaceMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "hasnamespace"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "hasnamespace"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfObjInfoHasnamespaceMethodIdx].paramDefs, NULL, objv[0]); @@ -2135,44 +2135,44 @@ NsfObjInfoIsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "is"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "is"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoIsMethodIdx].paramDefs, method_definitions[NsfObjInfoIsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int objectkind = (int )PTR2INT(pc.clientData[0]); assert(pc.status == 0); return NsfObjInfoIsMethod(interp, obj, objectkind); + } else { + return TCL_ERROR; } } static int NsfObjInfoLookupFilterMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "lookupfilter"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "lookupfilter"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoLookupFilterMethodIdx].paramDefs, method_definitions[NsfObjInfoLookupFilterMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *filter = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoLookupFilterMethod(interp, obj, filter); + } else { + return TCL_ERROR; } } static int NsfObjInfoLookupMethodMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "lookupmethod"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "lookupmethod"); if (objc != 2) { @@ -2189,13 +2189,11 @@ NsfObjInfoLookupMethodsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "lookupmethods"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "lookupmethods"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoLookupMethodsMethodIdx].paramDefs, method_definitions[NsfObjInfoLookupMethodsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withCallprotection = (int )PTR2INT(pc.clientData[0]); int withIncontext = (int )PTR2INT(pc.clientData[1]); int withMethodtype = (int )PTR2INT(pc.clientData[2]); @@ -2207,61 +2205,61 @@ assert(pc.status == 0); return NsfObjInfoLookupMethodsMethod(interp, obj, withCallprotection, withIncontext, withMethodtype, withNomixins, withPath, withSource, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoLookupSlotsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "lookupslots"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "lookupslots"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoLookupSlotsMethodIdx].paramDefs, method_definitions[NsfObjInfoLookupSlotsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withSource = (int )PTR2INT(pc.clientData[0]); NsfClass *withType = (NsfClass *)pc.clientData[1]; CONST char *pattern = (CONST char *)pc.clientData[2]; assert(pc.status == 0); return NsfObjInfoLookupSlotsMethod(interp, obj, withSource, withType, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoMethodMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "method"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "method"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoMethodMethodIdx].paramDefs, method_definitions[NsfObjInfoMethodMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int infomethodsubcmd = (int )PTR2INT(pc.clientData[0]); Tcl_Obj *name = (Tcl_Obj *)pc.clientData[1]; assert(pc.status == 0); return NsfObjInfoMethodMethod(interp, obj, infomethodsubcmd, name); + } else { + return TCL_ERROR; } } static int NsfObjInfoMethodsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "methods"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "methods"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoMethodsMethodIdx].paramDefs, method_definitions[NsfObjInfoMethodsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withCallprotection = (int )PTR2INT(pc.clientData[0]); int withMethodtype = (int )PTR2INT(pc.clientData[1]); int withPath = (int )PTR2INT(pc.clientData[2]); @@ -2270,20 +2268,20 @@ assert(pc.status == 0); return NsfObjInfoMethodsMethod(interp, obj, withCallprotection, withMethodtype, withPath, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoMixinclassesMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "mixinclasses"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "mixinclasses"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoMixinclassesMethodIdx].paramDefs, method_definitions[NsfObjInfoMixinclassesMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withGuards = (int )PTR2INT(pc.clientData[0]); int withHeritage = (int )PTR2INT(pc.clientData[1]); CONST char *patternString = NULL; @@ -2305,35 +2303,37 @@ DECR_REF_COUNT2("patternObj", pattern); } return returnCode; + } else { + return TCL_ERROR; } } static int NsfObjInfoMixinguardMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "mixinguard"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "mixinguard"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoMixinguardMethodIdx].paramDefs, method_definitions[NsfObjInfoMixinguardMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *mixin = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoMixinguardMethod(interp, obj, mixin); + } else { + return TCL_ERROR; } } static int NsfObjInfoParentMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "parent"); + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "parent"); - if (objc != 1) { + if (unlikely(objc != 1)) { return NsfArgumentError(interp, "too many arguments:", method_definitions[NsfObjInfoParentMethodIdx].paramDefs, NULL, objv[0]); @@ -2347,58 +2347,58 @@ NsfObjInfoPrecedenceMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "precedence"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "precedence"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoPrecedenceMethodIdx].paramDefs, method_definitions[NsfObjInfoPrecedenceMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { int withIntrinsic = (int )PTR2INT(pc.clientData[0]); CONST char *pattern = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfObjInfoPrecedenceMethod(interp, obj, withIntrinsic, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoSlotobjectsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "slotobjects"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "slotobjects"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoSlotobjectsMethodIdx].paramDefs, method_definitions[NsfObjInfoSlotobjectsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { NsfClass *withType = (NsfClass *)pc.clientData[0]; CONST char *pattern = (CONST char *)pc.clientData[1]; assert(pc.status == 0); return NsfObjInfoSlotobjectsMethod(interp, obj, withType, pattern); + } else { + return TCL_ERROR; } } static int NsfObjInfoVarsMethodStub(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { ParseContext pc; NsfObject *obj = (NsfObject *)clientData; - if (!obj) return NsfDispatchClientDataError(interp, clientData, "object", "vars"); - if (ArgumentParse(interp, objc, objv, obj, objv[0], + if (unlikely(obj == NULL)) return NsfDispatchClientDataError(interp, clientData, "object", "vars"); + if (likely(ArgumentParse(interp, objc, objv, obj, objv[0], method_definitions[NsfObjInfoVarsMethodIdx].paramDefs, method_definitions[NsfObjInfoVarsMethodIdx].nrParameters, 0, 1, - &pc) != TCL_OK) { - return TCL_ERROR; - } else { + &pc) == TCL_OK)) { CONST char *pattern = (CONST char *)pc.clientData[0]; assert(pc.status == 0); return NsfObjInfoVarsMethod(interp, obj, pattern); + } else { + return TCL_ERROR; } } Index: generic/nsfAccessInt.h =================================================================== diff -u -rd6b5b0c4055205d54d3cffa4654b13da05aeb7ab -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- generic/nsfAccessInt.h (.../nsfAccessInt.h) (revision d6b5b0c4055205d54d3cffa4654b13da05aeb7ab) +++ generic/nsfAccessInt.h (.../nsfAccessInt.h) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -97,7 +97,7 @@ hPtr = Tcl_CreateHashEntry((Tcl_HashTable *) tablePtr, (char *) key, newPtr); - if (hPtr) { + if (likely(hPtr != NULL)) { varPtr = TclVarHashGetValue(hPtr); } return varPtr; @@ -117,12 +117,12 @@ static NSF_INLINE ClientData NsfGetClientDataFromCmdPtr(Tcl_Command cmd) { assert(cmd); - /*fprintf(stderr, "objProc=%p %p\n",Tcl_Command_objProc(cmd),NsfObjDispatch);*/ - if (Tcl_Command_objProc(cmd) == NsfObjDispatch /* && !Tcl_Command_cmdEpoch(cmd)*/) + /*fprintf(stderr, "objProc=%p %p\n", Tcl_Command_objProc(cmd),NsfObjDispatch);*/ + if (likely(Tcl_Command_objProc(cmd) == NsfObjDispatch)) return Tcl_Command_objClientData(cmd); else { cmd = TclGetOriginalCommand(cmd); - if (cmd && Tcl_Command_objProc(cmd) == NsfObjDispatch) { + if (likely(cmd != NULL) && unlikely(Tcl_Command_objProc(cmd) == NsfObjDispatch)) { /*fprintf(stderr, "???? got cmd right in 2nd round\n");*/ return Tcl_Command_objClientData(cmd); } @@ -134,10 +134,11 @@ NsfGetClassFromCmdPtr(Tcl_Command cmd) { ClientData cd = NsfGetClientDataFromCmdPtr(cmd); /*fprintf(stderr, "cd=%p\n",cd);*/ - if (cd) + if (likely(cd != NULL)) { return NsfObjectToClass(cd); - else - return 0; + } else { + return NULL; + } } static NSF_INLINE NsfObject* Index: generic/nsfObj.c =================================================================== diff -u -r7ecc88fbc4a1456456a36460f1ea8cee4eff874e -r7def5bc35b6d31f0390d943d6d2221f8938b0e8a --- generic/nsfObj.c (.../nsfObj.c) (revision 7ecc88fbc4a1456456a36460f1ea8cee4eff874e) +++ generic/nsfObj.c (.../nsfObj.c) (revision 7def5bc35b6d31f0390d943d6d2221f8938b0e8a) @@ -138,7 +138,7 @@ * Free or reuse the old interal representation and store own * structure as internal representation. */ - if (likely(objPtr->typePtr != objectType)) { + if (objPtr->typePtr != objectType) { #if defined(METHOD_OBJECT_TRACE) fprintf(stderr, "... NsfMethodObjSet frees old int rep %s\n", objPtr->typePtr ? objPtr->typePtr->name : "none"); @@ -276,7 +276,7 @@ * Free or reuse the old interal representation and store own * structure as internal representation. */ - if (likely(objPtr->typePtr != &NsfFlagObjType)) { + if (objPtr->typePtr != &NsfFlagObjType) { TclFreeIntRep(objPtr); flagPtr = NEW(NsfFlag); /*fprintf(stderr, "NsfFlagObjSet allocated NsfFlag %p for %s\n", flagPtr, ObjStr(objPtr));*/