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