Skip to content

Commit 68d0e7b

Browse files
committed
rework ERROR handling
1 parent 88e82d8 commit 68d0e7b

30 files changed

Lines changed: 394 additions & 723 deletions

include/express/error.h

Lines changed: 116 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,10 @@
2828
* prettied up interface to print_objects_when_running
2929
*/
3030

31-
#include <sc_export.h>
32-
#include "basic.h" /* get basic definitions */
3331
#include <setjmp.h>
3432

35-
/*************/
36-
/* constants */
37-
/*************/
38-
39-
#define ERROR_none (Error)NULL
40-
#define ERROR_MAX 100
33+
#include "sc_export.h"
34+
#include "basic.h" /* get basic definitions */
4135

4236
/*****************/
4337
/* packages used */
@@ -46,33 +40,122 @@
4640
#include "alloc.h"
4741
#include "symbol.h"
4842

43+
enum ErrorCode {
44+
/* dict.c */
45+
DUPLICATE_DECL = 1,
46+
DUPLICATE_DECL_DIFF_FILE,
47+
/* error.c */
48+
SUBORDINATE_FAILED,
49+
SYNTAX_EXPECTING,
50+
/* expr.c */
51+
INTEGER_EXPRESSION_EXPECTED,
52+
INTERNAL_UNRECOGNISED_OP_IN_EXPRESOLVE,
53+
ATTRIBUTE_REF_ON_AGGREGATE,
54+
ATTRIBUTE_REF_FROM_NON_ENTITY,
55+
INDEXING_ILLEGAL,
56+
WARN_INDEXING_MIXED,
57+
ENUM_NO_SUCH_ITEM,
58+
GROUP_REF_NO_SUCH_ENTITY,
59+
GROUP_REF_UNEXPECTED_TYPE,
60+
IMPLICIT_DOWNCAST,
61+
AMBIG_IMPLICIT_DOWNCAST,
62+
/* express.c */
63+
BAIL_OUT,
64+
SYNTAX,
65+
REF_NONEXISTENT,
66+
TILDE_EXPANSION_FAILED,
67+
SCHEMA_NOT_IN_OWN_SCHEMA_FILE,
68+
UNLABELLED_PARAM_TYPE,
69+
FILE_UNREADABLE,
70+
FILE_UNWRITABLE,
71+
WARN_UNSUPPORTED_LANG_FEAT,
72+
WARN_SMALL_REAL,
73+
/* lexact.c */
74+
INCLUDE_FILE,
75+
UNMATCHED_CLOSE_COMMENT,
76+
UNMATCHED_OPEN_COMMENT,
77+
UNTERMINATED_STRING,
78+
ENCODED_STRING_BAD_DIGIT,
79+
ENCODED_STRING_BAD_COUNT,
80+
BAD_IDENTIFIER,
81+
UNEXPECTED_CHARACTER,
82+
NONASCII_CHAR,
83+
/* linklist.c */
84+
EMPTY_LIST,
85+
/* resolve.c */
86+
UNDEFINED,
87+
UNDEFINED_ATTR,
88+
UNDEFINED_TYPE,
89+
UNDEFINED_SCHEMA,
90+
UNKNOWN_ATTR_IN_ENTITY,
91+
UNKNOWN_SUBTYPE,
92+
UNKNOWN_SUPERTYPE,
93+
CIRCULAR_REFERENCE,
94+
SUBSUPER_LOOP,
95+
SUBSUPER_CONTINUATION,
96+
SELECT_LOOP,
97+
SELECT_CONTINUATION,
98+
SUPERTYPE_RESOLVE,
99+
SUBTYPE_RESOLVE,
100+
NOT_A_TYPE,
101+
FUNCALL_NOT_A_FUNCTION,
102+
UNDEFINED_FUNC,
103+
EXPECTED_PROC,
104+
NO_SUCH_PROCEDURE,
105+
WRONG_ARG_COUNT,
106+
QUERY_REQUIRES_AGGREGATE,
107+
SELF_IS_UNKNOWN,
108+
INVERSE_BAD_ENTITY,
109+
INVERSE_BAD_ATTR,
110+
MISSING_SUPERTYPE,
111+
TYPE_IS_ENTITY,
112+
AMBIGUOUS_ATTR,
113+
AMBIGUOUS_GROUP,
114+
OVERLOADED_ATTR,
115+
REDECL_NO_SUCH_ATTR,
116+
REDECL_NO_SUCH_SUPERTYPE,
117+
MISSING_SELF,
118+
FN_SKIP_BRANCH,
119+
CASE_SKIP_LABEL,
120+
UNIQUE_QUAL_REDECL,
121+
/* type.c */
122+
CORRUPTED_TYPE,
123+
UNDEFINED_TAG,
124+
/* exppp.c */
125+
SELECT_EMPTY,
126+
};
127+
128+
/*************/
129+
/* constants */
130+
/*************/
131+
132+
#define ERROR_none (Error)NULL
133+
#define ERROR_MAX 100
134+
49135
/************/
50136
/* typedefs */
51137
/************/
52138

