summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiguel Sofer <miguel.sofer@gmail.com>2016-01-30 23:48:17 (GMT)
committerMiguel Sofer <miguel.sofer@gmail.com>2016-01-30 23:48:17 (GMT)
commitf468c8d414ed86b6cc49e569f0632e020ffe7b61 (patch)
tree69d8170f71e67cc76ac56a9b4c92b0b248d94cc8
parent55d12b5a36a763cfe022a118af56fbaa8855bec2 (diff)
downloadtcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.zip
tcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.tar.gz
tcl-f468c8d414ed86b6cc49e569f0632e020ffe7b61.tar.bz2
NRE API change: callbacks now have three void* arguments (prev. 4)
-rw-r--r--generic/tcl.decls3
-rw-r--r--generic/tclBasic.c83
-rw-r--r--generic/tclCmdAH.c42
-rw-r--r--generic/tclCmdIL.c19
-rw-r--r--generic/tclCmdMZ.c37
-rw-r--r--generic/tclDecls.h4
-rw-r--r--generic/tclDictObj.c27
-rw-r--r--generic/tclEnsemble.c3
-rw-r--r--generic/tclExecute.c52
-rw-r--r--generic/tclIOUtil.c3
-rw-r--r--generic/tclInt.h26
-rw-r--r--generic/tclInterp.c4
-rw-r--r--generic/tclNRE.h20
-rw-r--r--generic/tclNamesp.c6
-rw-r--r--generic/tclOO.c20
-rw-r--r--generic/tclOOBasic.c12
-rw-r--r--generic/tclOOCall.c7
-rw-r--r--generic/tclOOMethod.c4
-rw-r--r--generic/tclProc.c8
-rw-r--r--generic/tclTest.c8
20 files changed, 234 insertions, 154 deletions
diff --git a/generic/tcl.decls b/generic/tcl.decls
index 054e3ad..2fe1368 100644
--- a/generic/tcl.decls
+++ b/generic/tcl.decls
@@ -2147,8 +2147,7 @@ declare 586 {
}
declare 587 {
void Tcl_NRAddCallback(Tcl_Interp *interp, Tcl_NRPostProc *postProcPtr,
- ClientData data0, ClientData data1, ClientData data2,
- ClientData data3)
+ ClientData data0, ClientData data1, ClientData data2)
}
# For use by NR extenders, to have a simple way to also provide a (required!)
# classic objProc
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index 295a74c..0732ae5 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -4081,7 +4081,8 @@ TclNREvalObjv(
* requested Command struct to be invoked. */
{
Interp *iPtr = (Interp *) interp;
-
+ ClientData *extra;
+
/*
* data[1] stores a marker for use by tailcalls; it will be set to 1 by
* command redirectors (imports, alias, ensembles) so that tailcall skips
@@ -4092,20 +4093,21 @@ TclNREvalObjv(
if (iPtr->deferredCallbacks) {
iPtr->deferredCallbacks = NULL;
} else if (iPtr->cmdSourcePtr) {
- TclNRAddCallback(interp, NRCommand, iPtr->cmdSourcePtr,
- NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRCommand, iPtr->cmdSourcePtr,NULL, NULL);
iPtr->cmdSourcePtr = NULL;
} else {
- TclNRAddCallback(interp, NRCommand, NULL,
- NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRCommand, NULL, NULL, NULL);
}
iPtr->numLevels++;
/* Can't use NRE_JUMP, as this function does not have a callback signature */
- TclNRAddCallback(interp, EvalObjvCore, cmdPtr, INT2PTR(flags),
- INT2PTR(objc), objv);
+
+ NRE_newExtra(extra);
+ extra[0] = INT2PTR(objc);
+ extra[1] = (ClientData) objv;
+ TclNRAddCallback(interp, EvalObjvCore, cmdPtr, INT2PTR(flags), extra);
return TCL_OK;
}
@@ -4117,12 +4119,15 @@ EvalObjvCore(
{
Command *cmdPtr = NULL, *preCmdPtr = data[0];
int flags = PTR2INT(data[1]);
- int objc = PTR2INT(data[2]);
- Tcl_Obj **objv = data[3];
+ ClientData *extra = data[2];
+ int objc = PTR2INT(extra[0]);
+ Tcl_Obj **objv = extra[1];
Interp *iPtr = (Interp *) interp;
Namespace *lookupNsPtr = NULL;
int enterTracesDone = 0;
+ NRE_freeExtra(extra);
+
/*
* Push records for task to be done on return, in INVERSE order. First, if
* needed, the exception handlers (as they should happen last).
@@ -4250,8 +4255,11 @@ EvalObjvCore(
*/
cmdPtr->refCount++;
+ NRE_newExtra(extra);
+ extra[0] = cmdPtr;
+ extra[1] = objv;
TclNRAddCallback(interp, TEOV_RunLeaveTraces, INT2PTR(objc),
- commandPtr, cmdPtr, objv);
+ commandPtr, extra);
}
#ifdef USE_DTRACE
@@ -4267,7 +4275,7 @@ EvalObjvCore(
}
if ((TCL_DTRACE_CMD_RETURN_ENABLED() || TCL_DTRACE_CMD_RESULT_ENABLED())
&& objc) {
- TclNRAddCallback(interp, DTraceCmdReturn, objv[0], NULL, NULL, NULL);
+ TclNRAddCallback(interp, DTraceCmdReturn, objv[0], NULL, NULL);
}
if (TCL_DTRACE_CMD_ENTRY_ENABLED() && objc) {
TCL_DTRACE_CMD_ENTRY(TclGetString(objv[0]), objc - 1,
@@ -4312,7 +4320,7 @@ TclNRSetRoot(
(TOP_CB(interp)->data[0] == NULL)));
if (!first) {
- TclNRAddCallback(interp, NRRoot, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRRoot, NULL, NULL, NULL);
}
}
@@ -4325,7 +4333,7 @@ NRRoot(
/* Reset itself so that NRRunCallbacks can detect it and stop (without
* running it again)*/
- TclNRAddCallback(interp, NRRoot, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRRoot, NULL, NULL, NULL);
return result;
}
@@ -4344,7 +4352,7 @@ NRCommand(
*/
if (data[1] && (data[1] != INT2PTR(1))) {
- TclNRAddCallback(interp, TclNRTailcallEval, data[1], NULL, NULL, NULL);
+ TclNRAddCallback(interp, TclNRTailcallEval, data[1], NULL, NULL);
}
/* OPT ??
@@ -4400,7 +4408,7 @@ TEOV_PushExceptionHandlers(
*/
TclNRAddCallback(interp, TEOV_Error, INT2PTR(objc),
- (ClientData) objv, NULL, NULL);
+ (ClientData) objv, NULL);
}
if (iPtr->numLevels == 1) {
@@ -4409,7 +4417,7 @@ TEOV_PushExceptionHandlers(
*/
TclNRAddCallback(interp, TEOV_Exception, INT2PTR(iPtr->evalFlags),
- NULL, NULL, NULL);
+ NULL, NULL);
}
}
@@ -4425,7 +4433,7 @@ TEOV_SwitchVarFrame(
*/
TclNRAddCallback(interp, TEOV_RestoreVarFrame, iPtr->varFramePtr, NULL,
- NULL, NULL);
+ NULL);
iPtr->varFramePtr = iPtr->rootFramePtr;
}
@@ -4590,7 +4598,7 @@ TEOV_NotFound(
}
TclSkipTailcall(interp);
TclNRAddCallback(interp, TEOV_NotFoundCallback, INT2PTR(handlerObjc),
- newObjv, savedNsPtr, NULL);
+ newObjv, savedNsPtr);
return TclNREvalObjv(interp, newObjc, newObjv, TCL_EVAL_NOERR, NULL);
}
@@ -4684,11 +4692,14 @@ TEOV_RunLeaveTraces(
int traceCode = TCL_OK;
int objc = PTR2INT(data[0]);
Tcl_Obj *commandPtr = data[1];
- Command *cmdPtr = data[2];
- Tcl_Obj **objv = data[3];
+ ClientData * extra = data [2];
+ Command *cmdPtr = extra[0];
+ Tcl_Obj **objv = extra[1];
int length;
const char *command = Tcl_GetStringFromObj(commandPtr, &length);
+ NRE_freeExtra(extra);
+
if (!(cmdPtr->flags & CMD_IS_DELETED)) {
if (cmdPtr->flags & CMD_HAS_EXEC_TRACES){
traceCode = TclCheckExecutionTraces(interp, command, length,
@@ -5305,7 +5316,7 @@ TclNREvalObjEx(
Tcl_IncrRefCount(listPtr);
TclMarkTailcall(interp);
- TclNRAddCallback(interp, TEOEx_ListCallback, listPtr, objPtr, NULL, NULL);
+ TclNRAddCallback(interp, TEOEx_ListCallback, listPtr, objPtr, NULL);
ListObjGetElements(listPtr, objc, objv);
return TclNREvalObjv(interp, objc, objv, flags, NULL);
@@ -5334,7 +5345,7 @@ TclNREvalObjEx(
codePtr = TclCompileObj(interp, objPtr);
TclNRAddCallback(interp, TEOEx_ByteCodeCallback, savedVarFramePtr,
- objPtr, INT2PTR(allowExceptions), NULL);
+ objPtr, INT2PTR(allowExceptions));
return TclNRExecuteByteCode(interp, codePtr);
}
@@ -5814,7 +5825,7 @@ TclNRInvoke(
/* Avoid the exception-handling brain damage when numLevels == 0 . */
iPtr->numLevels++;
- Tcl_NRAddCallback(interp, NRPostInvoke, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRPostInvoke, NULL, NULL, NULL);
/*
* Normal command resolution of objv[0] isn't going to find cmdPtr.
@@ -7405,8 +7416,7 @@ TclMarkTailcall(
Interp *iPtr = (Interp *) interp;
if (iPtr->deferredCallbacks == NULL) {
- TclNRAddCallback(interp, NRCommand, NULL, NULL,
- NULL, NULL);
+ TclNRAddCallback(interp, NRCommand, NULL, NULL, NULL);
iPtr->deferredCallbacks = TOP_CB(interp);
}
}
@@ -7425,7 +7435,7 @@ void
TclPushTailcallPoint(
Tcl_Interp *interp)
{
- TclNRAddCallback(interp, NRCommand, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRCommand, NULL, NULL, NULL);
((Interp *) interp)->numLevels++;
}
@@ -7586,7 +7596,7 @@ TclNRTailcallEval(
*/
TclMarkTailcall(interp);
- TclNRAddCallback(interp, TailcallCleanup, listPtr, NULL, NULL,NULL);
+ TclNRAddCallback(interp, TailcallCleanup, listPtr, NULL, NULL);
iPtr->lookupNsPtr = (Namespace *) nsPtr;
return TclNREvalObjv(interp, objc-1, objv+1, 0, NULL);
@@ -7608,13 +7618,12 @@ Tcl_NRAddCallback(
Tcl_NRPostProc *postProcPtr,
ClientData data0,
ClientData data1,
- ClientData data2,
- ClientData data3)
+ ClientData data2)
{
if (!(postProcPtr)) {
Tcl_Panic("Adding a callback without an objProc?!");
}
- TclNRAddCallback(interp, postProcPtr, data0, data1, data2, data3);
+ TclNRAddCallback(interp, postProcPtr, data0, data1, data2);
}
/*
@@ -7668,7 +7677,7 @@ TclNRYieldObjCmd(
NRE_ASSERT(!COR_IS_SUSPENDED(corPtr));
TclNRAddCallback(interp, TclNRCoroutineActivateCallback, corPtr,
- clientData, NULL, NULL);
+ clientData, NULL);
return TCL_OK;
}
@@ -7741,7 +7750,7 @@ RewindCoroutine(
corPtr->eePtr->rewind = 1;
TclNRAddCallback(interp, RewindCoroutineCallback, state,
- NULL, NULL, NULL);
+ NULL, NULL);
return TclNRInterpCoroutine(corPtr, interp, 0, NULL);
}
@@ -7882,7 +7891,7 @@ TclNRCoroutineActivateCallback(
*/
TclNRAddCallback(interp, NRCoroutineCallerCallback, corPtr,
- NULL, NULL, NULL);
+ NULL, NULL);
/*
* Record the stackLevel at which the resume is happening, then swap
@@ -8040,7 +8049,7 @@ TclNRInterpCoroutine(
}
TclNRAddCallback(interp, TclNRCoroutineActivateCallback, corPtr,
- NULL, NULL, NULL);
+ NULL, NULL);
return TCL_OK;
}
@@ -8151,7 +8160,7 @@ TclNRCoroutineObjCmd(
iPtr->execEnvPtr = corPtr->eePtr;
TclNRAddCallback(interp, NRCoroutineExitCallback, corPtr,
- NULL, NULL, NULL);
+ NULL, NULL);
/* insure that the command is looked up in the correct namespace */
iPtr->lookupNsPtr = lookupNsPtr;
@@ -8167,7 +8176,7 @@ TclNRCoroutineObjCmd(
*/
TclNRAddCallback(interp, TclNRCoroutineActivateCallback, corPtr,
- NULL, NULL, NULL);
+ NULL, NULL);
return TCL_OK;
}
@@ -8272,7 +8281,7 @@ TclNewCallback(
}
eePtr->NRStack = this;
eePtr->callbackPtr = &this->items[NRE_STACK_SIZE];
- TclNRAddCallback(interp, NRStackBottom, orig, NULL, NULL, NULL);
+ TclNRAddCallback(interp, NRStackBottom, orig, NULL, NULL);
return --eePtr->callbackPtr;
}
diff --git a/generic/tclCmdAH.c b/generic/tclCmdAH.c
index 698782a..d7545d1 100644
--- a/generic/tclCmdAH.c
+++ b/generic/tclCmdAH.c
@@ -181,7 +181,7 @@ TclNRCatchObjCmd(
}
TclNRAddCallback(interp, CatchObjCmdCallback, INT2PTR(objc),
- varNamePtr, optionVarNamePtr, NULL);
+ varNamePtr, optionVarNamePtr);
return TclNREvalObjEx(interp, objv[1], 0);
}
@@ -634,7 +634,7 @@ TclNREvalObjCmd(
objPtr = Tcl_ConcatObj(objc-1, objv+1);
}
- TclNRAddCallback(interp, EvalCmdErrMsg, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, EvalCmdErrMsg, NULL, NULL, NULL);
return TclNREvalObjEx(interp, objPtr, 0);
}
@@ -733,10 +733,10 @@ TclNRExprObjCmd(
Tcl_IncrRefCount(resultPtr);
if (objc == 2) {
objPtr = objv[1];
- TclNRAddCallback(interp, ExprCallback, resultPtr, NULL, NULL, NULL);
+ TclNRAddCallback(interp, ExprCallback, resultPtr, NULL, NULL);
} else {
objPtr = Tcl_ConcatObj(objc-1, objv+1);
- TclNRAddCallback(interp, ExprCallback, resultPtr, objPtr, NULL, NULL);
+ TclNRAddCallback(interp, ExprCallback, resultPtr, objPtr, NULL);
}
return Tcl_NRExprObj(interp, objPtr, resultPtr);
@@ -2258,7 +2258,7 @@ TclNRForObjCmd(
}
TclNRAddCallback(interp, ForSetupCallback, /*cond*/ objv[2],
- /*body*/ objv[4], /*next*/ objv[3], NULL);
+ /*body*/ objv[4], /*next*/ objv[3]);
return TclNREvalObjEx(interp, objv[1], 0);
}
@@ -2274,8 +2274,7 @@ ForSetupCallback(
}
NRE_NEXT(result);
}
- NRE_JUMP(interp, TclNRForIterCallback, data[0], data[1], data[2],
- data[3]);
+ NRE_JUMP(interp, TclNRForIterCallback, data[0], data[1], data[2]);
}
int
@@ -2285,7 +2284,8 @@ TclNRForIterCallback(
int result)
{
Tcl_Obj *boolObj;
-
+ ClientData *extra;
+
switch (result) {
case TCL_OK:
case TCL_CONTINUE:
@@ -2296,9 +2296,11 @@ TclNRForIterCallback(
*/
Tcl_ResetResult(interp);
+ NRE_newExtra(extra);
+ extra[0] = data[2];
TclNewObj(boolObj);
- TclNRAddCallback(interp, ForCondCallback, data[0], data[1], data[2],
- boolObj);
+ extra[1] = boolObj;
+ TclNRAddCallback(interp, ForCondCallback, data[0], data[1], extra);
return Tcl_NRExprObj(interp, /*cond*/ data[0], boolObj);
case TCL_BREAK:
result = TCL_OK;
@@ -2317,9 +2319,13 @@ ForCondCallback(
Tcl_Interp *interp,
int result)
{
- Tcl_Obj *boolObj = data[3];
+ ClientData *extra = data[2];
+ Tcl_Obj *boolObj = extra[1];
int value;
+ data[2] = extra[0];
+ NRE_freeExtra(extra);
+
if (result != TCL_OK) {
Tcl_DecrRefCount(boolObj);
NRE_NEXT(result);
@@ -2335,10 +2341,10 @@ ForCondCallback(
if (/*next*/ data[2]) {
TclNRAddCallback(interp, ForNextCallback, data[0], data[1],
- data[2], NULL);
+ data[2]);
} else {
TclNRAddCallback(interp, TclNRForIterCallback, data[0], data[1],
- data[2], NULL);
+ data[2]);
}
return TclNREvalObjEx(interp, /*body*/ data[1], 0);
}
@@ -2353,12 +2359,12 @@ ForNextCallback(
if ((result == TCL_OK) || (result == TCL_CONTINUE)) {
TclNRAddCallback(interp, ForPostNextCallback, data[0], data[1],
- data[2], NULL);
+ data[2]);
return TclNREvalObjEx(interp, next, 0);
}
TclNRAddCallback(interp, TclNRForIterCallback, data[0], data[1],
- data[2], NULL);
+ data[2]);
NRE_NEXT(result);
}
@@ -2375,7 +2381,7 @@ ForPostNextCallback(
NRE_NEXT(result);
}
TclNRAddCallback(interp, TclNRForIterCallback, data[0], data[1],
- data[2], NULL);
+ data[2]);
NRE_NEXT(result);
}
@@ -2546,7 +2552,7 @@ EachloopCmd(
goto done;
}
- TclNRAddCallback(interp, ForeachLoopStep, statePtr, NULL, NULL, NULL);
+ TclNRAddCallback(interp, ForeachLoopStep, statePtr, NULL, NULL);
return TclNREvalObjEx(interp, objv[objc-1], 0);
}
@@ -2611,7 +2617,7 @@ ForeachLoopStep(
goto done;
}
- TclNRAddCallback(interp, ForeachLoopStep, statePtr, NULL, NULL, NULL);
+ TclNRAddCallback(interp, ForeachLoopStep, statePtr, NULL, NULL);
return TclNREvalObjEx(interp, statePtr->bodyPtr, 0);
}
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index a0e8113..87fca8f 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -216,7 +216,8 @@ TclNRIfObjCmd(
Tcl_Obj *const objv[]) /* Argument objects. */
{
Tcl_Obj *boolObj;
-
+ ClientData *extra;
+
if (objc <= 1) {
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"wrong # args: no expression after \"%s\" argument",
@@ -231,9 +232,12 @@ TclNRIfObjCmd(
* to execute if the expression is true.
*/
+ NRE_newExtra(extra);
TclNewObj(boolObj);
+ extra[0] = INT2PTR(1);
+ extra[1] = boolObj;
Tcl_NRAddCallback(interp, IfConditionCallback, INT2PTR(objc),
- (ClientData) objv, INT2PTR(1), boolObj);
+ (ClientData) objv, extra);
return Tcl_NRExprObj(interp, objv[1], boolObj);
}
@@ -245,11 +249,13 @@ IfConditionCallback(
{
int objc = PTR2INT(data[0]);
Tcl_Obj *const *objv = data[1];
- int i = PTR2INT(data[2]);
- Tcl_Obj *boolObj = data[3];
+ ClientData *extra = data[2];
+ int i = PTR2INT(extra[0]);
+ Tcl_Obj *boolObj = extra[1];
int value, thenScriptIndex = 0;
const char *clause;
+ NRE_freeExtra(extra);
if (result != TCL_OK) {
TclDecrRefCount(boolObj);
NRE_NEXT(result);
@@ -314,9 +320,12 @@ IfConditionCallback(
return TCL_ERROR;
}
if (!thenScriptIndex) {
+ NRE_newExtra(extra);
TclNewObj(boolObj);
+ extra[0] = INT2PTR(i);
+ extra[1] = boolObj;
Tcl_NRAddCallback(interp, IfConditionCallback, data[0], data[1],
- INT2PTR(i), boolObj);
+ extra);
return Tcl_NRExprObj(interp, objv[i], boolObj);
}
}
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index ad138ab..e0ce478 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -3914,7 +3914,7 @@ TclNRSwitchObjCmd(
}
Tcl_NRAddCallback(interp, SwitchPostProc, (ClientData) pattern,
- NULL, NULL, NULL);
+ NULL, NULL);
return TclNREvalObjEx(interp, objv[j], 0);
}
@@ -4136,6 +4136,7 @@ TclNRTryObjCmd(
{
Tcl_Obj *bodyObj, *handlersObj, *finallyObj = NULL;
int i, bodyShared, haveHandlers, dummy, code;
+ ClientData *extra;
static const char *const handlerNames[] = {
"finally", "on", "trap", NULL
};
@@ -4268,8 +4269,11 @@ TclNRTryObjCmd(
* Execute the body.
*/
- Tcl_NRAddCallback(interp, TryPostBody, handlersObj, finallyObj,
- (ClientData)objv, INT2PTR(objc));
+ NRE_newExtra(extra);
+ extra[0] = (ClientData)objv;
+ extra[1] = INT2PTR(objc);
+ Tcl_NRAddCallback(interp, TryPostBody, handlersObj, finallyObj, extra);
+
return TclNREvalObjEx(interp, bodyObj, 0);
}
@@ -4336,9 +4340,11 @@ TryPostBody(
handlersObj = data[0];
finallyObj = data[1];
- objv = data[2];
- objc = PTR2INT(data[3]);
+ ClientData *extra = data[2];
+ objv = extra[0];
+ objc = PTR2INT(extra[1]);
+ NRE_freeExtra(extra);
cmdObj = objv[0];
/*
@@ -4482,8 +4488,11 @@ TryPostBody(
*/
handlerBodyObj = info[4];
- Tcl_NRAddCallback(interp, TryPostHandler, objv, options, info[0],
- INT2PTR((finallyObj == NULL) ? 0 : objc - 1));
+
+ NRE_newExtra(extra);
+ extra[0] = info[0];
+ extra[1] = INT2PTR((finallyObj == NULL) ? 0 : objc - 1);
+ Tcl_NRAddCallback(interp, TryPostHandler, objv, options, extra);
Tcl_DecrRefCount(handlersObj);
return TclNREvalObjEx(interp, handlerBodyObj, 0);
@@ -4509,8 +4518,7 @@ TryPostBody(
*/
if (finallyObj != NULL) {
- Tcl_NRAddCallback(interp, TryPostFinal, resultObj, options, cmdObj,
- NULL);
+ Tcl_NRAddCallback(interp, TryPostFinal, resultObj, options, cmdObj);
return TclNREvalObjEx(interp, finallyObj, 0);
}
@@ -4549,9 +4557,11 @@ TryPostHandler(
objv = data[0];
options = data[1];
- handlerKindObj = data[2];
- finally = PTR2INT(data[3]);
+ ClientData *extra = data[2];
+ handlerKindObj = extra[0];
+ finally = PTR2INT(extra[1]);
+ NRE_freeExtra(extra);
cmdObj = objv[0];
finallyObj = finally ? objv[finally] : 0;
@@ -4590,8 +4600,7 @@ TryPostHandler(
*/
if (finallyObj != NULL) {
- Tcl_NRAddCallback(interp, TryPostFinal, resultObj, options, cmdObj,
- NULL);
+ Tcl_NRAddCallback(interp, TryPostFinal, resultObj, options, cmdObj);
/* The 'finally' script is always the last argument word. */
return TclNREvalObjEx(interp, finallyObj, 0);
@@ -4713,7 +4722,7 @@ TclNRWhileObjCmd(
* We reuse [for]'s callback, passing a NULL for the 'next' script.
*/
TclNRAddCallback(interp, TclNRForIterCallback, /*cond*/ objv[1],
- /*body*/ objv[2], /*next*/ NULL, NULL);
+ /*body*/ objv[2], /*next*/ NULL);
return TCL_OK;
}
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 054c21a..3ae7454 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -1694,7 +1694,7 @@ EXTERN int Tcl_NRCmdSwap(Tcl_Interp *interp, Tcl_Command cmd,
EXTERN void Tcl_NRAddCallback(Tcl_Interp *interp,
Tcl_NRPostProc *postProcPtr,
ClientData data0, ClientData data1,
- ClientData data2, ClientData data3);
+ ClientData data2);
/* 588 */
EXTERN int Tcl_NRCallObjProc(Tcl_Interp *interp,
Tcl_ObjCmdProc *objProc,
@@ -2432,7 +2432,7 @@ typedef struct TclStubs {
int (*tcl_NREvalObj) (Tcl_Interp *interp, Tcl_Obj *objPtr, int flags); /* 584 */
int (*tcl_NREvalObjv) (Tcl_Interp *interp, int objc, Tcl_Obj *const objv[], int flags); /* 585 */
int (*tcl_NRCmdSwap) (Tcl_Interp *interp, Tcl_Command cmd, int objc, Tcl_Obj *const objv[], int flags); /* 586 */
- void (*tcl_NRAddCallback) (Tcl_Interp *interp, Tcl_NRPostProc *postProcPtr, ClientData data0, ClientData data1, ClientData data2, ClientData data3); /* 587 */
+ void (*tcl_NRAddCallback) (Tcl_Interp *interp, Tcl_NRPostProc *postProcPtr, ClientData data0, ClientData data1, ClientData data2); /* 587 */
int (*tcl_NRCallObjProc) (Tcl_Interp *interp, Tcl_ObjCmdProc *objProc, ClientData clientData, int objc, Tcl_Obj *const objv[]); /* 588 */
unsigned (*tcl_GetFSDeviceFromStat) (const Tcl_StatBuf *statPtr); /* 589 */
unsigned (*tcl_GetFSInodeFromStat) (const Tcl_StatBuf *statPtr); /* 590 */
diff --git a/generic/tclDictObj.c b/generic/tclDictObj.c
index 4bba648..6da9539 100644
--- a/generic/tclDictObj.c
+++ b/generic/tclDictObj.c
@@ -2361,6 +2361,7 @@ DictForNRCmd(
Tcl_Obj **varv, *keyObj, *valueObj;
Tcl_DictSearch *searchPtr;
int varc, done;
+ ClientData *extra;
if (objc != 4) {
Tcl_WrongNumArgs(interp, 1, objv,
@@ -2427,8 +2428,11 @@ DictForNRCmd(
* Run the script.
*/
+ NRE_newExtra(extra);
+ extra[0] = valueVarObj;
+ extra[1] = scriptObj;
TclNRAddCallback(interp, DictForLoopCallback, searchPtr, keyVarObj,
- valueVarObj, scriptObj);
+ extra);
return TclNREvalObjEx(interp, scriptObj, 0);
/*
@@ -2452,11 +2456,14 @@ DictForLoopCallback(
{
Tcl_DictSearch *searchPtr = data[0];
Tcl_Obj *keyVarObj = data[1];
- Tcl_Obj *valueVarObj = data[2];
- Tcl_Obj *scriptObj = data[3];
+ ClientData *extra = data[2];
+ Tcl_Obj *valueVarObj = extra[0];
+ Tcl_Obj *scriptObj = extra[1];
Tcl_Obj *keyObj, *valueObj;
int done;
+ NRE_freeExtra(extra);
+
/*
* Process the result from the previous execution of the script body.
*/
@@ -2508,8 +2515,11 @@ DictForLoopCallback(
* Run the script.
*/
+ NRE_newExtra(extra);
+ extra[0] = valueVarObj;
+ extra[1] = scriptObj;
TclNRAddCallback(interp, DictForLoopCallback, searchPtr, keyVarObj,
- valueVarObj, scriptObj);
+ extra);
return TclNREvalObjEx(interp, scriptObj, 0);
/*
@@ -2628,7 +2638,7 @@ DictMapNRCmd(
* Run the script.
*/
- TclNRAddCallback(interp, DictMapLoopCallback, storagePtr, NULL,NULL,NULL);
+ TclNRAddCallback(interp, DictMapLoopCallback, storagePtr, NULL,NULL);
return TclNREvalObjEx(interp, storagePtr->scriptObj, 0);
/*
@@ -2716,7 +2726,7 @@ DictMapLoopCallback(
* Run the script.
*/
- TclNRAddCallback(interp, DictMapLoopCallback, storagePtr, NULL,NULL,NULL);
+ TclNRAddCallback(interp, DictMapLoopCallback, storagePtr, NULL,NULL);
return TclNREvalObjEx(interp, storagePtr->scriptObj, 0);
/*
@@ -3201,7 +3211,7 @@ DictUpdateCmd(
objPtr = Tcl_NewListObj(objc-3, objv+2);
Tcl_IncrRefCount(objPtr);
Tcl_IncrRefCount(objv[1]);
- TclNRAddCallback(interp, FinalizeDictUpdate, objv[1], objPtr, NULL,NULL);
+ TclNRAddCallback(interp, FinalizeDictUpdate, objv[1], objPtr, NULL);
return TclNREvalObjEx(interp, objv[objc-1], 0);
}
@@ -3350,8 +3360,7 @@ DictWithCmd(
Tcl_IncrRefCount(pathPtr);
}
Tcl_IncrRefCount(objv[1]);
- TclNRAddCallback(interp, FinalizeDictWith, objv[1], keysPtr, pathPtr,
- NULL);
+ TclNRAddCallback(interp, FinalizeDictWith, objv[1], keysPtr, pathPtr);
return TclNREvalObjEx(interp, objv[objc-1], 0);
}
diff --git a/generic/tclEnsemble.c b/generic/tclEnsemble.c
index 89b7381..faf3ab7 100644
--- a/generic/tclEnsemble.c
+++ b/generic/tclEnsemble.c
@@ -1882,8 +1882,7 @@ NsEnsembleImplementationCmdNR(
2 + ensemblePtr->numParameters;
iPtr->ensembleRewrite.numInsertedObjs =
prefixObjc + ensemblePtr->numParameters;
- TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL,
- NULL);
+ TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL);
} else {
register int ni = 2 + ensemblePtr->numParameters
- iPtr->ensembleRewrite.numInsertedObjs;
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 9ca623f..42f4073 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -136,7 +136,7 @@ typedef struct TEBCdata {
do { \
esPtr->tosPtr = tosPtr; \
TclNRAddCallback(interp, TEBCresume, \
- TD, pc, INT2PTR(cleanup), NULL); \
+ TD, pc, INT2PTR(cleanup)); \
} while (0)
#define TEBC_DATA_DIG() \
@@ -1401,7 +1401,7 @@ Tcl_ExprObj(
TclNRSetRoot(interp);
TclNewObj(resultPtr);
Tcl_NRAddCallback(interp, CopyCallback, resultPtrPtr, resultPtr,
- NULL, NULL);
+ NULL);
Tcl_NRExprObj(interp, objPtr, resultPtr);
return TclNRRunCallbacks(interp, TCL_OK);
}
@@ -1460,7 +1460,7 @@ Tcl_NRExprObj(
codePtr = CompileExprObj(interp, objPtr);
Tcl_NRAddCallback(interp, ExprObjCallback, state, resultPtr,
- NULL, NULL);
+ NULL);
return TclNRExecuteByteCode(interp, codePtr);
}
@@ -1935,7 +1935,7 @@ TclNRExecuteByteCode(
#endif
TclNRAddCallback(interp, TEBCresume, TD, /* pc */ NULL,
- /* cleanup */ INT2PTR(0), NULL);
+ /* cleanup */ INT2PTR(0));
return TCL_OK;
}
@@ -2393,11 +2393,11 @@ TEBCresume(
#if 1
// FIXME! Why??
TclNRAddCallback(interp, TclNRCoroutineActivateCallback, corPtr,
- INT2PTR(yieldParameter), NULL, NULL);
+ INT2PTR(yieldParameter), NULL);
return TCL_OK;
#else
NRE_JUMP(interp, TclNRCoroutineActivateCallback, corPtr,
- INT2PTR(yieldParameter), NULL, NULL);
+ INT2PTR(yieldParameter), NULL);
#endif
}
@@ -2881,7 +2881,7 @@ TEBCresume(
TEBC_YIELD();
TclMarkTailcall(interp);
- TclNRAddCallback(interp, TclClearRootEnsemble, NULL,NULL,NULL,NULL);
+ TclNRAddCallback(interp, TclClearRootEnsemble, NULL,NULL,NULL);
return TclNREvalObjEx(interp, objPtr, TCL_EVAL_INVOKE);
/*
@@ -4602,14 +4602,20 @@ TEBCresume(
TclPushTailcallPoint(interp);
oPtr = contextPtr->oPtr;
- if (oPtr->flags & FILTER_HANDLING) {
- TclNRAddCallback(interp, FinalizeOONextFilter,
- framePtr, contextPtr, INT2PTR(contextPtr->index),
- INT2PTR(contextPtr->skip));
- } else {
- TclNRAddCallback(interp, FinalizeOONext,
- framePtr, contextPtr, INT2PTR(contextPtr->index),
- INT2PTR(contextPtr->skip));
+ {
+ ClientData *extra;
+
+ NRE_newExtra(extra);
+ extra[0] = INT2PTR(contextPtr->index);
+ extra[1] = INT2PTR(contextPtr->skip);
+
+ if (oPtr->flags & FILTER_HANDLING) {
+ TclNRAddCallback(interp, FinalizeOONextFilter,
+ framePtr, contextPtr, extra);
+ } else {
+ TclNRAddCallback(interp, FinalizeOONext,
+ framePtr, contextPtr, extra);
+ }
}
contextPtr->skip = skip;
contextPtr->index = newDepth;
@@ -7738,7 +7744,8 @@ FinalizeOONext(
{
Interp *iPtr = (Interp *) interp;
CallContext *contextPtr = data[1];
-
+ ClientData *extra = data[2];
+
/*
* Reset the variable lookup frame.
*/
@@ -7750,9 +7757,11 @@ FinalizeOONext(
* and want to operate in the outer context again.
*/
- contextPtr->index = PTR2INT(data[2]);
- contextPtr->skip = PTR2INT(data[3]);
+ contextPtr->index = PTR2INT(extra[0]);
+ contextPtr->skip = PTR2INT(extra[1]);
contextPtr->oPtr->flags &= ~FILTER_HANDLING;
+
+ NRE_freeExtra(extra);
NRE_NEXT(result);
}
@@ -7764,7 +7773,8 @@ FinalizeOONextFilter(
{
Interp *iPtr = (Interp *) interp;
CallContext *contextPtr = data[1];
-
+ ClientData *extra = data[2];
+
/*
* Reset the variable lookup frame.
*/
@@ -7776,8 +7786,8 @@ FinalizeOONextFilter(
* and want to operate in the outer context again.
*/
- contextPtr->index = PTR2INT(data[2]);
- contextPtr->skip = PTR2INT(data[3]);
+ contextPtr->index = PTR2INT(extra[0]);
+ contextPtr->skip = PTR2INT(extra[1]);
contextPtr->oPtr->flags |= FILTER_HANDLING;
NRE_NEXT(result);
}
diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c
index 5336189..144b6ed 100644
--- a/generic/tclIOUtil.c
+++ b/generic/tclIOUtil.c
@@ -1960,8 +1960,7 @@ TclNREvalFile(
*/
iPtr->evalFlags |= TCL_EVAL_FILE;
- TclNRAddCallback(interp, EvalFileCallback, oldScriptFile, pathPtr, objPtr,
- NULL);
+ TclNRAddCallback(interp, EvalFileCallback, oldScriptFile, pathPtr, objPtr);
return TclNREvalObjEx(interp, objPtr, 0);
}
diff --git a/generic/tclInt.h b/generic/tclInt.h
index fbfa5a7..4a3a0c1 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -4356,6 +4356,32 @@ MODULE_SCOPE Tcl_PackageInitProc Procbodytest_SafeInit;
{enum { ct_assert_value = 1/(!!(e)) };}
/*
+ *----------------------------------------------------------------
+ * Allocator for small structs (<=sizeof(Tcl_Obj)) using the Tcl_Obj pool.
+ * Only checked at compile time.
+ *
+ * ONLY USE FOR CONSTANT nBytes.
+ *
+ * DO NOT LET THEM CROSS THREAD BOUNDARIES
+ *----------------------------------------------------------------
+ */
+
+#define TclSmallAlloc(nbytes, memPtr) \
+ do { \
+ Tcl_Obj *objPtr; \
+ TCL_CT_ASSERT((nbytes)<=sizeof(Tcl_Obj)); \
+ TclIncrObjsAllocated(); \
+ TclAllocObjStorage(objPtr); \
+ memPtr = (ClientData) (objPtr); \
+ } while (0)
+
+#define TclSmallFree(memPtr) \
+ do { \
+ TclFreeObjStorage((Tcl_Obj *) (memPtr)); \
+ TclIncrObjsFreed(); \
+ } while (0)
+
+/*
* Support for Clang Static Analyzer <http://clang-analyzer.llvm.org>
*/
diff --git a/generic/tclInterp.c b/generic/tclInterp.c
index f285d99..4c118e2 100644
--- a/generic/tclInterp.c
+++ b/generic/tclInterp.c
@@ -1841,7 +1841,7 @@ AliasNRCmd(
*/
if (isRootEnsemble) {
- TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, TclClearRootEnsemble, NULL, NULL, NULL);
}
TclSkipTailcall(interp);
return Tcl_NREvalObj(interp, listPtr, flags);
@@ -3065,7 +3065,7 @@ SlaveInvokeHidden(
TclNRSetRoot(slaveInterp);
}
Tcl_NRAddCallback(interp, NRPostInvokeHidden, slaveInterp,
- NULL, NULL, NULL);
+ NULL, NULL);
return TclNRInvoke(NULL, slaveInterp, objc, objv);
} else {
Namespace *nsPtr, *dummy1, *dummy2;
diff --git a/generic/tclNRE.h b/generic/tclNRE.h
index 74b5997..03532df 100644
--- a/generic/tclNRE.h
+++ b/generic/tclNRE.h
@@ -23,26 +23,30 @@ typedef struct NRE_stack {
struct NRE_stack *next;
} NRE_stack;
+#define NRE_newExtra(ptr) \
+ TclSmallAlloc(5*sizeof(ClientData), ptr)
+#define NRE_freeExtra(ptr) TclSmallFree(ptr)
+
/*
* Inline versions of Tcl_NRAddCallback and friends
*/
#define TOP_CB(iPtr) (((Interp *)(iPtr))->execEnvPtr->callbackPtr)
-#define TclNRAddCallback(interp,postProcPtr,data0,data1,data2,data3) \
+#define TclNRAddCallback(interp,postProcPtr,data0,data1,data2) \
do { \
NRE_callback *cbPtr; \
ALLOC_CB(interp, cbPtr); \
- INIT_CB(cbPtr, postProcPtr,data0,data1,data2,data3); \
+ INIT_CB(cbPtr, postProcPtr,data0,data1,data2); \
} while (0)
-#define INIT_CB(cbPtr, postProcPtr,data0,data1,data2,data3) \
+#define INIT_CB(cbPtr, postProcPtr,data0,data1,data2) \
do { \
cbPtr->procPtr = (postProcPtr); \
cbPtr->data[0] = (ClientData)(data0); \
cbPtr->data[1] = (ClientData)(data1); \
cbPtr->data[2] = (ClientData)(data2); \
- cbPtr->data[3] = (ClientData)(data3); \
+ cbPtr->data[3] = NULL; \
} while (0)
#define POP_CB(interp, cbPtr) \
@@ -65,15 +69,15 @@ typedef struct NRE_stack {
#define NRE_TRAMPOLINE 0
#if NRE_TRAMPOLINE
-#define NRE_JUMP(interp,postProcPtr,data0,data1,data2,data3) \
- TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2),(data3)); \
+#define NRE_JUMP(interp,postProcPtr,data0,data1,data2) \
+ TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2)); \
NRE_NEXT(TCL_OK)
#define NRE_NEXT(result) \
return (result)
#else
/* no trampoline, optimized sibcalls */
-#define NRE_JUMP(interp,postProcPtr,data0,data1,data2,data3) \
- TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2),(data3)); \
+#define NRE_JUMP(interp,postProcPtr,data0,data1,data2) \
+ TclNRAddCallback((interp),(postProcPtr),(data0),(data1),(data2)); \
NRE_NEXT(TCL_OK)
#define NRE_NEXT(result) \
do { /* optimized indirect sibling calls?! */ \
diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c
index b8c447e..f51a709 100644
--- a/generic/tclNamesp.c
+++ b/generic/tclNamesp.c
@@ -3335,8 +3335,7 @@ NRNamespaceEvalCmd(
objPtr = Tcl_ConcatObj(objc-2, objv+2);
}
- TclNRAddCallback(interp, NsEval_Callback, namespacePtr, "eval",
- NULL, NULL);
+ TclNRAddCallback(interp, NsEval_Callback, namespacePtr, "eval", NULL);
return TclNREvalObjEx(interp, objPtr, 0);
}
@@ -3777,8 +3776,7 @@ NRNamespaceInscopeCmd(
Tcl_DecrRefCount(listPtr); /* We're done with the list object. */
}
- TclNRAddCallback(interp, NsEval_Callback, namespacePtr, "inscope",
- NULL, NULL);
+ TclNRAddCallback(interp, NsEval_Callback, namespacePtr, "inscope", NULL);
return TclNREvalObjEx(interp, cmdObjPtr, 0);
}
diff --git a/generic/tclOO.c b/generic/tclOO.c
index d08273b..4350dcc 100644
--- a/generic/tclOO.c
+++ b/generic/tclOO.c
@@ -1751,7 +1751,8 @@ TclNRNewObjectInstance(
CallContext *contextPtr;
Tcl_InterpState state;
Object *oPtr;
-
+ ClientData *extra;
+
/*
* Check if we're going to create an object over an existing command;
* that's not allowed.
@@ -1825,8 +1826,10 @@ TclNRNewObjectInstance(
*/
AddRef(oPtr);
- TclNRAddCallback(interp, FinalizeAlloc, contextPtr, oPtr, state,
- objectPtr);
+ NRE_newExtra(extra);
+ extra[0] = state;
+ extra[1] = objectPtr;
+ TclNRAddCallback(interp, FinalizeAlloc, contextPtr, oPtr, extra);
TclPushTailcallPoint(interp);
return TclOOInvokeContext(contextPtr, interp, objc, objv);
}
@@ -1839,8 +1842,11 @@ FinalizeAlloc(
{
CallContext *contextPtr = data[0];
Object *oPtr = data[1];
- Tcl_InterpState state = data[2];
- Tcl_Object *objectPtr = data[3];
+ ClientData *extra = data[2];
+ Tcl_InterpState state = extra[0];
+ Tcl_Object *objectPtr = extra[1];
+
+ NRE_freeExtra(extra);
/*
* It's an error if the object was whacked in the constructor. Force this
@@ -2631,7 +2637,7 @@ TclOOObjectCmdCore(
* for the duration.
*/
- TclNRAddCallback(interp, FinalizeObjectCall, contextPtr, NULL,NULL,NULL);
+ TclNRAddCallback(interp, FinalizeObjectCall, contextPtr, NULL,NULL);
return TclOOInvokeContext(contextPtr, interp, objc, objv);
}
@@ -2785,7 +2791,7 @@ TclNRObjectContextInvokeNext(
*/
TclNRAddCallback(interp, FinalizeNext, contextPtr,
- INT2PTR(contextPtr->index), INT2PTR(contextPtr->skip), NULL);
+ INT2PTR(contextPtr->index), INT2PTR(contextPtr->skip));
contextPtr->index++;
contextPtr->skip = skip;
diff --git a/generic/tclOOBasic.c b/generic/tclOOBasic.c
index 8e04c19..856660a 100644
--- a/generic/tclOOBasic.c
+++ b/generic/tclOOBasic.c
@@ -46,7 +46,7 @@ static inline Tcl_Object *
AddConstructionFinalizer(
Tcl_Interp *interp)
{
- TclNRAddCallback(interp, FinalizeConstruction, NULL, NULL, NULL, NULL);
+ TclNRAddCallback(interp, FinalizeConstruction, NULL, NULL, NULL);
return (Tcl_Object *) &(TOP_CB(interp)->data[0]);
}
@@ -112,7 +112,7 @@ TclOO_Class_Constructor(
Tcl_IncrRefCount(invoke[1]);
Tcl_IncrRefCount(invoke[2]);
TclNRAddCallback(interp, DecrRefsPostClassConstructor,
- invoke, NULL, NULL, NULL);
+ invoke, NULL, NULL);
/*
* Tricky point: do not want the extra reported level in the Tcl stack
@@ -353,7 +353,7 @@ TclOO_Object_Destroy(
contextPtr->callPtr->flags |= DESTRUCTOR;
contextPtr->skip = 0;
TclNRAddCallback(interp, AfterNRDestructor, contextPtr,
- NULL, NULL, NULL);
+ NULL, NULL);
TclPushTailcallPoint(interp);
return TclOOInvokeContext(contextPtr, interp, 0, NULL);
}
@@ -443,7 +443,7 @@ TclOO_Object_Eval(
* the script completes.
*/
- TclNRAddCallback(interp, FinalizeEval, object, NULL, NULL, NULL);
+ TclNRAddCallback(interp, FinalizeEval, object, NULL, NULL);
return TclNREvalObjEx(interp, scriptPtr, 0);
}
@@ -797,7 +797,7 @@ TclOONextObjCmd(
* that this is like [uplevel 1] and not [eval].
*/
- TclNRAddCallback(interp, NextRestoreFrame, framePtr, NULL,NULL,NULL);
+ TclNRAddCallback(interp, NextRestoreFrame, framePtr, NULL,NULL);
iPtr->varFramePtr = framePtr->callerVarPtr;
return TclNRObjectContextInvokeNext(interp, context, objc, objv, 1);
}
@@ -868,7 +868,7 @@ TclOONextToObjCmd(
*/
TclNRAddCallback(interp, NextRestoreFrame, framePtr,
- contextPtr, INT2PTR(contextPtr->index), NULL);
+ contextPtr, INT2PTR(contextPtr->index));
contextPtr->index = i-1;
iPtr->varFramePtr = framePtr->callerVarPtr;
return TclNRObjectContextInvokeNext(interp,
diff --git a/generic/tclOOCall.c b/generic/tclOOCall.c
index 1c91db6..e3e0126 100644
--- a/generic/tclOOCall.c
+++ b/generic/tclOOCall.c
@@ -283,8 +283,7 @@ TclOOInvokeContext(
* this call is finished.
*/
- TclNRAddCallback(interp, FinalizeMethodRefs, contextPtr, NULL, NULL,
- NULL);
+ TclNRAddCallback(interp, FinalizeMethodRefs, contextPtr, NULL, NULL);
}
/*
@@ -292,9 +291,9 @@ TclOOInvokeContext(
*/
if (contextPtr->oPtr->flags & FILTER_HANDLING) {
- TclNRAddCallback(interp, SetFilterFlags, contextPtr, NULL,NULL,NULL);
+ TclNRAddCallback(interp, SetFilterFlags, contextPtr, NULL,NULL);
} else {
- TclNRAddCallback(interp, ResetFilterFlags,contextPtr,NULL,NULL,NULL);
+ TclNRAddCallback(interp, ResetFilterFlags,contextPtr,NULL,NULL);
}
if (isFilter || contextPtr->callPtr->flags & FILTER_HANDLING) {
contextPtr->oPtr->flags |= FILTER_HANDLING;
diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c
index f7fb180..aa56efa 100644
--- a/generic/tclOOMethod.c
+++ b/generic/tclOOMethod.c
@@ -602,7 +602,7 @@ InvokeProcedureMethod(
* Now invoke the body of the method.
*/
- TclNRAddCallback(interp, FinalizePMCall, pmPtr, context, fdPtr, NULL);
+ TclNRAddCallback(interp, FinalizePMCall, pmPtr, context, fdPtr);
return TclNRInterpProcCore(interp, fdPtr->nameObj,
Tcl_ObjectContextSkippedArgs(context), fdPtr->errProc);
}
@@ -1273,7 +1273,7 @@ InvokeForwardMethod(
Tcl_ListObjGetElements(NULL, fmPtr->prefixObj, &numPrefixes, &prefixObjs);
argObjs = InitEnsembleRewrite(interp, objc, objv, skip,
numPrefixes, prefixObjs, &len);
- Tcl_NRAddCallback(interp, FinalizeForwardCall, argObjs, NULL, NULL, NULL);
+ Tcl_NRAddCallback(interp, FinalizeForwardCall, argObjs, NULL, NULL);
((Interp *)interp)->lookupNsPtr
= (Namespace *) contextPtr->oPtr->namespacePtr;
return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_NOERR, NULL);
diff --git a/generic/tclProc.c b/generic/tclProc.c
index 277fbf0..67b6bfc 100644
--- a/generic/tclProc.c
+++ b/generic/tclProc.c
@@ -901,8 +901,7 @@ TclNRUplevelObjCmd(
objPtr = Tcl_ConcatObj(objc, objv);
}
- TclNRAddCallback(interp, Uplevel_Callback, savedVarFramePtr, NULL, NULL,
- NULL);
+ TclNRAddCallback(interp, Uplevel_Callback, savedVarFramePtr, NULL, NULL);
return TclNREvalObjEx(interp, objPtr, 0);
}
@@ -1695,8 +1694,7 @@ TclNRInterpProcCore(
procPtr->refCount++;
codePtr = procPtr->bodyPtr->internalRep.twoPtrValue.ptr1;
- TclNRAddCallback(interp, InterpProcNR2, procNameObj, errorProc,
- NULL, NULL);
+ TclNRAddCallback(interp, InterpProcNR2, procNameObj, errorProc, NULL);
return TclNRExecuteByteCode(interp, codePtr);
}
@@ -2483,7 +2481,7 @@ TclNRApplyObjCmd(
result = TclPushProcCallFrame(procPtr, interp, objc, objv, 1);
if (result == TCL_OK) {
- TclNRAddCallback(interp, ApplyNR2, extraPtr, NULL, NULL, NULL);
+ TclNRAddCallback(interp, ApplyNR2, extraPtr, NULL, NULL);
result = TclNRInterpProcCore(interp, objv[1], 2, &MakeLambdaError);
}
return result;
diff --git a/generic/tclTest.c b/generic/tclTest.c
index baf54ec..4a9a0bd 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -6575,13 +6575,13 @@ NREUnwind_callback(
{
if (data[0] == INT2PTR(-1)) {
TclNRAddCallback(interp, NREUnwind_callback, NRE_depth(), INT2PTR(-1),
- INT2PTR(-1), NULL);
+ INT2PTR(-1));
} else if (data[1] == INT2PTR(-1)) {
TclNRAddCallback(interp, NREUnwind_callback, data[0], NRE_depth(),
- INT2PTR(-1), NULL);
+ INT2PTR(-1));
} else if (data[2] == INT2PTR(-1)) {
TclNRAddCallback(interp, NREUnwind_callback, data[0], data[1],
- NRE_depth(), NULL);
+ NRE_depth());
} else {
Tcl_Obj *idata[3];
idata[0] = Tcl_NewIntObj((int) (data[1] - data[0]));
@@ -6605,7 +6605,7 @@ TestNREUnwind(
*/
TclNRAddCallback(interp, NREUnwind_callback, INT2PTR(-1), INT2PTR(-1),
- INT2PTR(-1), NULL);
+ INT2PTR(-1));
return TCL_OK;
}