Index: configure =================================================================== diff -u -r5ec6a6f960964d861d68c052d8e2e7d68b711449 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- configure (.../configure) (revision 5ec6a6f960964d861d68c052d8e2e7d68b711449) +++ configure (.../configure) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -11748,11 +11748,15 @@ fi +echo "==================== building genstubs (needed for Tcl 8.6)" +make genstubs +echo "==================== genstubs built" + here=${PWD} for subdir in ${subdirs} do - echo "==================== configure $subdir =====================" + echo "==================== configure $subdir" if test x"${srcdir}" = x. ; then confdir=. else Index: configure.in =================================================================== diff -u -r5ec6a6f960964d861d68c052d8e2e7d68b711449 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- configure.in (.../configure.in) (revision 5ec6a6f960964d861d68c052d8e2e7d68b711449) +++ configure.in (.../configure.in) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -460,11 +460,15 @@ AC_OUTPUT +echo "==================== building genstubs (needed for Tcl 8.6)" +make genstubs +echo "==================== genstubs built" + here=${PWD} for subdir in ${subdirs} do - echo "==================== configure $subdir =====================" + echo "==================== configure $subdir" if test x"${srcdir}" = x. ; then confdir=. else Index: generic/xotcl.c =================================================================== diff -u -rd4e66214fc3323aea509676709c9b7ace64f0f50 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- generic/xotcl.c (.../xotcl.c) (revision d4e66214fc3323aea509676709c9b7ace64f0f50) +++ generic/xotcl.c (.../xotcl.c) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -5224,7 +5224,6 @@ * but we have to check what happens in the finish target etc. */ XOTcl_PushFrameCsc(interp, obj, cscPtr); - /*fprintf(stderr, "pushing callframe for %s\n",methodName);*/ /*XOTcl_PushFrame(interp, obj);*/ } #endif @@ -5290,12 +5289,12 @@ Tcl_Command cmd, XOTclObject *obj, XOTclClass *cl, char *methodName, int frameType) { ClientData cp = Tcl_Command_objClientData(cmd); - XOTclCallStackContent *cscPtr; + XOTclCallStackContent csc, *cscPtr; register Tcl_ObjCmdProc *proc = Tcl_Command_objProc(cmd); int result; assert (!obj->teardown); - /*fprintf(stderr, "InvokeMethod method '%s' cmd %p cp=%p objc=%d\n",methodName,cmd, cp, objc);*/ + /*fprintf(stderr, "InvokeMethod method '%s' cmd %p cp=%p objc=%d\n", methodName, cmd, cp, objc);*/ if (proc == TclObjInterpProc) { #if defined(NRE) @@ -5304,7 +5303,6 @@ fprintf(stderr, "---- csc alloc %p method %s\n", cscPtr, methodName); # endif #else - XOTclCallStackContent csc; cscPtr = &csc; #endif /* @@ -5326,7 +5324,6 @@ return result; } else if (cp) { - XOTclCallStackContent csc; cscPtr = &csc; /* some cmd with client data */ @@ -5369,6 +5366,7 @@ } result = invokeCmdMethod(cp, interp, objc, objv, methodName, obj, cmd, cscPtr); if (cscPtr) { + /* make sure, that csc is still in the scope; therefore, csc is currently on the top scope of this function */ CallStackPop(interp, cscPtr); } return result; Index: generic/xotclDecls.h =================================================================== diff -u -r044952af84b087821f5bd68570b84b8e3e000851 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- generic/xotclDecls.h (.../xotclDecls.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) +++ generic/xotclDecls.h (.../xotclDecls.h) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -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 { - const struct XotclIntStubs *xotclIntStubs; + struct XotclIntStubs *xotclIntStubs; } XotclStubHooks; typedef struct XotclStubs { int magic; - const struct XotclStubHooks *hooks; + struct XotclStubHooks *hooks; int (*xotcl_Init) (Tcl_Interp * interp); /* 0 */ void *reserved1; @@ -306,9 +306,13 @@ int (*xOTclCreate) (Tcl_Interp * in, XOTcl_Class * class, Tcl_Obj * name, ClientData data, int objc, Tcl_Obj *CONST objv[]); /* 43 */ } XotclStubs; -#if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) -extern const XotclStubs *xotclStubsPtr; -#endif /* defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) */ +#ifdef __cplusplus +extern "C" { +#endif +extern XotclStubs *xotclStubsPtr; +#ifdef __cplusplus +} +#endif #if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) Index: generic/xotclInt.h =================================================================== diff -u -rd4e66214fc3323aea509676709c9b7ace64f0f50 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- generic/xotclInt.h (.../xotclInt.h) (revision d4e66214fc3323aea509676709c9b7ace64f0f50) +++ generic/xotclInt.h (.../xotclInt.h) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -256,26 +256,31 @@ /*fprintf(stderr,"PUSH CMETHOD_FRAME (XOTcl_PushFrame) frame %p\n",framePtr);*/ \ if ((obj)->nsPtr) { \ frame_constructed = 0; \ - /*fprintf(stderr,"XOTcl_PushFrame frame %p\n",framePtr);*/ \ + /*fprintf(stderr,"XOTcl_PushFrame frame %p nsPtr %p obj %p\n",framePtr,(obj)->nsPtr,obj);*/ \ + assert(obj == csc->self); \ Tcl_PushCallFrame(interp, (Tcl_CallFrame*)framePtr, (obj)->nsPtr, 0|FRAME_IS_XOTCL_CMETHOD); \ + assert(obj == csc->self); \ } else { \ - /*fprintf(stderr,"XOTcl_PushFrame frame %p (with fakeProc)\n",framePtr);*/ \ + /*fprintf(stderr,"XOTcl_PushFrame frame %p (with fakeProc) obj %p\n",framePtr,obj);*/ \ + assert(obj == csc->self); \ Tcl_PushCallFrame(interp, (Tcl_CallFrame*)framePtr, Tcl_CallFrame_nsPtr(Tcl_Interp_varFramePtr(interp)), 1|FRAME_IS_XOTCL_CMETHOD); \ + assert(obj == csc->self); \ Tcl_CallFrame_procPtr(framePtr) = &RUNTIME_STATE(interp)->fakeProc; \ Tcl_CallFrame_varTablePtr(framePtr) = (obj)->varTable; \ } \ XOTcl_PushFrameSetCd(csc) + #define XOTcl_PopFrame(interp,obj) \ if (!(obj)->nsPtr && ((obj)->varTable == 0)) { \ (obj)->varTable = Tcl_CallFrame_varTablePtr(framePtr); \ } \ - if (frame_constructed) { \ - Tcl_CallFrame_varTablePtr(Tcl_Interp_framePtr(interp)) = 0; \ - /*Tcl_CallFrame_procPtr(myFramePtr) = 0; */ \ - } \ + if (frame_constructed) { \ + Tcl_CallFrame_varTablePtr(Tcl_Interp_framePtr(interp)) = 0; \ + /*Tcl_CallFrame_procPtr(myFramePtr) = 0; */ \ + } \ /*fprintf(stderr,"POP OBJECT_FRAME (XOTcl_PopFrame) frame %p\n",framePtr);*/ \ - Tcl_PopCallFrame(interp) + Tcl_PopCallFrame(interp) #if 0 #define XOTcl_SimplePopFrame(interp,obj) \ Index: generic/xotclIntDecls.h =================================================================== diff -u -r044952af84b087821f5bd68570b84b8e3e000851 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- generic/xotclIntDecls.h (.../xotclIntDecls.h) (revision 044952af84b087821f5bd68570b84b8e3e000851) +++ generic/xotclIntDecls.h (.../xotclIntDecls.h) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -31,13 +31,17 @@ typedef struct XotclIntStubs { int magic; - const struct XotclIntStubHooks *hooks; + struct XotclIntStubHooks *hooks; } XotclIntStubs; -#if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) -extern const XotclIntStubs *xotclIntStubsPtr; -#endif /* defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) */ +#ifdef __cplusplus +extern "C" { +#endif +extern XotclIntStubs *xotclIntStubsPtr; +#ifdef __cplusplus +} +#endif #if defined(USE_XOTCL_STUBS) && !defined(USE_XOTCL_STUB_PROCS) Index: generic/xotclStubInit.c =================================================================== diff -u -r044952af84b087821f5bd68570b84b8e3e000851 -rcde16e9d87173d7ef9179ce40e10c2f1f708940e --- generic/xotclStubInit.c (.../xotclStubInit.c) (revision 044952af84b087821f5bd68570b84b8e3e000851) +++ generic/xotclStubInit.c (.../xotclStubInit.c) (revision cde16e9d87173d7ef9179ce40e10c2f1f708940e) @@ -24,16 +24,16 @@ /* !BEGIN!: Do not edit below this line. */ -static const XotclIntStubs xotclIntStubs = { +XotclIntStubs xotclIntStubs = { TCL_STUB_MAGIC, NULL, }; -static const XotclStubHooks xotclStubHooks = { +static XotclStubHooks xotclStubHooks = { &xotclIntStubs }; -static const XotclStubs xotclStubs = { +XotclStubs xotclStubs = { TCL_STUB_MAGIC, &xotclStubHooks, Xotcl_Init, /* 0 */