1
0

Fix CALLBACK

This commit is contained in:
otya128
2017-07-10 20:53:44 +09:00
parent 47d064a62b
commit a69ade8a03

View File

@@ -76,10 +76,13 @@ struct Callback
CallbackType type; CallbackType type;
Function func; Function func;
VMSlot slot; VMSlot slot;
VM vm;
size_t slotUnique; size_t slotUnique;
int label; int label;
bool isCallable() bool isCallable(VM vm)
{ {
if (vm != this.vm)
return false;
if (type == CallbackType.label) if (type == CallbackType.label)
return slot.unique == slotUnique; return slot.unique == slotUnique;
if (type == CallbackType.function_) if (type == CallbackType.function_)
@@ -88,7 +91,7 @@ struct Callback
} }
void opCall(VM vm) void opCall(VM vm)
{ {
if (!isCallable) if (!isCallable(vm))
return; return;
if (type == CallbackType.label) if (type == CallbackType.label)
{ {
@@ -528,6 +531,7 @@ class VM
{ {
slot = currentSlot; slot = currentSlot;
} }
result.vm = this;
result.slot = slot; result.slot = slot;
result.slotUnique = slot.unique; result.slotUnique = slot.unique;
Function func; Function func;
@@ -2759,7 +2763,7 @@ class CallSprite : Code
} }
auto callback = vm.petitcomputer.sprite.getCallback(vm.petitcomputer.callidx); auto callback = vm.petitcomputer.sprite.getCallback(vm.petitcomputer.callidx);
vm.pc--; vm.pc--;
if (!callback.isCallable) if (!callback.isCallable(vm))
{ {
return; return;
} }
@@ -2783,7 +2787,7 @@ class CallBG : Code
} }
auto callback = vm.petitcomputer.getBG(vm.petitcomputer.callidx).callback; auto callback = vm.petitcomputer.getBG(vm.petitcomputer.callidx).callback;
vm.pc--; vm.pc--;
if (!callback.isCallable) if (!callback.isCallable(vm))
{ {
return; return;
} }