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.
103 lines
3.5 KiB
C++
103 lines
3.5 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 _EXCEPTL_H_
|
|
#define _EXCEPTL_H_
|
|
|
|
/* This file contains exception processing declarations needed by the gcc/cobol
|
|
compilation. It's not included in the libgcobol compilation. */
|
|
|
|
extern const char * ec_type_str( ec_type_t type );
|
|
extern ec_disposition_t ec_type_disposition( ec_type_t type );
|
|
|
|
extern void declarative_runtime_match( const std::list<cbl_declarative_t>& declaratives,
|
|
cbl_label_t *lave );
|
|
|
|
static inline ec_disposition_t
|
|
ec_implemented( ec_disposition_t disposition ) {
|
|
return ec_disposition_t( size_t(disposition) & ~0x80 );
|
|
}
|
|
|
|
// >>TURN arguments
|
|
class exception_turn_t;
|
|
bool apply_cdf_turn( const exception_turn_t& turn );
|
|
|
|
class exception_turn_t {
|
|
friend bool apply_cdf_turn( const exception_turn_t& turn );
|
|
typedef std::list<size_t> filelist_t;
|
|
typedef std::map<ec_type_t, filelist_t> ec_filemap_t;
|
|
ec_filemap_t exceptions;
|
|
bool enabled, location;
|
|
public:
|
|
|
|
exception_turn_t() : enabled(false), location(false) {};
|
|
|
|
explicit exception_turn_t( ec_type_t ec, bool enabled = true )
|
|
: enabled(enabled), location(false)
|
|
{
|
|
add_exception(ec);
|
|
}
|
|
|
|
bool enable( bool enabled ) {
|
|
return this->enabled = enabled;
|
|
}
|
|
bool enable( bool enabled, bool location ) {
|
|
this->location = location;
|
|
return this->enabled = enabled;
|
|
}
|
|
|
|
const ec_filemap_t& exception_files() const { return exceptions; }
|
|
|
|
bool add_exception( ec_type_t type, const filelist_t& files = filelist_t() ) {
|
|
ec_disposition_t disposition = ec_type_disposition(type);
|
|
if( disposition != ec_implemented(disposition) ) {
|
|
cbl_unimplementedw(EcUnknownW, "exception %qs", ec_type_str(type));
|
|
}
|
|
auto elem = exceptions.find(type);
|
|
if( elem != exceptions.end() ) return false; // cannot add twice
|
|
|
|
exceptions[type] = files;
|
|
return true;
|
|
}
|
|
|
|
void clear() {
|
|
for( auto& ex : exceptions ) {
|
|
ex.second.clear();
|
|
}
|
|
exceptions.clear();
|
|
enabled = location = false;
|
|
}
|
|
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|