]> Nishi Git Mirror - gwion.git/commitdiff
:art: better vm_force_run
authorfennecdjay <fennecdjay@gmail.com>
Wed, 8 May 2024 19:08:40 +0000 (21:08 +0200)
committerfennecdjay <fennecdjay@gmail.com>
Wed, 8 May 2024 19:08:40 +0000 (21:08 +0200)
src/emit/comptime.c
src/vm/vm.c

index 0206a9528fdddbde6c577de089f026b8b72d2ed4..ce0054b522eec8c492353e2150ac200470ee5c9c 100644 (file)
@@ -24,7 +24,7 @@ ANN2(1) void comptime_end(const Emitter emit, const size_t size, void *data) {
   const VM_Shred shred = new_vm_shred(emit->gwion->mp, code);
   vm_add_shred(vm, shred);
   const bool loop = vm->shreduler->loop;
-  vm_run(vm);
-  vm->bbq->is_running = true;
+  vm->shreduler->loop = false;
+  vm_force_run(vm);
   vm->shreduler->loop = loop;
 }
index 624241bab9d18c75f7d9323055fbad7f53f87c30..5613b511ecda172d96c57f955dea456718e4435a 100644 (file)
@@ -1657,8 +1657,15 @@ ANN void vm_run_audio(const VM *vm) {
 
 void vm_force_run(const VM *vm) {
   const bool is_running = vm->shreduler->bbq->is_running;
+  struct ShredTick_ *curr = vm->shreduler->curr;
+  VM_Shred shred = (VM_Shred) vector_back(&vm->shreduler->active_shreds);
+  vm->shreduler->curr = shred->tick;
+  const m_uint pos = vm->shreduler->bbq->pos;
+  vm->shreduler->bbq->pos = 0;
   vm_run(vm);
+  vm->shreduler->curr = curr;
   vm->shreduler->bbq->is_running = is_running;
+  vm->shreduler->bbq->pos = pos;
 }
 
 VM *new_vm(MemPool p, const bool audio) {