/*
 * Copyright (c) 1997-2024 Ross Cunniff
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef _OADLERR_H_INCLUDED
#define _OADLERR_H_INCLUDED

typedef enum {
    /* Compile-time or run-time messages */
    OADL_E_MEMORY = -16383,     OADL_E_INTERNAL,        OADL_E_LIBRARY,
    OADL_E_INTERNAL_MSG,        OADL_E_BADGC,

    /* No error - returned from some functions */
    OADL_E_NONE = 0,

    /* Compile-time, run-time, possible as exceptions */
    OADL_E_TYPECHECK = 1,       OADL_E_RANGECHECK,      OADL_E_ARG_COUNT,
    OADL_E_ACCESS,              OADL_E_ASSERT,          OADL_E_STACK,
    OADL_E_UNDEF_EXTERN,        OADL_E_SHAPE,           OADL_E_INTERRUPT,
    OADL_E_FORMAT,              OADL_E_UNBOUNDED,       OADL_E_EOF,
    OADL_E_REGEX,               OADL_E_IO,              OADL_E_NOMATCH,
    OADL_E_BADEXCEPT,           OADL_E_UNDEF_PROC,      OADL_E_UNDEF_NAME,
    OADL_E_REDEFINED,           OADL_E_BAD_UTF8,

    /* Place after all exceptions */
    OADL_NEXT_EXCEPTION_NUM,

    /* Compile-time only messages */
    OADL_E_SYNTAX = -65535,     OADL_E_BADCHAR,         OADL_E_UNTERMINATED,
    OADL_E_BADSTATE,            OADL_E_BAD_BREAK,       OADL_E_NOTDEFINED,
    OADL_E_CONST_ASSIGN,        OADL_E_BADFILE,         OADL_E_BAD_CONTINUE,
    OADL_E_BAD_ASSIGN,          OADL_E_RBRAK_EXPECTED,  OADL_E_EXTERN_CLASS,
    OADL_E_RPAR_EXPECTED,       OADL_E_LBRACE_EXPECTED, OADL_E_RBRACE_EXPECTED,
    OADL_E_REDECLARED,          OADL_E_NAME_EXPECTED,   OADL_E_SEMI_EXPECTED,
    OADL_E_NOT_CLASS,           OADL_E_EQUALS_EXPECTED, OADL_E_BADCONST,
    OADL_E_LPAR_EXPECTED,       OADL_E_WHILE_EXPECTED,  OADL_E_COLON_EXPECTED,
    OADL_E_BAD_DEFAULT,         OADL_E_FAR_JUMP,        OADL_E_TOKLEN,
    OADL_E_FORWARD,             OADL_E_MULTI_INHERIT,   OADL_E_CATCH_EXPECTED,
    OADL_E_MACRO,               OADL_E_BAD_PREPROC,     OADL_E_RRR_EXPECTED,
    OADL_E_BAD_FORALL,          OADL_E_AMBIGUOUS,       OADL_E_TYPE_EXPECTED,
    OADL_E_NESTED_NAMESPACE,    OADL_E_NAMESPACE_EXPECTED,OADL_E_BAD_NAMESPACE,
    OADL_E_EOL_EXPECTED,        OADL_E_BAD_ELIF,        OADL_E_BAD_ENDIF,
    OADL_E_BAD_ELSE,            OADL_E_UNTERM_MACRO,    OADL_E_UNTERM_IF,
    OADL_E_BAD_ITERATOR,        OADL_E_BAD_STACK_CALL,  OADL_E_BAD_FOREACH,
    OADL_E_BAD_LOOPBASE,        OADL_E_BAD_ADDRESSOF,   OADL_E_NAME_TOO_LONG,
    OADL_E_PUBLIC_EXPECTED,     OADL_E_BAD_DEF_PUB,     OADL_E_SYS_ERASE,
    OADL_E_UNDEF_MACRO,         OADL_E_NOT_IN_NS,       OADL_E_INT_EXPECTED,

    /* Warnings */
    OADL_E_IMPLICIT_PUB = -32767, OADL_E_IMPLICIT_PROC, OADL_E_LOCAL_REDECLARED,
    OADL_E_WARN_REDECLARED,     OADL_E_WARN_EMPTY_CASE,
} OadlErrCode;

#endif /* _OADLERR_H_INCLUDED */