1 /* Multiple source language support for GDB.
2 Copyright 1991, 1992, 2000 Free Software Foundation, Inc.
3 Contributed by the Department of Computer Science at the State University
4 of New York at Buffalo.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
23 /* This file contains functions that return things that are specific
24 to languages. Each function should examine current_language if necessary,
25 and return the appropriate result. */
27 /* FIXME: Most of these would be better organized as macros which
28 return data out of a "language-specific" struct pointer that is set
29 whenever the working language changes. That would be a lot faster. */
33 #include "gdb_string.h"
40 #include "expression.h"
43 #include "parser-defs.h"
46 extern void _initialize_language (void);
48 static void show_language_command (char *, int);
50 static void set_language_command (char *, int);
52 static void show_type_command (char *, int);
54 static void set_type_command (char *, int);
56 static void show_range_command (char *, int);
58 static void set_range_command (char *, int);
60 static void show_case_command (char *, int);
62 static void set_case_command (char *, int);
64 static void set_case_str (void);
66 static void set_range_str (void);
68 static void set_type_str (void);
70 static void set_lang_str (void);
72 static void unk_lang_error (char *);
74 static int unk_lang_parser (void);
76 static void show_check (char *, int);
78 static void set_check (char *, int);
80 static void set_type_range_case (void);
82 static void unk_lang_emit_char (int c
, struct ui_file
*stream
, int quoter
);
84 static void unk_lang_printchar (int c
, struct ui_file
*stream
);
86 static void unk_lang_printstr (struct ui_file
* stream
, char *string
,
87 unsigned int length
, int width
,
90 static struct type
*unk_lang_create_fundamental_type (struct objfile
*, int);
92 static void unk_lang_print_type (struct type
*, char *, struct ui_file
*,
95 static int unk_lang_val_print (struct type
*, char *, int, CORE_ADDR
,
96 struct ui_file
*, int, int, int,
97 enum val_prettyprint
);
99 static int unk_lang_value_print (value_ptr
, struct ui_file
*, int, enum val_prettyprint
);
101 /* Forward declaration */
102 extern const struct language_defn unknown_language_defn
;
103 extern char *warning_pre_print
;
105 /* The current (default at startup) state of type and range checking.
106 (If the modes are set to "auto", though, these are changed based
107 on the default language at startup, and then again based on the
108 language of the first source file. */
110 enum range_mode range_mode
= range_mode_auto
;
111 enum range_check range_check
= range_check_off
;
112 enum type_mode type_mode
= type_mode_auto
;
113 enum type_check type_check
= type_check_off
;
114 enum case_mode case_mode
= case_mode_auto
;
115 enum case_sensitivity case_sensitivity
= case_sensitive_on
;
117 /* The current language and language_mode (see language.h) */
119 const struct language_defn
*current_language
= &unknown_language_defn
;
120 enum language_mode language_mode
= language_mode_auto
;
122 /* The language that the user expects to be typing in (the language
123 of main(), or the last language we notified them about, or C). */
125 const struct language_defn
*expected_language
;
127 /* The list of supported languages. The list itself is malloc'd. */
129 static const struct language_defn
**languages
;
130 static unsigned languages_size
;
131 static unsigned languages_allocsize
;
132 #define DEFAULT_ALLOCSIZE 4
134 /* The "set language/type/range" commands all put stuff in these
135 buffers. This is to make them work as set/show commands. The
136 user's string is copied here, then the set_* commands look at
137 them and update them to something that looks nice when it is
140 static char *language
;
143 static char *case_sensitive
;
145 /* Warning issued when current_language and the language of the current
146 frame do not match. */
147 char lang_frame_mismatch_warn
[] =
148 "Warning: the current language does not match this frame.";
151 /* This page contains the functions corresponding to GDB commands
152 and their helpers. */
154 /* Show command. Display a warning if the language set
155 does not match the frame. */
157 show_language_command (char *ignore
, int from_tty
)
159 enum language flang
; /* The language of the current frame */
161 flang
= get_frame_language ();
162 if (flang
!= language_unknown
&&
163 language_mode
== language_mode_manual
&&
164 current_language
->la_language
!= flang
)
165 printf_filtered ("%s\n", lang_frame_mismatch_warn
);
168 /* Set command. Change the current working language. */
170 set_language_command (char *ignore
, int from_tty
)
176 if (!language
|| !language
[0])
178 printf_unfiltered ("The currently understood settings are:\n\n");
179 printf_unfiltered ("local or auto Automatic setting based on source file\n");
181 for (i
= 0; i
< languages_size
; ++i
)
183 /* Already dealt with these above. */
184 if (languages
[i
]->la_language
== language_unknown
185 || languages
[i
]->la_language
== language_auto
)
188 /* FIXME for now assume that the human-readable name is just
189 a capitalization of the internal name. */
190 printf_unfiltered ("%-16s Use the %c%s language\n",
191 languages
[i
]->la_name
,
192 /* Capitalize first letter of language
194 toupper (languages
[i
]->la_name
[0]),
195 languages
[i
]->la_name
+ 1);
197 /* Restore the silly string. */
198 set_language (current_language
->la_language
);
202 /* Search the list of languages for a match. */
203 for (i
= 0; i
< languages_size
; i
++)
205 if (STREQ (languages
[i
]->la_name
, language
))
207 /* Found it! Go into manual mode, and use this language. */
208 if (languages
[i
]->la_language
== language_auto
)
210 /* Enter auto mode. Set to the current frame's language, if known. */
211 language_mode
= language_mode_auto
;
212 flang
= get_frame_language ();
213 if (flang
!= language_unknown
)
214 set_language (flang
);
215 expected_language
= current_language
;
220 /* Enter manual mode. Set the specified language. */
221 language_mode
= language_mode_manual
;
222 current_language
= languages
[i
];
223 set_type_range_case ();
225 expected_language
= current_language
;
231 /* Reset the language (esp. the global string "language") to the
233 err_lang
= savestring (language
, strlen (language
));
234 make_cleanup (free
, err_lang
); /* Free it after error */
235 set_language (current_language
->la_language
);
236 error ("Unknown language `%s'.", err_lang
);
239 /* Show command. Display a warning if the type setting does
240 not match the current language. */
242 show_type_command (char *ignore
, int from_tty
)
244 if (type_check
!= current_language
->la_type_check
)
246 "Warning: the current type check setting does not match the language.\n");
249 /* Set command. Change the setting for type checking. */
251 set_type_command (char *ignore
, int from_tty
)
253 if (STREQ (type
, "on"))
255 type_check
= type_check_on
;
256 type_mode
= type_mode_manual
;
258 else if (STREQ (type
, "warn"))
260 type_check
= type_check_warn
;
261 type_mode
= type_mode_manual
;
263 else if (STREQ (type
, "off"))
265 type_check
= type_check_off
;
266 type_mode
= type_mode_manual
;
268 else if (STREQ (type
, "auto"))
270 type_mode
= type_mode_auto
;
271 set_type_range_case ();
272 /* Avoid hitting the set_type_str call below. We
273 did it in set_type_range_case. */
278 warning ("Unrecognized type check setting: \"%s\"", type
);
281 show_type_command ((char *) NULL
, from_tty
);
284 /* Show command. Display a warning if the range setting does
285 not match the current language. */
287 show_range_command (char *ignore
, int from_tty
)
290 if (range_check
!= current_language
->la_range_check
)
292 "Warning: the current range check setting does not match the language.\n");
295 /* Set command. Change the setting for range checking. */
297 set_range_command (char *ignore
, int from_tty
)
299 if (STREQ (range
, "on"))
301 range_check
= range_check_on
;
302 range_mode
= range_mode_manual
;
304 else if (STREQ (range
, "warn"))
306 range_check
= range_check_warn
;
307 range_mode
= range_mode_manual
;
309 else if (STREQ (range
, "off"))
311 range_check
= range_check_off
;
312 range_mode
= range_mode_manual
;
314 else if (STREQ (range
, "auto"))
316 range_mode
= range_mode_auto
;
317 set_type_range_case ();
318 /* Avoid hitting the set_range_str call below. We
319 did it in set_type_range_case. */
324 warning ("Unrecognized range check setting: \"%s\"", range
);
327 show_range_command ((char *) 0, from_tty
);
330 /* Show command. Display a warning if the case sensitivity setting does
331 not match the current language. */
333 show_case_command(ignore
, from_tty
)
337 if (case_sensitivity
!= current_language
->la_case_sensitivity
)
339 "Warning: the current case sensitivity setting does not match the language.\n");
342 /* Set command. Change the setting for case sensitivity. */
344 set_case_command(ignore
, from_tty
)
348 if (STREQ (case_sensitive
, "on"))
350 case_sensitivity
= case_sensitive_on
;
351 case_mode
= case_mode_manual
;
353 else if (STREQ (case_sensitive
, "off"))
355 case_sensitivity
= case_sensitive_off
;
356 case_mode
= case_mode_manual
;
358 else if (STREQ (case_sensitive
, "auto"))
360 case_mode
= case_mode_auto
;
361 set_type_range_case ();
362 /* Avoid hitting the set_case_str call below. We
363 did it in set_type_range_case. */
368 warning ("Unrecognized case-sensitive setting: \"%s\"", case_sensitive
);
371 show_case_command ((char *) NULL
, from_tty
);
374 /* Set the status of range and type checking and case sensitivity based on
375 the current modes and the current language.
376 If SHOW is non-zero, then print out the current language,
377 type and range checking status. */
379 set_type_range_case (void)
382 if (range_mode
== range_mode_auto
)
383 range_check
= current_language
->la_range_check
;
385 if (type_mode
== type_mode_auto
)
386 type_check
= current_language
->la_type_check
;
388 if (case_mode
== case_mode_auto
)
389 case_sensitivity
= current_language
->la_case_sensitivity
;
396 /* Set current language to (enum language) LANG. Returns previous language. */
399 set_language (enum language lang
)
402 enum language prev_language
;
404 prev_language
= current_language
->la_language
;
406 for (i
= 0; i
< languages_size
; i
++)
408 if (languages
[i
]->la_language
== lang
)
410 current_language
= languages
[i
];
411 set_type_range_case ();
417 return prev_language
;
420 /* This page contains functions that update the global vars
421 language, type and range. */
429 if (language_mode
== language_mode_auto
)
430 prefix
= "auto; currently ";
432 language
= concat (prefix
, current_language
->la_name
, NULL
);
438 char *tmp
= NULL
, *prefix
= "";
442 if (type_mode
== type_mode_auto
)
443 prefix
= "auto; currently ";
453 case type_check_warn
:
457 error ("Unrecognized type check setting.");
460 type
= concat (prefix
, tmp
, NULL
);
466 char *tmp
, *pref
= "";
468 if (range_mode
== range_mode_auto
)
469 pref
= "auto; currently ";
476 case range_check_off
:
479 case range_check_warn
:
483 error ("Unrecognized range check setting.");
488 range
= concat (pref
, tmp
, NULL
);
494 char *tmp
= NULL
, *prefix
= "";
496 if (case_mode
==case_mode_auto
)
497 prefix
= "auto; currently ";
499 switch (case_sensitivity
)
501 case case_sensitive_on
:
504 case case_sensitive_off
:
508 error ("Unrecognized case-sensitive setting.");
511 free (case_sensitive
);
512 case_sensitive
= concat (prefix
, tmp
, NULL
);
515 /* Print out the current language settings: language, range and
516 type checking. If QUIETLY, print only what has changed. */
519 language_info (int quietly
)
521 if (quietly
&& expected_language
== current_language
)
524 expected_language
= current_language
;
525 printf_unfiltered ("Current language: %s\n", language
);
526 show_language_command ((char *) 0, 1);
530 printf_unfiltered ("Type checking: %s\n", type
);
531 show_type_command ((char *) 0, 1);
532 printf_unfiltered ("Range checking: %s\n", range
);
533 show_range_command ((char *) 0, 1);
534 printf_unfiltered ("Case sensitivity: %s\n", case_sensitive
);
535 show_case_command ((char *) 0, 1);
539 /* Return the result of a binary operation. */
541 #if 0 /* Currently unused */
544 binop_result_type (value_ptr v1
, value_ptr v2
)
547 struct type
*t1
= check_typedef (VALUE_TYPE (v1
));
548 struct type
*t2
= check_typedef (VALUE_TYPE (v2
));
550 int l1
= TYPE_LENGTH (t1
);
551 int l2
= TYPE_LENGTH (t2
);
553 switch (current_language
->la_language
)
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
);
571 /* If we are doing type-checking, l1 should equal l2, so this is
573 return l1
> l2
? VALUE_TYPE (v1
) : VALUE_TYPE (v2
);
576 error ("Missing Chill support in function binop_result_check."); /*FIXME */
579 return (struct type
*) 0; /* For lint */
585 /* This page contains functions that return format strings for
586 printf for printing out numbers in different formats */
588 /* Returns the appropriate printf format for hexadecimal
591 local_hex_format_custom (char *pre
)
593 static char form
[50];
595 strcpy (form
, local_hex_format_prefix ());
598 strcat (form
, local_hex_format_specifier ());
599 strcat (form
, local_hex_format_suffix ());
604 /* FIXME: cagney/2000-03-04: This function does not appear to be used.
605 It can be deleted once 5.0 has been released. */
606 /* FIXME: cagney/2000-03-04: This code assumes that the compiler
607 supports ``long long''. */
608 /* Converts a number to hexadecimal (without leading "0x") and stores it in a
609 static string. Returns a pointer to this string. */
612 longest_raw_hex_string (LONGEST num
)
614 static char res_longest_raw_hex_string
[50];
615 long long ll
= num
; /* MERGEBUG ?? see below */
616 res_longest_raw_hex_string
[0] = 0;
617 /* MERGEBUG ?? As a quick fix I am replacing this with sprintf
618 strcat_address_numeric (num, 0, res_longest_raw_hex_string, 50);
621 sprintf (res_longest_raw_hex_string
, "%llx", ll
);
622 return res_longest_raw_hex_string
;
626 /* Converts a number to hexadecimal and stores it in a static
627 string. Returns a pointer to this string. */
629 local_hex_string (unsigned long num
)
633 sprintf (res
, local_hex_format (), num
);
637 /* Converts a LONGEST number to hexadecimal and stores it in a static
638 string. Returns a pointer to this string. */
640 longest_local_hex_string (LONGEST num
)
642 return longest_local_hex_string_custom (num
, "l");
645 /* Converts a number to custom hexadecimal and stores it in a static
646 string. Returns a pointer to this string. */
648 local_hex_string_custom (unsigned long num
, char *pre
)
652 sprintf (res
, local_hex_format_custom (pre
), num
);
656 /* Converts a LONGEST number to custom hexadecimal and stores it in a static
657 string. Returns a pointer to this string. Note that the width parameter
658 should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
661 longest_local_hex_string_custom (LONGEST num
, char *width
)
663 #define RESULT_BUF_LEN 50
664 static char res2
[RESULT_BUF_LEN
];
665 char format
[RESULT_BUF_LEN
];
666 #if !defined (PRINTF_HAS_LONG_LONG)
670 char *pad_char
; /* string with one character */
673 char temp_nbr_buf
[RESULT_BUF_LEN
];
676 #ifndef CC_HAS_LONG_LONG
677 /* If there is no long long, then LONGEST should be just long and we
678 can use local_hex_string_custom
680 return local_hex_string_custom ((unsigned long) num
, width
);
681 #elif defined (PRINTF_HAS_LONG_LONG)
682 /* Just use printf. */
683 strcpy (format
, local_hex_format_prefix ()); /* 0x */
684 strcat (format
, "%");
685 strcat (format
, width
); /* e.g. "08l" */
686 strcat (format
, "l"); /* need "ll" for long long */
687 strcat (format
, local_hex_format_specifier ()); /* "x" */
688 strcat (format
, local_hex_format_suffix ()); /* "" */
689 sprintf (res2
, format
, num
);
691 #else /* !defined (PRINTF_HAS_LONG_LONG) */
692 /* Use strcat_address_numeric to print the number into a string, then
693 build the result string from local_hex_format_prefix, padding and
694 the hex representation as indicated by "width". */
697 /* With use_local == 0, we don't get the leading "0x" prefix. */
698 /* MERGEBUG ?? As a quick fix I am replacing this call to
699 strcat_address_numeric with sprintf
700 strcat_address_numeric(num, 0, temp_nbr_buf, RESULT_BUF_LEN);
705 sprintf (temp_nbr_buf
, "%llx", ll
);
711 if (*parse_ptr
== '-')
716 if (*parse_ptr
== '0')
720 pad_char
= "0"; /* If padding is on the right, it is blank */
722 field_width
= atoi (parse_ptr
);
723 num_len
= strlen (temp_nbr_buf
);
724 num_pad_chars
= field_width
- strlen (temp_nbr_buf
); /* possibly negative */
726 if (strlen (local_hex_format_prefix ()) + num_len
+ num_pad_chars
727 < RESULT_BUF_LEN
) /* paranoia */
728 internal_error ("longest_local_hex_string_custom: insufficient space to store result");
730 strcpy (res2
, local_hex_format_prefix ());
733 while (num_pad_chars
> 0)
735 strcat (res2
, pad_char
);
739 strcat (res2
, temp_nbr_buf
);
742 while (num_pad_chars
> 0)
744 strcat (res2
, pad_char
);
751 } /* longest_local_hex_string_custom */
753 /* Returns the appropriate printf format for octal
756 local_octal_format_custom (char *pre
)
758 static char form
[50];
760 strcpy (form
, local_octal_format_prefix ());
763 strcat (form
, local_octal_format_specifier ());
764 strcat (form
, local_octal_format_suffix ());
768 /* Returns the appropriate printf format for decimal numbers. */
770 local_decimal_format_custom (char *pre
)
772 static char form
[50];
774 strcpy (form
, local_decimal_format_prefix ());
777 strcat (form
, local_decimal_format_specifier ());
778 strcat (form
, local_decimal_format_suffix ());
783 /* This page contains functions that are used in type/range checking.
784 They all return zero if the type/range check fails.
786 It is hoped that these will make extending GDB to parse different
787 languages a little easier. These are primarily used in eval.c when
788 evaluating expressions and making sure that their types are correct.
789 Instead of having a mess of conjucted/disjuncted expressions in an "if",
790 the ideas of type can be wrapped up in the following functions.
792 Note that some of them are not currently dependent upon which language
793 is currently being parsed. For example, floats are the same in
794 C and Modula-2 (ie. the only floating point type has TYPE_CODE of
795 TYPE_CODE_FLT), while booleans are different. */
797 /* Returns non-zero if its argument is a simple type. This is the same for
798 both Modula-2 and for C. In the C case, TYPE_CODE_CHAR will never occur,
799 and thus will never cause the failure of the test. */
801 simple_type (struct type
*type
)
803 CHECK_TYPEDEF (type
);
804 switch (TYPE_CODE (type
))
810 case TYPE_CODE_RANGE
:
819 /* Returns non-zero if its argument is of an ordered type.
820 An ordered type is one in which the elements can be tested for the
821 properties of "greater than", "less than", etc, or for which the
822 operations "increment" or "decrement" make sense. */
824 ordered_type (struct type
*type
)
826 CHECK_TYPEDEF (type
);
827 switch (TYPE_CODE (type
))
833 case TYPE_CODE_RANGE
:
841 /* Returns non-zero if the two types are the same */
843 same_type (struct type
*arg1
, struct type
*arg2
)
845 CHECK_TYPEDEF (type
);
846 if (structured_type (arg1
) ? !structured_type (arg2
) : structured_type (arg2
))
847 /* One is structured and one isn't */
849 else if (structured_type (arg1
) && structured_type (arg2
))
851 else if (numeric_type (arg1
) && numeric_type (arg2
))
852 return (TYPE_CODE (arg2
) == TYPE_CODE (arg1
)) &&
853 (TYPE_UNSIGNED (arg1
) == TYPE_UNSIGNED (arg2
))
859 /* Returns non-zero if the type is integral */
861 integral_type (struct type
*type
)
863 CHECK_TYPEDEF (type
);
864 switch (current_language
->la_language
)
868 return (TYPE_CODE (type
) != TYPE_CODE_INT
) &&
869 (TYPE_CODE (type
) != TYPE_CODE_ENUM
) ? 0 : 1;
871 case language_pascal
:
872 return TYPE_CODE (type
) != TYPE_CODE_INT
? 0 : 1;
874 error ("Missing Chill support in function integral_type."); /*FIXME */
876 error ("Language not supported.");
880 /* Returns non-zero if the value is numeric */
882 numeric_type (struct type
*type
)
884 CHECK_TYPEDEF (type
);
885 switch (TYPE_CODE (type
))
896 /* Returns non-zero if the value is a character type */
898 character_type (struct type
*type
)
900 CHECK_TYPEDEF (type
);
901 switch (current_language
->la_language
)
905 case language_pascal
:
906 return TYPE_CODE (type
) != TYPE_CODE_CHAR
? 0 : 1;
910 return (TYPE_CODE (type
) == TYPE_CODE_INT
) &&
911 TYPE_LENGTH (type
) == sizeof (char)
918 /* Returns non-zero if the value is a string type */
920 string_type (struct type
*type
)
922 CHECK_TYPEDEF (type
);
923 switch (current_language
->la_language
)
927 case language_pascal
:
928 return TYPE_CODE (type
) != TYPE_CODE_STRING
? 0 : 1;
932 /* C does not have distinct string type. */
939 /* Returns non-zero if the value is a boolean type */
941 boolean_type (struct type
*type
)
943 CHECK_TYPEDEF (type
);
944 if (TYPE_CODE (type
) == TYPE_CODE_BOOL
)
946 switch (current_language
->la_language
)
950 /* Might be more cleanly handled by having a TYPE_CODE_INT_NOT_BOOL
951 for CHILL and such languages, or a TYPE_CODE_INT_OR_BOOL for C. */
952 if (TYPE_CODE (type
) == TYPE_CODE_INT
)
960 /* Returns non-zero if the value is a floating-point type */
962 float_type (struct type
*type
)
964 CHECK_TYPEDEF (type
);
965 return TYPE_CODE (type
) == TYPE_CODE_FLT
;
968 /* Returns non-zero if the value is a pointer type */
970 pointer_type (struct type
*type
)
972 return TYPE_CODE (type
) == TYPE_CODE_PTR
||
973 TYPE_CODE (type
) == TYPE_CODE_REF
;
976 /* Returns non-zero if the value is a structured type */
978 structured_type (struct type
*type
)
980 CHECK_TYPEDEF (type
);
981 switch (current_language
->la_language
)
985 return (TYPE_CODE (type
) == TYPE_CODE_STRUCT
) ||
986 (TYPE_CODE (type
) == TYPE_CODE_UNION
) ||
987 (TYPE_CODE (type
) == TYPE_CODE_ARRAY
);
988 case language_pascal
:
989 return (TYPE_CODE(type
) == TYPE_CODE_STRUCT
) ||
990 (TYPE_CODE(type
) == TYPE_CODE_UNION
) ||
991 (TYPE_CODE(type
) == TYPE_CODE_SET
) ||
992 (TYPE_CODE(type
) == TYPE_CODE_ARRAY
);
994 return (TYPE_CODE (type
) == TYPE_CODE_STRUCT
) ||
995 (TYPE_CODE (type
) == TYPE_CODE_SET
) ||
996 (TYPE_CODE (type
) == TYPE_CODE_ARRAY
);
998 error ("Missing Chill support in function structured_type."); /*FIXME */
1006 lang_bool_type (void)
1010 switch (current_language
->la_language
)
1012 case language_chill
:
1013 return builtin_type_chill_bool
;
1014 case language_fortran
:
1015 sym
= lookup_symbol ("logical", NULL
, VAR_NAMESPACE
, NULL
, NULL
);
1018 type
= SYMBOL_TYPE (sym
);
1019 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
1022 return builtin_type_f_logical_s2
;
1023 case language_cplus
:
1024 case language_pascal
:
1025 if (current_language
->la_language
==language_cplus
)
1026 {sym
= lookup_symbol ("bool", NULL
, VAR_NAMESPACE
, NULL
, NULL
);}
1028 {sym
= lookup_symbol ("boolean", NULL
, VAR_NAMESPACE
, NULL
, NULL
);}
1031 type
= SYMBOL_TYPE (sym
);
1032 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
1035 return builtin_type_bool
;
1037 sym
= lookup_symbol ("boolean", NULL
, VAR_NAMESPACE
, NULL
, NULL
);
1040 type
= SYMBOL_TYPE (sym
);
1041 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
1044 return java_boolean_type
;
1046 return builtin_type_int
;
1050 /* This page contains functions that return info about
1051 (struct value) values used in GDB. */
1053 /* Returns non-zero if the value VAL represents a true value. */
1055 value_true (value_ptr val
)
1057 /* It is possible that we should have some sort of error if a non-boolean
1058 value is used in this context. Possibly dependent on some kind of
1059 "boolean-checking" option like range checking. But it should probably
1060 not depend on the language except insofar as is necessary to identify
1061 a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
1062 should be an error, probably). */
1063 return !value_logical_not (val
);
1066 /* Returns non-zero if the operator OP is defined on
1067 the values ARG1 and ARG2. */
1069 #if 0 /* Currently unused */
1072 binop_type_check (value_ptr arg1
, value_ptr arg2
, int op
)
1074 struct type
*t1
, *t2
;
1076 /* If we're not checking types, always return success. */
1080 t1
= VALUE_TYPE (arg1
);
1082 t2
= VALUE_TYPE (arg2
);
1090 if ((numeric_type (t1
) && pointer_type (t2
)) ||
1091 (pointer_type (t1
) && numeric_type (t2
)))
1093 warning ("combining pointer and integer.\n");
1099 if (!numeric_type (t1
) || !numeric_type (t2
))
1100 type_op_error ("Arguments to %s must be numbers.", op
);
1101 else if (!same_type (t1
, t2
))
1102 type_op_error ("Arguments to %s must be of the same type.", op
);
1105 case BINOP_LOGICAL_AND
:
1106 case BINOP_LOGICAL_OR
:
1107 if (!boolean_type (t1
) || !boolean_type (t2
))
1108 type_op_error ("Arguments to %s must be of boolean type.", op
);
1112 if ((pointer_type (t1
) && !(pointer_type (t2
) || integral_type (t2
))) ||
1113 (pointer_type (t2
) && !(pointer_type (t1
) || integral_type (t1
))))
1114 type_op_error ("A pointer can only be compared to an integer or pointer.", op
);
1115 else if ((pointer_type (t1
) && integral_type (t2
)) ||
1116 (integral_type (t1
) && pointer_type (t2
)))
1118 warning ("combining integer and pointer.\n");
1121 else if (!simple_type (t1
) || !simple_type (t2
))
1122 type_op_error ("Arguments to %s must be of simple type.", op
);
1123 else if (!same_type (t1
, t2
))
1124 type_op_error ("Arguments to %s must be of the same type.", op
);
1129 if (!integral_type (t1
) || !integral_type (t2
))
1130 type_op_error ("Arguments to %s must be of integral type.", op
);
1137 if (!ordered_type (t1
) || !ordered_type (t2
))
1138 type_op_error ("Arguments to %s must be of ordered type.", op
);
1139 else if (!same_type (t1
, t2
))
1140 type_op_error ("Arguments to %s must be of the same type.", op
);
1144 if (pointer_type (t1
) && !integral_type (t2
))
1145 type_op_error ("A pointer can only be assigned an integer.", op
);
1146 else if (pointer_type (t1
) && integral_type (t2
))
1148 warning ("combining integer and pointer.");
1151 else if (!simple_type (t1
) || !simple_type (t2
))
1152 type_op_error ("Arguments to %s must be of simple type.", op
);
1153 else if (!same_type (t1
, t2
))
1154 type_op_error ("Arguments to %s must be of the same type.", op
);
1158 /* FIXME: Needs to handle bitstrings as well. */
1159 if (!(string_type (t1
) || character_type (t1
) || integral_type (t1
))
1160 || !(string_type (t2
) || character_type (t2
) || integral_type (t2
)))
1161 type_op_error ("Arguments to %s must be strings or characters.", op
);
1164 /* Unary checks -- arg2 is null */
1166 case UNOP_LOGICAL_NOT
:
1167 if (!boolean_type (t1
))
1168 type_op_error ("Argument to %s must be of boolean type.", op
);
1173 if (!numeric_type (t1
))
1174 type_op_error ("Argument to %s must be of numeric type.", op
);
1178 if (integral_type (t1
))
1180 warning ("combining pointer and integer.\n");
1183 else if (!pointer_type (t1
))
1184 type_op_error ("Argument to %s must be a pointer.", op
);
1187 case UNOP_PREINCREMENT
:
1188 case UNOP_POSTINCREMENT
:
1189 case UNOP_PREDECREMENT
:
1190 case UNOP_POSTDECREMENT
:
1191 if (!ordered_type (t1
))
1192 type_op_error ("Argument to %s must be of an ordered type.", op
);
1196 /* Ok. The following operators have different meanings in
1197 different languages. */
1198 switch (current_language
->la_language
)
1202 case language_cplus
:
1206 if (!numeric_type (t1
) || !numeric_type (t2
))
1207 type_op_error ("Arguments to %s must be numbers.", op
);
1218 if (!float_type (t1
) || !float_type (t2
))
1219 type_op_error ("Arguments to %s must be floating point numbers.", op
);
1222 if (!integral_type (t1
) || !integral_type (t2
))
1223 type_op_error ("Arguments to %s must be of integral type.", op
);
1229 case language_pascal
:
1233 if (!float_type(t1
) && !float_type(t2
))
1234 type_op_error ("Arguments to %s must be floating point numbers.",op
);
1237 if (!integral_type(t1
) || !integral_type(t2
))
1238 type_op_error ("Arguments to %s must be of integral type.",op
);
1244 case language_chill
:
1245 error ("Missing Chill support in function binop_type_check."); /*FIXME */
1255 /* This page contains functions for the printing out of
1256 error messages that occur during type- and range-
1259 /* Prints the format string FMT with the operator as a string
1260 corresponding to the opcode OP. If FATAL is non-zero, then
1261 this is an error and error () is called. Otherwise, it is
1262 a warning and printf() is called. */
1264 op_error (char *fmt
, enum exp_opcode op
, int fatal
)
1267 error (fmt
, op_string (op
));
1270 warning (fmt
, op_string (op
));
1274 /* These are called when a language fails a type- or range-check.
1275 The first argument should be a printf()-style format string, and
1276 the rest of the arguments should be its arguments. If
1277 [type|range]_check is [type|range]_check_on, then return_to_top_level()
1278 is called in the style of error (). Otherwise, the message is prefixed
1279 by the value of warning_pre_print and we do not return to the top level. */
1282 type_error (char *string
,...)
1285 va_start (args
, string
);
1287 if (type_check
== type_check_warn
)
1288 fprintf_filtered (gdb_stderr
, warning_pre_print
);
1292 vfprintf_filtered (gdb_stderr
, string
, args
);
1293 fprintf_filtered (gdb_stderr
, "\n");
1295 if (type_check
== type_check_on
)
1296 return_to_top_level (RETURN_ERROR
);
1300 range_error (char *string
,...)
1303 va_start (args
, string
);
1305 if (range_check
== range_check_warn
)
1306 fprintf_filtered (gdb_stderr
, warning_pre_print
);
1310 vfprintf_filtered (gdb_stderr
, string
, args
);
1311 fprintf_filtered (gdb_stderr
, "\n");
1313 if (range_check
== range_check_on
)
1314 return_to_top_level (RETURN_ERROR
);
1318 /* This page contains miscellaneous functions */
1320 /* Return the language enum for a given language string. */
1323 language_enum (char *str
)
1327 for (i
= 0; i
< languages_size
; i
++)
1328 if (STREQ (languages
[i
]->la_name
, str
))
1329 return languages
[i
]->la_language
;
1331 return language_unknown
;
1334 /* Return the language struct for a given language enum. */
1336 const struct language_defn
*
1337 language_def (enum language lang
)
1341 for (i
= 0; i
< languages_size
; i
++)
1343 if (languages
[i
]->la_language
== lang
)
1345 return languages
[i
];
1351 /* Return the language as a string */
1353 language_str (enum language lang
)
1357 for (i
= 0; i
< languages_size
; i
++)
1359 if (languages
[i
]->la_language
== lang
)
1361 return languages
[i
]->la_name
;
1368 set_check (char *ignore
, int from_tty
)
1371 "\"set check\" must be followed by the name of a check subcommand.\n");
1372 help_list (setchecklist
, "set check ", -1, gdb_stdout
);
1376 show_check (char *ignore
, int from_tty
)
1378 cmd_show_list (showchecklist
, from_tty
, "");
1381 /* Add a language to the set of known languages. */
1384 add_language (const struct language_defn
*lang
)
1386 if (lang
->la_magic
!= LANG_MAGIC
)
1388 fprintf_unfiltered (gdb_stderr
, "Magic number of %s language struct wrong\n",
1395 languages_allocsize
= DEFAULT_ALLOCSIZE
;
1396 languages
= (const struct language_defn
**) xmalloc
1397 (languages_allocsize
* sizeof (*languages
));
1399 if (languages_size
>= languages_allocsize
)
1401 languages_allocsize
*= 2;
1402 languages
= (const struct language_defn
**) xrealloc ((char *) languages
,
1403 languages_allocsize
* sizeof (*languages
));
1405 languages
[languages_size
++] = lang
;
1408 /* Define the language that is no language. */
1411 unk_lang_parser (void)
1417 unk_lang_error (char *msg
)
1419 error ("Attempted to parse an expression with unknown language");
1423 unk_lang_emit_char (register int c
, struct ui_file
*stream
, int quoter
)
1425 error ("internal error - unimplemented function unk_lang_emit_char called.");
1429 unk_lang_printchar (register int c
, struct ui_file
*stream
)
1431 error ("internal error - unimplemented function unk_lang_printchar called.");
1435 unk_lang_printstr (struct ui_file
*stream
, char *string
, unsigned int length
,
1436 int width
, int force_ellipses
)
1438 error ("internal error - unimplemented function unk_lang_printstr called.");
1441 static struct type
*
1442 unk_lang_create_fundamental_type (struct objfile
*objfile
, int typeid)
1444 error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
1448 unk_lang_print_type (struct type
*type
, char *varstring
, struct ui_file
*stream
,
1449 int show
, int level
)
1451 error ("internal error - unimplemented function unk_lang_print_type called.");
1455 unk_lang_val_print (struct type
*type
, char *valaddr
, int embedded_offset
,
1456 CORE_ADDR address
, struct ui_file
*stream
, int format
,
1457 int deref_ref
, int recurse
, enum val_prettyprint pretty
)
1459 error ("internal error - unimplemented function unk_lang_val_print called.");
1463 unk_lang_value_print (value_ptr val
, struct ui_file
*stream
, int format
,
1464 enum val_prettyprint pretty
)
1466 error ("internal error - unimplemented function unk_lang_value_print called.");
1469 static struct type
**CONST_PTR (unknown_builtin_types
[]) =
1473 static const struct op_print unk_op_print_tab
[] =
1475 {NULL
, OP_NULL
, PREC_NULL
, 0}
1478 const struct language_defn unknown_language_defn
=
1482 &unknown_builtin_types
[0],
1488 evaluate_subexp_standard
,
1489 unk_lang_printchar
, /* Print character constant */
1492 unk_lang_create_fundamental_type
,
1493 unk_lang_print_type
, /* Print a type using appropriate syntax */
1494 unk_lang_val_print
, /* Print a value using appropriate syntax */
1495 unk_lang_value_print
, /* Print a top-level value */
1496 {"", "", "", ""}, /* Binary format info */
1497 {"0%lo", "0", "o", ""}, /* Octal format info */
1498 {"%ld", "", "d", ""}, /* Decimal format info */
1499 {"0x%lx", "0x", "x", ""}, /* Hex format info */
1500 unk_op_print_tab
, /* expression operators for printing */
1501 1, /* c-style arrays */
1502 0, /* String lower bound */
1503 &builtin_type_char
, /* Type of string elements */
1507 /* These two structs define fake entries for the "local" and "auto" options. */
1508 const struct language_defn auto_language_defn
=
1512 &unknown_builtin_types
[0],
1518 evaluate_subexp_standard
,
1519 unk_lang_printchar
, /* Print character constant */
1522 unk_lang_create_fundamental_type
,
1523 unk_lang_print_type
, /* Print a type using appropriate syntax */
1524 unk_lang_val_print
, /* Print a value using appropriate syntax */
1525 unk_lang_value_print
, /* Print a top-level value */
1526 {"", "", "", ""}, /* Binary format info */
1527 {"0%lo", "0", "o", ""}, /* Octal format info */
1528 {"%ld", "", "d", ""}, /* Decimal format info */
1529 {"0x%lx", "0x", "x", ""}, /* Hex format info */
1530 unk_op_print_tab
, /* expression operators for printing */
1531 1, /* c-style arrays */
1532 0, /* String lower bound */
1533 &builtin_type_char
, /* Type of string elements */
1537 const struct language_defn local_language_defn
=
1541 &unknown_builtin_types
[0],
1547 evaluate_subexp_standard
,
1548 unk_lang_printchar
, /* Print character constant */
1551 unk_lang_create_fundamental_type
,
1552 unk_lang_print_type
, /* Print a type using appropriate syntax */
1553 unk_lang_val_print
, /* Print a value using appropriate syntax */
1554 unk_lang_value_print
, /* Print a top-level value */
1555 {"", "", "", ""}, /* Binary format info */
1556 {"0%lo", "0", "o", ""}, /* Octal format info */
1557 {"%ld", "", "d", ""}, /* Decimal format info */
1558 {"0x%lx", "0x", "x", ""}, /* Hex format info */
1559 unk_op_print_tab
, /* expression operators for printing */
1560 1, /* c-style arrays */
1561 0, /* String lower bound */
1562 &builtin_type_char
, /* Type of string elements */
1566 /* Initialize the language routines */
1569 _initialize_language (void)
1571 struct cmd_list_element
*set
, *show
;
1573 /* GDB commands for language specific stuff */
1575 set
= add_set_cmd ("language", class_support
, var_string_noescape
,
1577 "Set the current source language.",
1579 show
= add_show_from_set (set
, &showlist
);
1580 set
->function
.cfunc
= set_language_command
;
1581 show
->function
.cfunc
= show_language_command
;
1583 add_prefix_cmd ("check", no_class
, set_check
,
1584 "Set the status of the type/range checker",
1585 &setchecklist
, "set check ", 0, &setlist
);
1586 add_alias_cmd ("c", "check", no_class
, 1, &setlist
);
1587 add_alias_cmd ("ch", "check", no_class
, 1, &setlist
);
1589 add_prefix_cmd ("check", no_class
, show_check
,
1590 "Show the status of the type/range checker",
1591 &showchecklist
, "show check ", 0, &showlist
);
1592 add_alias_cmd ("c", "check", no_class
, 1, &showlist
);
1593 add_alias_cmd ("ch", "check", no_class
, 1, &showlist
);
1595 set
= add_set_cmd ("type", class_support
, var_string_noescape
,
1597 "Set type checking. (on/warn/off/auto)",
1599 show
= add_show_from_set (set
, &showchecklist
);
1600 set
->function
.cfunc
= set_type_command
;
1601 show
->function
.cfunc
= show_type_command
;
1603 set
= add_set_cmd ("range", class_support
, var_string_noescape
,
1605 "Set range checking. (on/warn/off/auto)",
1607 show
= add_show_from_set (set
, &showchecklist
);
1608 set
->function
.cfunc
= set_range_command
;
1609 show
->function
.cfunc
= show_range_command
;
1611 set
= add_set_cmd ("case-sensitive", class_support
, var_string_noescape
,
1612 (char *) &case_sensitive
,
1613 "Set case sensitivity in name search. (on/off/auto)\n\
1614 For Fortran the default is off; for other languages the default is on.",
1616 show
= add_show_from_set (set
, &showlist
);
1617 set
->function
.cfunc
= set_case_command
;
1618 show
->function
.cfunc
= show_case_command
;
1620 add_language (&unknown_language_defn
);
1621 add_language (&local_language_defn
);
1622 add_language (&auto_language_defn
);
1624 language
= savestring ("auto", strlen ("auto"));
1625 type
= savestring ("auto", strlen ("auto"));
1626 range
= savestring ("auto", strlen ("auto"));
1627 case_sensitive
= savestring ("auto",strlen ("auto"));
1629 /* Have the above take effect */
1630 set_language (language_auto
);