53-
typedef enum {
54-
SEVERITY_WARNING = 0,
55-
SEVERITY_ERROR = 1,
56-
SEVERITY_EXIT = 2,
57-
SEVERITY_DUMP = 3,
58-
SEVERITY_MAX = 4
59-
} Severity;
139+
enum Severity {
140+
SEVERITY_WARNING = 0,
141+
SEVERITY_ERROR,
142+
SEVERITY_EXIT,
143+
SEVERITY_DUMP,
144+
SEVERITY_MAX
145+
};
60146

61147
/***************************/
62148
/* hidden type definitions */
63149
/***************************/
64150

65-
typedef struct Error_ {
66-
bool enabled;
67-
Severity severity;
68-
char * message;
69-
int serial; /* used to give each type of error a unique identifier */
70-
} * Error;
151+
struct Error_ {
152+
enum Severity severity;
153+
const char *message;
154+
const char *name;
155+
bool override;
156+
};
71157

72-
typedef struct Error_Warning_ {
73-
char * name;
74-
struct Linked_List_ * errors;
75-
} * Error_Warning;
158+
typedef struct Error_ *Error;
76159

77160
/****************/
78161
/* modules used */
@@ -89,10 +172,6 @@ extern SC_EXPRESS_EXPORT const char * current_filename;
89172
extern SC_EXPRESS_EXPORT bool ERRORoccurred;
90173

91174

92-
extern SC_EXPRESS_EXPORT Error experrc;
93-
extern SC_EXPRESS_EXPORT Error ERROR_subordinate_failed;
94-
extern SC_EXPRESS_EXPORT Error ERROR_syntax_expecting;
95-
96175
/* all of these are 1 if true, 0 if false switches */
97176
/* for debugging fedex */
98177
extern SC_EXPRESS_EXPORT int ERRORdebugging;
@@ -101,45 +180,15 @@ extern SC_EXPRESS_EXPORT int malloc_debug_resolve;
101180
/* for debugging yacc/lex */
102181
extern SC_EXPRESS_EXPORT int debug;
103182

104-
extern SC_EXPRESS_EXPORT struct Linked_List_ * ERRORwarnings;
105-
extern SC_EXPRESS_EXPORT struct freelist_head ERROR_OPT_fl;
106-
107183
extern SC_EXPRESS_EXPORT void ( *ERRORusage_function )( void );
108184

109-
/******************************/
110-
/* macro function definitions */
111-
/******************************/
112-
113-
#define ERROR_OPT_new() (struct Error_Warning_ *)ALLOC_new(&ERROR_OPT_fl)
114-
#define ERROR_OPT_destroy(x) ALLOC_destroy(&ERROR_OPT_fl,(Freelist *)x)
115-
116185
/***********************/
117186
/* function prototypes */
118187
/***********************/
119188

120189
extern SC_EXPRESS_EXPORT void ERROR_start_message_buffer( void );
121190
extern SC_EXPRESS_EXPORT void ERROR_flush_message_buffer( void );
122191

