diff options
author | Miguel Sofer <miguel.sofer@gmail.com> | 2008-08-17 19:37:04 (GMT) |
---|---|---|
committer | Miguel Sofer <miguel.sofer@gmail.com> | 2008-08-17 19:37:04 (GMT) |
commit | 66b7825d012cdec4bf088bf8c35be432c0ade73a (patch) | |
tree | b9e0527c030a241429a14d5d20be1ef6b52db633 /generic/tclInt.h | |
parent | d49908850f4747e397786cba1c88d3aca348eb36 (diff) | |
download | tcl-66b7825d012cdec4bf088bf8c35be432c0ade73a.zip tcl-66b7825d012cdec4bf088bf8c35be432c0ade73a.tar.gz tcl-66b7825d012cdec4bf088bf8c35be432c0ade73a.tar.bz2 |
* generic/tclBasic.c: Implementation of [coroutine] and [yield]
* generic/tclCmdAH.c: commands (in tcl::unsupported).
* generic/tclCompile.h:
* generic/tclExecute.c:
* generic/tclInt.h:
* tests/unsupported.test:
Diffstat (limited to 'generic/tclInt.h')
-rw-r--r-- | generic/tclInt.h | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/generic/tclInt.h b/generic/tclInt.h index 8992044..c40220f 100644 --- a/generic/tclInt.h +++ b/generic/tclInt.h @@ -15,7 +15,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclInt.h,v 1.390 2008/08/13 23:08:38 das Exp $ + * RCS: @(#) $Id: tclInt.h,v 1.391 2008/08/17 19:37:12 msofer Exp $ */ #ifndef _TCLINT @@ -1330,15 +1330,38 @@ typedef struct ExecStack { * currently active execution stack. */ +typedef struct CorContext { + struct CallFrame *framePtr; + struct CallFrame *varFramePtr; + struct CmdFrame *cmdFramePtr; +} CorContext; + +typedef struct CoroutineData { + struct Command *cmdPtr; + struct ExecEnv *eePtr; + struct ExecEnv *callerEEPtr; + CorContext caller; + CorContext running; + CorContext base; + int *stackLevel; +} CoroutineData; + typedef struct ExecEnv { ExecStack *execStackPtr; /* Points to the first item in the * evaluation stack on the heap. */ Tcl_Obj *constants[2]; /* Pointers to constant "0" and "1" * objs. */ + struct Tcl_Interp *interp; struct TEOV_callback *callbackPtr; /* Top callback in TEOV's stack */ + struct CoroutineData *corPtr; + struct BottomData *bottomPtr; + int rewind; } ExecEnv; +#define COR_IS_SUSPENDED(corPtr) \ + ((corPtr)->stackLevel == NULL) + /* * The definitions for the LiteralTable and LiteralEntry structures. Each * interpreter contains a LiteralTable. It is used to reduce the storage @@ -2523,13 +2546,14 @@ MODULE_SCOPE long tclObjsShared[TCL_MAX_SHARED_OBJ_STATS]; MODULE_SCOPE char * tclEmptyStringRep; MODULE_SCOPE char tclEmptyString; + /* *---------------------------------------------------------------- - * Procedures shared among Tcl modules but not used by the outside world: + * Procedures shared among Tcl modules but not used by the outside world, + * introduced by/for NRE. *---------------------------------------------------------------- */ -/* Introduced by/for NRE */ MODULE_SCOPE Tcl_ObjCmdProc TclNRNamespaceObjCmd; MODULE_SCOPE Tcl_ObjCmdProc TclNRApplyObjCmd; MODULE_SCOPE Tcl_ObjCmdProc TclNRUplevelObjCmd; @@ -2540,6 +2564,14 @@ MODULE_SCOPE Tcl_ObjCmdProc TclNRWhileObjCmd; MODULE_SCOPE Tcl_NRPostProc TclNRForIterCallback; MODULE_SCOPE Tcl_ObjCmdProc TclNRAtProcExitObjCmd; +MODULE_SCOPE Tcl_ObjCmdProc TclNRCoroutineObjCmd; +MODULE_SCOPE Tcl_ObjCmdProc TclNRYieldObjCmd; + +/* + *---------------------------------------------------------------- + * Procedures shared among Tcl modules but not used by the outside world: + *---------------------------------------------------------------- + */ MODULE_SCOPE int TclNREvalCmd(Tcl_Interp * interp, Tcl_Obj * objPtr, int flags); |