diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 14a5f64..cd717c2 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -1665,6 +1665,22 @@ class RestoreCode : Code return "restore " ~ label.to!string; } } +class RestoreUndefinedLabelCode : Code +{ + wstring label; + this(wstring label) + { + this.label = label; + } + override void execute(VM vm) + { + throw new UndefinedLabel(); + } + override string toString(VM vm) + { + return "restoreundeflabel " ~ label.to!string; + } +} class RestoreExprCode : Code { DataTable datatable; diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index 1f5aaa8..e2f86bb 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -1236,7 +1236,15 @@ class Compiler if(c.type == CodeType.RestoreCodeS) { auto restore = cast(RestoreCodeS)c; - code[i] = new RestoreCode(s.data.label[restore.label], s.data); + auto label = s.data.label.get(restore.label, int.min); + if (label != int.min) + { + code[i] = new RestoreUndefinedLabelCode(restore.label); + } + else + { + code[i] = new RestoreCode(label, s.data); + } } } genCode(new EndVM());