123-
/********************/
124-
/* Inline functions */
125-
/********************/
126-
127-
static inline void ERRORdisable( Error error ) {
128-
if( error != ERROR_none ) {
129-
error->enabled = false;
130-
}
131-
}
132-
133-
static inline void ERRORenable( Error error ) {
134-
if( error != ERROR_none ) {
135-
error->enabled = true;
136-
}
137-
}
138-
139-
static inline bool ERRORis_enabled( Error error ) {
140-
return error->enabled;
141-
}
142-
143192
static inline void ERRORbuffer_messages( bool flag ) {
144193
__ERROR_buffer_errors = flag;
145194
if( __ERROR_buffer_errors ) {
@@ -162,22 +211,21 @@ static inline void ERRORflush_messages( void ) {
162211
/***********************/
163212

164213
extern SC_EXPRESS_EXPORT void ERRORinitialize( void );
165-
extern SC_EXPRESS_EXPORT void ERRORinitialize_after_LIST( void );
166214
extern SC_EXPRESS_EXPORT void ERRORcleanup( void );
167215
extern SC_EXPRESS_EXPORT void ERRORnospace( void );
168216
extern SC_EXPRESS_EXPORT void ERRORabort( int );
169-
extern SC_EXPRESS_EXPORT Error ERRORcreate( char *, Severity );
170-
extern SC_EXPRESS_EXPORT void ERRORreport( Error, ... );
171-
extern SC_EXPRESS_EXPORT void ERRORdestroy( Error );
217+
extern SC_EXPRESS_EXPORT void ERRORreport( enum ErrorCode, ... );
172218

173219
struct Symbol_; /* mention Symbol to avoid warning on following line */
174-
extern SC_EXPRESS_EXPORT void ERRORreport_with_symbol( Error, struct Symbol_ *, ... );
175-
extern SC_EXPRESS_EXPORT void ERRORreport_with_line( Error, int, ... );
220+
extern SC_EXPRESS_EXPORT void ERRORreport_with_symbol( enum ErrorCode, struct Symbol_ *, ... );
221+
extern SC_EXPRESS_EXPORT void ERRORreport_with_line( enum ErrorCode, int, ... );
176222

177-
extern SC_EXPRESS_EXPORT void ERRORcreate_warning( char *, Error );
178-
extern SC_EXPRESS_EXPORT void ERRORset_warning( char *, int );
179-
extern SC_EXPRESS_EXPORT void ERRORset_all_warnings( int );
223+
extern SC_EXPRESS_EXPORT void ERRORset_warning( char *, bool );
224+
extern SC_EXPRESS_EXPORT void ERRORset_all_warnings( bool );
180225
extern SC_EXPRESS_EXPORT void ERRORsafe( jmp_buf env );
181226
extern SC_EXPRESS_EXPORT void ERRORunsafe( void );
182227

228+
extern char * ERRORget_warnings_help(const char* prefix, const char *eol);
229+
extern bool ERRORis_enabled(enum ErrorCode errnum);
230+
183231
#endif /* ERROR_H */

include/express/expr.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,6 @@ extern SC_EXPRESS_EXPORT Expression LITERAL_PI;
193193
extern SC_EXPRESS_EXPORT Expression LITERAL_ZERO;
194194
extern SC_EXPRESS_EXPORT Expression LITERAL_ONE;
195195

196-
extern SC_EXPRESS_EXPORT Error ERROR_bad_qualification;
197-
extern SC_EXPRESS_EXPORT Error ERROR_integer_expression_expected;
198-
extern SC_EXPRESS_EXPORT Error ERROR_implicit_downcast;
199-
extern SC_EXPRESS_EXPORT Error ERROR_ambig_implicit_downcast;
200-
201196
extern SC_EXPRESS_EXPORT struct freelist_head EXP_fl;
202197
extern SC_EXPRESS_EXPORT struct freelist_head OP_fl;
203198
extern SC_EXPRESS_EXPORT struct freelist_head QUERY_fl;

include/express/express.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,14 +104,6 @@ extern SC_EXPRESS_EXPORT bool EXPRESSignore_duplicate_schemas;
104104

105105
extern SC_EXPRESS_EXPORT Dictionary EXPRESSbuiltins; /* procedures/functions */
106106

107-
extern SC_EXPRESS_EXPORT Error ERROR_bail_out;
108-
extern SC_EXPRESS_EXPORT Error ERROR_syntax;
109-
extern SC_EXPRESS_EXPORT Error ERROR_unlabelled_param_type;
110-
extern SC_EXPRESS_EXPORT Error ERROR_file_unreadable;
111-
extern SC_EXPRESS_EXPORT Error ERROR_file_unwriteable;
112-
extern SC_EXPRESS_EXPORT Error ERROR_warn_unsupported_lang_feat;
113-
extern SC_EXPRESS_EXPORT Error ERROR_warn_small_real;
114-
115107
extern SC_EXPRESS_EXPORT struct Scope_ * FUNC_NVL;
116108
extern SC_EXPRESS_EXPORT struct Scope_ * FUNC_USEDIN;
117109

include/express/lexact.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -72,16 +72,6 @@ extern SC_EXPRESS_EXPORT Scan_Buffer SCAN_buffers[SCAN_NESTING_DEPTH];
7272
extern SC_EXPRESS_EXPORT int SCAN_current_buffer;
7373
extern SC_EXPRESS_EXPORT char * SCANcurrent;
7474

75-
extern SC_EXPRESS_EXPORT Error ERROR_include_file;
76-
extern SC_EXPRESS_EXPORT Error ERROR_unmatched_close_comment;
77-
extern SC_EXPRESS_EXPORT Error ERROR_unmatched_open_comment;
78-
extern SC_EXPRESS_EXPORT Error ERROR_unterminated_string;
79-
extern SC_EXPRESS_EXPORT Error ERROR_encoded_string_bad_digit;
80-
extern SC_EXPRESS_EXPORT Error ERROR_encoded_string_bad_count;
81-
extern SC_EXPRESS_EXPORT Error ERROR_bad_identifier;
82-
extern SC_EXPRESS_EXPORT Error ERROR_unexpected_character;
83-
extern SC_EXPRESS_EXPORT Error ERROR_nonascii_char;
84-
8575
/******************************/
8676
/* macro function definitions */
8777
/******************************/

include/express/linklist.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ struct Linked_List_ {
7070
/* global variables */
7171
/********************/
7272

73-
extern SC_EXPRESS_EXPORT Error ERROR_empty_list;
7473
extern SC_EXPRESS_EXPORT struct freelist_head LINK_fl;
7574
extern SC_EXPRESS_EXPORT struct freelist_head LIST_fl;
7675

include/express/resolve.h

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,6 @@
4747

4848
extern SC_EXPRESS_EXPORT int print_objects_while_running;
4949

50-
extern SC_EXPRESS_EXPORT Error ERROR_undefined_attribute;
51-
extern SC_EXPRESS_EXPORT Error ERROR_undefined_type;
52-
extern SC_EXPRESS_EXPORT Error ERROR_undefined_schema;
53-
extern SC_EXPRESS_EXPORT Error ERROR_unknown_attr_in_entity;
54-
extern SC_EXPRESS_EXPORT Error ERROR_unknown_subtype;
55-
extern SC_EXPRESS_EXPORT Error ERROR_unknown_supertype;
56-
extern SC_EXPRESS_EXPORT Error ERROR_circular_reference;
57-
extern SC_EXPRESS_EXPORT Error ERROR_ambiguous_attribute;
58-
extern SC_EXPRESS_EXPORT Error ERROR_ambiguous_group;
59-
60-
extern SC_EXPRESS_EXPORT Error WARNING_case_skip_label;
61-
extern SC_EXPRESS_EXPORT Error WARNING_fn_skip_branch;
62-
6350
/* macros */
6451

6552
/* cheaper doing the check here, then inside the function call. Return */

include/express/type.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,6 @@ extern SC_EXPRESS_EXPORT Type Type_Bag_Of_Generic;
217217
extern SC_EXPRESS_EXPORT struct freelist_head TYPEHEAD_fl;
218218
extern SC_EXPRESS_EXPORT struct freelist_head TYPEBODY_fl;
219219

220-
extern SC_EXPRESS_EXPORT Error ERROR_corrupted_type;
221-
222220
/******************************/
223221
/* macro function definitions */
224222
/******************************/

src/exp2cxx/fedex_main.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
extern void print_fedex_version( void );
8484

8585
static void exp2cxx_usage( void ) {
86+
char *warnings_help_msg = ERRORget_warnings_help("\t", "\n");
8687
fprintf( stderr, "usage: %s [-s|-S] [-a|-A] [-L] [-v] [-d # | -d 9 -l nnn -u nnn] [-n] [-p <object_type>] {-w|-i <warning>} express_file\n", EXPRESSprogram_name );
8788
fprintf( stderr, "where\t-s or -S uses only single inheritance in the generated C++ classes\n" );
8889
fprintf( stderr, "\t-a or -A generates the early bound access functions for entity classes the old way (without an underscore)\n" );
@@ -95,9 +96,7 @@ static void exp2cxx_usage( void ) {
9596
fprintf( stderr, "\t-i warning ignore\n" );
9697
fprintf( stderr, "and <warning> is one of:\n" );
9798
fprintf( stderr, "\tnone\n\tall\n" );
98-
LISTdo( ERRORwarnings, opt, Error_Warning )
99-
fprintf( stderr, "\t%s\n", opt->name );
100-
LISTod
99+
fprintf( stderr, "%s", warnings_help_msg);
101100
fprintf( stderr, "and <object_type> is one or more of:\n" );
102101
fprintf( stderr, " e entity\n" );
103102
fprintf( stderr, " p procedure\n" );

src/exp2python/src/fedex_main_python.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@
1414
extern void print_fedex_version( void );
1515

1616
static void exp2python_usage( void ) {
17+
char *warnings_help_msg = ERRORget_warnings_help("\t", "\n");
1718
fprintf( stderr, "usage: %s [-v] [-d # | -d 9 -l nnn -u nnn] [-n] [-p <object_type>] {-w|-i <warning>} express_file\n", EXPRESSprogram_name );
1819
fprintf( stderr, "\t-v produces the version description below\n" );
1920
fprintf( stderr, "\t-d turns on debugging (\"-d 0\" describes this further\n" );
2021
fprintf( stderr, "\t-w warning enable\n" );
2122
fprintf( stderr, "\t-i warning ignore\n" );
2223
fprintf( stderr, "and <warning> is one of:\n" );
2324
fprintf( stderr, "\tnone\n\tall\n" );
24-
LISTdo( ERRORwarnings, opt, Error_Warning )
25-
fprintf( stderr, "\t%s\n", opt->name );
26-
LISTod
25+
fprintf( stderr, "%s", warnings_help_msg);
2726
fprintf( stderr, "and <object_type> is one or more of:\n" );
2827
fprintf( stderr, " e entity\n" );
2928
fprintf( stderr, " p procedure\n" );

src/exppp/exppp-main.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "exppp.h"
55

66
static void exppp_usage( void ) {
7+
char *warnings_help_msg = ERRORget_warnings_help("\t", "\n");
78
fprintf( stderr, "usage: %s [-v] [-d #] [-p <object_type>] {-w|-i <warning>} [-l <length>] [-c] [-o [file|--]] express_file\n", EXPRESSprogram_name );
89
fprintf( stderr, "\t-v produces a version description\n" );
910
fprintf( stderr, "\t-l specifies line length hint for output\n" );
@@ -16,9 +17,7 @@ static void exppp_usage( void ) {
1617
fprintf( stderr, "\t-i warning ignore\n" );
1718
fprintf( stderr, "and <warning> is one of:\n" );
1819
fprintf( stderr, "\tnone\n\tall\n" );
19-
LISTdo( ERRORwarnings, opt, Error_Warning )
20-
fprintf( stderr, "\t%s\n", opt->name );
21-
LISTod
20+
fprintf( stderr, "%s", warnings_help_msg);
2221
fprintf( stderr, "and <object_type> is one or more of:\n" );
2322
fprintf( stderr, " e entity\n" );
2423
fprintf( stderr, " p procedure\n" );

0 commit comments

Comments
 (0)