summaryrefslogtreecommitdiffstats
path: root/generic/tclResult.c
diff options
context:
space:
mode:
authorferrieux <ferrieux@users.sourceforge.net>2011-08-09 17:01:16 (GMT)
committerferrieux <ferrieux@users.sourceforge.net>2011-08-09 17:01:16 (GMT)
commit653f52ba6008466571d283d523272ae22c2cf2c4 (patch)
tree07db51e401be8d97cacd6e665d64e168ebc4802a /generic/tclResult.c
parent7884058a52af8573e05691c2e1e40fdfa78ab5db (diff)
downloadtcl-653f52ba6008466571d283d523272ae22c2cf2c4.zip
tcl-653f52ba6008466571d283d523272ae22c2cf2c4.tar.gz
tcl-653f52ba6008466571d283d523272ae22c2cf2c4.tar.bz2
[Bug 3386417] avoid a reference loop between the bytecode and its companion errostack when compiling a syntax error.
Diffstat (limited to 'generic/tclResult.c')
-rw-r--r--generic/tclResult.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/generic/tclResult.c b/generic/tclResult.c
index 60bae73..4443cc1 100644
--- a/generic/tclResult.c
+++ b/generic/tclResult.c
@@ -1599,6 +1599,29 @@ Tcl_GetReturnOptions(
/*
*-------------------------------------------------------------------------
*
+ * TclNoErrorStack --
+ *
+ * Removes the -errorstack entry from an options dict to avoid reference cycles
+ *
+ * Results:
+ * The (unshared) argument options dict, modified in -place.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+Tcl_Obj *
+TclNoErrorStack(Tcl_Interp *interp, Tcl_Obj *options)
+{
+ Tcl_Obj **keys = GetKeys();
+
+ Tcl_DictObjRemove(interp, options, keys[KEY_ERRORSTACK]);
+
+ return options;
+}
+
+/*
+ *-------------------------------------------------------------------------
+ *
* Tcl_SetReturnOptions --
*
* Accepts an interp and a dictionary of return options, and sets the