diff --git a/SMILEBASIC/VM.d b/SMILEBASIC/VM.d index b475c45..14a5f64 100644 --- a/SMILEBASIC/VM.d +++ b/SMILEBASIC/VM.d @@ -176,8 +176,7 @@ class VM { if(stacki >= this.stack.length) { - writeln("Stack OF"); - readln(); + throw new StackOverFlow(); } stack[stacki++] = value; } @@ -193,8 +192,7 @@ class VM { if(stacki <= bp) { - writeln("Stack underflow"); - readln(); + throw new StackUnderFlow(); } value = stack[--stacki]; } @@ -202,8 +200,7 @@ class VM { if(stacki <= bp) { - writeln("Stack underflow"); - readln(); + throw new StackUnderFlow(); } --stacki; } diff --git a/SMILEBASIC/error.d b/SMILEBASIC/error.d index dd36186..2a24483 100644 --- a/SMILEBASIC/error.d +++ b/SMILEBASIC/error.d @@ -56,6 +56,22 @@ class IllegalFunctionCall : SmileBasicError super("Illegal function call(" ~ func ~ ")"); } } +class StackOverFlow : SmileBasicError +{ + this() + { + this.errnum = 5; + super("Stack overflow"); + } +} +class StackUnderFlow : SmileBasicError +{ + this() + { + this.errnum = 6; + super("Stack underflow"); + } +} class TypeMismatch : SmileBasicError { this()