diff options
author | Miguel Sofer <miguel.sofer@gmail.com> | 2009-12-10 23:52:30 (GMT) |
---|---|---|
committer | Miguel Sofer <miguel.sofer@gmail.com> | 2009-12-10 23:52:30 (GMT) |
commit | e225192e11ee22d35470bef993063ace4970231b (patch) | |
tree | 61bbed44f7eba044e2ef57f91291e166fd7be2b7 /generic | |
parent | 6702229811b97786ff7f9e400992cdcdd4d7b56e (diff) | |
download | tcl-e225192e11ee22d35470bef993063ace4970231b.zip tcl-e225192e11ee22d35470bef993063ace4970231b.tar.gz tcl-e225192e11ee22d35470bef993063ace4970231b.tar.bz2 |
* generic/tclBasic.c: Full nre-enabling of coroutines
* generic/tclExecute.c: [Bug 2806407]
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclBasic.c | 13 | ||||
-rw-r--r-- | generic/tclExecute.c | 10 |
2 files changed, 7 insertions, 16 deletions
diff --git a/generic/tclBasic.c b/generic/tclBasic.c index d4f905d..d8a449b 100644 --- a/generic/tclBasic.c +++ b/generic/tclBasic.c @@ -16,7 +16,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclBasic.c,v 1.428 2009/12/10 22:38:52 msofer Exp $ + * RCS: @(#) $Id: tclBasic.c,v 1.429 2009/12/10 23:52:30 msofer Exp $ */ #include "tclInt.h" @@ -8736,7 +8736,6 @@ TclNRCoroutineObjCmd( Command *cmdPtr; CoroutineData *corPtr; Tcl_Obj *cmdObjPtr; - TEOV_callback *rootPtr = TOP_CB(interp); const char *fullName; const char *procName; Namespace *nsPtr, *altNsPtr, *cxtNsPtr; @@ -8849,7 +8848,6 @@ TclNRCoroutineObjCmd( * initialize the base cmdFramePtr by setting it to NULL. */ - SAVE_CONTEXT(corPtr->base); corPtr->base.cmdFramePtr = NULL; corPtr->running = NULL_CONTEXT; corPtr->stackLevel = NULL; @@ -8884,14 +8882,7 @@ TclNRCoroutineObjCmd( iPtr->evalFlags |= TCL_EVAL_REDIRECT; TclNREvalObjEx(interp, cmdObjPtr, 0, NULL, 0); - /* - * This should just be returning TCL_OK, to let the coro run in the - * caller's TEBC instance if available. BUT this causes an error in - * TclStackFree, couldn't yet find why. It is a bit of a mistery. - * msofer, 2009-12-08 - */ - - return TclNRRunCallbacks(interp, TCL_OK, rootPtr, 0); + return TCL_OK; } /* diff --git a/generic/tclExecute.c b/generic/tclExecute.c index e2ef7e4..f4a204e 100644 --- a/generic/tclExecute.c +++ b/generic/tclExecute.c @@ -14,7 +14,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclExecute.c,v 1.461 2009/12/10 22:01:48 msofer Exp $ + * RCS: @(#) $Id: tclExecute.c,v 1.462 2009/12/10 23:52:30 msofer Exp $ */ #include "tclInt.h" @@ -2039,8 +2039,9 @@ TclExecuteByteCode( */ corPtr->base.cmdFramePtr = bcFramePtr; - BP->prevBottomPtr = NULL; iPtr->varFramePtr = iPtr->rootFramePtr; + corPtr->callerBP = BP->prevBottomPtr; + BP->prevBottomPtr = NULL; } if (!corPtr->stackLevel) { @@ -2832,13 +2833,12 @@ TclExecuteByteCode( * new one. */ - if (param) { - codePtr = param; + codePtr = param; + if (codePtr) { goto nonRecursiveCallStart; } else { CoroutineData *corPtr = iPtr->execEnvPtr->corPtr; - codePtr = NULL; corPtr->callerBP = BP; goto resumeCoroutine; } |