Index: generic/predefined.h =================================================================== diff -u -rf71845baf5b995318b585981109bdf114d95eb2f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/predefined.h (.../predefined.h) (revision f71845baf5b995318b585981109bdf114d95eb2f) +++ generic/predefined.h (.../predefined.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -21,8 +21,7 @@ "::xotcl::Class method unknown {args} {\n" "eval my create $args}\n" "::xotcl::Object method init args {}\n" -"::xotcl::Object method objectparameter {} {\n" -"return \"\"}\n" +"::xotcl::Object method objectparameter {} {;}\n" "::xotcl::Class create ::xotcl::ParameterType\n" "foreach cmd [info command ::xotcl::cmd::ParameterType::*] {\n" "::xotcl::alias ::xotcl::ParameterType [namespace tail $cmd] $cmd}\n" Index: generic/predefined.xotcl =================================================================== diff -u -rf71845baf5b995318b585981109bdf114d95eb2f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/predefined.xotcl (.../predefined.xotcl) (revision f71845baf5b995318b585981109bdf114d95eb2f) +++ generic/predefined.xotcl (.../predefined.xotcl) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -84,10 +84,7 @@ # provide a placeholder for the bootup process. The real definition # is based on slots, which are not available at this point. - ::xotcl::Object method objectparameter {} { - #puts stderr "XXXX-objectparameter for [self] - INITIAL" - return "" - } + ::xotcl::Object method objectparameter {} {;} # # create class and object for nonpositional argument processing Index: generic/xotcl.c =================================================================== diff -u -rf71845baf5b995318b585981109bdf114d95eb2f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotcl.c (.../xotcl.c) (revision f71845baf5b995318b585981109bdf114d95eb2f) +++ generic/xotcl.c (.../xotcl.c) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -4043,8 +4043,11 @@ Tcl_Obj *list = Tcl_NewListObj(0, NULL); Tcl_Obj *procObj = Tcl_NewStringObj(cmdName, -1); Tcl_ObjCmdProc *objProc = Tcl_Command_objProc(cmd); - int isTcl = (TclIsProc((Command *)cmd) != NULL); + /* TODO general take care about change in 8.6: TclIsProc((Command*)cmd) no equiv to following */ + /*int isTcl = (TclIsProc((Command *)cmd) != NULL);*/ + int isTcl = (Tcl_Command_objProc(cmd) == TclObjInterpProc); + if (cl) { Tcl_ListObjAppendElement(interp, list, cl->object.cmdName); /*fprintf(stderr, "current %p, dispatch %p, forward %p, parametermcd %p, is tcl %p\n", @@ -4818,6 +4821,9 @@ if (cmdPtr->deleteProc == TclProcDeleteProc) { XOTclProcContext *ctxPtr = NEW(XOTclProcContext); + /*fprintf(stderr, "paramDefsStore replace deleteProc %p by %p\n", + cmdPtr->deleteProc, XOTclProcDeleteProc);*/ + ctxPtr->oldDeleteData = (Proc *)cmdPtr->deleteData; ctxPtr->oldDeleteProc = cmdPtr->deleteProc; cmdPtr->deleteProc = XOTclProcDeleteProc; @@ -4929,10 +4935,12 @@ FinalizeProcMethod(ClientData data[], Tcl_Interp *interp, int result) { parseContext *pcPtr = data[0]; XOTclCallStackContent *cscPtr = data[1]; + char *methodName = data[2]; XOTclObject *obj = cscPtr->self; + XOTclObjectOpt *opt = obj->opt; - fprintf(stderr, "FinalizeProcMethod result %d, csc %p, pcPtr %p, obj %p\n", - result, cscPtr, pcPtr, obj); + /*fprintf(stderr, "---- FinalizeProcMethod result %d, csc %p, pcPtr %p, obj %p\n", + result, cscPtr, pcPtr, obj);*/ # if defined(TCL85STACK_TRACE) fprintf(stderr, "POP OBJECT_FRAME (implicit) frame %p csc %p obj %s obj refcount %d %d\n", NULL, csc, objectName(obj), @@ -4949,21 +4957,19 @@ #endif #endif -#if 0 - /* for now, we have no methodname etc.... so we deactivete post checks temporarly */ opt = obj->opt; if (opt && obj->teardown && (opt->checkoptions & CHECK_POST)) { - result = AssertionCheck(interp, obj, cl, methodName, CHECK_POST); + fprintf(stderr, "call assertionCheck for %s\n",methodName); + result = AssertionCheck(interp, obj, cscPtr->cl, methodName, CHECK_POST); } -#endif if (pcPtr) { - fprintf(stderr, "FinalizeProcMethod calls pop\n"); + fprintf(stderr, "---- FinalizeProcMethod calls releasePc\n"); parseContextRelease(pcPtr); TclStackFree(interp, pcPtr); } - fprintf(stderr, "FinalizeProcMethod calls pop\n"); + /*fprintf(stderr, "---- FinalizeProcMethod calls pop\n");*/ CallStackPop(interp, cscPtr); TclStackFree(interp, cscPtr); @@ -5108,10 +5114,16 @@ parseContextRelease(&pc); } #else - fprintf(stderr, "CALL TclNRInterpProcCore %s.%s\n", objectName(obj), ObjStr(objv[0])); - Tcl_NRAddCallback(interp, FinalizeProcMethod, releasePc ? pcPtr : NULL, csc, NULL, NULL); - result = TclNRInterpProcCore(interp, objv[0], 1, &MakeProcError); - fprintf(stderr, "CALL TclNRInterpProcCore DONE\n"); + { + TEOV_callback *rootPtr = TOP_CB(interp); + /*fprintf(stderr, "CALL TclNRInterpProcCore %s method '%s'\n", objectName(obj), ObjStr(objv[0]));*/ + Tcl_NRAddCallback(interp, FinalizeProcMethod, + releasePc ? pcPtr : NULL, csc, methodName, NULL); + result = TclNRInterpProcCore(interp, objv[0], 1, &MakeProcError); + /*fprintf(stderr, ".... run callbacks rootPtr = %p\n", rootPtr);*/ + result = TclNRRunCallbacks(interp, result, rootPtr, 0); + /*fprintf(stderr, ".... run callbacks DONE\n");*/ + } #endif } # if defined(TCL85STACK_TRACE) @@ -5189,7 +5201,7 @@ printCall(interp, "invokeCmdMethod cmd", objc, objv); fprintf(stderr, "\tcmd=%s\n", Tcl_GetCommandName(interp, cmdPtr)); #endif -#if 1 || !defined(NRE) +#if !defined(NRE) result = (*Tcl_Command_objProc(cmdPtr))(cp, interp, objc, objv); #else result = Tcl_NRCallObjProc(interp, Tcl_Command_objProc(cmdPtr), cp, objc, objv); @@ -5270,7 +5282,10 @@ return TCL_ERROR; #endif result = invokeProcMethod(cp, interp, objc, objv, methodName, obj, cl, cmd, cscPtr); -#if !defined(NRE) +#if defined(NRE) + /* CallStackPop() is performed by the callbacks */ + /*fprintf(stderr, "no pop for %s\n",methodName);*/ +#else CallStackPop(interp, cscPtr); #endif return result; @@ -5317,9 +5332,7 @@ cp = clientData; cscPtr = NULL; } - result = invokeCmdMethod(cp, interp, objc, objv, methodName, obj, cmd, cscPtr); - if (cscPtr) { CallStackPop(interp, cscPtr); } @@ -6067,7 +6080,7 @@ Tcl_Obj *args, Tcl_Obj *body, Tcl_Obj *precondition, Tcl_Obj *postcondition, int withProtected, int clsns) { - char *argStr = ObjStr(args), *bdyStr = ObjStr(body), *nameStr = ObjStr(nameObj); + char *argsStr = ObjStr(args), *bodyStr = ObjStr(body), *nameStr = ObjStr(nameObj); int result; if (precondition && !postcondition) { @@ -6078,7 +6091,7 @@ } /* if both, args and body are empty strings, we delete the method */ - if (*argStr == 0 && *bdyStr == 0) { + if (*argsStr == 0 && *bodyStr == 0) { result = cl ? XOTclRemoveIMethod(interp, (XOTcl_Class *)cl, nameStr) : XOTclRemovePMethod(interp, (XOTcl_Object *)obj, nameStr); @@ -6864,9 +6877,8 @@ return XOTclVarErrMsg(interp, "wrong # of args for self", (char *) NULL); obj = GetSelfObj(interp); + /*fprintf(stderr, "getSelfObj returns %p\n", obj); tcl85showStack(interp);*/ - /*fprintf(stderr, "getSelfObj returns %p\n", obj);XOTclCallStackDump(interp);*/ - if (objc == 1) { if (obj) { Tcl_SetIntObj(Tcl_GetObjResult(interp), 1); @@ -10040,7 +10052,9 @@ * Do not copy Objects or Classes */ if (!XOTclpGetObject(interp, oldName)) { - if (TclIsProc((Command*)cmd)) { + + /* TODO general take care about change in 8.6: TclIsProc((Command*)cmd) no equiv to following */ + if (Tcl_Command_objProc(cmd) == TclObjInterpProc) { Proc *procPtr = (Proc*) Tcl_Command_objClientData(cmd); Tcl_Obj *arglistObj; int result; @@ -10623,14 +10637,11 @@ if (result == TCL_OK) { rawConfArgs = Tcl_GetObjResult(interp); INCR_REF_COUNT(rawConfArgs); -#if !defined(PRE86) - fprintf(stderr, "the result of OBJECTPARAMETER was %s, now parse it...\n", ObjStr(rawConfArgs)); -#endif + /* Parse the string representation to obtain the internal representation */ result = ParamDefsParse(interp, methodName, rawConfArgs, XOTCL_ARG_OBJECT_PARAMETER, parsedParamPtr); if (result == TCL_OK && RUNTIME_STATE(interp)->cacheInterface) { XOTclParsedParam *ppDefPtr = NEW(XOTclParsedParam); - ppDefPtr->paramDefs = parsedParamPtr->paramDefs; ppDefPtr->possibleUnknowns = parsedParamPtr->possibleUnknowns; obj->cl->parsedParamPtr = ppDefPtr; Index: generic/xotcl.h =================================================================== diff -u -rf71845baf5b995318b585981109bdf114d95eb2f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotcl.h (.../xotcl.h) (revision f71845baf5b995318b585981109bdf114d95eb2f) +++ generic/xotcl.h (.../xotcl.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -126,8 +126,8 @@ #if defined(PRE86) # define CONST86 -# else -/*# define NRE*/ +#else +# define NRE #endif Index: generic/xotclDecls.h =================================================================== diff -u -ra4d1fd30453e4e87467b02ed749fb4007d46a5e0 -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclDecls.h (.../xotclDecls.h) (revision a4d1fd30453e4e87467b02ed749fb4007d46a5e0) +++ generic/xotclDecls.h (.../xotclDecls.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -40,7 +40,7 @@ #ifndef XOTclGetObject_TCL_DECLARED #define XOTclGetObject_TCL_DECLARED /* 4 */ -EXTERN struct XOTcl_Object * XOTclGetObject (Tcl_Interp * interp, +EXTERN struct XOTcl_Object * XOTclGetObject (Tcl_Interp * interp, char * name); #endif #ifndef XOTclGetClass_TCL_DECLARED @@ -51,90 +51,90 @@ #ifndef XOTclCreateObject_TCL_DECLARED #define XOTclCreateObject_TCL_DECLARED /* 6 */ -EXTERN int XOTclCreateObject (Tcl_Interp * interp, +EXTERN int XOTclCreateObject (Tcl_Interp * interp, Tcl_Obj * name, struct XOTcl_Class * cl); #endif /* Slot 7 is reserved */ #ifndef XOTclCreateClass_TCL_DECLARED #define XOTclCreateClass_TCL_DECLARED /* 8 */ -EXTERN int XOTclCreateClass (Tcl_Interp * interp, +EXTERN int XOTclCreateClass (Tcl_Interp * interp, Tcl_Obj * name, struct XOTcl_Class * cl); #endif #ifndef XOTclDeleteObject_TCL_DECLARED #define XOTclDeleteObject_TCL_DECLARED /* 9 */ -EXTERN int XOTclDeleteObject (Tcl_Interp * interp, +EXTERN int XOTclDeleteObject (Tcl_Interp * interp, struct XOTcl_Object * obj); #endif #ifndef XOTclDeleteClass_TCL_DECLARED #define XOTclDeleteClass_TCL_DECLARED /* 10 */ -EXTERN int XOTclDeleteClass (Tcl_Interp * interp, +EXTERN int XOTclDeleteClass (Tcl_Interp * interp, struct XOTcl_Class * cl); #endif /* Slot 11 is reserved */ /* Slot 12 is reserved */ #ifndef XOTclRemovePMethod_TCL_DECLARED #define XOTclRemovePMethod_TCL_DECLARED /* 13 */ -EXTERN int XOTclRemovePMethod (Tcl_Interp * interp, +EXTERN int XOTclRemovePMethod (Tcl_Interp * interp, struct XOTcl_Object * obj, char * nm); #endif #ifndef XOTclRemoveIMethod_TCL_DECLARED #define XOTclRemoveIMethod_TCL_DECLARED /* 14 */ -EXTERN int XOTclRemoveIMethod (Tcl_Interp * interp, +EXTERN int XOTclRemoveIMethod (Tcl_Interp * interp, struct XOTcl_Class * cl, char * nm); #endif #ifndef XOTclOSetInstVar_TCL_DECLARED #define XOTclOSetInstVar_TCL_DECLARED /* 15 */ -EXTERN Tcl_Obj * XOTclOSetInstVar (struct XOTcl_Object * obj, - Tcl_Interp * interp, Tcl_Obj * name, +EXTERN Tcl_Obj * XOTclOSetInstVar (struct XOTcl_Object * obj, + Tcl_Interp * interp, Tcl_Obj * name, Tcl_Obj * value, int flgs); #endif #ifndef XOTclOGetInstVar_TCL_DECLARED #define XOTclOGetInstVar_TCL_DECLARED /* 16 */ -EXTERN Tcl_Obj * XOTclOGetInstVar (struct XOTcl_Object * obj, - Tcl_Interp * interp, Tcl_Obj * name, +EXTERN Tcl_Obj * XOTclOGetInstVar (struct XOTcl_Object * obj, + Tcl_Interp * interp, Tcl_Obj * name, int flgs); #endif #ifndef XOTclInstVar_TCL_DECLARED #define XOTclInstVar_TCL_DECLARED /* 17 */ -EXTERN int XOTclInstVar (struct XOTcl_Object * obj, - Tcl_Interp * interp, char * name, +EXTERN int XOTclInstVar (struct XOTcl_Object * obj, + Tcl_Interp * interp, char * name, char * destName); #endif /* Slot 18 is reserved */ #ifndef XOTcl_ObjSetVar2_TCL_DECLARED #define XOTcl_ObjSetVar2_TCL_DECLARED /* 19 */ -EXTERN Tcl_Obj * XOTcl_ObjSetVar2 (struct XOTcl_Object * obj, - Tcl_Interp * interp, Tcl_Obj * name1, +EXTERN Tcl_Obj * XOTcl_ObjSetVar2 (struct XOTcl_Object * obj, + Tcl_Interp * interp, Tcl_Obj * name1, Tcl_Obj * name2, Tcl_Obj * value, int flgs); #endif #ifndef XOTcl_ObjGetVar2_TCL_DECLARED #define XOTcl_ObjGetVar2_TCL_DECLARED /* 20 */ -EXTERN Tcl_Obj * XOTcl_ObjGetVar2 (struct XOTcl_Object * obj, - Tcl_Interp * interp, Tcl_Obj * name1, +EXTERN Tcl_Obj * XOTcl_ObjGetVar2 (struct XOTcl_Object * obj, + Tcl_Interp * interp, Tcl_Obj * name1, Tcl_Obj * name2, int flgs); #endif #ifndef XOTclUnsetInstVar2_TCL_DECLARED #define XOTclUnsetInstVar2_TCL_DECLARED /* 21 */ -EXTERN int XOTclUnsetInstVar2 (struct XOTcl_Object * obj, - Tcl_Interp * interp, char * name1, +EXTERN int XOTclUnsetInstVar2 (struct XOTcl_Object * obj, + Tcl_Interp * interp, char * name1, char * name2, int flgs); #endif /* Slot 22 is reserved */ #ifndef XOTclErrMsg_TCL_DECLARED #define XOTclErrMsg_TCL_DECLARED /* 23 */ -EXTERN int XOTclErrMsg (Tcl_Interp * interp, char * msg, +EXTERN int XOTclErrMsg (Tcl_Interp * interp, char * msg, Tcl_FreeProc * type); #endif #ifndef XOTclVarErrMsg_TCL_DECLARED @@ -145,21 +145,21 @@ #ifndef XOTclErrInProc_TCL_DECLARED #define XOTclErrInProc_TCL_DECLARED /* 25 */ -EXTERN int XOTclErrInProc (Tcl_Interp * interp, - Tcl_Obj * objName, Tcl_Obj * clName, +EXTERN int XOTclErrInProc (Tcl_Interp * interp, + Tcl_Obj * objName, Tcl_Obj * clName, char * procName); #endif /* Slot 26 is reserved */ #ifndef XOTclErrBadVal__TCL_DECLARED #define XOTclErrBadVal__TCL_DECLARED /* 27 */ -EXTERN int XOTclErrBadVal_ (Tcl_Interp * interp, +EXTERN int XOTclErrBadVal_ (Tcl_Interp * interp, char * expected, char * value); #endif #ifndef XOTclObjErrType_TCL_DECLARED #define XOTclObjErrType_TCL_DECLARED /* 28 */ -EXTERN int XOTclObjErrType (Tcl_Interp * interp, Tcl_Obj * nm, +EXTERN int XOTclObjErrType (Tcl_Interp * interp, Tcl_Obj * nm, char * wt); #endif #ifndef XOTclStackDump_TCL_DECLARED @@ -176,7 +176,7 @@ #ifndef XOTclSetObjClientData_TCL_DECLARED #define XOTclSetObjClientData_TCL_DECLARED /* 32 */ -EXTERN void XOTclSetObjClientData (XOTcl_Object * obj, +EXTERN void XOTclSetObjClientData (XOTcl_Object * obj, ClientData data); #endif #ifndef XOTclGetObjClientData_TCL_DECLARED @@ -187,7 +187,7 @@ #ifndef XOTclSetClassClientData_TCL_DECLARED #define XOTclSetClassClientData_TCL_DECLARED /* 34 */ -EXTERN void XOTclSetClassClientData (XOTcl_Class * cl, +EXTERN void XOTclSetClassClientData (XOTcl_Class * cl, ClientData data); #endif #ifndef XOTclGetClassClientData_TCL_DECLARED @@ -198,67 +198,67 @@ #ifndef XOTclRequireObjNamespace_TCL_DECLARED #define XOTclRequireObjNamespace_TCL_DECLARED /* 36 */ -EXTERN void XOTclRequireObjNamespace (Tcl_Interp * interp, +EXTERN void XOTclRequireObjNamespace (Tcl_Interp * interp, XOTcl_Object * obj); #endif #ifndef XOTclErrBadVal_TCL_DECLARED #define XOTclErrBadVal_TCL_DECLARED /* 37 */ -EXTERN int XOTclErrBadVal (Tcl_Interp * interp, char * context, +EXTERN int XOTclErrBadVal (Tcl_Interp * interp, char * context, char * expected, char * value); #endif #ifndef XOTclNextObjCmd_TCL_DECLARED #define XOTclNextObjCmd_TCL_DECLARED /* 38 */ -EXTERN int XOTclNextObjCmd (ClientData cd, Tcl_Interp * interp, +EXTERN int XOTclNextObjCmd (ClientData cd, Tcl_Interp * interp, int objc, Tcl_Obj *CONST objv[]); #endif #ifndef XOTclCallMethodWithArgs_TCL_DECLARED #define XOTclCallMethodWithArgs_TCL_DECLARED /* 39 */ -EXTERN int XOTclCallMethodWithArgs (ClientData cd, - Tcl_Interp * interp, Tcl_Obj * method, - Tcl_Obj * arg, int objc, +EXTERN int XOTclCallMethodWithArgs (ClientData cd, + Tcl_Interp * interp, Tcl_Obj * method, + Tcl_Obj * arg, int objc, Tcl_Obj *CONST objv[], int flags); #endif #ifndef XOTclObjErrArgCnt_TCL_DECLARED #define XOTclObjErrArgCnt_TCL_DECLARED /* 40 */ -EXTERN int XOTclObjErrArgCnt (Tcl_Interp * interp, - Tcl_Obj * cmdName, Tcl_Obj * methodName, +EXTERN int XOTclObjErrArgCnt (Tcl_Interp * interp, + Tcl_Obj * cmdName, Tcl_Obj * methodName, char * arglist); #endif #ifndef XOTclAddObjectMethod_TCL_DECLARED #define XOTclAddObjectMethod_TCL_DECLARED /* 41 */ -EXTERN int XOTclAddObjectMethod (Tcl_Interp * interp, - struct XOTcl_Object * obj, CONST char * nm, - Tcl_ObjCmdProc * proc, ClientData cd, +EXTERN int XOTclAddObjectMethod (Tcl_Interp * interp, + struct XOTcl_Object * obj, CONST char * nm, + Tcl_ObjCmdProc * proc, ClientData cd, Tcl_CmdDeleteProc * dp, int flags); #endif #ifndef XOTclAddInstanceMethod_TCL_DECLARED #define XOTclAddInstanceMethod_TCL_DECLARED /* 42 */ -EXTERN int XOTclAddInstanceMethod (Tcl_Interp * interp, - struct XOTcl_Class * cl, CONST char * nm, - Tcl_ObjCmdProc * proc, ClientData cd, +EXTERN int XOTclAddInstanceMethod (Tcl_Interp * interp, + struct XOTcl_Class * cl, CONST char * nm, + Tcl_ObjCmdProc * proc, ClientData cd, Tcl_CmdDeleteProc * dp, int flags); #endif #ifndef XOTclCreate_TCL_DECLARED #define XOTclCreate_TCL_DECLARED /* 43 */ -EXTERN int XOTclCreate (Tcl_Interp * in, XOTcl_Class * class, - Tcl_Obj * name, ClientData data, int objc, +EXTERN int XOTclCreate (Tcl_Interp * in, XOTcl_Class * class, + Tcl_Obj * name, ClientData data, int objc, Tcl_Obj *CONST objv[]); #endif typedef struct XotclStubHooks { - struct XotclIntStubs *xotclIntStubs; + const struct XotclIntStubs *xotclIntStubs; } XotclStubHooks; typedef struct XotclStubs { int magic; - struct XotclStubHooks *hooks; + const struct XotclStubHooks *hooks; int (*xotcl_Init) (Tcl_Interp * interp); /* 0 */ void *reserved1; @@ -306,13 +306,9 @@ int (*xOTclCreate) (Tcl_Interp * in, XOTcl_Class * class, Tcl_Obj * name, ClientData data, int objc, Tcl_Obj *CONST objv[]); /* 43 */ } XotclStubs; -#ifdef __cplusplus -extern "C" { -#endif -extern XotclStubs *xotclStubsPtr; -#ifdef __cplusplus -} -#endif +#if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) +extern const XotclStubs *xotclStubsPtr; +#endif /* defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) */ #if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) Index: generic/xotclInt.h =================================================================== diff -u -ra4d1fd30453e4e87467b02ed749fb4007d46a5e0 -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclInt.h (.../xotclInt.h) (revision a4d1fd30453e4e87467b02ed749fb4007d46a5e0) +++ generic/xotclInt.h (.../xotclInt.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -46,6 +46,11 @@ # define TclVarHashTable Tcl_HashTable #endif +#if defined(PRE86) +# define Tcl_NRCallObjProc(interp, proc, cd, objc, objv) \ + (*(proc))((cd), (interp), (objc), (objv)) +#endif + #ifdef XOTCL_MEM_COUNT Tcl_HashTable xotclMemCount; extern int xotclMemCountInterpCounter; Index: generic/xotclIntDecls.h =================================================================== diff -u -r2111020b49da8ce57758e51accf0b6073037f0d2 -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclIntDecls.h (.../xotclIntDecls.h) (revision 2111020b49da8ce57758e51accf0b6073037f0d2) +++ generic/xotclIntDecls.h (.../xotclIntDecls.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -31,17 +31,13 @@ typedef struct XotclIntStubs { int magic; - struct XotclIntStubHooks *hooks; + const struct XotclIntStubHooks *hooks; } XotclIntStubs; -#ifdef __cplusplus -extern "C" { -#endif -extern XotclIntStubs *xotclIntStubsPtr; -#ifdef __cplusplus -} -#endif +#if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) +extern const XotclIntStubs *xotclIntStubsPtr; +#endif /* defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) */ #if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) Index: generic/xotclShadow.c =================================================================== diff -u -r07939dc97b98b4a40c047be6923c36380c7c6b5d -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclShadow.c (.../xotclShadow.c) (revision 07939dc97b98b4a40c047be6923c36380c7c6b5d) +++ generic/xotclShadow.c (.../xotclShadow.c) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -95,8 +95,7 @@ /* if an obj/cl should be renamed => call the XOTcl move method */ cmd = Tcl_FindCommand(interp, ObjStr(objv[1]), (Tcl_Namespace *)NULL,0); - - if (cmd != NULL) { + if (cmd) { obj = XOTclGetObjectFromCmdPtr(cmd); if (obj) { return XOTclCallMethodWithArgs((ClientData)obj, interp, @@ -188,7 +187,7 @@ ov[0] = XOTclGlobalObjects[name]; if (objc > 1) memcpy(ov+1, objv+1, sizeof(Tcl_Obj *)*(objc-1)); - result = (*ti->proc)(ti->clientData, interp, objc, ov); + result = Tcl_NRCallObjProc(interp, ti->proc, ti->clientData, objc, objv); FREE_ON_STACK(ov); return result; } Index: generic/xotclStack85.c =================================================================== diff -u -r485f041db31fc83046fbeba0d3e64beeb1abca1f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclStack85.c (.../xotclStack85.c) (revision 485f041db31fc83046fbeba0d3e64beeb1abca1f) +++ generic/xotclStack85.c (.../xotclStack85.c) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -326,7 +326,8 @@ XOTclObject *obj = csc->self; #if defined(TCL85STACK_TRACE) - fprintf(stderr, "POP csc=%p, obj %s\n", csc, objectName(obj)); + fprintf(stderr, "POP csc=%p, obj %s method %s (%d)\n", csc, objectName(obj), + Tcl_GetCommandName(interp, csc->cmdPtr)); #endif obj->activationCount --; /*fprintf(stderr, "decr activationCount for %s to %d\n", objectName(csc->self), csc->self->activationCount);*/ Index: generic/xotclStubInit.c =================================================================== diff -u -rf71845baf5b995318b585981109bdf114d95eb2f -r044952af84b087821f5bd68570b84b8e3e000851 --- generic/xotclStubInit.c (.../xotclStubInit.c) (revision f71845baf5b995318b585981109bdf114d95eb2f) +++ generic/xotclStubInit.c (.../xotclStubInit.c) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -24,16 +24,16 @@ /* !BEGIN!: Do not edit below this line. */ -XotclIntStubs xotclIntStubs = { +static const XotclIntStubs xotclIntStubs = { TCL_STUB_MAGIC, NULL, }; -static XotclStubHooks xotclStubHooks = { +static const XotclStubHooks xotclStubHooks = { &xotclIntStubs }; -XotclStubs xotclStubs = { +static const XotclStubs xotclStubs = { TCL_STUB_MAGIC, &xotclStubHooks, Xotcl_Init, /* 0 */ Index: tests/testx.xotcl =================================================================== diff -u -ra4d1fd30453e4e87467b02ed749fb4007d46a5e0 -r044952af84b087821f5bd68570b84b8e3e000851 --- tests/testx.xotcl (.../testx.xotcl) (revision a4d1fd30453e4e87467b02ed749fb4007d46a5e0) +++ tests/testx.xotcl (.../testx.xotcl) (revision 044952af84b087821f5bd68570b84b8e3e000851) @@ -201,11 +201,13 @@ b proc p {a b c} { return p } {pre1 pre2 pre3} {post1 post2 post3} +puts stderr RENAME ::rename b a +puts stderr RENAME-done ::errorCheck [a info pre p] {{pre1} {pre2} {pre3}} \ - "Obj proc pre assertion " + "renamed Obj proc pre assertion " ::errorCheck [a info post p] {{post1} {post2} {post3}} \ - "Obj proc post assertion " + "renamed Obj proc post assertion " Class Sensor -parameter {{value 1}}