diff options
Diffstat (limited to 'src/virtualmachine/Exceptions.h')
| -rw-r--r-- | src/virtualmachine/Exceptions.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/virtualmachine/Exceptions.h b/src/virtualmachine/Exceptions.h new file mode 100644 index 0000000..9628d10 --- /dev/null +++ b/src/virtualmachine/Exceptions.h @@ -0,0 +1,100 @@ +#pragma once +#include <stdexcept> +#include <cstring> +#include "Format.h" + +namespace vm +{ + class RuntimeException: public std::exception + { + char * error; + public: + RuntimeException() : error(NULL) {} + RuntimeException(char * message) : error(strdup(message)) {} + const char * what() const throw() + { + if(error) + return error; + else + 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 JITException: public RuntimeException + { + char * _what; + public: + JITException(const char * what2) + { + _what = strdup(what2); + } + const char * what() const throw() + { + return _what; + } + ~JITException() throw() {}; + }; + + class OutOfMemoryException: public RuntimeException + { + public: + OutOfMemoryException() {} + const char * what() const throw() + { + return "VirtualMachine Out of memory"; + } + ~OutOfMemoryException() throw() {}; + }; + + class InvalidProgramException: public RuntimeException + { + public: + InvalidProgramException() {} + const char * what() const throw() + { + return "Could not load program"; + } + ~InvalidProgramException() throw() {}; + }; +}
\ No newline at end of file |
