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 {