#include "IoState.h" #include "IoObject.h" void IoState_show(IoState *self) { printf("--- state ----------------------------------\n"); printf("State:\n"); /* printf("black:\n"); IoObjectGroup_show(self->blackGroup); printf("\n"); printf("gray:\n"); IoObjectGroup_show(self->grayGroup); printf("\n"); printf("white:\n"); IoObjectGroup_show(self->whiteGroup); printf("\n"); */ printf("stacks:\n"); printf("\n"); } IoObject *IoState_replacePerformFunc_with_(IoState *self, TagPerformFunc *oldFunc, TagPerformFunc *newFunc) { IoObject *proto = Hash_firstValue(self->primitives); while (proto) { if (proto->tag->performFunc == oldFunc) { proto->tag->performFunc = newFunc; } proto = Hash_nextValue(self->primitives); } return NULL; } void IoState_debuggingOn(IoState *self) { IoState_replacePerformFunc_with_(self, (TagPerformFunc *)IoObject_perform, (TagPerformFunc *)IoObject_performWithDebugger); } void IoState_debuggingOff(IoState *self) { IoState_replacePerformFunc_with_(self, (TagPerformFunc *)IoObject_performWithDebugger, (TagPerformFunc *)IoObject_perform); } int IoState_hasDebuggingCoroutine(IoState *self) { return 1; // hack awaiting decision on how to change this } void IoState_updateDebuggingMode(IoState *self) { if (IoState_hasDebuggingCoroutine(self)) { IoState_debuggingOn(self); } else { IoState_debuggingOff(self); } }