diff options
author | Miran <narimiran@disroot.org> | 2020-01-15 14:42:49 +0100 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2020-01-15 14:42:49 +0100 |
commit | e708d5de75c0cccba666f19390ee1ac8e3df8a7a (patch) | |
tree | f9e78b7e4f9f3f8b7429ca64f37e632992bbeaa6 /lib/system/exceptions.nim | |
parent | 79a326759a5fb49bed60163e48e8e17f3c1ee3a3 (diff) | |
download | Nim-e708d5de75c0cccba666f19390ee1ac8e3df8a7a.tar.gz |
System cleanup, part 2 (#13155)
* create basic_types, arithmetics, exceptions, comparisons * create setops.nim * create memalloc.nim * create gc_interface.nim * create iterators_1.nim
Diffstat (limited to 'lib/system/exceptions.nim')
-rw-r--r-- | lib/system/exceptions.nim | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/lib/system/exceptions.nim b/lib/system/exceptions.nim new file mode 100644 index 000000000..f575f9b9f --- /dev/null +++ b/lib/system/exceptions.nim @@ -0,0 +1,137 @@ +type + RootEffect* {.compilerproc.} = object of RootObj ## \ + ## Base effect class. + ## + ## Each effect should inherit from `RootEffect` unless you know what + ## you're doing. + TimeEffect* = object of RootEffect ## Time effect. + IOEffect* = object of RootEffect ## IO effect. + ReadIOEffect* = object of IOEffect ## Effect describing a read IO operation. + WriteIOEffect* = object of IOEffect ## Effect describing a write IO operation. + ExecIOEffect* = object of IOEffect ## Effect describing an executing IO operation. + + StackTraceEntry* = object ## In debug mode exceptions store the stack trace that led + ## to them. A `StackTraceEntry` is a single entry of the + ## stack trace. + procname*: cstring ## Name of the proc that is currently executing. + line*: int ## Line number of the proc that is currently executing. + filename*: cstring ## Filename of the proc that is currently executing. + + Exception* {.compilerproc, magic: "Exception".} = object of RootObj ## \ + ## Base exception class. + ## + ## Each exception has to inherit from `Exception`. See the full `exception + ## hierarchy <manual.html#exception-handling-exception-hierarchy>`_. + parent*: ref Exception ## Parent exception (can be used as a stack). + name*: cstring ## The exception's name is its Nim identifier. + ## This field is filled automatically in the + ## ``raise`` statement. + msg* {.exportc: "message".}: string ## The exception's message. Not + ## providing an exception message + ## is bad style. + when defined(js): + trace: string + else: + trace: seq[StackTraceEntry] + when defined(nimBoostrapCsources0_19_0): + # see #10315, bootstrap with `nim cpp` from csources gave error: + # error: no member named 'raise_id' in 'Exception' + raise_id: uint # set when exception is raised + else: + raiseId: uint # set when exception is raised + up: ref Exception # used for stacking exceptions. Not exported! + + Defect* = object of Exception ## \ + ## Abstract base class for all exceptions that Nim's runtime raises + ## but that are strictly uncatchable as they can also be mapped to + ## a ``quit`` / ``trap`` / ``exit`` operation. + + CatchableError* = object of Exception ## \ + ## Abstract class for all exceptions that are catchable. + IOError* = object of CatchableError ## \ + ## Raised if an IO error occurred. + EOFError* = object of IOError ## \ + ## Raised if an IO "end of file" error occurred. + OSError* = object of CatchableError ## \ + ## Raised if an operating system service failed. + errorCode*: int32 ## OS-defined error code describing this error. + LibraryError* = object of OSError ## \ + ## Raised if a dynamic library could not be loaded. + ResourceExhaustedError* = object of CatchableError ## \ + ## Raised if a resource request could not be fulfilled. + ArithmeticError* = object of Defect ## \ + ## Raised if any kind of arithmetic error occurred. + DivByZeroError* = object of ArithmeticError ## \ + ## Raised for runtime integer divide-by-zero errors. + + OverflowError* = object of ArithmeticError ## \ + ## Raised for runtime integer overflows. + ## + ## This happens for calculations whose results are too large to fit in the + ## provided bits. + AccessViolationError* = object of Defect ## \ + ## Raised for invalid memory access errors + AssertionError* = object of Defect ## \ + ## Raised when assertion is proved wrong. + ## + ## Usually the result of using the `assert() template + ## <assertions.html#assert.t,untyped,string>`_. + ValueError* = object of CatchableError ## \ + ## Raised for string and object conversion errors. + KeyError* = object of ValueError ## \ + ## Raised if a key cannot be found in a table. + ## + ## Mostly used by the `tables <tables.html>`_ module, it can also be raised + ## by other collection modules like `sets <sets.html>`_ or `strtabs + ## <strtabs.html>`_. + OutOfMemError* = object of Defect ## \ + ## Raised for unsuccessful attempts to allocate memory. + IndexError* = object of Defect ## \ + ## Raised if an array index is out of bounds. + + FieldError* = object of Defect ## \ + ## Raised if a record field is not accessible because its discriminant's + ## value does not fit. + RangeError* = object of Defect ## \ + ## Raised if a range check error occurred. + StackOverflowError* = object of Defect ## \ + ## Raised if the hardware stack used for subroutine calls overflowed. + ReraiseError* = object of Defect ## \ + ## Raised if there is no exception to reraise. + ObjectAssignmentError* = object of Defect ## \ + ## Raised if an object gets assigned to its parent's object. + ObjectConversionError* = object of Defect ## \ + ## Raised if an object is converted to an incompatible object type. + ## You can use ``of`` operator to check if conversion will succeed. + FloatingPointError* = object of Defect ## \ + ## Base class for floating point exceptions. + FloatInvalidOpError* = object of FloatingPointError ## \ + ## Raised by invalid operations according to IEEE. + ## + ## Raised by ``0.0/0.0``, for example. + FloatDivByZeroError* = object of FloatingPointError ## \ + ## Raised by division by zero. + ## + ## Divisor is zero and dividend is a finite nonzero number. + FloatOverflowError* = object of FloatingPointError ## \ + ## Raised for overflows. + ## + ## The operation produced a result that exceeds the range of the exponent. + FloatUnderflowError* = object of FloatingPointError ## \ + ## Raised for underflows. + ## + ## The operation produced a result that is too small to be represented as a + ## normal number. + FloatInexactError* = object of FloatingPointError ## \ + ## Raised for inexact results. + ## + ## The operation produced a result that cannot be represented with infinite + ## precision -- for example: ``2.0 / 3.0, log(1.1)`` + ## + ## **Note**: Nim currently does not detect these! + DeadThreadError* = object of Defect ## \ + ## Raised if it is attempted to send a message to a dead thread. + NilAccessError* = object of Defect ## \ + ## Raised on dereferences of ``nil`` pointers. + ## + ## This is only raised if the `segfaults module <segfaults.html>`_ was imported! |