From 7d389eba5d83456d78c8978563cf974b0f70235d Mon Sep 17 00:00:00 2001 From: otya128 Date: Mon, 10 Jul 2017 00:55:16 +0900 Subject: [PATCH] Fix restore --- SMILEBASIC/VM.d | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index d278749..d0cad7b 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -355,11 +355,27 @@ class VM } void restoreData(wstring label) { - if (label in currentData.table.label) - currentData.index = currentData.table.label[label]; - else if (label in currentSlot.globalData.table.label) + auto name = parse(label); + VMSlot slot; + if (name.hasSlot) { - currentData.index = currentSlot.globalData.table.label[label]; + if (!checkSlotNumber(name.slot)) + { + throw new IllegalSymbolString(); + } + slot = slots[name.slot]; + } + else + { + slot = currentSlot; + } + if (name.name.indexOf('@') != 0) + throw new IllegalSymbolString(); + if (name.name in currentData.table.label) + currentData.index = currentData.table.label[name.name]; + else if (name.name in slot.globalData.table.label) + { + currentData.index = slot.globalData.table.label[name.name]; } else {