summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authormig <mig>2011-04-07 02:53:55 (GMT)
committermig <mig>2011-04-07 02:53:55 (GMT)
commite58b837d5c172dd8d798ca185b336055ca152600 (patch)
tree5d1acf960b94f58266ce53cde9c6586c98a4c25b /generic
parent97a72f1170cda3aa46a4f8c14f26a9198b16d037 (diff)
downloadtcl-e58b837d5c172dd8d798ca185b336055ca152600.zip
tcl-e58b837d5c172dd8d798ca185b336055ca152600.tar.gz
tcl-e58b837d5c172dd8d798ca185b336055ca152600.tar.bz2
* generic/tclExecute.c (TclCompEvalObj): earlier return if Tip280 gymnastics not needed
Diffstat (limited to 'generic')
-rw-r--r--generic/tclExecute.c76
1 files changed, 37 insertions, 39 deletions
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 6ef4ac7..dc87d70 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -1473,57 +1473,55 @@ TclCompEvalObj(
* information.
*/
- {
+ if (invoker) {
Tcl_HashEntry *hePtr =
Tcl_FindHashEntry(iPtr->lineBCPtr, (char *) codePtr);
if (hePtr) {
ExtCmdLoc *eclPtr = Tcl_GetHashValue(hePtr);
int redo = 0;
+ CmdFrame *ctxPtr = TclStackAlloc(interp,sizeof(CmdFrame));
- if (invoker) {
- CmdFrame *ctxPtr = TclStackAlloc(interp,sizeof(CmdFrame));
- *ctxPtr = *invoker;
-
- if (invoker->type == TCL_LOCATION_BC) {
- /*
- * Note: Type BC => ctx.data.eval.path is not used.
- * ctx.data.tebc.codePtr used instead
- */
-
- TclGetSrcInfoForPc(ctxPtr);
- if (ctxPtr->type == TCL_LOCATION_SOURCE) {
- /*
- * The reference made by 'TclGetSrcInfoForPc' is
- * dead.
- */
-
- Tcl_DecrRefCount(ctxPtr->data.eval.path);
- ctxPtr->data.eval.path = NULL;
- }
- }
+ *ctxPtr = *invoker;
- if (word < ctxPtr->nline) {
+ if (invoker->type == TCL_LOCATION_BC) {
+ /*
+ * Note: Type BC => ctx.data.eval.path is not used.
+ * ctx.data.tebc.codePtr used instead
+ */
+
+ TclGetSrcInfoForPc(ctxPtr);
+ if (ctxPtr->type == TCL_LOCATION_SOURCE) {
/*
- * Note: We do not care if the line[word] is -1. This
- * is a difference and requires a recompile (location
- * changed from absolute to relative, literal is used
- * fixed and through variable)
- *
- * Example:
- * test info-32.0 using literal of info-24.8
- * (dict with ... vs set body ...).
+ * The reference made by 'TclGetSrcInfoForPc' is
+ * dead.
*/
-
- redo = ((eclPtr->type == TCL_LOCATION_SOURCE)
- && (eclPtr->start != ctxPtr->line[word]))
- || ((eclPtr->type == TCL_LOCATION_BC)
- && (ctxPtr->type == TCL_LOCATION_SOURCE));
+
+ Tcl_DecrRefCount(ctxPtr->data.eval.path);
+ ctxPtr->data.eval.path = NULL;
}
-
- TclStackFree(interp, ctxPtr);
}
-
+
+ if (word < ctxPtr->nline) {
+ /*
+ * Note: We do not care if the line[word] is -1. This
+ * is a difference and requires a recompile (location
+ * changed from absolute to relative, literal is used
+ * fixed and through variable)
+ *
+ * Example:
+ * test info-32.0 using literal of info-24.8
+ * (dict with ... vs set body ...).
+ */
+
+ redo = ((eclPtr->type == TCL_LOCATION_SOURCE)
+ && (eclPtr->start != ctxPtr->line[word]))
+ || ((eclPtr->type == TCL_LOCATION_BC)
+ && (ctxPtr->type == TCL_LOCATION_SOURCE));
+ }
+
+ TclStackFree(interp, ctxPtr);
+
if (redo) {
goto recompileObj;
}