From f0b598e35ea48c5e6dd4f0f28163866559e870e0 Mon Sep 17 00:00:00 2001 From: otya128 Date: Fri, 23 Dec 2016 21:16:59 +0900 Subject: [PATCH] Fix local restore --- SMILEBASIC/VM.d | 4 +++- SMILEBASIC/compiler.d | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 3b0ee1c..a602b82 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -1777,9 +1777,11 @@ class ReadCode : Code class RestoreCodeS : Code { wstring label; - this(wstring label) + Scope scope_; + this(wstring label, Scope s) { this.label = label; + scope_ = s; this.type = CodeType.RestoreCodeS; } override void execute(VM vm) diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index 602cb8c..65ecfb6 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -1170,7 +1170,7 @@ class Compiler Constant cons = cast(Constant)label; if(cons.value.isString) { - genCode(new RestoreCodeS(cons.value.stringValue)); + genCode(new RestoreCodeS(cons.value.stringValue, s)); break; //文字列じゃないならば定数でも実行時エラー } @@ -1302,7 +1302,7 @@ class Compiler if(c.type == CodeType.RestoreCodeS) { auto restore = cast(RestoreCodeS)c; - auto label = s.data.label.get(restore.label, int.min); + auto label = restore.scope_.data.label.get(restore.label, int.min); if (label == int.min) { code[i] = new RestoreUndefinedLabelCode(restore.label);