From ebe7cfc96d8d03998cc3df2030e3d56733082640 Mon Sep 17 00:00:00 2001 From: mig Date: Sun, 27 Mar 2011 22:43:42 +0000 Subject: * generic/tclBasic.c (TclNREvalObjEx): fix performance issue, notably apparent in tclbench's 'LIST lset foreach'. Many thanks to twylite for patiently researching the issue and explaining it to me: a missing Tcl_ResetObjResult that causes unwanted sharing of the current result Tcl_Obj. --- ChangeLog | 8 ++++++++ generic/tclBasic.c | 3 +++ 2 files changed, 11 insertions(+) diff --git a/ChangeLog b/ChangeLog index cb9f5c3..23b91b7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-03-27 Miguel Sofer + + * generic/tclBasic.c (TclNREvalObjEx): fix performance issue, + notably apparent in tclbench's "LIST lset foreach". Many thanks to + twylite for patiently researching the issue and explaining it to + me: a missing Tcl_ResetObjResult that causes unwanted sharing of + the current result Tcl_Obj. + 2011-03-26 Donal K. Fellows * generic/tclNamesp.c (Tcl_Export, Tcl_Import, DoImport): More diff --git a/generic/tclBasic.c b/generic/tclBasic.c index 5f2b301..b34209b 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -6018,6 +6018,9 @@ TclNREvalObjEx( * iPtr->varFramePtr in case * TCL_EVAL_GLOBAL was set. */ + if (TclInterpReady(interp) != TCL_OK) { + return TCL_ERROR; + } if (flags & TCL_EVAL_GLOBAL) { savedVarFramePtr = iPtr->varFramePtr; iPtr->varFramePtr = iPtr->rootFramePtr; -- cgit v0.12