1
0
This commit is contained in:
otya128
2016-12-29 16:36:36 +09:00
parent abdd6cdc8c
commit 45e8bbd4e9

View File

@@ -51,6 +51,14 @@ class VMSlot
Value[wstring] directModeVariable; Value[wstring] directModeVariable;
bool hasExecReturnAddress; bool hasExecReturnAddress;
VMAddress execReturnAddress; VMAddress execReturnAddress;
struct ExecData
{
int sp;
int bp;
otya.smilebasic.type.Data currentData;
Function currentFunction;
}
ExecData execData;
} }
class VM class VM
{ {
@@ -264,10 +272,14 @@ class VM
} }
void end() void end()
{ {
if (currentSlot.hasExecReturnAddress) if ((!petitcomputer || !petitcomputer.isRunningDirectMode) && currentSlot.hasExecReturnAddress)
{ {
currentSlot.hasExecReturnAddress = false; currentSlot.hasExecReturnAddress = false;
pc = currentSlot.execReturnAddress.address; pc = currentSlot.execReturnAddress.address;
stacki = currentSlot.execData.sp;
bp = currentSlot.execData.bp;
currentFunction = currentSlot.execData.currentFunction;
currentData = currentSlot.execData.currentData;
setCurrentSlot(currentSlot.execReturnAddress.slot); setCurrentSlot(currentSlot.execReturnAddress.slot);
} }
else else
@@ -2453,6 +2465,13 @@ class Exec : Code
{ {
vm.slots[slot].execReturnAddress = retaddr; vm.slots[slot].execReturnAddress = retaddr;
vm.slots[slot].hasExecReturnAddress = true; vm.slots[slot].hasExecReturnAddress = true;
//BACKTRACEが不可解な動きをしている
//関数からEXECで他スロットを呼び出し戻ってくると他スロットの存在しない行がBACKTRACEに出てくる
//さらにその関数からRETURNするとそれらは消える
vm.slots[slot].execData.sp = vm.stacki;
vm.slots[slot].execData.bp = vm.bp;
vm.slots[slot].execData.currentFunction = vm.currentFunction;
vm.slots[slot].execData.currentData = vm.currentData;
} }
vm.setCurrentSlot(slot); vm.setCurrentSlot(slot);
vm.pc = 0 - 1; vm.pc = 0 - 1;