summaryrefslogtreecommitdiff
path: root/src/virtualmachine/Exceptions.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/virtualmachine/Exceptions.h')
-rw-r--r--src/virtualmachine/Exceptions.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/virtualmachine/Exceptions.h b/src/virtualmachine/Exceptions.h
new file mode 100644
index 0000000..2dca461
--- /dev/null
+++ b/src/virtualmachine/Exceptions.h
@@ -0,0 +1,69 @@
+#pragma once
+#include <stdexcept>
+#include <cstring>
+#include "Format.h"
+
+namespace vm
+{
+ class RuntimeException: public std::exception
+ {
+ public:
+ RuntimeException() {}
+ const char * what() const throw()
+ {
+ return "VirtualMachine runtime exception";
+ }
+ ~RuntimeException() throw() {};
+ };
+
+ class StackOverflowException: public RuntimeException
+ {
+ public:
+ StackOverflowException() {}
+ const char * what() const throw()
+ {
+ return "VirtualMachine Stack overflow";
+ }
+ ~StackOverflowException() throw() {};
+ };
+
+ class StackUnderflowException: public RuntimeException
+ {
+ public:
+ StackUnderflowException() {}
+ const char * what() const throw()
+ {
+ return "VirtualMachine Stack underflow";
+ }
+ ~StackUnderflowException() throw() {};
+ };
+
+ class AccessViolationException: public RuntimeException
+ {
+ int address;
+ char * _what;
+ public:
+ AccessViolationException(int address = 0) : address(address)
+ {
+ _what = strdup(std::string("VirtualMachine Access violation at "+format::NumberToString<int>(address)).c_str());
+ }
+ const char * what() const throw()
+ {
+ if(address)
+ return _what;
+ return "VirtualMachine Access violation";
+ }
+ ~AccessViolationException() throw() {};
+ };
+
+ class OutOfMemoryException: public RuntimeException
+ {
+ public:
+ OutOfMemoryException() {}
+ const char * what() const throw()
+ {
+ return "VirtualMachine Out of memory";
+ }
+ ~OutOfMemoryException() throw() {};
+ };
+} \ No newline at end of file