Automatic date update in version.in
[deliverable/binutils-gdb.git] / gdb / language.c
CommitLineData
c906108c 1/* Multiple source language support for GDB.
1bac305b 2
3666a048 3 Copyright (C) 1991-2021 Free Software Foundation, Inc.
1bac305b 4
c906108c
SS
5 Contributed by the Department of Computer Science at the State University
6 of New York at Buffalo.
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
c5aa993b 13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b 20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
22
23/* This file contains functions that return things that are specific
24 to languages. Each function should examine current_language if necessary,
1777feb0 25 and return the appropriate result. */
c906108c
SS
26
27/* FIXME: Most of these would be better organized as macros which
28 return data out of a "language-specific" struct pointer that is set
29 whenever the working language changes. That would be a lot faster. */
30
31#include "defs.h"
32#include <ctype.h>
c906108c
SS
33#include "symtab.h"
34#include "gdbtypes.h"
35#include "value.h"
36#include "gdbcmd.h"
c906108c
SS
37#include "expression.h"
38#include "language.h"
a53b64ea 39#include "varobj.h"
c906108c
SS
40#include "target.h"
41#include "parser-defs.h"
9a3d7dfd 42#include "demangle.h"
8b60591b 43#include "symfile.h"
8de20a37 44#include "cp-support.h"
06096720 45#include "frame.h"
43cc5389 46#include "c-lang.h"
47e77640 47#include <algorithm>
0d12e84c 48#include "gdbarch.h"
bdfea17e 49#include "compile/compile-internal.h"
c906108c 50
a451cb65 51static void set_range_case (void);
c906108c 52
efdf6a73
AB
53/* range_mode ==
54 range_mode_auto: range_check set automatically to default of language.
55 range_mode_manual: range_check set manually by user. */
56
57enum range_mode
58 {
59 range_mode_auto, range_mode_manual
60 };
61
0d201fa4
AB
62/* case_mode ==
63 case_mode_auto: case_sensitivity set upon selection of scope.
64 case_mode_manual: case_sensitivity set only by user. */
65
66enum case_mode
67 {
68 case_mode_auto, case_mode_manual
69 };
70
c906108c 71/* The current (default at startup) state of type and range checking.
c5aa993b
JM
72 (If the modes are set to "auto", though, these are changed based
73 on the default language at startup, and then again based on the
74 language of the first source file. */
c906108c 75
efdf6a73 76static enum range_mode range_mode = range_mode_auto;
c906108c 77enum range_check range_check = range_check_off;
0d201fa4 78static enum case_mode case_mode = case_mode_auto;
63872f9d 79enum case_sensitivity case_sensitivity = case_sensitive_on;
c906108c 80
1777feb0 81/* The current language and language_mode (see language.h). */
c906108c 82
0874fd07 83const struct language_defn *current_language = nullptr;
c906108c
SS
84enum language_mode language_mode = language_mode_auto;
85
86/* The language that the user expects to be typing in (the language
87 of main(), or the last language we notified them about, or C). */
88
89const struct language_defn *expected_language;
90
0874fd07
AB
91/* Define the array containing all languages. */
92
93const struct language_defn *language_defn::languages[nr_languages];
c906108c 94
814fa4f6 95/* The current values of the "set language/range/case-sensitive" enum
b84aa90a
PA
96 commands. */
97static const char *language;
b84aa90a
PA
98static const char *range;
99static const char *case_sensitive;
c906108c 100
34916edc
CB
101/* See language.h. */
102const char lang_frame_mismatch_warn[] =
103N_("Warning: the current language does not match this frame.");
c906108c
SS
104\f
105/* This page contains the functions corresponding to GDB commands
1777feb0 106 and their helpers. */
c906108c
SS
107
108/* Show command. Display a warning if the language set
1777feb0 109 does not match the frame. */
c906108c 110static void
4d28ad1e
AC
111show_language_command (struct ui_file *file, int from_tty,
112 struct cmd_list_element *c, const char *value)
c906108c 113{
7ff38b1c 114 enum language flang; /* The language of the frame. */
c906108c 115
b84aa90a
PA
116 if (language_mode == language_mode_auto)
117 fprintf_filtered (gdb_stdout,
118 _("The current source language is "
119 "\"auto; currently %s\".\n"),
6f7664a9 120 current_language->name ());
b84aa90a 121 else
3e43a32a
MS
122 fprintf_filtered (gdb_stdout,
123 _("The current source language is \"%s\".\n"),
6f7664a9 124 current_language->name ());
b84aa90a 125
7ff38b1c
AB
126 if (has_stack_frames ())
127 {
128 struct frame_info *frame;
129
130 frame = get_selected_frame (NULL);
131 flang = get_frame_language (frame);
132 if (flang != language_unknown
133 && language_mode == language_mode_manual
134 && current_language->la_language != flang)
34916edc 135 printf_filtered ("%s\n", _(lang_frame_mismatch_warn));
7ff38b1c 136 }
c906108c
SS
137}
138
1777feb0 139/* Set command. Change the current working language. */
c906108c 140static void
eb4c3f4a
TT
141set_language_command (const char *ignore,
142 int from_tty, struct cmd_list_element *c)
c906108c 143{
7ff38b1c 144 enum language flang = language_unknown;
c906108c 145
47e77640
PA
146 /* "local" is a synonym of "auto". */
147 if (strcmp (language, "local") == 0)
148 language = "auto";
149
c906108c 150 /* Search the list of languages for a match. */
0874fd07 151 for (const auto &lang : language_defn::languages)
c5aa993b 152 {
6f7664a9 153 if (strcmp (lang->name (), language) == 0)
c5aa993b
JM
154 {
155 /* Found it! Go into manual mode, and use this language. */
47e77640 156 if (lang->la_language == language_auto)
c5aa993b 157 {
8b60591b 158 /* Enter auto mode. Set to the current frame's language, if
dda83cd7 159 known, or fallback to the initial language. */
c5aa993b 160 language_mode = language_mode_auto;
a70b8144 161 try
7ff38b1c
AB
162 {
163 struct frame_info *frame;
164
165 frame = get_selected_frame (NULL);
166 flang = get_frame_language (frame);
167 }
230d2906 168 catch (const gdb_exception_error &ex)
7ff38b1c
AB
169 {
170 flang = language_unknown;
171 }
7ff38b1c 172
c5aa993b
JM
173 if (flang != language_unknown)
174 set_language (flang);
8b60591b
JB
175 else
176 set_initial_language ();
c5aa993b
JM
177 expected_language = current_language;
178 return;
179 }
180 else
181 {
182 /* Enter manual mode. Set the specified language. */
183 language_mode = language_mode_manual;
47e77640 184 current_language = lang;
a451cb65 185 set_range_case ();
c5aa993b
JM
186 expected_language = current_language;
187 return;
188 }
189 }
c906108c 190 }
c906108c 191
b84aa90a
PA
192 internal_error (__FILE__, __LINE__,
193 "Couldn't find language `%s' in known languages list.",
194 language);
c906108c
SS
195}
196
c906108c 197/* Show command. Display a warning if the range setting does
1777feb0 198 not match the current language. */
c906108c 199static void
4d28ad1e
AC
200show_range_command (struct ui_file *file, int from_tty,
201 struct cmd_list_element *c, const char *value)
c906108c 202{
b84aa90a
PA
203 if (range_mode == range_mode_auto)
204 {
a121b7c1 205 const char *tmp;
b84aa90a
PA
206
207 switch (range_check)
208 {
209 case range_check_on:
210 tmp = "on";
211 break;
212 case range_check_off:
213 tmp = "off";
214 break;
215 case range_check_warn:
216 tmp = "warn";
217 break;
218 default:
219 internal_error (__FILE__, __LINE__,
220 "Unrecognized range check setting.");
221 }
222
223 fprintf_filtered (gdb_stdout,
224 _("Range checking is \"auto; currently %s\".\n"),
225 tmp);
226 }
227 else
228 fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
229 value);
230
efdf6a73
AB
231 if (range_check == range_check_warn
232 || ((range_check == range_check_on)
233 != current_language->range_checking_on_by_default ()))
b84aa90a
PA
234 warning (_("the current range check setting "
235 "does not match the language.\n"));
c906108c
SS
236}
237
1777feb0 238/* Set command. Change the setting for range checking. */
c906108c 239static void
eb4c3f4a
TT
240set_range_command (const char *ignore,
241 int from_tty, struct cmd_list_element *c)
c906108c 242{
6314a349 243 if (strcmp (range, "on") == 0)
c5aa993b 244 {
c906108c
SS
245 range_check = range_check_on;
246 range_mode = range_mode_manual;
c5aa993b 247 }
6314a349 248 else if (strcmp (range, "warn") == 0)
c5aa993b 249 {
c906108c
SS
250 range_check = range_check_warn;
251 range_mode = range_mode_manual;
c5aa993b 252 }
6314a349 253 else if (strcmp (range, "off") == 0)
c5aa993b 254 {
c906108c
SS
255 range_check = range_check_off;
256 range_mode = range_mode_manual;
c5aa993b 257 }
6314a349 258 else if (strcmp (range, "auto") == 0)
c5aa993b 259 {
c906108c 260 range_mode = range_mode_auto;
a451cb65 261 set_range_case ();
c906108c 262 return;
c5aa993b 263 }
c4093a6a
JM
264 else
265 {
b84aa90a
PA
266 internal_error (__FILE__, __LINE__,
267 _("Unrecognized range check setting: \"%s\""), range);
c4093a6a 268 }
efdf6a73
AB
269 if (range_check == range_check_warn
270 || ((range_check == range_check_on)
271 != current_language->range_checking_on_by_default ()))
b84aa90a
PA
272 warning (_("the current range check setting "
273 "does not match the language.\n"));
c906108c
SS
274}
275
63872f9d 276/* Show command. Display a warning if the case sensitivity setting does
1777feb0 277 not match the current language. */
63872f9d 278static void
4d28ad1e
AC
279show_case_command (struct ui_file *file, int from_tty,
280 struct cmd_list_element *c, const char *value)
63872f9d 281{
b84aa90a
PA
282 if (case_mode == case_mode_auto)
283 {
a121b7c1 284 const char *tmp = NULL;
b84aa90a
PA
285
286 switch (case_sensitivity)
287 {
288 case case_sensitive_on:
289 tmp = "on";
290 break;
291 case case_sensitive_off:
292 tmp = "off";
293 break;
294 default:
295 internal_error (__FILE__, __LINE__,
296 "Unrecognized case-sensitive setting.");
297 }
298
299 fprintf_filtered (gdb_stdout,
300 _("Case sensitivity in "
301 "name search is \"auto; currently %s\".\n"),
302 tmp);
303 }
304 else
3e43a32a
MS
305 fprintf_filtered (gdb_stdout,
306 _("Case sensitivity in name search is \"%s\".\n"),
b84aa90a
PA
307 value);
308
0d201fa4 309 if (case_sensitivity != current_language->case_sensitivity ())
b84aa90a
PA
310 warning (_("the current case sensitivity setting does not match "
311 "the language.\n"));
63872f9d
JG
312}
313
591e78ff
MK
314/* Set command. Change the setting for case sensitivity. */
315
63872f9d 316static void
eb4c3f4a 317set_case_command (const char *ignore, int from_tty, struct cmd_list_element *c)
63872f9d 318{
591e78ff
MK
319 if (strcmp (case_sensitive, "on") == 0)
320 {
321 case_sensitivity = case_sensitive_on;
322 case_mode = case_mode_manual;
323 }
324 else if (strcmp (case_sensitive, "off") == 0)
325 {
326 case_sensitivity = case_sensitive_off;
327 case_mode = case_mode_manual;
328 }
329 else if (strcmp (case_sensitive, "auto") == 0)
330 {
331 case_mode = case_mode_auto;
a451cb65 332 set_range_case ();
591e78ff
MK
333 return;
334 }
63872f9d 335 else
591e78ff 336 {
b84aa90a
PA
337 internal_error (__FILE__, __LINE__,
338 "Unrecognized case-sensitive setting: \"%s\"",
339 case_sensitive);
591e78ff 340 }
b84aa90a 341
0d201fa4 342 if (case_sensitivity != current_language->case_sensitivity ())
b84aa90a
PA
343 warning (_("the current case sensitivity setting does not match "
344 "the language.\n"));
63872f9d
JG
345}
346
347/* Set the status of range and type checking and case sensitivity based on
c906108c
SS
348 the current modes and the current language.
349 If SHOW is non-zero, then print out the current language,
1777feb0 350 type and range checking status. */
c906108c 351static void
a451cb65 352set_range_case (void)
c906108c 353{
c906108c 354 if (range_mode == range_mode_auto)
efdf6a73
AB
355 range_check = (current_language->range_checking_on_by_default ()
356 ? range_check_on : range_check_off);
c906108c 357
63872f9d 358 if (case_mode == case_mode_auto)
0d201fa4 359 case_sensitivity = current_language->case_sensitivity ();
c906108c
SS
360}
361
1777feb0
MS
362/* Set current language to (enum language) LANG. Returns previous
363 language. */
c906108c
SS
364
365enum language
fba45db2 366set_language (enum language lang)
c906108c 367{
c906108c
SS
368 enum language prev_language;
369
370 prev_language = current_language->la_language;
0874fd07 371 current_language = language_def (lang);
47e77640 372 set_range_case ();
c906108c
SS
373 return prev_language;
374}
375\f
c906108c 376
9f67fc59 377/* See language.h. */
c906108c
SS
378
379void
9f67fc59 380language_info ()
c906108c 381{
9f67fc59 382 if (expected_language == current_language)
c906108c
SS
383 return;
384
385 expected_language = current_language;
a3f17187 386 printf_unfiltered (_("Current language: %s\n"), language);
4d28ad1e 387 show_language_command (NULL, 1, NULL, NULL);
c906108c
SS
388}
389\f
c906108c 390
1777feb0 391/* Returns non-zero if the value is a pointer type. */
c906108c 392int
fba45db2 393pointer_type (struct type *type)
c906108c 394{
78134374 395 return type->code () == TYPE_CODE_PTR || TYPE_IS_REFERENCE (type);
c906108c
SS
396}
397
c906108c 398\f
c906108c 399/* This page contains functions that return info about
1777feb0 400 (struct value) values used in GDB. */
c906108c 401
1777feb0 402/* Returns non-zero if the value VAL represents a true value. */
c906108c 403int
3d6d86c6 404value_true (struct value *val)
c906108c
SS
405{
406 /* It is possible that we should have some sort of error if a non-boolean
407 value is used in this context. Possibly dependent on some kind of
408 "boolean-checking" option like range checking. But it should probably
409 not depend on the language except insofar as is necessary to identify
410 a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
411 should be an error, probably). */
412 return !value_logical_not (val);
413}
414\f
c906108c
SS
415/* This page contains functions for the printing out of
416 error messages that occur during type- and range-
1777feb0 417 checking. */
c906108c 418
a451cb65 419/* This is called when a language fails a range-check. The
ddfe3c15 420 first argument should be a printf()-style format string, and the
a451cb65
KS
421 rest of the arguments should be its arguments. If range_check is
422 range_check_on, an error is printed; if range_check_warn, a warning;
423 otherwise just the message. */
c906108c
SS
424
425void
ddfe3c15 426range_error (const char *string,...)
c906108c 427{
c5aa993b 428 va_list args;
c906108c 429
e0881a8e 430 va_start (args, string);
ddfe3c15
AC
431 switch (range_check)
432 {
433 case range_check_warn:
434 vwarning (string, args);
435 break;
436 case range_check_on:
437 verror (string, args);
438 break;
439 case range_check_off:
440 /* FIXME: cagney/2002-01-30: Should this function print anything
dda83cd7 441 when range error is off? */
ddfe3c15
AC
442 vfprintf_filtered (gdb_stderr, string, args);
443 fprintf_filtered (gdb_stderr, "\n");
444 break;
445 default:
e2e0b3e5 446 internal_error (__FILE__, __LINE__, _("bad switch"));
ddfe3c15 447 }
c5aa993b 448 va_end (args);
c906108c 449}
c906108c 450\f
c5aa993b 451
1777feb0 452/* This page contains miscellaneous functions. */
c906108c 453
1777feb0 454/* Return the language enum for a given language string. */
c906108c
SS
455
456enum language
2039bd9f 457language_enum (const char *str)
c906108c 458{
0874fd07 459 for (const auto &lang : language_defn::languages)
6f7664a9 460 if (strcmp (lang->name (), str) == 0)
47e77640 461 return lang->la_language;
c906108c 462
47e77640
PA
463 if (strcmp (str, "local") == 0)
464 return language_auto;
c906108c
SS
465
466 return language_unknown;
467}
468
1777feb0 469/* Return the language struct for a given language enum. */
c906108c
SS
470
471const struct language_defn *
fba45db2 472language_def (enum language lang)
c906108c 473{
0874fd07
AB
474 const struct language_defn *l = language_defn::languages[lang];
475 gdb_assert (l != nullptr);
476 return l;
c906108c
SS
477}
478
1777feb0 479/* Return the language as a string. */
47e77640 480
27cd387b 481const char *
fba45db2 482language_str (enum language lang)
c906108c 483{
6f7664a9 484 return language_def (lang)->name ();
c906108c
SS
485}
486
c906108c 487\f
c906108c 488
47e77640 489/* Build and install the "set language LANG" command. */
b84aa90a 490
47e77640
PA
491static void
492add_set_language_command ()
493{
494 static const char **language_names;
c906108c 495
47e77640
PA
496 /* Build the language names array, to be used as enumeration in the
497 "set language" enum command. +1 for "local" and +1 for NULL
498 termination. */
0874fd07 499 language_names = new const char *[ARRAY_SIZE (language_defn::languages) + 2];
47e77640
PA
500
501 /* Display "auto", "local" and "unknown" first, and then the rest,
502 alpha sorted. */
503 const char **language_names_p = language_names;
6f7664a9 504 *language_names_p++ = language_def (language_auto)->name ();
47e77640 505 *language_names_p++ = "local";
6f7664a9 506 *language_names_p++ = language_def (language_unknown)->name ();
47e77640 507 const char **sort_begin = language_names_p;
0874fd07 508 for (const auto &lang : language_defn::languages)
c906108c 509 {
47e77640
PA
510 /* Already handled above. */
511 if (lang->la_language == language_auto
512 || lang->la_language == language_unknown)
513 continue;
6f7664a9 514 *language_names_p++ = lang->name ();
c906108c 515 }
47e77640
PA
516 *language_names_p = NULL;
517 std::sort (sort_begin, language_names_p, compare_cstrings);
b84aa90a 518
56618e20 519 /* Add the filename extensions. */
0874fd07 520 for (const auto &lang : language_defn::languages)
e171d6f1
AB
521 for (const char * const &ext : lang->filename_extensions ())
522 add_filename_language (ext, lang->la_language);
56618e20 523
b84aa90a 524 /* Build the "help set language" docs. */
d7e74731 525 string_file doc;
b84aa90a 526
d7e74731
PA
527 doc.printf (_("Set the current source language.\n"
528 "The currently understood settings are:\n\nlocal or "
89549d7f 529 "auto Automatic setting based on source file"));
b84aa90a 530
0874fd07 531 for (const auto &lang : language_defn::languages)
b84aa90a
PA
532 {
533 /* Already dealt with these above. */
47e77640
PA
534 if (lang->la_language == language_unknown
535 || lang->la_language == language_auto)
b84aa90a
PA
536 continue;
537
89549d7f
TT
538 /* Note that we add the newline at the front, so we don't wind
539 up with a trailing newline. */
6f7664a9
AB
540 doc.printf ("\n%-16s Use the %s language",
541 lang->name (),
542 lang->natural_name ());
b84aa90a
PA
543 }
544
b84aa90a 545 add_setshow_enum_cmd ("language", class_support,
47e77640 546 language_names,
b84aa90a 547 &language,
d7e74731 548 doc.c_str (),
3e43a32a
MS
549 _("Show the current source language."),
550 NULL, set_language_command,
b84aa90a
PA
551 show_language_command,
552 &setlist, &showlist);
c906108c
SS
553}
554
f636b87d
AF
555/* Iterate through all registered languages looking for and calling
556 any non-NULL struct language_defn.skip_trampoline() functions.
557 Return the result from the first that returns non-zero, or 0 if all
558 `fail'. */
559CORE_ADDR
52f729a7 560skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc)
f636b87d 561{
0874fd07 562 for (const auto &lang : language_defn::languages)
f636b87d 563 {
f6eee2d0 564 CORE_ADDR real_pc = lang->skip_trampoline (frame, pc);
e0881a8e 565
f6eee2d0
AB
566 if (real_pc != 0)
567 return real_pc;
f636b87d
AF
568 }
569
570 return 0;
571}
572
1777feb0 573/* Return demangled language symbol, or NULL.
9a3d7dfd
AF
574 FIXME: Options are only useful for certain languages and ignored
575 by others, so it would be better to remove them here and have a
1777feb0 576 more flexible demangler for the languages that need it.
9a3d7dfd
AF
577 FIXME: Sometimes the demangler is invoked when we don't know the
578 language, so we can't use this everywhere. */
579char *
580language_demangle (const struct language_defn *current_language,
581 const char *mangled, int options)
582{
0a50df5d 583 if (current_language != NULL)
5399db93 584 return current_language->demangle_symbol (mangled, options);
9a3d7dfd
AF
585 return NULL;
586}
587
9d084466
TBA
588/* Return information about whether TYPE should be passed
589 (and returned) by reference at the language level. */
590
591struct language_pass_by_ref_info
41f1b697
DJ
592language_pass_by_reference (struct type *type)
593{
48448202 594 return current_language->pass_by_reference_info (type);
41f1b697
DJ
595}
596
9f0a5303
JB
597/* Return the default string containing the list of characters
598 delimiting words. This is a reasonable default value that
599 most languages should be able to use. */
600
67cb5b2d 601const char *
9f0a5303
JB
602default_word_break_characters (void)
603{
604 return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
605}
f636b87d 606
5bd40f2a 607/* See language.h. */
e79af960
JB
608
609void
5bd40f2a
AB
610language_defn::print_array_index (struct type *index_type, LONGEST index,
611 struct ui_file *stream,
612 const value_print_options *options) const
e79af960 613{
53a47a3e
TT
614 struct value *index_value = value_from_longest (index_type, index);
615
e79af960 616 fprintf_filtered (stream, "[");
00c696a6 617 value_print (index_value, stream, options);
e79af960
JB
618 fprintf_filtered (stream, "] = ");
619}
620
f16a9f57
AB
621/* See language.h. */
622
623gdb::unique_xmalloc_ptr<char>
624language_defn::watch_location_expression (struct type *type,
625 CORE_ADDR addr) const
626{
627 /* Generates an expression that assumes a C like syntax is valid. */
628 type = check_typedef (TYPE_TARGET_TYPE (check_typedef (type)));
629 std::string name = type_to_string (type);
630 return gdb::unique_xmalloc_ptr<char>
631 (xstrprintf ("* (%s *) %s", name.c_str (), core_addr_to_string (addr)));
632}
633
a1d1fa3e
AB
634/* See language.h. */
635
636void
637language_defn::value_print (struct value *val, struct ui_file *stream,
638 const struct value_print_options *options) const
639{
640 return c_value_print (val, stream, options);
641}
642
ebe2334e
AB
643/* See language.h. */
644
87afa652
AB
645int
646language_defn::parser (struct parser_state *ps) const
647{
648 return c_parse (ps);
649}
650
651/* See language.h. */
652
ebe2334e
AB
653void
654language_defn::value_print_inner
655 (struct value *val, struct ui_file *stream, int recurse,
656 const struct value_print_options *options) const
657{
658 return c_value_print_inner (val, stream, recurse, options);
659}
660
ec8cec5b
AB
661/* See language.h. */
662
663void
664language_defn::emitchar (int ch, struct type *chtype,
665 struct ui_file * stream, int quoter) const
666{
667 c_emit_char (ch, chtype, stream, quoter);
668}
669
52b50f2c
AB
670/* See language.h. */
671
d711ee67
AB
672void
673language_defn::printstr (struct ui_file *stream, struct type *elttype,
674 const gdb_byte *string, unsigned int length,
675 const char *encoding, int force_ellipses,
676 const struct value_print_options *options) const
677{
678 c_printstr (stream, elttype, string, length, encoding, force_ellipses,
679 options);
680}
681
4ffc13fb
AB
682/* See language.h. */
683
684void
685language_defn::print_typedef (struct type *type, struct symbol *new_symbol,
686 struct ui_file *stream) const
687{
688 c_print_typedef (type, new_symbol, stream);
689}
690
39e7ecca
AB
691/* See language.h. */
692
693bool
694language_defn::is_string_type_p (struct type *type) const
695{
696 return c_is_string_type_p (type);
697}
698
bdfea17e
TT
699/* See language.h. */
700
701std::unique_ptr<compile_instance>
702language_defn::get_compile_instance () const
703{
704 return {};
705}
706
c9debfb9
AB
707/* The default implementation of the get_symbol_name_matcher_inner method
708 from the language_defn class. Matches with strncmp_iw. */
b5ec771e 709
c9debfb9 710static bool
b5ec771e
PA
711default_symbol_name_matcher (const char *symbol_search_name,
712 const lookup_name_info &lookup_name,
a207cff2 713 completion_match_result *comp_match_res)
b5ec771e 714{
e0802d59 715 gdb::string_view name = lookup_name.name ();
bd69330d
PA
716 completion_match_for_lcd *match_for_lcd
717 = (comp_match_res != NULL ? &comp_match_res->match_for_lcd : NULL);
b5ec771e
PA
718 strncmp_iw_mode mode = (lookup_name.completion_mode ()
719 ? strncmp_iw_mode::NORMAL
720 : strncmp_iw_mode::MATCH_PARAMS);
721
e0802d59 722 if (strncmp_iw_with_mode (symbol_search_name, name.data (), name.size (),
bd69330d 723 mode, language_minimal, match_for_lcd) == 0)
b5ec771e 724 {
a207cff2
PA
725 if (comp_match_res != NULL)
726 comp_match_res->set_match (symbol_search_name);
b5ec771e
PA
727 return true;
728 }
729 else
730 return false;
731}
732
733/* See language.h. */
734
c9debfb9
AB
735symbol_name_matcher_ftype *
736language_defn::get_symbol_name_matcher
737 (const lookup_name_info &lookup_name) const
738{
739 /* If currently in Ada mode, and the lookup name is wrapped in
740 '<...>', hijack all symbol name comparisons using the Ada
741 matcher, which handles the verbatim matching. */
742 if (current_language->la_language == language_ada
743 && lookup_name.ada ().verbatim_p ())
744 return current_language->get_symbol_name_matcher_inner (lookup_name);
745
746 return this->get_symbol_name_matcher_inner (lookup_name);
747}
748
749/* See language.h. */
750
751symbol_name_matcher_ftype *
752language_defn::get_symbol_name_matcher_inner
753 (const lookup_name_info &lookup_name) const
754{
755 return default_symbol_name_matcher;
756}
757
b63a3f3f
AB
758/* See language.h. */
759
760const struct lang_varobj_ops *
761language_defn::varobj_ops () const
762{
763 /* The ops for the C language are suitable for the vast majority of the
764 supported languages. */
765 return &c_varobj_ops;
766}
767
b01175fc
AB
768/* Parent class for both the "auto" and "unknown" languages. These two
769 pseudo-languages are very similar so merging their implementations like
770 this makes sense. */
c9debfb9 771
b01175fc 772class auto_or_unknown_language : public language_defn
0874fd07
AB
773{
774public:
b01175fc
AB
775 auto_or_unknown_language (enum language lang)
776 : language_defn (lang)
0874fd07 777 { /* Nothing. */ }
1fb314aa
AB
778
779 /* See language.h. */
780 void language_arch_info (struct gdbarch *gdbarch,
781 struct language_arch_info *lai) const override
782 {
7bea47f0
AB
783 lai->set_string_char_type (builtin_type (gdbarch)->builtin_char);
784 lai->set_bool_type (builtin_type (gdbarch)->builtin_int);
1fb314aa 785 }
fbfb0a46
AB
786
787 /* See language.h. */
788
789 void print_type (struct type *type, const char *varstring,
790 struct ui_file *stream, int show, int level,
791 const struct type_print_options *flags) const override
792 {
b01175fc
AB
793 error (_("type printing not implemented for language \"%s\""),
794 natural_name ());
fbfb0a46 795 }
0a50df5d
AB
796
797 /* See language.h. */
798
5399db93 799 char *demangle_symbol (const char *mangled, int options) const override
0a50df5d 800 {
b01175fc 801 /* The auto language just uses the C++ demangler. */
0a50df5d
AB
802 return gdb_demangle (mangled, options);
803 }
a1d1fa3e
AB
804
805 /* See language.h. */
806
807 void value_print (struct value *val, struct ui_file *stream,
808 const struct value_print_options *options) const override
809 {
b01175fc
AB
810 error (_("value printing not implemented for language \"%s\""),
811 natural_name ());
a1d1fa3e 812 }
ebe2334e
AB
813
814 /* See language.h. */
815
816 void value_print_inner
817 (struct value *val, struct ui_file *stream, int recurse,
818 const struct value_print_options *options) const override
819 {
b01175fc
AB
820 error (_("inner value printing not implemented for language \"%s\""),
821 natural_name ());
ebe2334e 822 }
87afa652
AB
823
824 /* See language.h. */
825
826 int parser (struct parser_state *ps) const override
827 {
e22715ce
TT
828 error (_("expression parsing not implemented for language \"%s\""),
829 natural_name ());
87afa652 830 }
ec8cec5b
AB
831
832 /* See language.h. */
833
834 void emitchar (int ch, struct type *chtype,
835 struct ui_file *stream, int quoter) const override
836 {
b01175fc
AB
837 error (_("emit character not implemented for language \"%s\""),
838 natural_name ());
ec8cec5b 839 }
52b50f2c
AB
840
841 /* See language.h. */
842
843 void printchar (int ch, struct type *chtype,
844 struct ui_file *stream) const override
845 {
b01175fc
AB
846 error (_("print character not implemented for language \"%s\""),
847 natural_name ());
52b50f2c 848 }
d711ee67
AB
849
850 /* See language.h. */
851
852 void printstr (struct ui_file *stream, struct type *elttype,
853 const gdb_byte *string, unsigned int length,
854 const char *encoding, int force_ellipses,
855 const struct value_print_options *options) const override
856 {
b01175fc
AB
857 error (_("print string not implemented for language \"%s\""),
858 natural_name ());
d711ee67 859 }
4ffc13fb
AB
860
861 /* See language.h. */
862
863 void print_typedef (struct type *type, struct symbol *new_symbol,
864 struct ui_file *stream) const override
865 {
b01175fc
AB
866 error (_("print typedef not implemented for language \"%s\""),
867 natural_name ());
4ffc13fb 868 }
39e7ecca
AB
869
870 /* See language.h. */
871
872 bool is_string_type_p (struct type *type) const override
873 {
b01175fc
AB
874 type = check_typedef (type);
875 while (type->code () == TYPE_CODE_REF)
876 {
877 type = TYPE_TARGET_TYPE (type);
878 type = check_typedef (type);
879 }
880 return (type->code () == TYPE_CODE_STRING);
39e7ecca 881 }
5bae7c4e
AB
882
883 /* See language.h. */
884
885 const char *name_of_this () const override
886 { return "this"; }
b01175fc 887};
0874fd07 888
0874fd07
AB
889/* Class representing the fake "auto" language. */
890
b01175fc 891class auto_language : public auto_or_unknown_language
0874fd07
AB
892{
893public:
894 auto_language ()
b01175fc 895 : auto_or_unknown_language (language_auto)
0874fd07 896 { /* Nothing. */ }
1fb314aa 897
6f7664a9
AB
898 /* See language.h. */
899
900 const char *name () const override
901 { return "auto"; }
902
903 /* See language.h. */
904
905 const char *natural_name () const override
906 { return "Auto"; }
b01175fc 907};
6f7664a9 908
b01175fc 909/* Single instance of the fake "auto" language. */
d711ee67 910
b01175fc 911static auto_language auto_language_defn;
4ffc13fb 912
b01175fc 913/* Class representing the unknown language. */
4ffc13fb 914
b01175fc
AB
915class unknown_language : public auto_or_unknown_language
916{
917public:
918 unknown_language ()
919 : auto_or_unknown_language (language_unknown)
920 { /* Nothing. */ }
39e7ecca
AB
921
922 /* See language.h. */
923
b01175fc
AB
924 const char *name () const override
925 { return "unknown"; }
5bae7c4e
AB
926
927 /* See language.h. */
928
b01175fc
AB
929 const char *natural_name () const override
930 { return "Unknown"; }
b7c6e27d
AB
931
932 /* See language.h. */
933
b01175fc
AB
934 bool store_sym_names_in_linkage_form_p () const override
935 { return true; }
0874fd07
AB
936};
937
b01175fc 938/* Single instance of the unknown language class. */
0874fd07 939
b01175fc 940static unknown_language unknown_language_defn;
0874fd07 941
c906108c 942\f
f290d38e
AC
943/* Per-architecture language information. */
944
945static struct gdbarch_data *language_gdbarch_data;
946
947struct language_gdbarch
948{
949 /* A vector of per-language per-architecture info. Indexed by "enum
950 language". */
951 struct language_arch_info arch_info[nr_languages];
952};
953
954static void *
955language_gdbarch_post_init (struct gdbarch *gdbarch)
956{
7bea47f0
AB
957 struct language_gdbarch *l
958 = obstack_new<struct language_gdbarch> (gdbarch_obstack (gdbarch));
0874fd07 959 for (const auto &lang : language_defn::languages)
1fb314aa
AB
960 {
961 gdb_assert (lang != nullptr);
7bea47f0 962 lang->language_arch_info (gdbarch, &l->arch_info[lang->la_language]);
1fb314aa 963 }
47e77640 964
f290d38e
AC
965 return l;
966}
967
7bea47f0
AB
968/* See language.h. */
969
f290d38e
AC
970struct type *
971language_string_char_type (const struct language_defn *la,
972 struct gdbarch *gdbarch)
973{
9a3c8263
SM
974 struct language_gdbarch *ld
975 = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
7bea47f0 976 return ld->arch_info[la->la_language].string_char_type ();
f290d38e
AC
977}
978
7bea47f0
AB
979/* See language.h. */
980
fbb06eb1
UW
981struct type *
982language_bool_type (const struct language_defn *la,
983 struct gdbarch *gdbarch)
984{
9a3c8263
SM
985 struct language_gdbarch *ld
986 = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
7bea47f0
AB
987 return ld->arch_info[la->la_language].bool_type ();
988}
989
990/* See language.h. */
fbb06eb1 991
7bea47f0
AB
992struct type *
993language_arch_info::bool_type () const
994{
995 if (m_bool_type_name != nullptr)
fbb06eb1
UW
996 {
997 struct symbol *sym;
e0881a8e 998
7bea47f0
AB
999 sym = lookup_symbol (m_bool_type_name, NULL, VAR_DOMAIN, NULL).symbol;
1000 if (sym != nullptr)
fbb06eb1
UW
1001 {
1002 struct type *type = SYMBOL_TYPE (sym);
7bea47f0 1003 if (type != nullptr && type->code () == TYPE_CODE_BOOL)
fbb06eb1
UW
1004 return type;
1005 }
1006 }
1007
7bea47f0 1008 return m_bool_type_default;
1994afbf
DE
1009}
1010
1011/* See language.h. */
1012
7bea47f0
AB
1013struct symbol *
1014language_arch_info::type_and_symbol::alloc_type_symbol
1015 (enum language lang, struct type *type)
1994afbf
DE
1016{
1017 struct symbol *symbol;
1018 struct gdbarch *gdbarch;
30625020 1019 gdb_assert (!type->is_objfile_owned ());
6ac37371 1020 gdbarch = type->arch_owner ();
468c0cbb 1021 symbol = new (gdbarch_obstack (gdbarch)) struct symbol ();
7d93a1e0 1022 symbol->m_name = type->name ();
d3ecddab 1023 symbol->set_language (lang, nullptr);
1994afbf
DE
1024 symbol->owner.arch = gdbarch;
1025 SYMBOL_OBJFILE_OWNED (symbol) = 0;
a52d653e 1026 symbol->set_section_index (0);
1994afbf
DE
1027 SYMBOL_TYPE (symbol) = type;
1028 SYMBOL_DOMAIN (symbol) = VAR_DOMAIN;
1029 SYMBOL_ACLASS_INDEX (symbol) = LOC_TYPEDEF;
1994afbf
DE
1030 return symbol;
1031}
1032
7bea47f0 1033/* See language.h. */
1994afbf 1034
7bea47f0
AB
1035language_arch_info::type_and_symbol *
1036language_arch_info::lookup_primitive_type_and_symbol (const char *name)
1994afbf 1037{
7bea47f0
AB
1038 for (struct type_and_symbol &tas : primitive_types_and_symbols)
1039 {
1040 if (strcmp (tas.type ()->name (), name) == 0)
1041 return &tas;
1042 }
1994afbf 1043
7bea47f0
AB
1044 return nullptr;
1045}
1046
1047/* See language.h. */
1994afbf 1048
7bea47f0
AB
1049struct type *
1050language_arch_info::lookup_primitive_type (const char *name)
1051{
1052 type_and_symbol *tas = lookup_primitive_type_and_symbol (name);
1053 if (tas != nullptr)
1054 return tas->type ();
1055 return nullptr;
1056}
1994afbf 1057
7bea47f0 1058/* See language.h. */
1994afbf 1059
7bea47f0
AB
1060struct type *
1061language_arch_info::lookup_primitive_type
cbbcd7a7 1062 (gdb::function_view<bool (struct type *)> filter)
7bea47f0
AB
1063{
1064 for (struct type_and_symbol &tas : primitive_types_and_symbols)
1994afbf 1065 {
7bea47f0
AB
1066 if (filter (tas.type ()))
1067 return tas.type ();
1994afbf
DE
1068 }
1069
7bea47f0
AB
1070 return nullptr;
1071}
1072
1073/* See language.h. */
1074
1075struct symbol *
1076language_arch_info::lookup_primitive_type_as_symbol (const char *name,
1077 enum language lang)
1078{
1079 type_and_symbol *tas = lookup_primitive_type_and_symbol (name);
1080 if (tas != nullptr)
1081 return tas->symbol (lang);
1082 return nullptr;
1083}
1084
cbbcd7a7
PA
1085/* Helper for the language_lookup_primitive_type overloads to forward
1086 to the corresponding language's lookup_primitive_type overload. */
7bea47f0
AB
1087
1088template<typename T>
cbbcd7a7
PA
1089static struct type *
1090language_lookup_primitive_type_1 (const struct language_defn *la,
1091 struct gdbarch *gdbarch,
1092 T arg)
7bea47f0
AB
1093{
1094 struct language_gdbarch *ld =
1095 (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
1096 return ld->arch_info[la->la_language].lookup_primitive_type (arg);
1994afbf
DE
1097}
1098
cbbcd7a7 1099/* See language.h. */
7bea47f0 1100
cbbcd7a7 1101struct type *
7bea47f0
AB
1102language_lookup_primitive_type (const struct language_defn *la,
1103 struct gdbarch *gdbarch,
cbbcd7a7
PA
1104 const char *name)
1105{
1106 return language_lookup_primitive_type_1 (la, gdbarch, name);
1107}
7bea47f0 1108
cbbcd7a7 1109/* See language.h. */
7bea47f0 1110
cbbcd7a7 1111struct type *
7bea47f0
AB
1112language_lookup_primitive_type (const struct language_defn *la,
1113 struct gdbarch *gdbarch,
cbbcd7a7
PA
1114 gdb::function_view<bool (struct type *)> filter)
1115{
1116 return language_lookup_primitive_type_1 (la, gdbarch, filter);
1117}
7bea47f0 1118
1994afbf
DE
1119/* See language.h. */
1120
1121struct symbol *
1122language_lookup_primitive_type_as_symbol (const struct language_defn *la,
1123 struct gdbarch *gdbarch,
1124 const char *name)
1125{
9a3c8263
SM
1126 struct language_gdbarch *ld
1127 = (struct language_gdbarch *) gdbarch_data (gdbarch, language_gdbarch_data);
1994afbf 1128 struct language_arch_info *lai = &ld->arch_info[la->la_language];
e0881a8e 1129
cc485e62 1130 if (symbol_lookup_debug)
7bea47f0
AB
1131 fprintf_unfiltered (gdb_stdlog,
1132 "language_lookup_primitive_type_as_symbol"
1133 " (%s, %s, %s)",
1134 la->name (), host_address_to_string (gdbarch), name);
1994afbf 1135
7bea47f0
AB
1136 struct symbol *sym
1137 = lai->lookup_primitive_type_as_symbol (name, la->la_language);
1994afbf 1138
cc485e62 1139 if (symbol_lookup_debug)
1994afbf 1140 fprintf_unfiltered (gdb_stdlog, " = %s\n", host_address_to_string (sym));
7bea47f0
AB
1141
1142 /* Note: The result of symbol lookup is normally a symbol *and* the block
1143 it was found in. Builtin types don't live in blocks. We *could* give
1144 them one, but there is no current need so to keep things simple symbol
1145 lookup is extended to allow for BLOCK_FOUND to be NULL. */
1146
1994afbf 1147 return sym;
f290d38e
AC
1148}
1149
1777feb0 1150/* Initialize the language routines. */
c906108c 1151
6c265988 1152void _initialize_language ();
c906108c 1153void
6c265988 1154_initialize_language ()
c906108c 1155{
40478521 1156 static const char *const type_or_range_names[]
b84aa90a
PA
1157 = { "on", "off", "warn", "auto", NULL };
1158
40478521 1159 static const char *const case_sensitive_names[]
b84aa90a 1160 = { "on", "off", "auto", NULL };
c5aa993b 1161
f290d38e
AC
1162 language_gdbarch_data
1163 = gdbarch_data_register_post_init (language_gdbarch_post_init);
1164
1777feb0 1165 /* GDB commands for language specific stuff. */
c5aa993b 1166
5e84b7ee
SM
1167 cmd_list_element *set_check_cmd
1168 = add_basic_prefix_cmd ("check", no_class,
1169 _("Set the status of the type/range checker."),
1170 &setchecklist, 0, &setlist);
1171 add_alias_cmd ("c", set_check_cmd, no_class, 1, &setlist);
1172 add_alias_cmd ("ch", set_check_cmd, no_class, 1, &setlist);
1173
1174 cmd_list_element *show_check_cmd
1175 = add_show_prefix_cmd ("check", no_class,
1176 _("Show the status of the type/range checker."),
1177 &showchecklist, 0, &showlist);
1178 add_alias_cmd ("c", show_check_cmd, no_class, 1, &showlist);
1179 add_alias_cmd ("ch", show_check_cmd, no_class, 1, &showlist);
c5aa993b 1180
b84aa90a 1181 add_setshow_enum_cmd ("range", class_support, type_or_range_names,
3e43a32a 1182 &range,
590042fc
PW
1183 _("Set range checking (on/warn/off/auto)."),
1184 _("Show range checking (on/warn/off/auto)."),
3e43a32a 1185 NULL, set_range_command,
b84aa90a
PA
1186 show_range_command,
1187 &setchecklist, &showchecklist);
1188
1189 add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
1190 &case_sensitive, _("\
590042fc
PW
1191Set case sensitivity in name search (on/off/auto)."), _("\
1192Show case sensitivity in name search (on/off/auto)."), _("\
4d28ad1e 1193For Fortran the default is off; for other languages the default is on."),
b84aa90a
PA
1194 set_case_command,
1195 show_case_command,
1196 &setlist, &showlist);
63872f9d 1197
0874fd07
AB
1198 /* In order to call SET_LANGUAGE (below) we need to make sure that
1199 CURRENT_LANGUAGE is not NULL. So first set the language to unknown,
1200 then we can change the language to 'auto'. */
1201 current_language = language_def (language_unknown);
1202
47e77640 1203 add_set_language_command ();
c5aa993b 1204
4a811000
PW
1205 language = "auto";
1206 range = "auto";
1207 case_sensitive = "auto";
63872f9d 1208
1777feb0 1209 /* Have the above take effect. */
63872f9d 1210 set_language (language_auto);
c906108c 1211}
This page took 2.902146 seconds and 4 git commands to generate.