/*#io
docCopyright("Steve Dekorte", 2002)
docLicense("BSD revised")
*/
#ifndef IoCoroutine_DEFINED
#define IoCoroutine_DEFINED 1
#include "IoVMApi.h"
#include "IoState.h"
#include "Common.h"
#include "Coro.h"
#ifdef __cplusplus
extern "C" {
#endif
#define ISCOROUTINE(self) IoObject_hasCloneFunc_(self, (TagCloneFunc *)IoCoroutine_rawClone)
typedef IoObject IoCoroutine;
typedef struct
{
Coro *cid;
Stack *ioStack;
int debuggingOn;
} IoCoroutineData;
IOVM_API IoCoroutine *IoCoroutine_proto(void *state);
IOVM_API void IoCoroutine_protoFinish(IoCoroutine *self);
IOVM_API IoCoroutine *IoCoroutine_rawClone(IoCoroutine *self);
IOVM_API IoCoroutine *IoCoroutine_new(void *state);
IOVM_API void IoCoroutine_free(IoCoroutine *self);
IOVM_API void IoCoroutine_mark(IoCoroutine *self);
Stack *IoCoroutine_rawIoStack(IoCoroutine *self);
IOVM_API void IoCoroutine_rawShow(IoCoroutine *self);
IOVM_API IoObject *IoCoroutine_main(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API void *IoCoroutine_cid(IoObject *self);
// label
//void IoCoroutine_rawSetLabel_(IoCoroutine *self, IoSymbol *s);
//IoObject *IoCoroutine_rawLabel(IoCoroutine *self);
IOVM_API IoObject *IoCoroutine_setLabel(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_label(IoObject *self, IoObject *locals, IoMessage *m);
// runTarget
IOVM_API void IoCoroutine_rawSetRunTarget_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawRunTarget(IoObject *self);
// runMessage
IOVM_API void IoCoroutine_rawSetRunMessage_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawRunMessage(IoObject *self);
// runLocals
IOVM_API void IoCoroutine_rawSetRunLocals_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawRunLocals(IoObject *self);
// parent
IOVM_API void IoCoroutine_rawSetParentCoroutine_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawParentCoroutine(IoObject *self);
// exception
IOVM_API void IoCoroutine_rawSetResult_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawResult(IoObject *self);
// exception
IOVM_API void IoCoroutine_rawRemoveException(IoObject *self);
IOVM_API void IoCoroutine_rawSetException_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawException(IoObject *self);
// ioStack
IOVM_API IoObject *IoCoroutine_ioStack(IoCoroutine *self, IoObject *locals, IoMessage *m);
IOVM_API int IoCoroutine_rawIoStackSize(IoObject *self);
// raw
IOVM_API void IoCoroutine_rawRun(IoObject *self);
IOVM_API void IoCoroutine_clearStack(IoObject *self);
IOVM_API void IoCoroutine_try(IoObject *self, IoObject *target, IoObject *locals, IoMessage *message);
IOVM_API IoCoroutine *IoCoroutine_newWithTry(void *state,
IoObject *target,
IoObject *locals,
IoMessage *message);
IOVM_API void IoCoroutine_raiseError(IoCoroutine *self, IoSymbol *description, IoMessage *m);
// methods
IOVM_API IoObject *IoCoroutine_implementation(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_run(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_callStack(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_isCurrent(IoObject *self, IoObject *locals, IoMessage *m);
// runTarget
IOVM_API void IoCoroutine_rawSetRunTarget_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawRunTarget(IoObject *self);
// message
IOVM_API void IoCoroutine_rawSetRunMessage_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawRunMessage(IoObject *self);
// parent
IOVM_API void IoCoroutine_rawSetParentCoroutine_(IoObject *self, IoObject *v);
IOVM_API IoObject *IoCoroutine_rawParentCoroutine(IoObject *self);
// try
IOVM_API IoObject *IoCoroutine_start(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_rawResume(IoObject *self);
IOVM_API IoObject *IoCoroutine_resume(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_isCurrent(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_currentCoroutine(IoObject *self, IoObject *locals, IoMessage *m);
// stack trace
IOVM_API IoObject *IoObject_callStack(IoObject *self);
IOVM_API void IoObject_appendStackEntryDescription(IoObject *self, ByteArray *ba);
IOVM_API void IoCoroutine_rawPrint(IoObject *self);
// debugging
IOVM_API int IoCoroutine_rawDebuggingOn(IoObject *self);
IOVM_API IoObject *IoCoroutine_setMessageDebugging(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoObject_performWithDebugger(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API IoObject *IoCoroutine_callStack(IoObject *self, IoObject *locals, IoMessage *m);
IOVM_API void IoCoroutine_rawPrintBackTrace(IoObject *self);
#ifdef __cplusplus
}
#endif
#endif
syntax highlighted by Code2HTML, v. 0.9.1