#include "oo.h"
#include "vm.h"
#include "object.h"
-#include "shreduler_private.h"
#include "driver.h"
+#include "shreduler_private.h"
+#include "instr.h" // unwind
ANN void shreduler_set_loop(const Shreduler s, const m_bool loop) {
s->loop = loop < 0 ? 0 : 1;
}
ANN VM_Shred shreduler_get(const Shreduler s) {
- VM* vm = s->vm;
+ Driver *bbq = s->bbq;
struct ShredTick_ *tk = s->list;
if(!tk) {
if(!vector_size(&s->shreds) && !s->loop)
- vm->bbq->is_running = 0;
+ bbq->is_running = 0;
return NULL;
}
- const m_float time = (m_float)vm->bbq->pos + (m_float).5;
+ const m_float time = (m_float)bbq->pos + (m_float).5;
if(tk->wake_time <= time) {
if((s->list = tk->next))
s->list->prev = NULL;
out->tick->parent->child.ptr = NULL;
}
}
-#include "instr.h"
+
ANN static void unwind(const VM_Shred shred) {
VM_Code code = shred->code;
while(1) {
}
ANN void shredule(const Shreduler s, const VM_Shred shred, const m_float wake_time) {
- const m_float time = wake_time + (m_float)s->vm->bbq->pos;
+ const m_float time = wake_time + (m_float)s->bbq->pos;
struct ShredTick_ *tk = shred->tick;
tk->wake_time = time;
if(s->list) {
}
VM* new_vm(void) {
- VM* vm = (VM*)xcalloc(1, sizeof(VM));
- vm->shreduler = (Shreduler)xcalloc(1, sizeof(struct Shreduler_));
- vm->shreduler->vm = vm;
- vector_init(&vm->shreduler->shreds);
+ VM* vm = (VM*)mp_alloc(VM);
vector_init(&vm->ugen);
vm->bbq = new_driver();
+ vm->shreduler = (Shreduler)mp_alloc(Shreduler);
+ vector_init(&vm->shreduler->shreds);
+ vm->shreduler->bbq = vm->bbq;
gw_seed(vm->rand, (uint64_t)time(NULL));
return vm;
}
vector_release(&vm->ugen);
if(vm->bbq)
free_driver(vm->bbq, vm);
- xfree(vm->shreduler);
- free(vm);
+ mp_free(Shreduler, vm->shreduler);
+ mp_free(VM, vm);
}
ANN m_uint vm_add_shred(const VM* vm, const VM_Shred shred) {
(m_int)(*(m_float*)(reg-SZ_INT))); \
DISPATCH()
-ANN void vm_run(const VM* vm) { /* lgtm [cpp/use-of-goto] */
+ANN void vm_run(const VM* vm) { // lgtm [cpp/use-of-goto]
static const void* dispatch[] = {
&®setimm,
&®pushimm, &®pushfloat, &®pushother, &®pushaddr,