mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 03:47:02 -05:00
Introduce 45 warning options, integrated with dialects. Update documentation with warning options and syntax supported by each dialect. gcc/cobol/ChangeLog: PR cobol/119329 PR cobol/119331 PR cobol/120786 * Make-lang.in: Add cobol/messages.o to cobol1 sources. * cbldiag.h (yywarn): Remove function. (struct cbl_loc_t): Introduce new location type independent of Bison. (enum cbl_diag_id_t): Enumerate diagnostic messages. (cbl_message): New function. (dialect_ok): Test for dialect, emit standard message. (dialect_not_ok): Emit standard message if syntax excluded by dialect. (dialect_error): Remove function. (cbl_unimplementedw): Use cbl_diag_id_t. (cbl_unimplemented): Whitespace. * cdf.y: Update token values. * cobol1.cc (enable_exceptions): Use cbl_message. (cobol_warning): Declare function. (cobol_langhook_handle_option): Add 44 new warning options. (cobol_langhook_type_for_mode): Remove function. * except.cc (cbl_enabled_exception_t::dump): Remove function. * exceptg.h (class exception_turn_t): Use cbl_diag_id_t. * gcobol.1: Document dialect syntax and new warning options. * genapi.cc (parser_label_label): Remove unused warning. * gengen.cc (gg_find_field_in_struct): Use cbl_internal_error. (gg_printf): Same. (gg_fprintf): Same. (gg_define_function): Same. (gg_get_function_decl): Same. (gg_call_expr): Same. (gg_call): Same. * lang-specs.h: Add warning options. * lang.opt: Add ISO dialect and options. * lexio.cc (parse_replacing_term): Use cbl_message. (parse_replacing_pair): Same. (preprocess_filter_add): Same. (cdftext::echo_input): Same. (cdftext::lex_open): Same. (cdftext::open_input): Same. * messages.cc: New file implements cbl_message. * parse.y: Use cbl_message. * parse_ante.h (dialect_proscribed): Remove function. (parser_move_carefully): Use dialect_ok. (goodnight_gracie): Convert warning to debug message. * scan.l: Use dialect_ok. * scan_ante.h (scanner_parsing): Use cbl_diag_id_t. (scanner_parsing_toggle): Same. (scanner_parsing_pop): Same. (verify_ws): Same. (level_of): Same. (typed_name): Same. (integer_of): Same. * scan_post.h (datetime_format_of): Use cbl_internal_error. (prelex): Emit only debug messages. * show_parse.h: Use cbl_internal_error. * symbols.cc (symbols_update): Remove dialect test because parser's problem. (cbl_field_t::internalize): Use cbl_message. * symbols.h (enum cbl_dialect_t): Add ISO to cbl_dialect_t. (cbl_dialect_str): Recognize ISO dialect. (dialect_has): New function. (cbl_diagnostic_kind): New function. (cbl_dialect_kind): New function. (struct cbl_alphabet_t): Emit only debug message. * token_names.h: Regenerate. * util.cc (gb4): Emit only debug message. (current_token_location): Add overload to set token_location. (yywarn): Remove function. (cobol_fileline_set): Use cbl_message. (cobol_parse_files): Same. (cbl_message): New diagnostic message function uses cbl_diag_id_t. (cbl_diagnostic_kind): New function. (cbl_diagnostic_option): New function. (cbl_unimplementedw): Use cbl_diag_id_t. (dialect_error): Remove function. * util.h (cbl_message): Remove obsolete prototype for cbl_message.
127 lines
3.9 KiB
C++
127 lines
3.9 KiB
C++
/*
|
|
* Copyright (c) 2021-2025 Symas Corporation
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following disclaimer
|
|
* in the documentation and/or other materials provided with the
|
|
* distribution.
|
|
* * Neither the name of the Symas Corporation nor the names of its
|
|
* contributors may be used to endorse or promote products derived from
|
|
* this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _UTIL_H_
|
|
#define _UTIL_H_
|
|
|
|
[[noreturn]] void cbl_internal_error(const char *format_string, ...)
|
|
ATTRIBUTE_GCOBOL_DIAG(1, 2);
|
|
|
|
void cbl_err(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
|
|
void cbl_errx(const char *format_string, ...) ATTRIBUTE_GCOBOL_DIAG(1, 2);
|
|
|
|
bool fisdigit(int c);
|
|
bool fisspace(int c);
|
|
int ftolower(int c);
|
|
int ftoupper(int c);
|
|
bool fisprint(int c);
|
|
|
|
void cobol_set_pp_option(int opt);
|
|
|
|
void cobol_filename_restore();
|
|
const char * cobol_lineno( int );
|
|
int cobol_lineno(void);
|
|
|
|
unsigned long gb4( size_t input );
|
|
|
|
template <typename P>
|
|
static inline const void *
|
|
as_voidp( P p ) {
|
|
return static_cast<const void *>(p);
|
|
}
|
|
|
|
/*
|
|
* The default source format, whether free or fixed, is determined
|
|
* heuristically by examining the PROGRAM-ID line, if it exists, in the first
|
|
* input file. If that file does not have such a line, the default is free
|
|
* format. Else the format is set to fixed if anything appears on that line
|
|
* that would prohibit parsing it as free format,
|
|
*/
|
|
class source_format_t {
|
|
bool first_file, explicitly;
|
|
int left, right;
|
|
public:
|
|
source_format_t()
|
|
: first_file(true), explicitly(false), left(0), right(0)
|
|
{}
|
|
void indicator_column_set( int column ) {
|
|
explicitly = true;
|
|
if( column == 0 ) right = 0;
|
|
if( column < 0 ) {
|
|
column = -column;
|
|
right = 73;
|
|
}
|
|
left = column;
|
|
}
|
|
|
|
bool inference_pending() {
|
|
bool tf = first_file && !explicitly;
|
|
first_file = false;
|
|
return tf;
|
|
}
|
|
|
|
void infer( const char *bol, bool want_reference_format );
|
|
|
|
inline bool is_fixed() const { return left == 7; }
|
|
inline bool is_reffmt() const { return is_fixed() && right == 73; }
|
|
inline bool is_free() const { return ! is_fixed(); }
|
|
|
|
const char * description() const {
|
|
if( is_reffmt() ) return "REFERENCE";
|
|
if( is_fixed() ) return "FIXED";
|
|
if( is_free() ) return "FREE";
|
|
gcc_unreachable();
|
|
}
|
|
|
|
inline int left_margin() {
|
|
return left == 0? left : left - 1;
|
|
}
|
|
inline int right_margin() {
|
|
return right == 0? right : right - 1;
|
|
}
|
|
};
|
|
|
|
|
|
void cdf_push();
|
|
void cdf_push_call_convention();
|
|
void cdf_push_current_tokens();
|
|
void cdf_push_dictionary();
|
|
void cdf_push_enabled_exceptions();
|
|
void cdf_push_source_format();
|
|
|
|
void cdf_pop();
|
|
void cdf_pop_call_convention();
|
|
void cdf_pop_current_tokens();
|
|
void cdf_pop_dictionary();
|
|
void cdf_pop_source_format();
|
|
void cdf_pop_enabled_exceptions();
|
|
|
|
#endif
|