From patchwork Sat Jun 4 14:49:19 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 12771 Received: (qmail 2594 invoked by alias); 4 Jun 2016 14:49:58 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 2506 invoked by uid 89); 4 Jun 2016 14:49:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.8 required=5.0 tests=AWL, BAYES_00, FSL_HELO_HOME, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=no version=3.3.2 spammy=114, 12, 11412, Style, lai X-HELO: gproxy7-pub.mail.unifiedlayer.com Received: from gproxy7-pub.mail.unifiedlayer.com (HELO gproxy7-pub.mail.unifiedlayer.com) (70.40.196.235) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with SMTP; Sat, 04 Jun 2016 14:49:38 +0000 Received: (qmail 18896 invoked by uid 0); 4 Jun 2016 14:49:35 -0000 Received: from unknown (HELO cmgw2) (10.0.90.83) by gproxy7.mail.unifiedlayer.com with SMTP; 4 Jun 2016 14:49:35 -0000 Received: from box522.bluehost.com ([74.220.219.122]) by cmgw2 with id 2epW1t00b2f2jeq01epZkU; Sat, 04 Jun 2016 08:49:33 -0600 X-Authority-Analysis: v=2.1 cv=ff4+lSgF c=1 sm=1 tr=0 a=GsOEXm/OWkKvwdLVJsfwcA==:117 a=GsOEXm/OWkKvwdLVJsfwcA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=PnD2wP_eR3oA:10 a=-N9Dh3nx2ZYA:10 a=pD_ry4oyNxEA:10 a=zstS-IiYAAAA:8 a=8G0di3w21LMMwRq4EAoA:9 a=4G6NA9xxw8l3yy4pmD5M:22 Received: from [65.128.48.199] (port=36208 helo=bapiya.Home) by box522.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.86_2) (envelope-from ) id 1b9CtI-0005Fy-4d; Sat, 04 Jun 2016 08:49:32 -0600 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 2/3] Move filename extensions into language_defn Date: Sat, 4 Jun 2016 08:49:19 -0600 Message-Id: <1465051760-25840-3-git-send-email-tom@tromey.com> In-Reply-To: <1465051760-25840-1-git-send-email-tom@tromey.com> References: <1465051760-25840-1-git-send-email-tom@tromey.com> X-Identified-User: {36111:box522.bluehost.com:elynrobi:tromey.com} {sentby:smtp auth 65.128.48.199 authed with tom+tromey.com} X-Exim-ID: 1b9CtI-0005Fy-4d X-Source-Sender: (bapiya.Home) [65.128.48.199]:36208 X-Source-Auth: tom+tromey.com X-Email-Count: 0 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTIyLmJsdWVob3N0LmNvbQ== This moves filename extensions from a function in symfile.c out to each language_defn. I think this is an improvement because it means less digging around when writing a new language port. 2016-06-04 Tom Tromey * ada-lang.c (ada_extensions): New array. (ada_language_defn): Use it. * c-lang.c (c_extensions): New array. (c_language_defn): Use it. (cplus_extensions): New array. (cplus_language_defn): Use it. (asm_extensions): New array. (asm_language_defn): Use it. (minimal_language_defn): Update. * d-lang.c (d_extensions): New array. (d_language_defn): Use it. * f-lang.c (f_extensions): New array. (f_language_defn): Use it. * go-lang.c (go_language_defn): Update. * jv-lang.c (java_extensions): New array. (java_language_defn): Use it. * language.c (add_language): Call add_filename_language. (unknown_language_defn, auto_language_defn, local_language_defn): Update. * language.h (struct language_defn) : New field. * m2-lang.c (m2_language_defn): Update. * objc-lang.c (objc_extensions): New array. (objc_language_defn): Use it. * opencl-lang.c (opencl_language_defn): Update. * p-lang.c (p_extensions): New array. (pascal_language_defn): Use it. * rust-lang.c (rust_extensions): New array. (rust_language_defn): Use it. * symfile.c (add_filename_language): No longer static. Make "ext" const. (init_filename_language_table): Remove. (_initialize_symfile): Update. * symfile.h (add_filename_language): Declare. --- gdb/ChangeLog | 37 ++++++++++++++++++++++++++++++++++ gdb/ada-lang.c | 6 ++++++ gdb/c-lang.c | 19 ++++++++++++++++++ gdb/d-lang.c | 6 ++++++ gdb/f-lang.c | 8 ++++++++ gdb/go-lang.c | 1 + gdb/jv-lang.c | 6 ++++++ gdb/language.c | 13 ++++++++++++ gdb/language.h | 7 +++++++ gdb/m2-lang.c | 1 + gdb/objc-lang.c | 6 ++++++ gdb/opencl-lang.c | 1 + gdb/p-lang.c | 6 ++++++ gdb/rust-lang.c | 6 ++++++ gdb/symfile.c | 59 ++++--------------------------------------------------- gdb/symfile.h | 5 +++++ 16 files changed, 132 insertions(+), 55 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b8f52bf..b58ccde 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,42 @@ 2016-06-04 Tom Tromey + * ada-lang.c (ada_extensions): New array. + (ada_language_defn): Use it. + * c-lang.c (c_extensions): New array. + (c_language_defn): Use it. + (cplus_extensions): New array. + (cplus_language_defn): Use it. + (asm_extensions): New array. + (asm_language_defn): Use it. + (minimal_language_defn): Update. + * d-lang.c (d_extensions): New array. + (d_language_defn): Use it. + * f-lang.c (f_extensions): New array. + (f_language_defn): Use it. + * go-lang.c (go_language_defn): Update. + * jv-lang.c (java_extensions): New array. + (java_language_defn): Use it. + * language.c (add_language): Call add_filename_language. + (unknown_language_defn, auto_language_defn, local_language_defn): + Update. + * language.h (struct language_defn) : New + field. + * m2-lang.c (m2_language_defn): Update. + * objc-lang.c (objc_extensions): New array. + (objc_language_defn): Use it. + * opencl-lang.c (opencl_language_defn): Update. + * p-lang.c (p_extensions): New array. + (pascal_language_defn): Use it. + * rust-lang.c (rust_extensions): New array. + (rust_language_defn): Use it. + * symfile.c (add_filename_language): No longer static. Make "ext" + const. + (init_filename_language_table): Remove. + (_initialize_symfile): Update. + * symfile.h (add_filename_language): Declare. + +2016-06-04 Tom Tromey + * symfile.c (filename_language_table): Now a VEC. (fl_table_size, fl_table_next): Remove. (add_filename_language): Use VEC_safe_push. diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 412aa97..e3f236f 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -14045,6 +14045,11 @@ ada_read_var_value (struct symbol *var, const struct block *var_block, return default_read_var_value (var, var_block, frame); } +static const char *ada_extensions[] = +{ + ".adb", ".ads", ".a", ".ada", ".dg", NULL +}; + const struct language_defn ada_language_defn = { "ada", /* Language name */ "Ada", @@ -14054,6 +14059,7 @@ const struct language_defn ada_language_defn = { that's not quite what this means. */ array_row_major, macro_expansion_no, + ada_extensions, &ada_exp_descriptor, parse, ada_yyerror, diff --git a/gdb/c-lang.c b/gdb/c-lang.c index 8192e97..9ccb87f 100644 --- a/gdb/c-lang.c +++ b/gdb/c-lang.c @@ -824,6 +824,11 @@ const struct exp_descriptor exp_descriptor_c = evaluate_subexp_c }; +static const char *c_extensions[] = +{ + ".c", NULL +}; + const struct language_defn c_language_defn = { "c", /* Language name */ @@ -833,6 +838,7 @@ const struct language_defn c_language_defn = case_sensitive_on, array_row_major, macro_expansion_c, + c_extensions, &exp_descriptor_c, c_parse, c_yyerror, @@ -951,6 +957,11 @@ cplus_language_arch_info (struct gdbarch *gdbarch, lai->bool_type_default = builtin->builtin_bool; } +static const char *cplus_extensions[] = +{ + ".C", ".cc", ".cp", ".cpp", ".cxx", ".c++", NULL +}; + const struct language_defn cplus_language_defn = { "c++", /* Language name */ @@ -960,6 +971,7 @@ const struct language_defn cplus_language_defn = case_sensitive_on, array_row_major, macro_expansion_c, + cplus_extensions, &exp_descriptor_c, c_parse, c_yyerror, @@ -996,6 +1008,11 @@ const struct language_defn cplus_language_defn = LANG_MAGIC }; +static const char *asm_extensions[] = +{ + ".s", ".sx", ".S", NULL +}; + const struct language_defn asm_language_defn = { "asm", /* Language name */ @@ -1005,6 +1022,7 @@ const struct language_defn asm_language_defn = case_sensitive_on, array_row_major, macro_expansion_c, + asm_extensions, &exp_descriptor_c, c_parse, c_yyerror, @@ -1055,6 +1073,7 @@ const struct language_defn minimal_language_defn = case_sensitive_on, array_row_major, macro_expansion_c, + NULL, &exp_descriptor_c, c_parse, c_yyerror, diff --git a/gdb/d-lang.c b/gdb/d-lang.c index 0075fea..b25136d 100644 --- a/gdb/d-lang.c +++ b/gdb/d-lang.c @@ -190,6 +190,11 @@ d_language_arch_info (struct gdbarch *gdbarch, lai->bool_type_default = builtin->builtin_bool; } +static const char *d_extensions[] = +{ + ".d", NULL +}; + static const struct language_defn d_language_defn = { "d", @@ -199,6 +204,7 @@ static const struct language_defn d_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + d_extensions, &exp_descriptor_c, d_parse, d_yyerror, diff --git a/gdb/f-lang.c b/gdb/f-lang.c index 22c308f..719083b 100644 --- a/gdb/f-lang.c +++ b/gdb/f-lang.c @@ -235,6 +235,13 @@ f_make_symbol_completion_list (const char *text, const char *word, return default_make_symbol_completion_list_break_on (text, word, ":", code); } +static const char *f_extensions[] = +{ + ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP", + ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08", + NULL +}; + const struct language_defn f_language_defn = { "fortran", @@ -244,6 +251,7 @@ const struct language_defn f_language_defn = case_sensitive_off, array_column_major, macro_expansion_no, + f_extensions, &exp_descriptor_standard, f_parse, /* parser */ f_yyerror, /* parser error function */ diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 84a366a..15ca78b 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -565,6 +565,7 @@ static const struct language_defn go_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_c, go_parse, go_yyerror, diff --git a/gdb/jv-lang.c b/gdb/jv-lang.c index 14aa0e0..797a7f0 100644 --- a/gdb/jv-lang.c +++ b/gdb/jv-lang.c @@ -1162,6 +1162,11 @@ const struct exp_descriptor exp_descriptor_java = evaluate_subexp_java }; +static const char *java_extensions[] = +{ + ".java", ".class", NULL +}; + const struct language_defn java_language_defn = { "java", /* Language name */ @@ -1171,6 +1176,7 @@ const struct language_defn java_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + java_extensions, &exp_descriptor_java, java_parse, java_yyerror, diff --git a/gdb/language.c b/gdb/language.c index 8469754..02e21ca 100644 --- a/gdb/language.c +++ b/gdb/language.c @@ -575,6 +575,16 @@ add_language (const struct language_defn *lang) language_names[i] = languages[i]->la_name; language_names[i] = NULL; + /* Add the filename extensions. */ + if (lang->la_filename_extensions != NULL) + { + int i; + + for (i = 0; lang->la_filename_extensions[i] != NULL; ++i) + add_filename_language (lang->la_filename_extensions[i], + lang->la_language); + } + /* Build the "help set language" docs. */ tmp_stream = mem_fileopen (); @@ -815,6 +825,7 @@ const struct language_defn unknown_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_standard, unk_lang_parser, unk_lang_error, @@ -862,6 +873,7 @@ const struct language_defn auto_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_standard, unk_lang_parser, unk_lang_error, @@ -907,6 +919,7 @@ const struct language_defn local_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_standard, unk_lang_parser, unk_lang_error, diff --git a/gdb/language.h b/gdb/language.h index 49243a9..d57c60e 100644 --- a/gdb/language.h +++ b/gdb/language.h @@ -164,6 +164,13 @@ struct language_defn /* Style of macro expansion, if any, supported by this language. */ enum macro_expansion la_macro_expansion; + /* A NULL-terminated array of file extensions for this language. + The extension must include the ".", like ".c". If this + language doesn't need to provide any filename extensions, this + may be NULL. */ + + const char *const *la_filename_extensions; + /* Definitions related to expression printing, prefixifying, and dumping. */ diff --git a/gdb/m2-lang.c b/gdb/m2-lang.c index 917da15..4626bfc 100644 --- a/gdb/m2-lang.c +++ b/gdb/m2-lang.c @@ -363,6 +363,7 @@ const struct language_defn m2_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + NULL, &exp_descriptor_modula2, m2_parse, /* parser */ m2_yyerror, /* parser error function */ diff --git a/gdb/objc-lang.c b/gdb/objc-lang.c index 34f90e8..fe3e082 100644 --- a/gdb/objc-lang.c +++ b/gdb/objc-lang.c @@ -350,6 +350,11 @@ static const struct op_print objc_op_print_tab[] = {NULL, OP_NULL, PREC_NULL, 0} }; +static const char *objc_extensions[] = +{ + ".m", NULL +}; + const struct language_defn objc_language_defn = { "objective-c", /* Language name */ "Objective-C", @@ -358,6 +363,7 @@ const struct language_defn objc_language_defn = { case_sensitive_on, array_row_major, macro_expansion_c, + objc_extensions, &exp_descriptor_standard, c_parse, c_yyerror, diff --git a/gdb/opencl-lang.c b/gdb/opencl-lang.c index 767d3bc..74651bc 100644 --- a/gdb/opencl-lang.c +++ b/gdb/opencl-lang.c @@ -1052,6 +1052,7 @@ const struct language_defn opencl_language_defn = case_sensitive_on, array_row_major, macro_expansion_c, + NULL, &exp_descriptor_opencl, c_parse, c_yyerror, diff --git a/gdb/p-lang.c b/gdb/p-lang.c index 8ff2682..0897be2 100644 --- a/gdb/p-lang.c +++ b/gdb/p-lang.c @@ -412,6 +412,11 @@ pascal_language_arch_info (struct gdbarch *gdbarch, lai->bool_type_default = builtin->builtin_bool; } +static const char *p_extensions[] = +{ + ".pas", ".p", ".pp", NULL +}; + const struct language_defn pascal_language_defn = { "pascal", /* Language name */ @@ -421,6 +426,7 @@ const struct language_defn pascal_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + p_extensions, &exp_descriptor_standard, pascal_parse, pascal_yyerror, diff --git a/gdb/rust-lang.c b/gdb/rust-lang.c index 5df99ce..36dab67 100644 --- a/gdb/rust-lang.c +++ b/gdb/rust-lang.c @@ -1998,6 +1998,11 @@ static const struct exp_descriptor exp_descriptor_rust = rust_evaluate_subexp }; +static const char *rust_extensions[] = +{ + ".rs", NULL +}; + static const struct language_defn rust_language_defn = { "rust", @@ -2007,6 +2012,7 @@ static const struct language_defn rust_language_defn = case_sensitive_on, array_row_major, macro_expansion_no, + rust_extensions, &exp_descriptor_rust, rust_parse, rustyyerror, diff --git a/gdb/symfile.c b/gdb/symfile.c index f7f56c6..d29e96c 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -114,12 +114,8 @@ static int simple_read_overlay_table (void); static int simple_overlay_update_1 (struct obj_section *); -static void add_filename_language (char *ext, enum language lang); - static void info_ext_lang_command (char *args, int from_tty); -static void init_filename_language_table (void); - static void symfile_find_segment_sections (struct objfile *objfile); void _initialize_symfile (void); @@ -2719,8 +2715,10 @@ DEF_VEC_O (filename_language); static VEC (filename_language) *filename_language_table; -static void -add_filename_language (char *ext, enum language lang) +/* See symfile.h. */ + +void +add_filename_language (const char *ext, enum language lang) { filename_language entry; @@ -2818,54 +2816,6 @@ info_ext_lang_command (char *args, int from_tty) printf_filtered ("\t%s\t- %s\n", entry->ext, language_str (entry->lang)); } -static void -init_filename_language_table (void) -{ - /* Protect against repetition. */ - if (VEC_empty (filename_language, filename_language_table)) - { - add_filename_language (".c", language_c); - add_filename_language (".d", language_d); - add_filename_language (".C", language_cplus); - add_filename_language (".cc", language_cplus); - add_filename_language (".cp", language_cplus); - add_filename_language (".cpp", language_cplus); - add_filename_language (".cxx", language_cplus); - add_filename_language (".c++", language_cplus); - add_filename_language (".java", language_java); - add_filename_language (".class", language_java); - add_filename_language (".m", language_objc); - add_filename_language (".f", language_fortran); - add_filename_language (".F", language_fortran); - add_filename_language (".for", language_fortran); - add_filename_language (".FOR", language_fortran); - add_filename_language (".ftn", language_fortran); - add_filename_language (".FTN", language_fortran); - add_filename_language (".fpp", language_fortran); - add_filename_language (".FPP", language_fortran); - add_filename_language (".f90", language_fortran); - add_filename_language (".F90", language_fortran); - add_filename_language (".f95", language_fortran); - add_filename_language (".F95", language_fortran); - add_filename_language (".f03", language_fortran); - add_filename_language (".F03", language_fortran); - add_filename_language (".f08", language_fortran); - add_filename_language (".F08", language_fortran); - add_filename_language (".s", language_asm); - add_filename_language (".sx", language_asm); - add_filename_language (".S", language_asm); - add_filename_language (".pas", language_pascal); - add_filename_language (".p", language_pascal); - add_filename_language (".pp", language_pascal); - add_filename_language (".adb", language_ada); - add_filename_language (".ads", language_ada); - add_filename_language (".a", language_ada); - add_filename_language (".ada", language_ada); - add_filename_language (".dg", language_ada); - add_filename_language (".rs", language_rust); - } -} - enum language deduce_language_from_filename (const char *filename) { @@ -4018,7 +3968,6 @@ A load OFFSET may also be given."), &cmdlist); _("Read the overlay mapping state from the target."), &overlaylist); /* Filename extension to source language lookup table: */ - init_filename_language_table (); add_setshow_string_noescape_cmd ("extension-language", class_files, &ext_args, _("\ Set mapping between filename extension and source language."), _("\ diff --git a/gdb/symfile.h b/gdb/symfile.h index c538e05..a11c48a 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -440,6 +440,11 @@ extern void clear_symtab_users (int add_flags); extern enum language deduce_language_from_filename (const char *); +/* Map the filename extension EXT to the language LANG. Any previous + association of EXT will be removed. EXT will be copied by this + function. */ +extern void add_filename_language (const char *ext, enum language lang); + /* This enum encodes bit-flags passed as ADD_FLAGS parameter to symbol_file_add, etc. */