Subject: fix for perf bug detected by Kieran (https://groups.google.com/forum/?fromgroups#!topic/comp.lang.tcl/vfpI3bc-DkQ)

From: mig <mig>
Date: Mon, 3 Jun 2013 16:10:30 +0000

---
 ChangeLog            |  8 ++++++++
 generic/tclExecute.c | 11 ++++++-----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0661925..9d5e542 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-06-03  Miguel Sofer  <[email-masked]>
+
+	* generic/tclExecute.c: fix for perf bug detected by Kieran
+	(https://groups.google.com/forum/?fromgroups#!topic/comp.lang.tcl/vfpI3bc-DkQ),
+	diagnosed by dgp to be a close relative of [Bug 781585], which was
+	fixed by commit	[f46fb50cb3]. This bug was introduced by myself in
+	commit [cbfe055d8c]. 
+
 2013-05-28 Harald Oehlmann  <[email-masked]>
 
 	* library/msgcat/msgcat.tcl: [Bug 3036566]: Also get locale from
diff --git a/generic/tclExecute.c b/generic/tclExecute.c
index 0de8e3c..8fb8e63 100644
--- a/generic/tclExecute.c
+++ b/generic/tclExecute.c
@@ -2424,11 +2424,6 @@ TclExecuteByteCode(
 	    if (result == TCL_OK) {
 		Tcl_Obj *objPtr;
 
-#ifndef TCL_COMPILE_DEBUG
-		if (*(pc+pcAdjustment) == INST_POP) {
-		    NEXT_INST_V((pcAdjustment+1), objc, 0);
-		}
-#endif
 		/*
 		 * Push the call's object result and continue execution with
 		 * the next instruction.
@@ -2455,6 +2450,12 @@ TclExecuteByteCode(
 		TclNewObj(objPtr);
 		Tcl_IncrRefCount(objPtr);
 		iPtr->objResultPtr = objPtr;
+#ifndef TCL_COMPILE_DEBUG
+		if (*(pc+pcAdjustment) == INST_POP) {
+		    TclDecrRefCount(objResultPtr);
+		    NEXT_INST_V((pcAdjustment+1), objc, 0);
+		}
+#endif
 		NEXT_INST_V(pcAdjustment, objc, -1);
 	    } else {
 		cleanup = objc;
-- 
cgit v0.12