Open github-actions[bot] opened 8 months ago
[VError] revisit and review our Error & ErrorKind types
https://github.com/arturo-lang/arturo/blob/4bed4542b3306aaeb55fe7d11f5193b2f90c3fef/src/vm/values/custom/verror.nim#L20
# Arturo # Programming Language + Bytecode VM compiler # (c) 2019-2024 Yanis Zafirópulos # # @file: vm/values/custom/verror.nim #======================================================= #======================================= # Libraries #======================================= import std/strformat #======================================= # Types #======================================= type # TODO(VError) revisit and review our Error & ErrorKind types # labels: error handling, :error, :errorKind ErrorContext* = object line*: int file*: string VErrorKind* = object label* : string description* : string VError* = ref object of CatchableError # errors also have a .name and .msg field # that come from CatchableError # - .msg is supposed to hold the error message itself # - .name holds a string version of the OS error code # that will be returned, in case the exception is not # caught kind* : VErrorKind hint* : string context* : ErrorContext #======================================= # Constants #======================================= # TODO(VError) can we really use the system exit codes? # and is the list reliable for *every* OS? # labels: enhancement, error handling, :error const EPERM* = int(1) ## Operation not permitted ENOENT* = int(2) ## No such file or directory ESRCH* = int(3) ## No such process EINTR* = int(4) ## Interrupted system call EIO* = int(5) ## I/O error ENXIO* = int(6) ## No such device or address E2BIG* = int(7) ## Argument list too long ENOEXEC* = int(8) ## Exec format error EBADF* = int(9) ## Bad file number ECHILD* = int(10) ## No child processes EAGAIN* = int(11) ## Try again ENOMEM* = int(12) ## Out of memory EACCES* = int(13) ## Permission denied EFAULT* = int(14) ## Bad address ENOTBLK* = int(15) ## Block device required EBUSY* = int(16) ## Device or resource busy EEXIST* = int(17) ## File exists EXDEV* = int(18) ## Cross-device link ENODEV* = int(19) ## No such device ENOTDIR* = int(20) ## Not a directory EISDIR* = int(21) ## Is a directory EINVAL* = int(22) ## Invalid argument ENFILE* = int(23) ## File table overflow EMFILE* = int(24) ## Too many open files ENOTTY* = int(25) ## Not a typewriter ETXTBSY* = int(26) ## Text file busy EFBIG* = int(27) ## File too large ENOSPC* = int(28) ## No space left on device ESPIPE* = int(29) ## Illegal seek EROFS* = int(30) ## Read-only file system EMLINK* = int(31) ## Too many links EPIPE* = int(32) ## Broken pipe EDOM* = int(33) ## Math argument out of domain of func ERANGE* = int(34) ## Math result not representable EDEADLK* = int(35) ## Resource deadlock would occur ENAMETOOLONG* = int(36) ## File name too long ENOLCK* = int(37) ## No record locks available ENOSYS* = int(38) ## Function not implemented ENOTEMPTY* = int(39) ## Directory not empty ELOOP* = int(40) ## Too many symbolic links encountered ENOMSG* = int(42) ## No message of desired type EIDRM* = int(43) ## Identifier removed ECHRNG* = int(44) ## Channel number out of range EL2NSYNC* = int(45) ## Level 2 not synchronized EL3HLT* = int(46) ## Level 3 halted EL3RST* = int(47) ## Level 3 reset ELNRNG* = int(48) ## Link number out of range EUNATCH* = int(49) ## Protocol driver not attached ENOCSI* = int(50) ## No CSI structure available EL2HLT* = int(51) ## Level 2 halted EBADE* = int(52) ## Invalid exchange EBADR* = int(53) ## Invalid request descriptor EXFULL* = int(54) ## Exchange full ENOANO* = int(55) ## No anode EBADRQC* = int(56) ## Invalid request code EBADSLT* = int(57) ## Invalid slot EBFONT* = int(59) ## Bad font file format ENOSTR* = int(60) ## Device not a stream ENODATA* = int(61) ## No data available ETIME* = int(62) ## Timer expired ENOSR* = int(63) ## Out of streams resources ENONET* = int(64) ## Machine is not on the network ENOPKG* = int(65) ## Package not installed EREMOTE* = int(66) ## Object is remote ENOLINK* = int(67) ## Link has been severed EADV* = int(68) ## Advertise error ESRMNT* = int(69) ## Srmount error ECOMM* = int(70) ## Communication error on send EPROTO* = int(71) ## Protocol error EMULTIHOP* = int(72) ## Multihop attempted EDOTDOT* = int(73) ## RFS specific error EBADMSG* = int(74) ## Not a data message EOVERFLOW* = int(75) ## Value too large for defined data type ENOTUNIQ* = int(76) ## Name not unique on network EBADFD* = int(77) ## File descriptor in bad state EREMCHG* = int(78) ## Remote address changed ELIBACC* = int(79) ## Can not access a needed shared library ELIBBAD* = int(80) ## Accessing a corrupted shared library ELIBSCN* = int(81) ## .lib section in a.out corrupted ELIBMAX* = int(82) ## Attempting to link in too many shared libraries ELIBEXEC* = int(83) ## Cannot exec a shared library directly EILSEQ* = int(84) ## Illegal byte sequence ERESTART* = int(85) ## Interrupted system call should be restarted ESTRPIPE* = int(86) ## Streams pipe error EUSERS* = int(87) ## Too many users ENOTSOCK* = int(88) ## Socket operation on non-socket EDESTADDRREQ* = int(89) ## Destination address required EMSGSIZE* = int(90) ## Message too long EPROTOTYPE* = int(91) ## Protocol wrong type for socket ENOPROTOOPT* = int(92) ## Protocol not available EPROTONOSUPPORT* = int(93) ## Protocol not supported ESOCKTNOSUPPORT* = int(94) ## Socket type not supported EOPNOTSUPP* = int(95) ## Operation not supported on transport endpoint EPFNOSUPPORT* = int(96) ## Protocol family not supported EAFNOSUPPORT* = int(97) ## Address family not supported by protocol EADDRINUSE* = int(98) ## Address already in use EADDRNOTAVAIL* = int(99) ## Cannot assign requested address ENETDOWN* = int(100) ## Network is down ENETUNREACH* = int(101) ## Network is unreachable ENETRESET* = int(102) ## Network dropped connection because of reset ECONNABORTED* = int(103) ## Software caused connection abort ECONNRESET* = int(104) ## Connection reset by peer ENOBUFS* = int(105) ## No buffer space available EISCONN* = int(106) ## Transport endpoint is already connected ENOTCONN* = int(107) ## Transport endpoint is not connected ESHUTDOWN* = int(108) ## Cannot send after transport endpoint shutdown ETOOMANYREFS* = int(109) ## Too many references: cannot splice ETIMEDOUT* = int(110) ## Connection timed out ECONNREFUSED* = int(111) ## Connection refused EHOSTDOWN* = int(112) ## Host is down EHOSTUNREACH* = int(113) ## No route to host EALREADY* = int(114) ## Operation already in progress EINPROGRESS* = int(115) ## Operation now in progress ESTALE* = int(116) ## Stale NFS file handle EUCLEAN* = int(117) ## Structure needs cleaning ENOTNAM* = int(118) ## Not a XENIX named type file ENAVAIL* = int(119) ## No XENIX semaphores available EISNAM* = int(120) ## Is a named type file EREMOTEIO* = int(121) ## Remote I/O error EDQUOT* = int(122) ## Quota exceeded ENOMEDIUM* = int(123) ## No medium found EMEDIUMTYPE* = int(124) ## Wrong medium type ECANCELED* = int(125) ## Operation Canceled ENOKEY* = int(126) ## Required key not available EKEYEXPIRED* = int(127) ## Key has expired EKEYREVOKED* = int(128) ## Key has been revoked EKEYREJECTED* = int(129) ## Key was rejected by service EOWNERDEAD* = int(130) ## Owner died ENOTRECOVERABLE* = int(131) ## State not recoverable const # The core error types RuntimeErr* = VErrorKind(label: "Runtime Error" , description: "") SyntaxErr* = VErrorKind(label: "Syntax Error" , description: "Unable to parse input code") CmdlineErr* = VErrorKind(label: "Command-line Error" , description: "Something went wrong while processing given command-line arguments") ProgramErr* = VErrorKind(label: "Program Error" , description: "") SystemErr* = VErrorKind(label: "System Error" , description: "") VMErr* = VErrorKind(label: "VM Error" , description: "") # Derived error types ArithmeticErr* = VErrorKind(label: "Arithmetic Error" , description: "") AssertionErr* = VErrorKind(label: "Assertion Error" , description: "Runtime check failed") ConversionErr* = VErrorKind(label: "Conversion Error" , description: "Problem when converting value to given type") IndexErr* = VErrorKind(label: "Index Error" , description: "Cannot resolve requested index") PackageErr* = VErrorKind(label: "Package Error" , description: "") LibraryErr* = VErrorKind(label: "Library Error" , description: "") NameErr* = VErrorKind(label: "Name Error" , description: "Cannot resolve requested value") ValueErr* = VErrorKind(label: "Value Error" , description: "") TypeErr* = VErrorKind(label: "Type Error" , description: "Erroneous type found") UIErr* = VErrorKind(label: "UI Error" , description: "") #======================================= # Constructors #======================================= func toError*(kind: VErrorKind, msg: string, hint: string = "", errCode: int = EPERM): VError = VError(kind: kind, name: cstring($errCode), msg: msg, hint: hint) #======================================= # Overloads #======================================= func `$`*(kind: VErrorKind): string {.inline.} = kind.label func `$`*(error: VError): string {.inline.} = fmt"{error.kind}: {error.msg}" No newline at end of file ndex 23a79655f1..02ca553043 100644 ++ b/src/vm/values/custom/vlogical.nim
9a2ed2d2cafcf399a1e45c10850d32b12c9101b2
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
[VError] revisit and review our Error & ErrorKind types
https://github.com/arturo-lang/arturo/blob/4bed4542b3306aaeb55fe7d11f5193b2f90c3fef/src/vm/values/custom/verror.nim#L20
9a2ed2d2cafcf399a1e45c10850d32b12c9101b2