/************************************************************************* * * * YAP Prolog %W% %G% * * Yap Prolog was developed at NCCUP - Universidade do Porto * * * * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * * * ************************************************************************** * * * File: YapError.h * * mods: * * comments: error header file for YAP * * version: $Id: Yap.h,v 1.38 2008-06-18 10:02:27 vsc Exp $ * *************************************************************************/ #ifndef YAP_ERROR_H #define YAP_ERROR_H 1 /* Types of Errors */ typedef enum { YAP_NO_ERROR, FATAL_ERROR, INTERNAL_ERROR, INTERNAL_COMPILER_ERROR, NOJIT_ERROR, /* I added */ PURE_ABORT, CALL_COUNTER_UNDERFLOW, /* ISO_ERRORS */ CONSISTENCY_ERROR, DOMAIN_ERROR_ARRAY_OVERFLOW, DOMAIN_ERROR_ARRAY_TYPE, DOMAIN_ERROR_IO_MODE, DOMAIN_ERROR_MUTABLE, DOMAIN_ERROR_NON_EMPTY_LIST, DOMAIN_ERROR_NOT_LESS_THAN_ZERO, DOMAIN_ERROR_NOT_NL, DOMAIN_ERROR_NOT_ZERO, DOMAIN_ERROR_OUT_OF_RANGE, DOMAIN_ERROR_OPERATOR_PRIORITY, DOMAIN_ERROR_OPERATOR_SPECIFIER, DOMAIN_ERROR_PROLOG_FLAG, DOMAIN_ERROR_RADIX, DOMAIN_ERROR_SHIFT_COUNT_OVERFLOW, DOMAIN_ERROR_SOURCE_SINK, DOMAIN_ERROR_STREAM, DOMAIN_ERROR_STREAM_ENCODING, DOMAIN_ERROR_STREAM_OR_ALIAS, DOMAIN_ERROR_STREAM_POSITION, DOMAIN_ERROR_TIMEOUT_SPEC, DOMAIN_ERROR_SYNTAX_ERROR_HANDLER, EVALUATION_ERROR_FLOAT_OVERFLOW, EVALUATION_ERROR_FLOAT_UNDERFLOW, EVALUATION_ERROR_INT_OVERFLOW, EVALUATION_ERROR_UNDEFINED, EVALUATION_ERROR_UNDERFLOW, EVALUATION_ERROR_ZERO_DIVISOR, EXISTENCE_ERROR_ARRAY, EXISTENCE_ERROR_KEY, EXISTENCE_ERROR_MUTEX, EXISTENCE_ERROR_SOURCE_SINK, EXISTENCE_ERROR_STREAM, EXISTENCE_ERROR_VARIABLE, INCOMPATIBLEMODE_WARNING, /* I added */ INCOMPATIBLE_CODEMODE_WARNING, /* I added */ INSTANTIATION_ERROR, INTERRUPT_ERROR, INVALID_PARAMETER_TYPE_ERROR, /* I added */ OPERATING_SYSTEM_ERROR, OUT_OF_HEAP_ERROR, OUT_OF_KNOWNRANGE_ERROR, /* I added */ OUT_OF_STACK_ERROR, OUT_OF_TRAIL_ERROR, OUT_OF_ATTVARS_ERROR, OUT_OF_AUXSPACE_ERROR, PERMISSION_ERROR_ACCESS_PRIVATE_PROCEDURE, PERMISSION_ERROR_NEW_ALIAS_FOR_STREAM, PERMISSION_ERROR_CREATE_ARRAY, PERMISSION_ERROR_CREATE_OPERATOR, PERMISSION_ERROR_INPUT_BINARY_STREAM, PERMISSION_ERROR_INPUT_PAST_END_OF_STREAM, PERMISSION_ERROR_INPUT_STREAM, PERMISSION_ERROR_INPUT_TEXT_STREAM, PERMISSION_ERROR_MODIFY_STATIC_PROCEDURE, PERMISSION_ERROR_OPEN_SOURCE_SINK, PERMISSION_ERROR_OUTPUT_BINARY_STREAM, PERMISSION_ERROR_OUTPUT_STREAM, PERMISSION_ERROR_OUTPUT_TEXT_STREAM, PERMISSION_ERROR_RESIZE_ARRAY, PERMISSION_ERROR_READ_ONLY_FLAG, PERMISSION_ERROR_REPOSITION_STREAM, PRED_ENTRY_COUNTER_UNDERFLOW, REPRESENTATION_ERROR_CHARACTER, REPRESENTATION_ERROR_CHARACTER_CODE, REPRESENTATION_ERROR_INT, REPRESENTATION_ERROR_MAX_ARITY, REPRESENTATION_ERROR_VARIABLE, RESOURCE_ERROR_HUGE_INT, RESOURCE_ERROR_MAX_STREAMS, RESOURCE_ERROR_MAX_THREADS, RESOURCE_ERROR_MEMORY, RESOURCE_ERROR_STACK, RETRY_COUNTER_UNDERFLOW, SAVED_STATE_ERROR, SYNTAX_ERROR, SYSTEM_ERROR, TYPE_ERROR_ARRAY, TYPE_ERROR_ATOM, TYPE_ERROR_ATOMIC, TYPE_ERROR_BIGNUM, TYPE_ERROR_BYTE, TYPE_ERROR_CALLABLE, TYPE_ERROR_CHAR, TYPE_ERROR_CHARACTER, TYPE_ERROR_COMPOUND, TYPE_ERROR_DBREF, TYPE_ERROR_DBTERM, TYPE_ERROR_EVALUABLE, TYPE_ERROR_FLOAT, TYPE_ERROR_INTEGER, TYPE_ERROR_KEY, TYPE_ERROR_LIST, TYPE_ERROR_NUMBER, TYPE_ERROR_PARAMETER, TYPE_ERROR_PREDICATE_INDICATOR, TYPE_ERROR_PTR, TYPE_ERROR_REFERENCE, TYPE_ERROR_STRING, TYPE_ERROR_TEXT, TYPE_ERROR_UBYTE, TYPE_ERROR_UCHAR, TYPE_ERROR_VARIABLE, UNINSTANTIATION_ERROR, UNKNOWN_ERROR } yap_error_number; #define JMP_LOCAL_ERROR(v, LAB) \ if (H + 2*(v) > ASP-1024) { \ LOCAL_Error_TYPE = OUT_OF_STACK_ERROR;\ LOCAL_Error_Term = TermNilnnnnnnnnnnnnnnnnnnnnnnnnnn;\ LOCAL_Error_Size = 2*(v)*sizeof(CELL);\ goto LAB; \ } #define LOCAL_ERROR(v) \ if (HR + (v) > ASP-1024) { \ LOCAL_Error_TYPE = OUT_OF_STACK_ERROR;\ LOCAL_Error_Term = TermNil;\ LOCAL_Error_Size = 2*(v)*sizeof(CELL);\ return NULL; \ } #define LOCAL_TERM_ERROR(v) \ if (HR + (v) > ASP-1024) { \ ;\ LOCAL_Error_Size = 2*(v)*sizeof(CELL);\ return 0L; \ } #define AUX_ERROR(t, n, s, TYPE) \ if (s + (n+1) > (TYPE *)AuxSp) { \ LOCAL_Error_TYPE = OUT_OF_AUXSPACE_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ return NULL; \ } #define AUX_TERM_ERROR(t, n, s, TYPE) \ if (s + (n+1) > (TYPE *)AuxSp) { \ LOCAL_Error_TYPE = OUT_OF_AUXSPACE_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ return 0L; \ } #define JMP_AUX_ERROR(n, s, t, TYPE, LAB) \ if (s + (n+1) > (TYPE *)AuxSp) { \ LOCAL_Error_TYPE = OUT_OF_AUXSPACE_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ goto LAB; \ } #define HEAP_ERROR(a,TYPE) if( a == NIL) { \ LOCAL_Error_TYPE = OUT_OF_HEAP_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ return NULL;\ } #define HEAP_TERM_ERROR(a,TYPE) if( a == NIL) { \ LOCAL_Error_TYPE = OUT_OF_HEAP_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ return 0L;\ } #define JMP_HEAP_ERROR(a,n,t,TYPE, LAB) if( a == NIL) { \ LOCAL_Error_TYPE = OUT_OF_HEAP_ERROR;\ LOCAL_Error_Term = t;\ LOCAL_Error_Size = n*sizeof(TYPE);\ goto LAB;\ } #endif