From a69ade8a0395cc43c935fd1a8711835bd87e1da8 Mon Sep 17 00:00:00 2001 From: otya128 Date: Mon, 10 Jul 2017 20:53:44 +0900 Subject: [PATCH] Fix CALLBACK --- SMILEBASIC/VM.d | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 2108b04..355aa42 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -76,10 +76,13 @@ struct Callback CallbackType type; Function func; VMSlot slot; + VM vm; size_t slotUnique; int label; - bool isCallable() + bool isCallable(VM vm) { + if (vm != this.vm) + return false; if (type == CallbackType.label) return slot.unique == slotUnique; if (type == CallbackType.function_) @@ -88,7 +91,7 @@ struct Callback } void opCall(VM vm) { - if (!isCallable) + if (!isCallable(vm)) return; if (type == CallbackType.label) { @@ -528,6 +531,7 @@ class VM { slot = currentSlot; } + result.vm = this; result.slot = slot; result.slotUnique = slot.unique; Function func; @@ -2759,7 +2763,7 @@ class CallSprite : Code } auto callback = vm.petitcomputer.sprite.getCallback(vm.petitcomputer.callidx); vm.pc--; - if (!callback.isCallable) + if (!callback.isCallable(vm)) { return; } @@ -2783,7 +2787,7 @@ class CallBG : Code } auto callback = vm.petitcomputer.getBG(vm.petitcomputer.callidx).callback; vm.pc--; - if (!callback.isCallable) + if (!callback.isCallable(vm)) { return; }