fix error handling
This commit is contained in:
@@ -16,196 +16,102 @@
|
||||
#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_FILE_ERRORS,
|
||||
DOMAIN_ERROR_FILE_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_SOLUTIONS,
|
||||
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 ECLASS(CL, A, B) CL,
|
||||
|
||||
#define E0(A, B) A,
|
||||
#define E(A, B, C) A,
|
||||
#define E2(A, B, C, D) A,
|
||||
|
||||
#define BEGIN_ERRORS() typedef enum {
|
||||
|
||||
#define END_ERRORS() \
|
||||
} \
|
||||
yap_error_number
|
||||
|
||||
#define BEGIN_ERROR_CLASSES() typedef enum {
|
||||
|
||||
#define END_ERROR_CLASSES() \
|
||||
} \
|
||||
yap_error_class_number
|
||||
|
||||
#include "YapErrors.h"
|
||||
|
||||
struct yami *Yap_Error__(const char *file, const char *function, int lineno, yap_error_number err,YAP_Term wheret, ...);
|
||||
|
||||
#define Yap_Error( id, t, ...) Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, t, __VA_ARGS__)
|
||||
#define Yap_NilError( id, ...) Yap_Error__(__FILE__, __FUNCTION__, __LINE__, id, TermNil, __VA_ARGS__)
|
||||
|
||||
|
||||
#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 JMP_LOCAL_ERROR(v, LAB) \
|
||||
if (H + 2 * (v) > ASP - 1024) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK; \
|
||||
LOCAL_Error_Term = t; \
|
||||
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_ERROR(t, v) \
|
||||
if (HR + (v) > ASP - 1024) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK; \
|
||||
LOCAL_Error_Term = t; \
|
||||
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 LOCAL_TERM_ERROR(t, v) \
|
||||
if (HR + (v) > ASP - 1024) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_STACK; \
|
||||
LOCAL_Error_Term = t; \
|
||||
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_ERROR(t, n, s, TYPE) \
|
||||
if (s + (n + 1) > (TYPE *)AuxSp) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK; \
|
||||
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 AUX_TERM_ERROR(t, n, s, TYPE) \
|
||||
if (s + (n + 1) > (TYPE *)AuxSp) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK; \
|
||||
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 JMP_AUX_ERROR(n, s, t, TYPE, LAB) \
|
||||
if (s + (n + 1) > (TYPE *)AuxSp) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_AUXILIARY_STACK; \
|
||||
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;\
|
||||
}
|
||||
#define HEAP_ERROR(a, TYPE) \
|
||||
if (a == NIL) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP; \
|
||||
LOCAL_Error_Term = t; \
|
||||
LOCAL_Error_Size = n * sizeof(TYPE); \
|
||||
return NULL; \
|
||||
}
|
||||
|
||||
#define HEAP_TERM_ERROR(a, TYPE) \
|
||||
if (a == NIL) { \
|
||||
LOCAL_Error_TYPE = RESOURCE_ERROR_HEAP; \
|
||||
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 = RESOURCE_ERROR_HEAP; \
|
||||
LOCAL_Error_Term = t; \
|
||||
LOCAL_Error_Size = n * sizeof(TYPE); \
|
||||
goto LAB; \
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user