diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 355aa42..e302f33 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -744,6 +744,11 @@ class PopG : Code vm.currentSlot.global[var] = Value(cast(int)v.doubleValue); return; } + if (g.isNonStringArray && v.isNonStringArray) + { + vm.currentSlot.global[var] = v; + return; + } if(g.type == ValueType.Void) { vm.currentSlot.global[var] = v; @@ -816,6 +821,11 @@ class PopL : Code vm.stack[vm.bp + var] = Value(cast(int)v.doubleValue); return; } + if (g.isNonStringArray && v.isNonStringArray) + { + vm.stack[vm.bp + var] = v; + return; + } if(g.type == ValueType.Void) { vm.stack[vm.bp + var] = v; diff --git a/SMILEBASIC/petitcomputer.d b/SMILEBASIC/petitcomputer.d index 53da527..f4ddf84 100644 --- a/SMILEBASIC/petitcomputer.d +++ b/SMILEBASIC/petitcomputer.d @@ -1330,7 +1330,8 @@ class PetitComputer for(int i = 0; !quit && maincntRender == oldmaincnt && !waitFlag && running; i++) { version (traceVM) - std.stdio.stderr.writefln("%04X:%s", vm.pc, vm.getCurrent.toString(vm)); + if (vm.pc < vm.currentSlot.code.length) + std.stdio.stderr.writefln("%04X:%s", vm.pc, vm.getCurrent.toString(vm)); version (dumpStackVM) vm.dumpStack(); auto b = vm.runStep(); diff --git a/SMILEBASIC/type.d b/SMILEBASIC/type.d index 250099c..4b39023 100644 --- a/SMILEBASIC/type.d +++ b/SMILEBASIC/type.d @@ -184,6 +184,11 @@ struct Value return this.type == ValueType.IntegerArray || this.type == ValueType.DoubleArray || this.type == ValueType.StringArray || this.type == ValueType.String; } + bool isNonStringArray() + { + return this.type == ValueType.IntegerArray || this.type == ValueType.DoubleArray || + this.type == ValueType.StringArray; + } bool isNumberArray() { return this.type == ValueType.IntegerArray || this.type == ValueType.DoubleArray;