Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Tiny BASIC
  3.  * Error Handling Header
  4.  *
  5.  * Copyright (C) Damian Gareth Walker 2019
  6.  * Created: 15-Aug-2019
  7.  */
  8.  
  9.  
  10. #ifndef __ERRORS_H__
  11. #define __ERRORS_H__
  12.  
  13.  
  14. /*
  15.  * Data Definitions
  16.  */
  17.  
  18. /* error codes */
  19. typedef enum {
  20.   E_NONE, /* no error; everything is fine */
  21.   E_INVALID_LINE_NUMBER, /* line number is invalid */
  22.   E_UNRECOGNISED_COMMAND, /* command was not recognised */
  23.   E_INVALID_VARIABLE, /* variable expected but something else encountered */
  24.   E_INVALID_ASSIGNMENT, /* = expected but something else encountered */
  25.   E_INVALID_EXPRESSION, /* an invalid expression was encountered */
  26.   E_MISSING_RIGHT_PARENTHESIS, /* Encountered "(" without corresponding ")" */
  27.   E_INVALID_PRINT_OUTPUT, /* failed to parse print output */
  28.   E_BAD_COMMAND_LINE, /* error on invocation */
  29.   E_FILE_NOT_FOUND, /* cannot open source file */
  30.   E_INVALID_OPERATOR, /* unrecognised operator */
  31.   E_THEN_EXPECTED, /* didn't find the expected THEN after an IF */
  32.   E_UNEXPECTED_PARAMETER, /* more parameters encountered than expected */
  33.   E_RETURN_WITHOUT_GOSUB, /* return encountered without a GOSUB */
  34.   E_DIVIDE_BY_ZERO, /* an attempt to divide by zero */
  35.   E_OVERFLOW, /* integer is out of range */
  36.   E_MEMORY, /* out of memory */
  37.   E_TOO_MANY_GOSUBS, /* recursive GOSUBs exceeded the stack size */
  38.   E_LAST /* placeholder */
  39. } ErrorCode;
  40.  
  41. /* error handler structure */
  42. typedef struct error_handler ErrorHandler;
  43. typedef struct error_handler {
  44.   void *data; /* private data */
  45.   void (*set_code) (ErrorHandler *, ErrorCode, int, int);
  46.   ErrorCode (*get_code) (ErrorHandler *);
  47.   int (*get_line) (ErrorHandler *);
  48.   int (*get_label) (ErrorHandler *);
  49.   char *(*get_text) (ErrorHandler *);
  50.   void (*destroy) (ErrorHandler *);
  51. } ErrorHandler;
  52.  
  53.  
  54. /*
  55.  * Constructors
  56.  */
  57.  
  58.  
  59. /*
  60.  * Principal constructor
  61.  * returns:
  62.  *   ErrorHandler*   the new error handler object
  63.  */
  64. ErrorHandler *new_ErrorHandler (void);
  65.  
  66.  
  67. #endif
  68.