summaryrefslogtreecommitdiffstats
path: root/generic/tclBasic.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2017-04-12 13:36:47 (GMT)
committerdgp <dgp@users.sourceforge.net>2017-04-12 13:36:47 (GMT)
commit736a2956f2bc96ef982e528cda4e0905d858c7b7 (patch)
tree1a3a88e3800b4e20589af252610944895d51e33c /generic/tclBasic.c
parentb84f5f3a45069293685516738b37cbfdcb5553a1 (diff)
parent59f0c070d62204e43e5d39d6810a444218ebebb1 (diff)
downloadtcl-736a2956f2bc96ef982e528cda4e0905d858c7b7.zip
tcl-736a2956f2bc96ef982e528cda4e0905d858c7b7.tar.gz
tcl-736a2956f2bc96ef982e528cda4e0905d858c7b7.tar.bz2
merge trunk
Diffstat (limited to 'generic/tclBasic.c')
-rw-r--r--generic/tclBasic.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c
index b4e9d4c..f19d541 100644
--- a/generic/tclBasic.c
+++ b/generic/tclBasic.c
@@ -1071,7 +1071,7 @@ Tcl_CallWhenDeleted(
Interp *iPtr = (Interp *) interp;
static Tcl_ThreadDataKey assocDataCounterKey;
int *assocDataCounterPtr =
- Tcl_GetThreadData(&assocDataCounterKey, (int)sizeof(int));
+ Tcl_GetThreadData(&assocDataCounterKey, sizeof(int));
int isNew;
char buffer[32 + TCL_INTEGER_SPACE];
AssocData *dPtr = ckalloc(sizeof(AssocData));
@@ -8801,6 +8801,35 @@ TclNRCoroutineActivateCallback(
/*
*----------------------------------------------------------------------
*
+ * TclNREvalList --
+ *
+ * Callback to invoke command as list, used in order to delayed
+ * processing of canonical list command in sane environment.
+ *
+ *----------------------------------------------------------------------
+ */
+
+static int
+TclNREvalList(
+ ClientData data[],
+ Tcl_Interp *interp,
+ int result)
+{
+ int objc;
+ Tcl_Obj **objv;
+ Tcl_Obj *listPtr = data[0];
+
+ Tcl_IncrRefCount(listPtr);
+
+ TclMarkTailcall(interp);
+ TclNRAddCallback(interp, TclNRReleaseValues, listPtr, NULL, NULL,NULL);
+ TclListObjGetElements(NULL, listPtr, &objc, &objv);
+ return TclNREvalObjv(interp, objc, objv, 0, NULL);
+}
+
+/*
+ *----------------------------------------------------------------------
+ *
* NRCoroInjectObjCmd --
*
* Implementation of [::tcl::unsupported::inject] command.
@@ -8852,7 +8881,8 @@ NRCoroInjectObjCmd(
*/
iPtr->execEnvPtr = corPtr->eePtr;
- TclNREvalObjEx(interp, Tcl_NewListObj(objc-2, objv+2), 0, NULL, INT_MIN);
+ TclNRAddCallback(interp, TclNREvalList, Tcl_NewListObj(objc-2, objv+2),
+ NULL, NULL, NULL);
iPtr->execEnvPtr = savedEEPtr;
return TCL_OK;