Index: ChangeLog =================================================================== diff -u -N -r266843ef9d5134dcb9cbe22cfd6ca8bcabc94b6f -rebd253f47f14822a54b86b379622f6509cbbc4fe --- ChangeLog (.../ChangeLog) (revision 266843ef9d5134dcb9cbe22cfd6ca8bcabc94b6f) +++ ChangeLog (.../ChangeLog) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -1,3 +1,6 @@ +2010-02-09 + * provide compatibility with 8.6b1 + 2009-11-13 * Release of XOTcl 1.6.5 Index: generic/xotcl.c =================================================================== diff -u -N -r187492dd9e893c1afcb30ca671e94bb4ea25fef1 -rebd253f47f14822a54b86b379622f6509cbbc4fe --- generic/xotcl.c (.../xotcl.c) (revision 187492dd9e893c1afcb30ca671e94bb4ea25fef1) +++ generic/xotcl.c (.../xotcl.c) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -898,7 +898,7 @@ static int SetXOTclObjectFromAny(Tcl_Interp *interp, register Tcl_Obj *objPtr) { - Tcl_ObjType *oldTypePtr = objPtr->typePtr; + Tcl_ObjType *oldTypePtr = (Tcl_ObjType *)objPtr->typePtr; char *string = ObjStr(objPtr); XOTclObject *obj; Tcl_Obj *tmpName = NULL; @@ -1041,9 +1041,9 @@ } #ifdef KEEP_TCL_CMD_TYPE -XOTCLINLINE static Tcl_ObjType * -GetCmdNameType(Tcl_ObjType *cmdType) { - static Tcl_ObjType *tclCmdNameType = NULL; +XOTCLINLINE static CONST86 Tcl_ObjType * +GetCmdNameType(Tcl_ObjType CONST86 *cmdType) { + static Tcl_ObjType CONST86 *tclCmdNameType = NULL; if (tclCmdNameType == NULL) { # if defined(PRE82) @@ -1068,7 +1068,7 @@ static int XOTclObjGetObject(Tcl_Interp *interp, register Tcl_Obj *objPtr, XOTclObject **obj) { int result; - register Tcl_ObjType *cmdType = objPtr->typePtr; + register Tcl_ObjType CONST86 *cmdType = objPtr->typePtr; XOTclObject *o; if (cmdType == &XOTclObjectType) { @@ -1103,7 +1103,7 @@ static int XOTclObjConvertObject(Tcl_Interp *interp, Tcl_Obj *objPtr, XOTclObject **obj) { int result; - register Tcl_ObjType *cmdType = objPtr->typePtr; + register Tcl_ObjType CONST86 *cmdType = objPtr->typePtr; /* * Only really share the "::x" Tcl_Objs but not "x" because we so not have @@ -5180,7 +5180,7 @@ Tcl_AppendObjToErrorInfo(interp, Tcl_ObjPrintf( "\n (procedure \"%.*s%s\" line %d)", (overflow ? limit : nameLen), procName, - (overflow ? "..." : ""), interp->errorLine)); + (overflow ? "..." : ""), Tcl_GetErrorLine(interp))); } static int PushProcCallFrame( @@ -5198,7 +5198,7 @@ Namespace *nsPtr = procPtr->cmdPtr->nsPtr; CallFrame *framePtr, **framePtrPtr = &framePtr; int result; - static Tcl_ObjType *byteCodeType = NULL; + static Tcl_ObjType CONST86 *byteCodeType = NULL; if (byteCodeType == NULL) { static XOTclMutex initMutex = 0; @@ -5330,7 +5330,7 @@ fprintf(stderr,"\tcmd=%s\n", Tcl_GetCommandName(interp, cmd)); #endif - result = (*Tcl_Command_objProc(cmd))(cp, interp, objc, objv); + result = Tcl_NRCallObjProc(interp, Tcl_Command_objProc(cmd), cp, objc, objv); #ifdef DISPATCH_TRACE printExit(interp,"callProcCheck cmd", objc, objv, result); @@ -5436,7 +5436,7 @@ * here or in PushProcCallFrame. At the same time, we could do the * non-pos-arg handling here as well. */ -#if !defined(PRE85) +#if !defined(PRE85) && !defined(NRE) /*fprintf(stderr,"\tproc=%s cp=%p %d\n", Tcl_GetCommandName(interp, cmd),cp, isTclProc);*/ result = PushProcCallFrame(cp, interp, objc, objv, /*isLambda*/ 0); @@ -5448,7 +5448,7 @@ result = TCL_ERROR; } #else - result = (*Tcl_Command_objProc(cmd))(cp, interp, objc, objv); + result = Tcl_NRCallObjProc(interp, Tcl_Command_objProc(cmd), cp, objc, objv); #endif #ifdef DISPATCH_TRACE @@ -5896,7 +5896,7 @@ Tcl_Obj *resultBody; resultBody = Tcl_NewStringObj("", 0); INCR_REF_COUNT(resultBody); -#if defined(PRE85) +#if defined(PRE85) || defined(NRE) Tcl_AppendStringsToObj(resultBody, "::xotcl::initProcNS\n", (char *) NULL); #endif if (nonposArgs) { @@ -6666,12 +6666,13 @@ static char * StripBodyPrefix(char *body) { -#if defined(PRE85) +#if defined(PRE85) || defined(NRE) if (strncmp(body, "::xotcl::initProcNS\n", 20) == 0) body+=20; #endif if (strncmp(body, "::xotcl::interpretNonpositionalArgs $args\n", 42) == 0) body+=42; + /*fprintf(stderr, "--- returing body ***%s***\n", body);*/ return body; } @@ -6908,10 +6909,10 @@ */ } #endif - /* - fprintf(stderr,"givenMethod = %s, csc = %p, useCallstackObj %d, objc %d\n", - givenMethod, csc, useCallstackObjs, objc); - */ + + /*fprintf(stderr,"givenMethod = %s, csc = %p, useCallstackObj %d, objc %d currentFramePtr %p\n", + givenMethod, csc, useCallstackObjs, objc, csc->currentFramePtr);*/ + /* if no args are given => use args from stack */ if (objc < 2 && useCallstackObjs && csc->currentFramePtr) { @@ -9295,7 +9296,7 @@ } if (result == TCL_ERROR) { char msg[32 + TCL_INTEGER_SPACE]; - sprintf(msg, "\n (\"uplevel\" body line %d)", interp->errorLine); + sprintf(msg, "\n (\"uplevel\" body line %d)", Tcl_GetErrorLine(interp)); Tcl_AddObjErrorInfo(interp, msg, -1); } @@ -9444,7 +9445,7 @@ XOTcl_PushFrame(interp, tcd->obj); } if (tcd->objProc) { - result = (tcd->objProc)(tcd->cd, interp, objc, objv); + result = Tcl_NRCallObjProc(interp, tcd->objProc, tcd->cd, objc, objv); } else if (tcd->cmdName->typePtr == &XOTclObjectType && XOTclObjConvertObject(interp, tcd->cmdName, (void*)&cd) == TCL_OK) { /*fprintf(stderr, "XOTcl object %s, objc=%d\n", ObjStr(tcd->cmdName), objc);*/ @@ -9873,7 +9874,7 @@ /* fprintf(stderr,"objscopedMethod obj=%p, ptr=%p\n", obj, tcd->objProc); */ XOTcl_PushFrame(interp, obj); - rc = (tcd->objProc)(tcd->cd, interp, objc, objv); + rc = Tcl_NRCallObjProc(interp, tcd->objProc, tcd->cd, objc, objv); XOTcl_PopFrame(interp, obj); return rc; @@ -10324,7 +10325,7 @@ static dashArgType isDashArg(Tcl_Interp *interp, Tcl_Obj *obj, char **methodName, int *objc, Tcl_Obj **objv[]) { char *flag; - static Tcl_ObjType *listType = NULL; + static Tcl_ObjType CONST86 *listType = NULL; assert(obj); @@ -12173,7 +12174,7 @@ return result; } -#if defined(PRE85) +#if defined(PRE85) || defined(NRE) int XOTclInitProcNSCmd(ClientData cd, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]) { Tcl_CallFrame *varFramePtr = (Tcl_CallFrame *) Tcl_Interp_varFramePtr(interp); @@ -12767,7 +12768,7 @@ if (result != TCL_OK) { fprintf(stderr,"User defined exit handler contains errors!\n" "Error in line %d: %s\nExecution interrupted.\n", - interp->errorLine, ObjStr(Tcl_GetObjResult(interp))); + Tcl_GetErrorLine(interp), ObjStr(Tcl_GetObjResult(interp))); } /* deleting in two rounds: @@ -13231,7 +13232,7 @@ Tcl_CreateObjCommand(interp, "::xotcl::configure", XOTclConfigureCommand, 0, 0); Tcl_CreateObjCommand(interp, "::xotcl::deprecated", XOTcl_DeprecatedCmd, 0, 0); Tcl_CreateObjCommand(interp, "::xotcl::finalize", XOTclFinalizeObjCmd, 0, 0); -#if defined(PRE85) +#if defined(PRE85) || defined(NRE) #ifdef XOTCL_BYTECODE instructions[INST_INITPROC].cmdPtr = (Command *) #endif Index: generic/xotcl.h =================================================================== diff -u -N -r2068ba7298e4ce370b36bdbda513172177f3ee52 -rebd253f47f14822a54b86b379622f6509cbbc4fe --- generic/xotcl.h (.../xotcl.h) (revision 2068ba7298e4ce370b36bdbda513172177f3ee52) +++ generic/xotcl.h (.../xotcl.h) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -131,6 +131,9 @@ #if TCL_MAJOR_VERSION==8 && TCL_MINOR_VERSION<5 # define PRE85 #endif +#if TCL_MAJOR_VERSION==8 && TCL_MINOR_VERSION<6 +# define PRE86 +#endif #if !defined(FORWARD_COMPATIBLE) # if defined(PRE85) @@ -142,6 +145,16 @@ #define XOTCL_NONLEAF_METHOD (ClientData)0x01 +#if defined(PRE86) +# define CONST86 +# define Tcl_GetErrorLine(interp) (interp)->errorLine +# define Tcl_NRCallObjProc(interp, proc, cd, objc, objv) \ + (*(proc))((cd), (interp), (objc), (objv)) +#else +# define NRE +#endif + + /* * A special definition used to allow this header file to be included * in resource files so that they can get obtain version information from Index: generic/xotclInt.h =================================================================== diff -u -N -r5ab730ebd0e769e5f376cc2db8aa22b024a9c498 -rebd253f47f14822a54b86b379622f6509cbbc4fe --- generic/xotclInt.h (.../xotclInt.h) (revision 5ab730ebd0e769e5f376cc2db8aa22b024a9c498) +++ generic/xotclInt.h (.../xotclInt.h) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -238,10 +238,12 @@ # define XOTclMutexUnlock(a) (*(a))-- #endif -#if defined(PRE84) -# define CONST84 -#else -# define CONST84 CONST +#if !defined(CONST84) +# if defined(PRE84) +# define CONST84 +# else +# define CONST84 CONST +# endif #endif #if defined(PRE81) Index: generic/xotclShadow.c =================================================================== diff -u -N -r84396a78ea963f52832233d23dab1d17603a502a -rebd253f47f14822a54b86b379622f6509cbbc4fe --- generic/xotclShadow.c (.../xotclShadow.c) (revision 84396a78ea963f52832233d23dab1d17603a502a) +++ generic/xotclShadow.c (.../xotclShadow.c) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -188,7 +188,9 @@ ov[0] = XOTclGlobalObjects[name]; if (objc > 1) memcpy(ov+1, objv+1, sizeof(Tcl_Obj *)*(objc-1)); - result = (*ti->proc)(ti->cd, interp, objc, ov); + + result = Tcl_NRCallObjProc(interp, ti->proc, ti->cd, objc, ov); + FREE_ON_STACK(ov); return result; } Index: library/lib/changeXOTclVersion.xotcl =================================================================== diff -u -N -r187492dd9e893c1afcb30ca671e94bb4ea25fef1 -rebd253f47f14822a54b86b379622f6509cbbc4fe --- library/lib/changeXOTclVersion.xotcl (.../changeXOTclVersion.xotcl) (revision 187492dd9e893c1afcb30ca671e94bb4ea25fef1) +++ library/lib/changeXOTclVersion.xotcl (.../changeXOTclVersion.xotcl) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -6,7 +6,7 @@ # set XOTCL_MAJOR_VERSION 1 set XOTCL_MINOR_VERSION 6 -set XOTCL_RELEASE_LEVEL .5 +set XOTCL_RELEASE_LEVEL .6 # example settings: # 1.0 Index: tests/testx.xotcl =================================================================== diff -u -N -r2068ba7298e4ce370b36bdbda513172177f3ee52 -rebd253f47f14822a54b86b379622f6509cbbc4fe --- tests/testx.xotcl (.../testx.xotcl) (revision 2068ba7298e4ce370b36bdbda513172177f3ee52) +++ tests/testx.xotcl (.../testx.xotcl) (revision ebd253f47f14822a54b86b379622f6509cbbc4fe) @@ -2978,8 +2978,10 @@ Object o o proc x args {puts r} ::errorCheck [o info body x] "puts r" "Info Body" - ::errorCheck [info body o::x] "puts r" "Info Body" + if {$::tcl_version < "8.6"} { + ::errorCheck [info body o::x] "puts r" "Info Body" + } Object o o proc a {} { my lappend table(i) xxx