Index: generic/nsf.c =================================================================== diff -u -rf80347fbea8fd50ae92c0bd7412cd4af80c78a54 -rbb4f5c65acffb4f0b8f399b3185cf1d670f9864b --- generic/nsf.c (.../nsf.c) (revision f80347fbea8fd50ae92c0bd7412cd4af80c78a54) +++ generic/nsf.c (.../nsf.c) (revision bb4f5c65acffb4f0b8f399b3185cf1d670f9864b) @@ -177,13 +177,12 @@ NsfObject *object; } ParseContext; -static Nsf_TypeConverter ConvertToNothing, ConvertViaCmd; +static Nsf_TypeConverter ConvertToNothing, ConvertViaCmd, ConvertToObjpattern; typedef struct { Nsf_TypeConverter *converter; char *domain; } enumeratorConverterEntry; -static enumeratorConverterEntry enumeratorConverterEntries[]; /* * Definition of methodEpoch macros @@ -313,6 +312,9 @@ int doCheck, ParseContext *pc); static int ArgumentCheck(Tcl_Interp *interp, Tcl_Obj *objPtr, struct Nsf_Param CONST *pPtr, int doCheck, int *flags, ClientData *clientData, Tcl_Obj **outObjPtr); +static int GetMatchObject(Tcl_Interp *interp, Tcl_Obj *patternObj, Tcl_Obj *origObj, + NsfObject **matchObject, CONST char **pattern); +static void NsfProcDeleteProc(ClientData clientData); /* prototypes for alias management */ static int AliasDelete(Tcl_Interp *interp, Tcl_Obj *cmdName, CONST char *methodName, int withPer_object); @@ -3161,6 +3163,28 @@ return NULL; } +/* + *---------------------------------------------------------------------- + * GetVarAndNameFromHash -- + * + * Conveniance function to obtain variable and name from + * a variable hash entry + * + * Results: + * Results are passed back in argument 2 and 3 + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ +static void +GetVarAndNameFromHash(Tcl_HashEntry *hPtr, Var **val, Tcl_Obj **varNameObj) { + *val = TclVarHashGetValue(hPtr); + *varNameObj = TclVarHashGetKey(*val); +} + + /********************************************************* * * Variable resolvers @@ -8514,25 +8538,22 @@ return ByteCompiled(interp, &cscPtr->flags, procPtr, ObjStr(objv[0])); } -static void -GetVarAndNameFromHash(Tcl_HashEntry *hPtr, Var **val, Tcl_Obj **varNameObj) { - *val = TclVarHashGetValue(hPtr); - *varNameObj = TclVarHashGetKey(*val); -} +#include "nsfAPI.h" -void -NsfProcDeleteProc(ClientData clientData) { - NsfProcContext *ctxPtr = (NsfProcContext *)clientData; +/*---------------------------------------------------------------------- + * ParamsNew -- + * + * Allocate an array of Nsf_Param structures + * + * Results: + * Pointer to allocated memory + * + * Side effects: + * Allocation of memory. + * + *---------------------------------------------------------------------- + */ - (*ctxPtr->oldDeleteProc)(ctxPtr->oldDeleteData); - if (ctxPtr->paramDefs) { - /*fprintf(stderr, "free ParamDefs %p\n", ctxPtr->paramDefs);*/ - ParamDefsRefCountDecr(ctxPtr->paramDefs); - } - /*fprintf(stderr, "free %p\n", ctxPtr);*/ - FREE(NsfProcContext, ctxPtr); -} - static Nsf_Param * ParamsNew(int nr) { Nsf_Param *paramsPtr = NEW_ARRAY(Nsf_Param, nr+1); @@ -8601,6 +8622,33 @@ /* *---------------------------------------------------------------------- + * NsfProcDeleteProc -- + * + * FreeProc for procs with associated parameter definitions. + * + * Results: + * None. + * + * Side effects: + * Freeing memory. + * + *---------------------------------------------------------------------- + */ +static void +NsfProcDeleteProc(ClientData clientData) { + NsfProcContext *ctxPtr = (NsfProcContext *)clientData; + + (*ctxPtr->oldDeleteProc)(ctxPtr->oldDeleteData); + if (ctxPtr->paramDefs) { + /*fprintf(stderr, "free ParamDefs %p\n", ctxPtr->paramDefs);*/ + ParamDefsRefCountDecr(ctxPtr->paramDefs); + } + /*fprintf(stderr, "free %p\n", ctxPtr);*/ + FREE(NsfProcContext, ctxPtr); +} + +/* + *---------------------------------------------------------------------- * ParamDefsStore -- * * Store the provided parameter definitions in the provided @@ -15999,8 +16047,6 @@ * argument handling ***********************************/ -#include "nsfAPI.h" - static void ArgumentResetRefCounts(struct Nsf_Param CONST *pPtr, Tcl_Obj *valueObj) { if ((pPtr->flags & NSF_ARG_IS_CONVERTER)) {