diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index 5db310b..cd89a4f 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -1138,6 +1138,7 @@ class PushArray : Code index[i] = cast(int)v.doubleValue; continue; } + vm.dumpStack(vm.stacki + 1); throw new TypeMismatch(); } Value array; diff --git a/SMILEBASIC/builtinfunctions.d b/SMILEBASIC/builtinfunctions.d index a1870f5..06ea1b0 100644 --- a/SMILEBASIC/builtinfunctions.d +++ b/SMILEBASIC/builtinfunctions.d @@ -1437,7 +1437,7 @@ class BuiltinFunction { p.sprite.spshow(id); } - static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y, DefaultValue!(double, false) z) + static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y, double z) { if (x.isDefault || y.isDefault) { @@ -1446,14 +1446,18 @@ class BuiltinFunction x.setDefaultValue(x_); y.setDefaultValue(y_); } - if(z.isDefault) + p.sprite.spofs(id, cast(double)x, cast(double)y, z); + } + static void SPOFS(PetitComputer p, int id, DefaultValue!double x, DefaultValue!double y) + { + if (x.isDefault || y.isDefault) { - p.sprite.spofs(id, cast(double)x, cast(double)y); - } - else - { - p.sprite.spofs(id, cast(double)x, cast(double)y, cast(double)z); + double x_, y_, z_; + p.sprite.getspofs(id, x_, y_, z_); + x.setDefaultValue(x_); + y.setDefaultValue(y_); } + p.sprite.spofs(id, cast(double)x, cast(double)y); } @StartOptional("z") static void SPOFS(PetitComputer p, int id, out double x, out double y, out double z) diff --git a/SMILEBASIC/compiler.d b/SMILEBASIC/compiler.d index e7f4bff..55a372e 100644 --- a/SMILEBASIC/compiler.d +++ b/SMILEBASIC/compiler.d @@ -486,7 +486,7 @@ class Compiler } void compileExpression(Expression exp, Scope sc) { - if(!exp) + if(!exp || exp.type == NodeType.VoidExpression) { genCodeImm(Value(ValueType.Void)); return;