]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/language.c
2004-07-27 Andrew Cagney <cagney@gnu.org>
[thirdparty/binutils-gdb.git] / gdb / language.c
CommitLineData
c906108c 1/* Multiple source language support for GDB.
1bac305b
AC
2
3 Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
b368761e 4 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
1bac305b 5
c906108c
SS
6 Contributed by the Department of Computer Science at the State University
7 of New York at Buffalo.
8
c5aa993b 9 This file is part of GDB.
c906108c 10
c5aa993b
JM
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
c906108c 15
c5aa993b
JM
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
c906108c 20
c5aa993b
JM
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 59 Temple Place - Suite 330,
24 Boston, MA 02111-1307, USA. */
c906108c
SS
25
26/* This file contains functions that return things that are specific
27 to languages. Each function should examine current_language if necessary,
28 and return the appropriate result. */
29
30/* FIXME: Most of these would be better organized as macros which
31 return data out of a "language-specific" struct pointer that is set
32 whenever the working language changes. That would be a lot faster. */
33
34#include "defs.h"
35#include <ctype.h>
36#include "gdb_string.h"
37
38#include "symtab.h"
39#include "gdbtypes.h"
40#include "value.h"
41#include "gdbcmd.h"
c906108c
SS
42#include "expression.h"
43#include "language.h"
44#include "target.h"
45#include "parser-defs.h"
8caabe69 46#include "jv-lang.h"
9a3d7dfd 47#include "demangle.h"
c906108c 48
a14ed312 49extern void _initialize_language (void);
392a587b 50
a14ed312 51static void show_language_command (char *, int);
c906108c 52
a14ed312 53static void set_language_command (char *, int);
c906108c 54
a14ed312 55static void show_type_command (char *, int);
c906108c 56
a14ed312 57static void set_type_command (char *, int);
c906108c 58
a14ed312 59static void show_range_command (char *, int);
c906108c 60
a14ed312 61static void set_range_command (char *, int);
c906108c 62
63872f9d
JG
63static void show_case_command (char *, int);
64
65static void set_case_command (char *, int);
66
67static void set_case_str (void);
68
a14ed312 69static void set_range_str (void);
c906108c 70
a14ed312 71static void set_type_str (void);
c906108c 72
a14ed312 73static void set_lang_str (void);
c906108c 74
a14ed312 75static void unk_lang_error (char *);
c906108c 76
a14ed312 77static int unk_lang_parser (void);
c906108c 78
a14ed312 79static void show_check (char *, int);
c906108c 80
a14ed312 81static void set_check (char *, int);
c906108c 82
63872f9d 83static void set_type_range_case (void);
c906108c 84
d9fcf2fb 85static void unk_lang_emit_char (int c, struct ui_file *stream, int quoter);
c906108c 86
d9fcf2fb 87static void unk_lang_printchar (int c, struct ui_file *stream);
c906108c 88
d9fcf2fb
JM
89static void unk_lang_printstr (struct ui_file * stream, char *string,
90 unsigned int length, int width,
91 int force_ellipses);
c906108c 92
a14ed312 93static struct type *unk_lang_create_fundamental_type (struct objfile *, int);
c906108c 94
d9fcf2fb
JM
95static void unk_lang_print_type (struct type *, char *, struct ui_file *,
96 int, int);
c906108c 97
d9fcf2fb
JM
98static int unk_lang_val_print (struct type *, char *, int, CORE_ADDR,
99 struct ui_file *, int, int, int,
100 enum val_prettyprint);
c906108c 101
3d6d86c6 102static int unk_lang_value_print (struct value *, struct ui_file *, int, enum val_prettyprint);
c906108c 103
f636b87d
AF
104static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc);
105
c906108c
SS
106/* Forward declaration */
107extern const struct language_defn unknown_language_defn;
c5aa993b 108
c906108c 109/* The current (default at startup) state of type and range checking.
c5aa993b
JM
110 (If the modes are set to "auto", though, these are changed based
111 on the default language at startup, and then again based on the
112 language of the first source file. */
c906108c
SS
113
114enum range_mode range_mode = range_mode_auto;
115enum range_check range_check = range_check_off;
116enum type_mode type_mode = type_mode_auto;
117enum type_check type_check = type_check_off;
63872f9d
JG
118enum case_mode case_mode = case_mode_auto;
119enum case_sensitivity case_sensitivity = case_sensitive_on;
c906108c
SS
120
121/* The current language and language_mode (see language.h) */
122
123const struct language_defn *current_language = &unknown_language_defn;
124enum language_mode language_mode = language_mode_auto;
125
126/* The language that the user expects to be typing in (the language
127 of main(), or the last language we notified them about, or C). */
128
129const struct language_defn *expected_language;
130
131/* The list of supported languages. The list itself is malloc'd. */
132
133static const struct language_defn **languages;
134static unsigned languages_size;
135static unsigned languages_allocsize;
136#define DEFAULT_ALLOCSIZE 4
137
138/* The "set language/type/range" commands all put stuff in these
139 buffers. This is to make them work as set/show commands. The
140 user's string is copied here, then the set_* commands look at
141 them and update them to something that looks nice when it is
142 printed out. */
143
144static char *language;
145static char *type;
146static char *range;
63872f9d 147static char *case_sensitive;
c906108c
SS
148
149/* Warning issued when current_language and the language of the current
150 frame do not match. */
151char lang_frame_mismatch_warn[] =
c5aa993b 152"Warning: the current language does not match this frame.";
c906108c
SS
153\f
154/* This page contains the functions corresponding to GDB commands
155 and their helpers. */
156
157/* Show command. Display a warning if the language set
158 does not match the frame. */
159static void
fba45db2 160show_language_command (char *ignore, int from_tty)
c906108c 161{
c5aa993b 162 enum language flang; /* The language of the current frame */
c906108c 163
c5aa993b
JM
164 flang = get_frame_language ();
165 if (flang != language_unknown &&
166 language_mode == language_mode_manual &&
167 current_language->la_language != flang)
168 printf_filtered ("%s\n", lang_frame_mismatch_warn);
c906108c
SS
169}
170
171/* Set command. Change the current working language. */
172static void
fba45db2 173set_language_command (char *ignore, int from_tty)
c906108c
SS
174{
175 int i;
176 enum language flang;
177 char *err_lang;
178
179 if (!language || !language[0])
180 {
c5aa993b 181 printf_unfiltered ("The currently understood settings are:\n\n");
c906108c
SS
182 printf_unfiltered ("local or auto Automatic setting based on source file\n");
183
184 for (i = 0; i < languages_size; ++i)
185 {
186 /* Already dealt with these above. */
187 if (languages[i]->la_language == language_unknown
188 || languages[i]->la_language == language_auto)
189 continue;
190
191 /* FIXME for now assume that the human-readable name is just
192 a capitalization of the internal name. */
193 printf_unfiltered ("%-16s Use the %c%s language\n",
194 languages[i]->la_name,
c5aa993b
JM
195 /* Capitalize first letter of language
196 name. */
c906108c
SS
197 toupper (languages[i]->la_name[0]),
198 languages[i]->la_name + 1);
199 }
200 /* Restore the silly string. */
c5aa993b 201 set_language (current_language->la_language);
c906108c
SS
202 return;
203 }
204
205 /* Search the list of languages for a match. */
c5aa993b
JM
206 for (i = 0; i < languages_size; i++)
207 {
6314a349 208 if (strcmp (languages[i]->la_name, language) == 0)
c5aa993b
JM
209 {
210 /* Found it! Go into manual mode, and use this language. */
211 if (languages[i]->la_language == language_auto)
212 {
213 /* Enter auto mode. Set to the current frame's language, if known. */
214 language_mode = language_mode_auto;
215 flang = get_frame_language ();
216 if (flang != language_unknown)
217 set_language (flang);
218 expected_language = current_language;
219 return;
220 }
221 else
222 {
223 /* Enter manual mode. Set the specified language. */
224 language_mode = language_mode_manual;
225 current_language = languages[i];
63872f9d 226 set_type_range_case ();
c5aa993b
JM
227 set_lang_str ();
228 expected_language = current_language;
229 return;
230 }
231 }
c906108c 232 }
c906108c
SS
233
234 /* Reset the language (esp. the global string "language") to the
235 correct values. */
c5aa993b 236 err_lang = savestring (language, strlen (language));
b8c9b27d 237 make_cleanup (xfree, err_lang); /* Free it after error */
c5aa993b
JM
238 set_language (current_language->la_language);
239 error ("Unknown language `%s'.", err_lang);
c906108c
SS
240}
241
242/* Show command. Display a warning if the type setting does
243 not match the current language. */
244static void
fba45db2 245show_type_command (char *ignore, int from_tty)
c906108c 246{
c5aa993b
JM
247 if (type_check != current_language->la_type_check)
248 printf_unfiltered (
249 "Warning: the current type check setting does not match the language.\n");
c906108c
SS
250}
251
252/* Set command. Change the setting for type checking. */
253static void
fba45db2 254set_type_command (char *ignore, int from_tty)
c906108c 255{
6314a349 256 if (strcmp (type, "on") == 0)
c5aa993b 257 {
c906108c
SS
258 type_check = type_check_on;
259 type_mode = type_mode_manual;
c5aa993b 260 }
6314a349 261 else if (strcmp (type, "warn") == 0)
c5aa993b 262 {
c906108c
SS
263 type_check = type_check_warn;
264 type_mode = type_mode_manual;
c5aa993b 265 }
6314a349 266 else if (strcmp (type, "off") == 0)
c5aa993b 267 {
c906108c
SS
268 type_check = type_check_off;
269 type_mode = type_mode_manual;
c5aa993b 270 }
6314a349 271 else if (strcmp (type, "auto") == 0)
c5aa993b 272 {
c906108c 273 type_mode = type_mode_auto;
63872f9d 274 set_type_range_case ();
c906108c 275 /* Avoid hitting the set_type_str call below. We
63872f9d 276 did it in set_type_range_case. */
c906108c 277 return;
c5aa993b 278 }
c4093a6a
JM
279 else
280 {
281 warning ("Unrecognized type check setting: \"%s\"", type);
282 }
c5aa993b
JM
283 set_type_str ();
284 show_type_command ((char *) NULL, from_tty);
c906108c
SS
285}
286
287/* Show command. Display a warning if the range setting does
288 not match the current language. */
289static void
fba45db2 290show_range_command (char *ignore, int from_tty)
c906108c
SS
291{
292
c5aa993b
JM
293 if (range_check != current_language->la_range_check)
294 printf_unfiltered (
295 "Warning: the current range check setting does not match the language.\n");
c906108c
SS
296}
297
298/* Set command. Change the setting for range checking. */
299static void
fba45db2 300set_range_command (char *ignore, int from_tty)
c906108c 301{
6314a349 302 if (strcmp (range, "on") == 0)
c5aa993b 303 {
c906108c
SS
304 range_check = range_check_on;
305 range_mode = range_mode_manual;
c5aa993b 306 }
6314a349 307 else if (strcmp (range, "warn") == 0)
c5aa993b 308 {
c906108c
SS
309 range_check = range_check_warn;
310 range_mode = range_mode_manual;
c5aa993b 311 }
6314a349 312 else if (strcmp (range, "off") == 0)
c5aa993b 313 {
c906108c
SS
314 range_check = range_check_off;
315 range_mode = range_mode_manual;
c5aa993b 316 }
6314a349 317 else if (strcmp (range, "auto") == 0)
c5aa993b 318 {
c906108c 319 range_mode = range_mode_auto;
63872f9d 320 set_type_range_case ();
c906108c 321 /* Avoid hitting the set_range_str call below. We
63872f9d 322 did it in set_type_range_case. */
c906108c 323 return;
c5aa993b 324 }
c4093a6a
JM
325 else
326 {
327 warning ("Unrecognized range check setting: \"%s\"", range);
328 }
c5aa993b
JM
329 set_range_str ();
330 show_range_command ((char *) 0, from_tty);
c906108c
SS
331}
332
63872f9d
JG
333/* Show command. Display a warning if the case sensitivity setting does
334 not match the current language. */
335static void
ad525611 336show_case_command (char *ignore, int from_tty)
63872f9d
JG
337{
338 if (case_sensitivity != current_language->la_case_sensitivity)
339 printf_unfiltered(
340"Warning: the current case sensitivity setting does not match the language.\n");
341}
342
343/* Set command. Change the setting for case sensitivity. */
344static void
ad525611 345set_case_command (char *ignore, int from_tty)
63872f9d 346{
cb137aa5 347 if (DEPRECATED_STREQ (case_sensitive, "on"))
63872f9d
JG
348 {
349 case_sensitivity = case_sensitive_on;
350 case_mode = case_mode_manual;
351 }
cb137aa5 352 else if (DEPRECATED_STREQ (case_sensitive, "off"))
63872f9d
JG
353 {
354 case_sensitivity = case_sensitive_off;
355 case_mode = case_mode_manual;
356 }
cb137aa5 357 else if (DEPRECATED_STREQ (case_sensitive, "auto"))
63872f9d
JG
358 {
359 case_mode = case_mode_auto;
360 set_type_range_case ();
361 /* Avoid hitting the set_case_str call below. We
362 did it in set_type_range_case. */
363 return;
364 }
365 else
366 {
367 warning ("Unrecognized case-sensitive setting: \"%s\"", case_sensitive);
368 }
369 set_case_str();
370 show_case_command ((char *) NULL, from_tty);
371}
372
373/* Set the status of range and type checking and case sensitivity based on
c906108c
SS
374 the current modes and the current language.
375 If SHOW is non-zero, then print out the current language,
376 type and range checking status. */
377static void
63872f9d 378set_type_range_case (void)
c906108c
SS
379{
380
381 if (range_mode == range_mode_auto)
382 range_check = current_language->la_range_check;
383
384 if (type_mode == type_mode_auto)
385 type_check = current_language->la_type_check;
386
63872f9d
JG
387 if (case_mode == case_mode_auto)
388 case_sensitivity = current_language->la_case_sensitivity;
389
c5aa993b
JM
390 set_type_str ();
391 set_range_str ();
63872f9d 392 set_case_str ();
c906108c
SS
393}
394
395/* Set current language to (enum language) LANG. Returns previous language. */
396
397enum language
fba45db2 398set_language (enum language lang)
c906108c
SS
399{
400 int i;
401 enum language prev_language;
402
403 prev_language = current_language->la_language;
404
c5aa993b
JM
405 for (i = 0; i < languages_size; i++)
406 {
407 if (languages[i]->la_language == lang)
408 {
409 current_language = languages[i];
63872f9d 410 set_type_range_case ();
c5aa993b
JM
411 set_lang_str ();
412 break;
413 }
c906108c 414 }
c906108c
SS
415
416 return prev_language;
417}
418\f
419/* This page contains functions that update the global vars
420 language, type and range. */
421static void
fba45db2 422set_lang_str (void)
c906108c 423{
c5aa993b 424 char *prefix = "";
c906108c 425
ccdaf797 426 if (language)
b8c9b27d 427 xfree (language);
c5aa993b
JM
428 if (language_mode == language_mode_auto)
429 prefix = "auto; currently ";
c906108c 430
c5aa993b 431 language = concat (prefix, current_language->la_name, NULL);
c906108c
SS
432}
433
434static void
fba45db2 435set_type_str (void)
c906108c 436{
c4093a6a 437 char *tmp = NULL, *prefix = "";
c906108c 438
ccdaf797 439 if (type)
b8c9b27d 440 xfree (type);
c5aa993b
JM
441 if (type_mode == type_mode_auto)
442 prefix = "auto; currently ";
c906108c 443
c5aa993b
JM
444 switch (type_check)
445 {
446 case type_check_on:
c906108c
SS
447 tmp = "on";
448 break;
c5aa993b 449 case type_check_off:
c906108c
SS
450 tmp = "off";
451 break;
c5aa993b 452 case type_check_warn:
c906108c
SS
453 tmp = "warn";
454 break;
c5aa993b 455 default:
c906108c 456 error ("Unrecognized type check setting.");
c5aa993b 457 }
c906108c 458
c5aa993b 459 type = concat (prefix, tmp, NULL);
c906108c
SS
460}
461
462static void
fba45db2 463set_range_str (void)
c906108c 464{
c5aa993b 465 char *tmp, *pref = "";
c906108c 466
c5aa993b
JM
467 if (range_mode == range_mode_auto)
468 pref = "auto; currently ";
c906108c 469
c5aa993b
JM
470 switch (range_check)
471 {
472 case range_check_on:
c906108c
SS
473 tmp = "on";
474 break;
c5aa993b 475 case range_check_off:
c906108c
SS
476 tmp = "off";
477 break;
c5aa993b 478 case range_check_warn:
c906108c
SS
479 tmp = "warn";
480 break;
c5aa993b 481 default:
c906108c 482 error ("Unrecognized range check setting.");
c5aa993b 483 }
c906108c 484
ccdaf797 485 if (range)
b8c9b27d 486 xfree (range);
c5aa993b 487 range = concat (pref, tmp, NULL);
c906108c
SS
488}
489
63872f9d 490static void
5ae5f592 491set_case_str (void)
63872f9d
JG
492{
493 char *tmp = NULL, *prefix = "";
494
495 if (case_mode==case_mode_auto)
496 prefix = "auto; currently ";
497
498 switch (case_sensitivity)
499 {
500 case case_sensitive_on:
501 tmp = "on";
502 break;
503 case case_sensitive_off:
504 tmp = "off";
505 break;
506 default:
507 error ("Unrecognized case-sensitive setting.");
508 }
509
b8c9b27d 510 xfree (case_sensitive);
63872f9d
JG
511 case_sensitive = concat (prefix, tmp, NULL);
512}
c906108c
SS
513
514/* Print out the current language settings: language, range and
515 type checking. If QUIETLY, print only what has changed. */
516
517void
fba45db2 518language_info (int quietly)
c906108c
SS
519{
520 if (quietly && expected_language == current_language)
521 return;
522
523 expected_language = current_language;
c5aa993b
JM
524 printf_unfiltered ("Current language: %s\n", language);
525 show_language_command ((char *) 0, 1);
c906108c
SS
526
527 if (!quietly)
528 {
c5aa993b
JM
529 printf_unfiltered ("Type checking: %s\n", type);
530 show_type_command ((char *) 0, 1);
531 printf_unfiltered ("Range checking: %s\n", range);
532 show_range_command ((char *) 0, 1);
63872f9d
JG
533 printf_unfiltered ("Case sensitivity: %s\n", case_sensitive);
534 show_case_command ((char *) 0, 1);
c906108c
SS
535 }
536}
537\f
538/* Return the result of a binary operation. */
539
c5aa993b 540#if 0 /* Currently unused */
c906108c
SS
541
542struct type *
3d6d86c6 543binop_result_type (struct value *v1, struct value *v2)
c906108c 544{
c5aa993b
JM
545 int size, uns;
546 struct type *t1 = check_typedef (VALUE_TYPE (v1));
547 struct type *t2 = check_typedef (VALUE_TYPE (v2));
548
549 int l1 = TYPE_LENGTH (t1);
550 int l2 = TYPE_LENGTH (t2);
551
552 switch (current_language->la_language)
553 {
554 case language_c:
555 case language_cplus:
eb392fbf 556 case language_objc:
c5aa993b
JM
557 if (TYPE_CODE (t1) == TYPE_CODE_FLT)
558 return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
559 VALUE_TYPE (v2) : VALUE_TYPE (v1);
560 else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
561 return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
562 VALUE_TYPE (v1) : VALUE_TYPE (v2);
563 else if (TYPE_UNSIGNED (t1) && l1 > l2)
564 return VALUE_TYPE (v1);
565 else if (TYPE_UNSIGNED (t2) && l2 > l1)
566 return VALUE_TYPE (v2);
567 else /* Both are signed. Result is the longer type */
568 return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
c906108c 569 break;
c5aa993b 570 case language_m2:
c906108c 571 /* If we are doing type-checking, l1 should equal l2, so this is
c5aa993b
JM
572 not needed. */
573 return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
c906108c 574 break;
c5aa993b 575 }
e1e9e218 576 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c5aa993b 577 return (struct type *) 0; /* For lint */
c906108c
SS
578}
579
c5aa993b 580#endif /* 0 */
c906108c 581\f
c5aa993b 582
c906108c
SS
583/* This page contains functions that return format strings for
584 printf for printing out numbers in different formats */
585
586/* Returns the appropriate printf format for hexadecimal
587 numbers. */
588char *
fba45db2 589local_hex_format_custom (char *pre)
c906108c 590{
c5aa993b
JM
591 static char form[50];
592
593 strcpy (form, local_hex_format_prefix ());
594 strcat (form, "%");
595 strcat (form, pre);
596 strcat (form, local_hex_format_specifier ());
597 strcat (form, local_hex_format_suffix ());
598 return form;
c906108c
SS
599}
600
14a5e767 601/* Converts a LONGEST to custom hexadecimal and stores it in a static
c906108c
SS
602 string. Returns a pointer to this string. */
603char *
14a5e767 604local_hex_string (LONGEST num)
c906108c 605{
14a5e767 606 return local_hex_string_custom (num, "l");
c906108c
SS
607}
608
c4093a6a
JM
609/* Converts a LONGEST number to custom hexadecimal and stores it in a static
610 string. Returns a pointer to this string. Note that the width parameter
611 should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
612
613char *
14a5e767 614local_hex_string_custom (LONGEST num, char *width)
c4093a6a
JM
615{
616#define RESULT_BUF_LEN 50
617 static char res2[RESULT_BUF_LEN];
618 char format[RESULT_BUF_LEN];
c4093a6a
JM
619 int field_width;
620 int num_len;
621 int num_pad_chars;
622 char *pad_char; /* string with one character */
623 int pad_on_left;
624 char *parse_ptr;
625 char temp_nbr_buf[RESULT_BUF_LEN];
14a5e767 626
17df2af6 627 /* Use phex_nz to print the number into a string, then
c4093a6a
JM
628 build the result string from local_hex_format_prefix, padding and
629 the hex representation as indicated by "width". */
17df2af6 630 strcpy (temp_nbr_buf, phex_nz (num, sizeof (num)));
c4093a6a
JM
631 /* parse width */
632 parse_ptr = width;
633 pad_on_left = 1;
634 pad_char = " ";
635 if (*parse_ptr == '-')
636 {
637 parse_ptr++;
638 pad_on_left = 0;
639 }
640 if (*parse_ptr == '0')
641 {
642 parse_ptr++;
643 if (pad_on_left)
644 pad_char = "0"; /* If padding is on the right, it is blank */
645 }
646 field_width = atoi (parse_ptr);
647 num_len = strlen (temp_nbr_buf);
648 num_pad_chars = field_width - strlen (temp_nbr_buf); /* possibly negative */
649
650 if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
7aedc9f8 651 >= RESULT_BUF_LEN) /* paranoia */
8e65ff28 652 internal_error (__FILE__, __LINE__,
14a5e767 653 "local_hex_string_custom: insufficient space to store result");
c4093a6a
JM
654
655 strcpy (res2, local_hex_format_prefix ());
656 if (pad_on_left)
657 {
658 while (num_pad_chars > 0)
659 {
660 strcat (res2, pad_char);
661 num_pad_chars--;
662 }
663 }
664 strcat (res2, temp_nbr_buf);
665 if (!pad_on_left)
666 {
667 while (num_pad_chars > 0)
668 {
669 strcat (res2, pad_char);
670 num_pad_chars--;
671 }
672 }
673 return res2;
c4093a6a 674
14a5e767 675} /* local_hex_string_custom */
c4093a6a 676
c906108c
SS
677/* Returns the appropriate printf format for octal
678 numbers. */
679char *
fba45db2 680local_octal_format_custom (char *pre)
c906108c 681{
c5aa993b
JM
682 static char form[50];
683
684 strcpy (form, local_octal_format_prefix ());
685 strcat (form, "%");
686 strcat (form, pre);
687 strcat (form, local_octal_format_specifier ());
688 strcat (form, local_octal_format_suffix ());
689 return form;
c906108c
SS
690}
691
692/* Returns the appropriate printf format for decimal numbers. */
693char *
fba45db2 694local_decimal_format_custom (char *pre)
c906108c 695{
c5aa993b
JM
696 static char form[50];
697
698 strcpy (form, local_decimal_format_prefix ());
699 strcat (form, "%");
700 strcat (form, pre);
701 strcat (form, local_decimal_format_specifier ());
702 strcat (form, local_decimal_format_suffix ());
703 return form;
c906108c
SS
704}
705\f
706#if 0
707/* This page contains functions that are used in type/range checking.
708 They all return zero if the type/range check fails.
709
710 It is hoped that these will make extending GDB to parse different
711 languages a little easier. These are primarily used in eval.c when
712 evaluating expressions and making sure that their types are correct.
713 Instead of having a mess of conjucted/disjuncted expressions in an "if",
714 the ideas of type can be wrapped up in the following functions.
715
716 Note that some of them are not currently dependent upon which language
717 is currently being parsed. For example, floats are the same in
718 C and Modula-2 (ie. the only floating point type has TYPE_CODE of
719 TYPE_CODE_FLT), while booleans are different. */
720
721/* Returns non-zero if its argument is a simple type. This is the same for
722 both Modula-2 and for C. In the C case, TYPE_CODE_CHAR will never occur,
723 and thus will never cause the failure of the test. */
724int
fba45db2 725simple_type (struct type *type)
c906108c
SS
726{
727 CHECK_TYPEDEF (type);
c5aa993b
JM
728 switch (TYPE_CODE (type))
729 {
730 case TYPE_CODE_INT:
731 case TYPE_CODE_CHAR:
732 case TYPE_CODE_ENUM:
733 case TYPE_CODE_FLT:
734 case TYPE_CODE_RANGE:
735 case TYPE_CODE_BOOL:
736 return 1;
c906108c 737
c5aa993b
JM
738 default:
739 return 0;
740 }
c906108c
SS
741}
742
743/* Returns non-zero if its argument is of an ordered type.
744 An ordered type is one in which the elements can be tested for the
745 properties of "greater than", "less than", etc, or for which the
746 operations "increment" or "decrement" make sense. */
747int
fba45db2 748ordered_type (struct type *type)
c906108c
SS
749{
750 CHECK_TYPEDEF (type);
c5aa993b
JM
751 switch (TYPE_CODE (type))
752 {
753 case TYPE_CODE_INT:
754 case TYPE_CODE_CHAR:
755 case TYPE_CODE_ENUM:
756 case TYPE_CODE_FLT:
757 case TYPE_CODE_RANGE:
758 return 1;
c906108c 759
c5aa993b
JM
760 default:
761 return 0;
762 }
c906108c
SS
763}
764
765/* Returns non-zero if the two types are the same */
766int
fba45db2 767same_type (struct type *arg1, struct type *arg2)
c906108c
SS
768{
769 CHECK_TYPEDEF (type);
c5aa993b
JM
770 if (structured_type (arg1) ? !structured_type (arg2) : structured_type (arg2))
771 /* One is structured and one isn't */
772 return 0;
773 else if (structured_type (arg1) && structured_type (arg2))
774 return arg1 == arg2;
775 else if (numeric_type (arg1) && numeric_type (arg2))
776 return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
777 (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
778 ? 1 : 0;
779 else
780 return arg1 == arg2;
c906108c
SS
781}
782
783/* Returns non-zero if the type is integral */
784int
fba45db2 785integral_type (struct type *type)
c906108c
SS
786{
787 CHECK_TYPEDEF (type);
c5aa993b
JM
788 switch (current_language->la_language)
789 {
790 case language_c:
791 case language_cplus:
eb392fbf 792 case language_objc:
c5aa993b
JM
793 return (TYPE_CODE (type) != TYPE_CODE_INT) &&
794 (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
795 case language_m2:
750ba382 796 case language_pascal:
c5aa993b 797 return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
c5aa993b 798 default:
c906108c 799 error ("Language not supported.");
c5aa993b 800 }
c906108c
SS
801}
802
803/* Returns non-zero if the value is numeric */
804int
fba45db2 805numeric_type (struct type *type)
c906108c
SS
806{
807 CHECK_TYPEDEF (type);
c5aa993b
JM
808 switch (TYPE_CODE (type))
809 {
810 case TYPE_CODE_INT:
811 case TYPE_CODE_FLT:
812 return 1;
c906108c 813
c5aa993b
JM
814 default:
815 return 0;
816 }
c906108c
SS
817}
818
819/* Returns non-zero if the value is a character type */
820int
fba45db2 821character_type (struct type *type)
c906108c
SS
822{
823 CHECK_TYPEDEF (type);
c5aa993b
JM
824 switch (current_language->la_language)
825 {
c5aa993b 826 case language_m2:
750ba382 827 case language_pascal:
c5aa993b
JM
828 return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
829
830 case language_c:
831 case language_cplus:
eb392fbf 832 case language_objc:
c5aa993b
JM
833 return (TYPE_CODE (type) == TYPE_CODE_INT) &&
834 TYPE_LENGTH (type) == sizeof (char)
835 ? 1 : 0;
836 default:
c906108c 837 return (0);
c5aa993b 838 }
c906108c
SS
839}
840
841/* Returns non-zero if the value is a string type */
842int
fba45db2 843string_type (struct type *type)
c906108c
SS
844{
845 CHECK_TYPEDEF (type);
c5aa993b
JM
846 switch (current_language->la_language)
847 {
c5aa993b 848 case language_m2:
750ba382 849 case language_pascal:
c5aa993b
JM
850 return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
851
852 case language_c:
853 case language_cplus:
eb392fbf 854 case language_objc:
c906108c
SS
855 /* C does not have distinct string type. */
856 return (0);
c5aa993b 857 default:
c906108c 858 return (0);
c5aa993b 859 }
c906108c
SS
860}
861
862/* Returns non-zero if the value is a boolean type */
863int
fba45db2 864boolean_type (struct type *type)
c906108c
SS
865{
866 CHECK_TYPEDEF (type);
867 if (TYPE_CODE (type) == TYPE_CODE_BOOL)
868 return 1;
c5aa993b 869 switch (current_language->la_language)
c906108c
SS
870 {
871 case language_c:
872 case language_cplus:
eb392fbf 873 case language_objc:
db034ac5 874 /* Might be more cleanly handled by having a
1b831c93 875 TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
db034ac5 876 languages, or a TYPE_CODE_INT_OR_BOOL for C. */
c906108c
SS
877 if (TYPE_CODE (type) == TYPE_CODE_INT)
878 return 1;
c5aa993b 879 default:
c906108c 880 break;
c5aa993b 881 }
c906108c
SS
882 return 0;
883}
884
885/* Returns non-zero if the value is a floating-point type */
886int
fba45db2 887float_type (struct type *type)
c906108c
SS
888{
889 CHECK_TYPEDEF (type);
c5aa993b 890 return TYPE_CODE (type) == TYPE_CODE_FLT;
c906108c
SS
891}
892
893/* Returns non-zero if the value is a pointer type */
894int
fba45db2 895pointer_type (struct type *type)
c906108c 896{
c5aa993b
JM
897 return TYPE_CODE (type) == TYPE_CODE_PTR ||
898 TYPE_CODE (type) == TYPE_CODE_REF;
c906108c
SS
899}
900
901/* Returns non-zero if the value is a structured type */
902int
fba45db2 903structured_type (struct type *type)
c906108c
SS
904{
905 CHECK_TYPEDEF (type);
c5aa993b
JM
906 switch (current_language->la_language)
907 {
908 case language_c:
909 case language_cplus:
eb392fbf 910 case language_objc:
c5aa993b
JM
911 return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
912 (TYPE_CODE (type) == TYPE_CODE_UNION) ||
913 (TYPE_CODE (type) == TYPE_CODE_ARRAY);
750ba382
PM
914 case language_pascal:
915 return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
916 (TYPE_CODE(type) == TYPE_CODE_UNION) ||
917 (TYPE_CODE(type) == TYPE_CODE_SET) ||
918 (TYPE_CODE(type) == TYPE_CODE_ARRAY);
c5aa993b
JM
919 case language_m2:
920 return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
921 (TYPE_CODE (type) == TYPE_CODE_SET) ||
922 (TYPE_CODE (type) == TYPE_CODE_ARRAY);
c5aa993b 923 default:
c906108c 924 return (0);
c5aa993b 925 }
c906108c
SS
926}
927#endif
928\f
929struct type *
fba45db2 930lang_bool_type (void)
c906108c
SS
931{
932 struct symbol *sym;
933 struct type *type;
c5aa993b 934 switch (current_language->la_language)
c906108c 935 {
c906108c 936 case language_fortran:
176620f1 937 sym = lookup_symbol ("logical", NULL, VAR_DOMAIN, NULL, NULL);
c906108c
SS
938 if (sym)
939 {
940 type = SYMBOL_TYPE (sym);
941 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
942 return type;
943 }
944 return builtin_type_f_logical_s2;
945 case language_cplus:
750ba382
PM
946 case language_pascal:
947 if (current_language->la_language==language_cplus)
176620f1 948 {sym = lookup_symbol ("bool", NULL, VAR_DOMAIN, NULL, NULL);}
750ba382 949 else
176620f1 950 {sym = lookup_symbol ("boolean", NULL, VAR_DOMAIN, NULL, NULL);}
c906108c
SS
951 if (sym)
952 {
953 type = SYMBOL_TYPE (sym);
954 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
955 return type;
956 }
957 return builtin_type_bool;
8caabe69 958 case language_java:
176620f1 959 sym = lookup_symbol ("boolean", NULL, VAR_DOMAIN, NULL, NULL);
8caabe69
AG
960 if (sym)
961 {
962 type = SYMBOL_TYPE (sym);
963 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
964 return type;
965 }
966 return java_boolean_type;
c906108c
SS
967 default:
968 return builtin_type_int;
969 }
970}
971\f
972/* This page contains functions that return info about
973 (struct value) values used in GDB. */
974
975/* Returns non-zero if the value VAL represents a true value. */
976int
3d6d86c6 977value_true (struct value *val)
c906108c
SS
978{
979 /* It is possible that we should have some sort of error if a non-boolean
980 value is used in this context. Possibly dependent on some kind of
981 "boolean-checking" option like range checking. But it should probably
982 not depend on the language except insofar as is necessary to identify
983 a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
984 should be an error, probably). */
985 return !value_logical_not (val);
986}
987\f
c906108c
SS
988/* This page contains functions for the printing out of
989 error messages that occur during type- and range-
990 checking. */
991
ddfe3c15
AC
992/* These are called when a language fails a type- or range-check. The
993 first argument should be a printf()-style format string, and the
994 rest of the arguments should be its arguments. If
995 [type|range]_check is [type|range]_check_on, an error is printed;
996 if [type|range]_check_warn, a warning; otherwise just the
997 message. */
c906108c
SS
998
999void
ddfe3c15 1000type_error (const char *string,...)
c906108c 1001{
c5aa993b 1002 va_list args;
c5aa993b 1003 va_start (args, string);
c906108c 1004
ddfe3c15
AC
1005 switch (type_check)
1006 {
1007 case type_check_warn:
1008 vwarning (string, args);
1009 break;
1010 case type_check_on:
1011 verror (string, args);
1012 break;
1013 case type_check_off:
1014 /* FIXME: cagney/2002-01-30: Should this function print anything
1015 when type error is off? */
1016 vfprintf_filtered (gdb_stderr, string, args);
1017 fprintf_filtered (gdb_stderr, "\n");
1018 break;
1019 default:
1020 internal_error (__FILE__, __LINE__, "bad switch");
1021 }
c5aa993b 1022 va_end (args);
c906108c
SS
1023}
1024
1025void
ddfe3c15 1026range_error (const char *string,...)
c906108c 1027{
c5aa993b 1028 va_list args;
c5aa993b 1029 va_start (args, string);
c906108c 1030
ddfe3c15
AC
1031 switch (range_check)
1032 {
1033 case range_check_warn:
1034 vwarning (string, args);
1035 break;
1036 case range_check_on:
1037 verror (string, args);
1038 break;
1039 case range_check_off:
1040 /* FIXME: cagney/2002-01-30: Should this function print anything
1041 when range error is off? */
1042 vfprintf_filtered (gdb_stderr, string, args);
1043 fprintf_filtered (gdb_stderr, "\n");
1044 break;
1045 default:
1046 internal_error (__FILE__, __LINE__, "bad switch");
1047 }
c5aa993b 1048 va_end (args);
c906108c 1049}
c906108c 1050\f
c5aa993b 1051
c906108c
SS
1052/* This page contains miscellaneous functions */
1053
1054/* Return the language enum for a given language string. */
1055
1056enum language
fba45db2 1057language_enum (char *str)
c906108c
SS
1058{
1059 int i;
1060
c5aa993b 1061 for (i = 0; i < languages_size; i++)
cb137aa5 1062 if (DEPRECATED_STREQ (languages[i]->la_name, str))
c906108c
SS
1063 return languages[i]->la_language;
1064
1065 return language_unknown;
1066}
1067
1068/* Return the language struct for a given language enum. */
1069
1070const struct language_defn *
fba45db2 1071language_def (enum language lang)
c906108c
SS
1072{
1073 int i;
1074
c5aa993b
JM
1075 for (i = 0; i < languages_size; i++)
1076 {
1077 if (languages[i]->la_language == lang)
1078 {
1079 return languages[i];
1080 }
c906108c 1081 }
c906108c
SS
1082 return NULL;
1083}
1084
1085/* Return the language as a string */
1086char *
fba45db2 1087language_str (enum language lang)
c906108c
SS
1088{
1089 int i;
1090
c5aa993b
JM
1091 for (i = 0; i < languages_size; i++)
1092 {
1093 if (languages[i]->la_language == lang)
1094 {
1095 return languages[i]->la_name;
1096 }
c906108c 1097 }
c906108c
SS
1098 return "Unknown";
1099}
1100
1101static void
fba45db2 1102set_check (char *ignore, int from_tty)
c906108c 1103{
c5aa993b
JM
1104 printf_unfiltered (
1105 "\"set check\" must be followed by the name of a check subcommand.\n");
1106 help_list (setchecklist, "set check ", -1, gdb_stdout);
c906108c
SS
1107}
1108
1109static void
fba45db2 1110show_check (char *ignore, int from_tty)
c906108c 1111{
c5aa993b 1112 cmd_show_list (showchecklist, from_tty, "");
c906108c
SS
1113}
1114\f
1115/* Add a language to the set of known languages. */
1116
1117void
fba45db2 1118add_language (const struct language_defn *lang)
c906108c
SS
1119{
1120 if (lang->la_magic != LANG_MAGIC)
1121 {
c5aa993b
JM
1122 fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
1123 lang->la_name);
e1e9e218 1124 internal_error (__FILE__, __LINE__, "failed internal consistency check");
c906108c
SS
1125 }
1126
1127 if (!languages)
1128 {
1129 languages_allocsize = DEFAULT_ALLOCSIZE;
1130 languages = (const struct language_defn **) xmalloc
1131 (languages_allocsize * sizeof (*languages));
1132 }
1133 if (languages_size >= languages_allocsize)
1134 {
1135 languages_allocsize *= 2;
1136 languages = (const struct language_defn **) xrealloc ((char *) languages,
c5aa993b 1137 languages_allocsize * sizeof (*languages));
c906108c
SS
1138 }
1139 languages[languages_size++] = lang;
1140}
1141
f636b87d
AF
1142/* Iterate through all registered languages looking for and calling
1143 any non-NULL struct language_defn.skip_trampoline() functions.
1144 Return the result from the first that returns non-zero, or 0 if all
1145 `fail'. */
1146CORE_ADDR
1147skip_language_trampoline (CORE_ADDR pc)
1148{
1149 int i;
1150
1151 for (i = 0; i < languages_size; i++)
1152 {
1153 if (languages[i]->skip_trampoline)
1154 {
1155 CORE_ADDR real_pc = (languages[i]->skip_trampoline) (pc);
1156 if (real_pc)
1157 return real_pc;
1158 }
1159 }
1160
1161 return 0;
1162}
1163
9a3d7dfd
AF
1164/* Return demangled language symbol, or NULL.
1165 FIXME: Options are only useful for certain languages and ignored
1166 by others, so it would be better to remove them here and have a
1167 more flexible demangler for the languages that need it.
1168 FIXME: Sometimes the demangler is invoked when we don't know the
1169 language, so we can't use this everywhere. */
1170char *
1171language_demangle (const struct language_defn *current_language,
1172 const char *mangled, int options)
1173{
1174 if (current_language != NULL && current_language->la_demangle)
1175 return current_language->la_demangle (mangled, options);
1176 return NULL;
1177}
1178
31c27f77
JJ
1179/* Return class name from physname or NULL. */
1180char *
1181language_class_name_from_physname (const struct language_defn *current_language,
1182 const char *physname)
1183{
1184 if (current_language != NULL && current_language->la_class_name_from_physname)
1185 return current_language->la_class_name_from_physname (physname);
1186 return NULL;
1187}
1188
9f0a5303
JB
1189/* Return the default string containing the list of characters
1190 delimiting words. This is a reasonable default value that
1191 most languages should be able to use. */
1192
1193char *
1194default_word_break_characters (void)
1195{
1196 return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
1197}
f636b87d 1198
c906108c
SS
1199/* Define the language that is no language. */
1200
1201static int
fba45db2 1202unk_lang_parser (void)
c906108c
SS
1203{
1204 return 1;
1205}
1206
1207static void
fba45db2 1208unk_lang_error (char *msg)
c906108c
SS
1209{
1210 error ("Attempted to parse an expression with unknown language");
1211}
1212
1213static void
f86f5ca3 1214unk_lang_emit_char (int c, struct ui_file *stream, int quoter)
c906108c
SS
1215{
1216 error ("internal error - unimplemented function unk_lang_emit_char called.");
1217}
1218
1219static void
f86f5ca3 1220unk_lang_printchar (int c, struct ui_file *stream)
c906108c
SS
1221{
1222 error ("internal error - unimplemented function unk_lang_printchar called.");
1223}
1224
1225static void
fba45db2
KB
1226unk_lang_printstr (struct ui_file *stream, char *string, unsigned int length,
1227 int width, int force_ellipses)
c906108c
SS
1228{
1229 error ("internal error - unimplemented function unk_lang_printstr called.");
1230}
1231
1232static struct type *
fba45db2 1233unk_lang_create_fundamental_type (struct objfile *objfile, int typeid)
c906108c
SS
1234{
1235 error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
1236}
1237
1238static void
fba45db2
KB
1239unk_lang_print_type (struct type *type, char *varstring, struct ui_file *stream,
1240 int show, int level)
c906108c
SS
1241{
1242 error ("internal error - unimplemented function unk_lang_print_type called.");
1243}
1244
1245static int
fba45db2
KB
1246unk_lang_val_print (struct type *type, char *valaddr, int embedded_offset,
1247 CORE_ADDR address, struct ui_file *stream, int format,
1248 int deref_ref, int recurse, enum val_prettyprint pretty)
c906108c
SS
1249{
1250 error ("internal error - unimplemented function unk_lang_val_print called.");
1251}
1252
1253static int
3d6d86c6 1254unk_lang_value_print (struct value *val, struct ui_file *stream, int format,
fba45db2 1255 enum val_prettyprint pretty)
c906108c
SS
1256{
1257 error ("internal error - unimplemented function unk_lang_value_print called.");
1258}
1259
f636b87d
AF
1260static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc)
1261{
1262 return 0;
1263}
1264
9a3d7dfd
AF
1265/* Unknown languages just use the cplus demangler. */
1266static char *unk_lang_demangle (const char *mangled, int options)
1267{
1268 return cplus_demangle (mangled, options);
1269}
1270
31c27f77
JJ
1271static char *unk_lang_class_name (const char *mangled)
1272{
1273 return NULL;
1274}
9a3d7dfd 1275
6c6ea35e 1276static struct type **const (unknown_builtin_types[]) =
c5aa993b
JM
1277{
1278 0
1279};
1280static const struct op_print unk_op_print_tab[] =
1281{
1282 {NULL, OP_NULL, PREC_NULL, 0}
c906108c
SS
1283};
1284
c5aa993b
JM
1285const struct language_defn unknown_language_defn =
1286{
c906108c
SS
1287 "unknown",
1288 language_unknown,
1289 &unknown_builtin_types[0],
1290 range_check_off,
1291 type_check_off,
63872f9d 1292 case_sensitive_on,
5f9769d1 1293 &exp_descriptor_standard,
c906108c
SS
1294 unk_lang_parser,
1295 unk_lang_error,
e85c3284 1296 null_post_parser,
c906108c
SS
1297 unk_lang_printchar, /* Print character constant */
1298 unk_lang_printstr,
1299 unk_lang_emit_char,
1300 unk_lang_create_fundamental_type,
1301 unk_lang_print_type, /* Print a type using appropriate syntax */
1302 unk_lang_val_print, /* Print a value using appropriate syntax */
1303 unk_lang_value_print, /* Print a top-level value */
f636b87d 1304 unk_lang_trampoline, /* Language specific skip_trampoline */
5f9a71c3
DC
1305 value_of_this, /* value_of_this */
1306 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1307 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1308 unk_lang_demangle, /* Language specific symbol demangler */
31c27f77 1309 unk_lang_class_name, /* Language specific class_name_from_physname */
c5aa993b
JM
1310 {"", "", "", ""}, /* Binary format info */
1311 {"0%lo", "0", "o", ""}, /* Octal format info */
1312 {"%ld", "", "d", ""}, /* Decimal format info */
1313 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1314 unk_op_print_tab, /* expression operators for printing */
1315 1, /* c-style arrays */
1316 0, /* String lower bound */
c5aa993b 1317 &builtin_type_char, /* Type of string elements */
6084f43a 1318 default_word_break_characters,
c906108c
SS
1319 LANG_MAGIC
1320};
1321
1322/* These two structs define fake entries for the "local" and "auto" options. */
c5aa993b
JM
1323const struct language_defn auto_language_defn =
1324{
c906108c
SS
1325 "auto",
1326 language_auto,
1327 &unknown_builtin_types[0],
1328 range_check_off,
1329 type_check_off,
63872f9d 1330 case_sensitive_on,
5f9769d1 1331 &exp_descriptor_standard,
c906108c
SS
1332 unk_lang_parser,
1333 unk_lang_error,
e85c3284 1334 null_post_parser,
c906108c
SS
1335 unk_lang_printchar, /* Print character constant */
1336 unk_lang_printstr,
1337 unk_lang_emit_char,
1338 unk_lang_create_fundamental_type,
1339 unk_lang_print_type, /* Print a type using appropriate syntax */
1340 unk_lang_val_print, /* Print a value using appropriate syntax */
1341 unk_lang_value_print, /* Print a top-level value */
f636b87d 1342 unk_lang_trampoline, /* Language specific skip_trampoline */
5f9a71c3
DC
1343 value_of_this, /* value_of_this */
1344 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1345 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1346 unk_lang_demangle, /* Language specific symbol demangler */
31c27f77 1347 unk_lang_class_name, /* Language specific class_name_from_physname */
c5aa993b
JM
1348 {"", "", "", ""}, /* Binary format info */
1349 {"0%lo", "0", "o", ""}, /* Octal format info */
1350 {"%ld", "", "d", ""}, /* Decimal format info */
1351 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1352 unk_op_print_tab, /* expression operators for printing */
1353 1, /* c-style arrays */
1354 0, /* String lower bound */
c5aa993b 1355 &builtin_type_char, /* Type of string elements */
6084f43a 1356 default_word_break_characters,
c906108c
SS
1357 LANG_MAGIC
1358};
1359
c5aa993b
JM
1360const struct language_defn local_language_defn =
1361{
c906108c
SS
1362 "local",
1363 language_auto,
1364 &unknown_builtin_types[0],
1365 range_check_off,
1366 type_check_off,
63872f9d 1367 case_sensitive_on,
5f9769d1 1368 &exp_descriptor_standard,
c906108c
SS
1369 unk_lang_parser,
1370 unk_lang_error,
e85c3284 1371 null_post_parser,
c906108c
SS
1372 unk_lang_printchar, /* Print character constant */
1373 unk_lang_printstr,
1374 unk_lang_emit_char,
1375 unk_lang_create_fundamental_type,
1376 unk_lang_print_type, /* Print a type using appropriate syntax */
1377 unk_lang_val_print, /* Print a value using appropriate syntax */
1378 unk_lang_value_print, /* Print a top-level value */
f636b87d 1379 unk_lang_trampoline, /* Language specific skip_trampoline */
5f9a71c3
DC
1380 value_of_this, /* value_of_this */
1381 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1382 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1383 unk_lang_demangle, /* Language specific symbol demangler */
31c27f77 1384 unk_lang_class_name, /* Language specific class_name_from_physname */
c5aa993b
JM
1385 {"", "", "", ""}, /* Binary format info */
1386 {"0%lo", "0", "o", ""}, /* Octal format info */
1387 {"%ld", "", "d", ""}, /* Decimal format info */
1388 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1389 unk_op_print_tab, /* expression operators for printing */
1390 1, /* c-style arrays */
1391 0, /* String lower bound */
c5aa993b 1392 &builtin_type_char, /* Type of string elements */
6084f43a 1393 default_word_break_characters,
c906108c
SS
1394 LANG_MAGIC
1395};
1396\f
1397/* Initialize the language routines */
1398
1399void
fba45db2 1400_initialize_language (void)
c906108c 1401{
c5aa993b
JM
1402 struct cmd_list_element *set, *show;
1403
1404 /* GDB commands for language specific stuff */
1405
1406 set = add_set_cmd ("language", class_support, var_string_noescape,
1407 (char *) &language,
1408 "Set the current source language.",
1409 &setlist);
cb1a6d5f 1410 show = deprecated_add_show_from_set (set, &showlist);
9f60d481
AC
1411 set_cmd_cfunc (set, set_language_command);
1412 set_cmd_cfunc (show, show_language_command);
c5aa993b
JM
1413
1414 add_prefix_cmd ("check", no_class, set_check,
d4654627 1415 "Set the status of the type/range checker.",
c5aa993b
JM
1416 &setchecklist, "set check ", 0, &setlist);
1417 add_alias_cmd ("c", "check", no_class, 1, &setlist);
1418 add_alias_cmd ("ch", "check", no_class, 1, &setlist);
1419
1420 add_prefix_cmd ("check", no_class, show_check,
d4654627 1421 "Show the status of the type/range checker.",
c5aa993b
JM
1422 &showchecklist, "show check ", 0, &showlist);
1423 add_alias_cmd ("c", "check", no_class, 1, &showlist);
1424 add_alias_cmd ("ch", "check", no_class, 1, &showlist);
1425
1426 set = add_set_cmd ("type", class_support, var_string_noescape,
1427 (char *) &type,
1428 "Set type checking. (on/warn/off/auto)",
1429 &setchecklist);
cb1a6d5f 1430 show = deprecated_add_show_from_set (set, &showchecklist);
9f60d481
AC
1431 set_cmd_cfunc (set, set_type_command);
1432 set_cmd_cfunc (show, show_type_command);
c5aa993b
JM
1433
1434 set = add_set_cmd ("range", class_support, var_string_noescape,
1435 (char *) &range,
1436 "Set range checking. (on/warn/off/auto)",
1437 &setchecklist);
cb1a6d5f 1438 show = deprecated_add_show_from_set (set, &showchecklist);
9f60d481
AC
1439 set_cmd_cfunc (set, set_range_command);
1440 set_cmd_cfunc (show, show_range_command);
c5aa993b 1441
63872f9d
JG
1442 set = add_set_cmd ("case-sensitive", class_support, var_string_noescape,
1443 (char *) &case_sensitive,
1444 "Set case sensitivity in name search. (on/off/auto)\n\
1445For Fortran the default is off; for other languages the default is on.",
1446 &setlist);
cb1a6d5f 1447 show = deprecated_add_show_from_set (set, &showlist);
9f60d481
AC
1448 set_cmd_cfunc (set, set_case_command);
1449 set_cmd_cfunc (show, show_case_command);
63872f9d 1450
c5aa993b
JM
1451 add_language (&unknown_language_defn);
1452 add_language (&local_language_defn);
1453 add_language (&auto_language_defn);
1454
1455 language = savestring ("auto", strlen ("auto"));
ed9a39eb 1456 type = savestring ("auto", strlen ("auto"));
ed9a39eb 1457 range = savestring ("auto", strlen ("auto"));
63872f9d
JG
1458 case_sensitive = savestring ("auto",strlen ("auto"));
1459
1460 /* Have the above take effect */
1461 set_language (language_auto);
c906108c 1462}