summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-04-08 18:11:33 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-04-08 18:11:33 (GMT)
commit2bcd186571b8f37c820add859b48f7046260d261 (patch)
tree6dbd95c782b9c5f5d998bac40cd3c6aced5ca61f /generic
parente51453c41298f99bcf7ea71f57c69463d5b904a9 (diff)
downloadtcl-2bcd186571b8f37c820add859b48f7046260d261.zip
tcl-2bcd186571b8f37c820add859b48f7046260d261.tar.gz
tcl-2bcd186571b8f37c820add859b48f7046260d261.tar.bz2
Revise TclNREvalObjv so that pre-resolution of the Command by a caller
does not force suppression of exception handling. Let those be separable demands. Aim is to bring TclObjInvoke*() into the fold.
Diffstat (limited to 'generic')
-rw-r--r--generic/tclBasic.c17
-rw-r--r--generic/tclNamesp.c2
-rw-r--r--generic/tclOOMethod.c2
3 files changed, 14 insertions, 7 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index cde1cb9..22ec6b0 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -4188,10 +4188,6 @@ TclNREvalObjv(
return result;
}
- if (cmdPtr) {
- goto commandFound;
- }
-
/*
* Push records for task to be done on return, in INVERSE order. First, if
* needed, the exception handlers (as they should happen last).
@@ -4201,6 +4197,10 @@ TclNREvalObjv(
TEOV_PushExceptionHandlers(interp, objc, objv, flags);
}
+ if (cmdPtr) {
+ goto commandFound;
+ }
+
/*
* Configure evaluation context to match the requested flags.
*/
@@ -6620,9 +6620,11 @@ TclObjInvoke(
Tcl_Panic("TclObjInvoke: called without TCL_INVOKE_HIDDEN");
}
+#if 1
if (TclInterpReady(interp) == TCL_ERROR) {
return TCL_ERROR;
}
+#endif
cmdName = TclGetString(objv[0]);
hTblPtr = iPtr->hiddenCmdTablePtr;
@@ -6638,6 +6640,7 @@ TclObjInvoke(
}
cmdPtr = Tcl_GetHashValue(hPtr);
+#if 1
/*
* Invoke the command function.
*/
@@ -6669,6 +6672,9 @@ TclObjInvoke(
iPtr->flags &= ~ERR_ALREADY_LOGGED;
}
return result;
+#else
+
+#endif
}
/*
@@ -8243,7 +8249,8 @@ Tcl_NRCmdSwap(
Tcl_Obj *const objv[],
int flags)
{
- return TclNREvalObjv(interp, objc, objv, flags, (Command *) cmd);
+ return TclNREvalObjv(interp, objc, objv, flags|TCL_EVAL_NOERR,
+ (Command *) cmd);
}
/*****************************************************************************
diff --git a/generic/tclNamesp.c b/generic/tclNamesp.c
index aed623a..bdd5386 100644
--- a/generic/tclNamesp.c
+++ b/generic/tclNamesp.c
@@ -1942,7 +1942,7 @@ InvokeImportedNRCmd(
Command *realCmdPtr = dataPtr->realCmdPtr;
TclSkipTailcall(interp);
- return Tcl_NRCmdSwap(interp, (Tcl_Command) realCmdPtr, objc, objv, 0);
+ return TclNREvalObjv(interp, objc, objv, TCL_EVAL_NOERR, realCmdPtr);
}
static int
diff --git a/generic/tclOOMethod.c b/generic/tclOOMethod.c
index 98b4078..bd2744a 100644
--- a/generic/tclOOMethod.c
+++ b/generic/tclOOMethod.c
@@ -1429,7 +1429,7 @@ InvokeForwardMethod(
contextPtr->oPtr->namespacePtr, 0 /* normal lookup */);
}
Tcl_NRAddCallback(interp, FinalizeForwardCall, argObjs, NULL, NULL, NULL);
- return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_INVOKE, cmdPtr);
+ return TclNREvalObjv(interp, len, argObjs, TCL_EVAL_NOERR, cmdPtr);
}
static int