diff options
| author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-04-20 06:15:55 (GMT) |
|---|---|---|
| committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2017-04-20 06:15:55 (GMT) |
| commit | 3d3574a29acb65e49229c127cff1e875d7977c91 (patch) | |
| tree | 5a7f5ba1d04a2a3b12b0d8dd0b9f2468cd7eafe0 /generic/tclBasic.c | |
| parent | 3d42a8913e2e9598c4a6aeba195d14261826b7c7 (diff) | |
| parent | d48b6bfcd6c717eca2710e41f09129ab78b2a20f (diff) | |
| download | tcl-tip_312.zip tcl-tip_312.tar.gz tcl-tip_312.tar.bz2 | |
merge trunktip_312
Diffstat (limited to 'generic/tclBasic.c')
| -rw-r--r-- | generic/tclBasic.c | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index aae7ab6..154c555 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -8770,6 +8770,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. @@ -8821,7 +8850,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; |
