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.
7 This file is part of GDB.
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.
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.
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. */
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. */
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. */
34 #include "gdb_string.h"
41 #include "expression.h"
44 #include "parser-defs.h"
47 extern void _initialize_language (void);
49 static void show_language_command (char *, int);
51 static void set_language_command (char *, int);
53 static void show_type_command (char *, int);
55 static void set_type_command (char *, int);
57 static void show_range_command (char *, int);
59 static void set_range_command (char *, int);
61 static void show_case_command (char *, int);
63 static void set_case_command (char *, int);
65 static void set_case_str (void);
67 static void set_range_str (void);
69 static void set_type_str (void);
71 static void set_lang_str (void);
73 static void unk_lang_error (char *);
75 static int unk_lang_parser (void);
77 static void show_check (char *, int);
79 static void set_check (char *, int);
81 static void set_type_range_case (void);
83 static void unk_lang_emit_char (int c
, struct ui_file
*stream
, int quoter
);
85 static void unk_lang_printchar (int c
, struct ui_file
*stream
);
87 static void unk_lang_printstr (struct ui_file
* stream
, char *string
,
88 unsigned int length
, int width
,
91 static struct type
*unk_lang_create_fundamental_type (struct objfile
*, int);
93 static void unk_lang_print_type (struct type
*, char *, struct ui_file
*,
96 static int unk_lang_val_print (struct type
*, char *, int, CORE_ADDR
,
97 struct ui_file
*, int, int, int,
98 enum val_prettyprint
);
100 static int unk_lang_value_print (value_ptr
, struct ui_file
*, int, enum val_prettyprint
);
102 /* Forward declaration */
103 extern const struct language_defn unknown_language_defn
;
104 extern char *warning_pre_print
;
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. */
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
;
118 /* The current language and language_mode (see language.h) */
120 const struct language_defn
*current_language
= &unknown_language_defn
;
121 enum language_mode language_mode
= language_mode_auto
;
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). */
126 const struct language_defn
*expected_language
;
128 /* The list of supported languages. The list itself is malloc'd. */
130 static const struct language_defn
**languages
;
131 static unsigned languages_size
;
132 static unsigned languages_allocsize
;
133 #define DEFAULT_ALLOCSIZE 4
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
141 static char *language
;
144 static char *case_sensitive
;
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.";
152 /* This page contains the functions corresponding to GDB commands
153 and their helpers. */
155 /* Show command. Display a warning if the language set
156 does not match the frame. */
158 show_language_command (char *ignore
, int from_tty
)
160 enum language flang
; /* The language of the current frame */
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
);
169 /* Set command. Change the current working language. */
171 set_language_command (char *ignore
, int from_tty
)
177 if (!language
|| !language
[0])
179 printf_unfiltered ("The currently understood settings are:\n\n");
180 printf_unfiltered ("local or auto Automatic setting based on source file\n");
182 for (i
= 0; i
< languages_size
; ++i
)
184 /* Already dealt with these above. */
185 if (languages
[i
]->la_language
== language_unknown
186 || languages
[i
]->la_language
== language_auto
)
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
195 toupper (languages
[i
]->la_name
[0]),
196 languages
[i
]->la_name
+ 1);
198 /* Restore the silly string. */
199 set_language (current_language
->la_language
);
203 /* Search the list of languages for a match. */
204 for (i
= 0; i
< languages_size
; i
++)
206 if (STREQ (languages
[i
]->la_name
, language
))
208 /* Found it! Go into manual mode, and use this language. */
209 if (languages
[i
]->la_language
== language_auto
)
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
;
221 /* Enter manual mode. Set the specified language. */
222 language_mode
= language_mode_manual
;
223 current_language
= languages
[i
];
224 set_type_range_case ();
226 expected_language
= current_language
;
232 /* Reset the language (esp. the global string "language") to the
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
);
240 /* Show command. Display a warning if the type setting does
241 not match the current language. */
243 show_type_command (char *ignore
, int from_tty
)
245 if (type_check
!= current_language
->la_type_check
)
247 "Warning: the current type check setting does not match the language.\n");
250 /* Set command. Change the setting for type checking. */
252 set_type_command (char *ignore
, int from_tty
)
254 if (STREQ (type
, "on"))
256 type_check
= type_check_on
;
257 type_mode
= type_mode_manual
;
259 else if (STREQ (type
, "warn"))
261 type_check
= type_check_warn
;
262 type_mode
= type_mode_manual
;
264 else if (STREQ (type
, "off"))
266 type_check
= type_check_off
;
267 type_mode
= type_mode_manual
;
269 else if (STREQ (type
, "auto"))
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. */
279 warning ("Unrecognized type check setting: \"%s\"", type
);
282 show_type_command ((char *) NULL
, from_tty
);
285 /* Show command. Display a warning if the range setting does
286 not match the current language. */
288 show_range_command (char *ignore
, int from_tty
)
291 if (range_check
!= current_language
->la_range_check
)
293 "Warning: the current range check setting does not match the language.\n");
296 /* Set command. Change the setting for range checking. */
298 set_range_command (char *ignore
, int from_tty
)
300 if (STREQ (range
, "on"))
302 range_check
= range_check_on
;
303 range_mode
= range_mode_manual
;
305 else if (STREQ (range
, "warn"))
307 range_check
= range_check_warn
;
308 range_mode
= range_mode_manual
;
310 else if (STREQ (range
, "off"))
312 range_check
= range_check_off
;
313 range_mode
= range_mode_manual
;
315 else if (STREQ (range
, "auto"))
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. */
325 warning ("Unrecognized range check setting: \"%s\"", range
);
328 show_range_command ((char *) 0, from_tty
);
331 /* Show command. Display a warning if the case sensitivity setting does
332 not match the current language. */
334 show_case_command (char *ignore
, int from_tty
)
336 if (case_sensitivity
!= current_language
->la_case_sensitivity
)
338 "Warning: the current case sensitivity setting does not match the language.\n");
341 /* Set command. Change the setting for case sensitivity. */
343 set_case_command (char *ignore
, int from_tty
)
345 if (STREQ (case_sensitive
, "on"))
347 case_sensitivity
= case_sensitive_on
;
348 case_mode
= case_mode_manual
;
350 else if (STREQ (case_sensitive
, "off"))
352 case_sensitivity
= case_sensitive_off
;
353 case_mode
= case_mode_manual
;
355 else if (STREQ (case_sensitive
, "auto"))
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. */
365 warning ("Unrecognized case-sensitive setting: \"%s\"", case_sensitive
);
368 show_case_command ((char *) NULL
, from_tty
);
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. */
376 set_type_range_case (void)
379 if (range_mode
== range_mode_auto
)
380 range_check
= current_language
->la_range_check
;
382 if (type_mode
== type_mode_auto
)
383 type_check
= current_language
->la_type_check
;
385 if (case_mode
== case_mode_auto
)
386 case_sensitivity
= current_language
->la_case_sensitivity
;
393 /* Set current language to (enum language) LANG. Returns previous language. */
396 set_language (enum language lang
)
399 enum language prev_language
;
401 prev_language
= current_language
->la_language
;
403 for (i
= 0; i
< languages_size
; i
++)
405 if (languages
[i
]->la_language
== lang
)
407 current_language
= languages
[i
];
408 set_type_range_case ();
414 return prev_language
;
417 /* This page contains functions that update the global vars
418 language, type and range. */
426 if (language_mode
== language_mode_auto
)
427 prefix
= "auto; currently ";
429 language
= concat (prefix
, current_language
->la_name
, NULL
);
435 char *tmp
= NULL
, *prefix
= "";
439 if (type_mode
== type_mode_auto
)
440 prefix
= "auto; currently ";
450 case type_check_warn
:
454 error ("Unrecognized type check setting.");
457 type
= concat (prefix
, tmp
, NULL
);
463 char *tmp
, *pref
= "";
465 if (range_mode
== range_mode_auto
)
466 pref
= "auto; currently ";
473 case range_check_off
:
476 case range_check_warn
:
480 error ("Unrecognized range check setting.");
485 range
= concat (pref
, tmp
, NULL
);
491 char *tmp
= NULL
, *prefix
= "";
493 if (case_mode
==case_mode_auto
)
494 prefix
= "auto; currently ";
496 switch (case_sensitivity
)
498 case case_sensitive_on
:
501 case case_sensitive_off
:
505 error ("Unrecognized case-sensitive setting.");
508 xfree (case_sensitive
);
509 case_sensitive
= concat (prefix
, tmp
, NULL
);
512 /* Print out the current language settings: language, range and
513 type checking. If QUIETLY, print only what has changed. */
516 language_info (int quietly
)
518 if (quietly
&& expected_language
== current_language
)
521 expected_language
= current_language
;
522 printf_unfiltered ("Current language: %s\n", language
);
523 show_language_command ((char *) 0, 1);
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);
536 /* Return the result of a binary operation. */
538 #if 0 /* Currently unused */
541 binop_result_type (value_ptr v1
, value_ptr v2
)
544 struct type
*t1
= check_typedef (VALUE_TYPE (v1
));
545 struct type
*t2
= check_typedef (VALUE_TYPE (v2
));
547 int l1
= TYPE_LENGTH (t1
);
548 int l2
= TYPE_LENGTH (t2
);
550 switch (current_language
->la_language
)
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
);
568 /* If we are doing type-checking, l1 should equal l2, so this is
570 return l1
> l2
? VALUE_TYPE (v1
) : VALUE_TYPE (v2
);
573 error ("Missing Chill support in function binop_result_check."); /*FIXME */
575 internal_error (__FILE__
, __LINE__
, "failed internal consistency check");
576 return (struct type
*) 0; /* For lint */
582 /* This page contains functions that return format strings for
583 printf for printing out numbers in different formats */
585 /* Returns the appropriate printf format for hexadecimal
588 local_hex_format_custom (char *pre
)
590 static char form
[50];
592 strcpy (form
, local_hex_format_prefix ());
595 strcat (form
, local_hex_format_specifier ());
596 strcat (form
, local_hex_format_suffix ());
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. */
609 longest_raw_hex_string (LONGEST num
)
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);
618 sprintf (res_longest_raw_hex_string
, "%llx", ll
);
619 return res_longest_raw_hex_string
;
623 /* Converts a number to hexadecimal and stores it in a static
624 string. Returns a pointer to this string. */
626 local_hex_string (unsigned long num
)
630 sprintf (res
, local_hex_format (), num
);
634 /* Converts a LONGEST number to hexadecimal and stores it in a static
635 string. Returns a pointer to this string. */
637 longest_local_hex_string (LONGEST num
)
639 return longest_local_hex_string_custom (num
, "l");
642 /* Converts a number to custom hexadecimal and stores it in a static
643 string. Returns a pointer to this string. */
645 local_hex_string_custom (unsigned long num
, char *pre
)
649 sprintf (res
, local_hex_format_custom (pre
), num
);
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 */
658 longest_local_hex_string_custom (LONGEST num
, char *width
)
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)
667 char *pad_char
; /* string with one character */
670 char temp_nbr_buf
[RESULT_BUF_LEN
];
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
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
);
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". */
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);
702 sprintf (temp_nbr_buf
, "%llx", ll
);
708 if (*parse_ptr
== '-')
713 if (*parse_ptr
== '0')
717 pad_char
= "0"; /* If padding is on the right, it is blank */
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 */
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");
728 strcpy (res2
, local_hex_format_prefix ());
731 while (num_pad_chars
> 0)
733 strcat (res2
, pad_char
);
737 strcat (res2
, temp_nbr_buf
);
740 while (num_pad_chars
> 0)
742 strcat (res2
, pad_char
);
749 } /* longest_local_hex_string_custom */
751 /* Returns the appropriate printf format for octal
754 local_octal_format_custom (char *pre
)
756 static char form
[50];
758 strcpy (form
, local_octal_format_prefix ());
761 strcat (form
, local_octal_format_specifier ());
762 strcat (form
, local_octal_format_suffix ());
766 /* Returns the appropriate printf format for decimal numbers. */
768 local_decimal_format_custom (char *pre
)
770 static char form
[50];
772 strcpy (form
, local_decimal_format_prefix ());
775 strcat (form
, local_decimal_format_specifier ());
776 strcat (form
, local_decimal_format_suffix ());
781 /* This page contains functions that are used in type/range checking.
782 They all return zero if the type/range check fails.
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.
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. */
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. */
799 simple_type (struct type
*type
)
801 CHECK_TYPEDEF (type
);
802 switch (TYPE_CODE (type
))
808 case TYPE_CODE_RANGE
:
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. */
822 ordered_type (struct type
*type
)
824 CHECK_TYPEDEF (type
);
825 switch (TYPE_CODE (type
))
831 case TYPE_CODE_RANGE
:
839 /* Returns non-zero if the two types are the same */
841 same_type (struct type
*arg1
, struct type
*arg2
)
843 CHECK_TYPEDEF (type
);
844 if (structured_type (arg1
) ? !structured_type (arg2
) : structured_type (arg2
))
845 /* One is structured and one isn't */
847 else if (structured_type (arg1
) && structured_type (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
))
857 /* Returns non-zero if the type is integral */
859 integral_type (struct type
*type
)
861 CHECK_TYPEDEF (type
);
862 switch (current_language
->la_language
)
866 return (TYPE_CODE (type
) != TYPE_CODE_INT
) &&
867 (TYPE_CODE (type
) != TYPE_CODE_ENUM
) ? 0 : 1;
869 case language_pascal
:
870 return TYPE_CODE (type
) != TYPE_CODE_INT
? 0 : 1;
872 error ("Missing Chill support in function integral_type."); /*FIXME */
874 error ("Language not supported.");
878 /* Returns non-zero if the value is numeric */
880 numeric_type (struct type
*type
)
882 CHECK_TYPEDEF (type
);
883 switch (TYPE_CODE (type
))
894 /* Returns non-zero if the value is a character type */
896 character_type (struct type
*type
)
898 CHECK_TYPEDEF (type
);
899 switch (current_language
->la_language
)
903 case language_pascal
:
904 return TYPE_CODE (type
) != TYPE_CODE_CHAR
? 0 : 1;
908 return (TYPE_CODE (type
) == TYPE_CODE_INT
) &&
909 TYPE_LENGTH (type
) == sizeof (char)
916 /* Returns non-zero if the value is a string type */
918 string_type (struct type
*type
)
920 CHECK_TYPEDEF (type
);
921 switch (current_language
->la_language
)
925 case language_pascal
:
926 return TYPE_CODE (type
) != TYPE_CODE_STRING
? 0 : 1;
930 /* C does not have distinct string type. */
937 /* Returns non-zero if the value is a boolean type */
939 boolean_type (struct type
*type
)
941 CHECK_TYPEDEF (type
);
942 if (TYPE_CODE (type
) == TYPE_CODE_BOOL
)
944 switch (current_language
->la_language
)
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
)
958 /* Returns non-zero if the value is a floating-point type */
960 float_type (struct type
*type
)
962 CHECK_TYPEDEF (type
);
963 return TYPE_CODE (type
) == TYPE_CODE_FLT
;
966 /* Returns non-zero if the value is a pointer type */
968 pointer_type (struct type
*type
)
970 return TYPE_CODE (type
) == TYPE_CODE_PTR
||
971 TYPE_CODE (type
) == TYPE_CODE_REF
;
974 /* Returns non-zero if the value is a structured type */
976 structured_type (struct type
*type
)
978 CHECK_TYPEDEF (type
);
979 switch (current_language
->la_language
)
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
);
992 return (TYPE_CODE (type
) == TYPE_CODE_STRUCT
) ||
993 (TYPE_CODE (type
) == TYPE_CODE_SET
) ||
994 (TYPE_CODE (type
) == TYPE_CODE_ARRAY
);
996 error ("Missing Chill support in function structured_type."); /*FIXME */
1004 lang_bool_type (void)
1008 switch (current_language
->la_language
)
1010 case language_chill
:
1011 return builtin_type_chill_bool
;
1012 case language_fortran
:
1013 sym
= lookup_symbol ("logical", NULL
, VAR_NAMESPACE
, NULL
, NULL
);
1016 type
= SYMBOL_TYPE (sym
);
1017 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
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
);}
1026 {sym
= lookup_symbol ("boolean", NULL
, VAR_NAMESPACE
, NULL
, NULL
);}
1029 type
= SYMBOL_TYPE (sym
);
1030 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
1033 return builtin_type_bool
;
1035 sym
= lookup_symbol ("boolean", NULL
, VAR_NAMESPACE
, NULL
, NULL
);
1038 type
= SYMBOL_TYPE (sym
);
1039 if (type
&& TYPE_CODE (type
) == TYPE_CODE_BOOL
)
1042 return java_boolean_type
;
1044 return builtin_type_int
;
1048 /* This page contains functions that return info about
1049 (struct value) values used in GDB. */
1051 /* Returns non-zero if the value VAL represents a true value. */
1053 value_true (value_ptr val
)
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
);
1064 /* Returns non-zero if the operator OP is defined on
1065 the values ARG1 and ARG2. */
1067 #if 0 /* Currently unused */
1070 binop_type_check (value_ptr arg1
, value_ptr arg2
, int op
)
1072 struct type
*t1
, *t2
;
1074 /* If we're not checking types, always return success. */
1078 t1
= VALUE_TYPE (arg1
);
1080 t2
= VALUE_TYPE (arg2
);
1088 if ((numeric_type (t1
) && pointer_type (t2
)) ||
1089 (pointer_type (t1
) && numeric_type (t2
)))
1091 warning ("combining pointer and integer.\n");
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
);
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
);
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
)))
1116 warning ("combining integer and pointer.\n");
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
);
1127 if (!integral_type (t1
) || !integral_type (t2
))
1128 type_op_error ("Arguments to %s must be of integral type.", op
);
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
);
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
))
1146 warning ("combining integer and pointer.");
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
);
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
);
1162 /* Unary checks -- arg2 is null */
1164 case UNOP_LOGICAL_NOT
:
1165 if (!boolean_type (t1
))
1166 type_op_error ("Argument to %s must be of boolean type.", op
);
1171 if (!numeric_type (t1
))
1172 type_op_error ("Argument to %s must be of numeric type.", op
);
1176 if (integral_type (t1
))
1178 warning ("combining pointer and integer.\n");
1181 else if (!pointer_type (t1
))
1182 type_op_error ("Argument to %s must be a pointer.", op
);
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
);
1194 /* Ok. The following operators have different meanings in
1195 different languages. */
1196 switch (current_language
->la_language
)
1200 case language_cplus
:
1204 if (!numeric_type (t1
) || !numeric_type (t2
))
1205 type_op_error ("Arguments to %s must be numbers.", op
);
1216 if (!float_type (t1
) || !float_type (t2
))
1217 type_op_error ("Arguments to %s must be floating point numbers.", op
);
1220 if (!integral_type (t1
) || !integral_type (t2
))
1221 type_op_error ("Arguments to %s must be of integral type.", op
);
1227 case language_pascal
:
1231 if (!float_type(t1
) && !float_type(t2
))
1232 type_op_error ("Arguments to %s must be floating point numbers.",op
);
1235 if (!integral_type(t1
) || !integral_type(t2
))
1236 type_op_error ("Arguments to %s must be of integral type.",op
);
1242 case language_chill
:
1243 error ("Missing Chill support in function binop_type_check."); /*FIXME */
1253 /* This page contains functions for the printing out of
1254 error messages that occur during type- and range-
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. */
1262 op_error (char *fmt
, enum exp_opcode op
, int fatal
)
1265 error (fmt
, op_string (op
));
1268 warning (fmt
, op_string (op
));
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. */
1280 type_error (char *string
,...)
1283 va_start (args
, string
);
1285 if (type_check
== type_check_warn
)
1286 fprintf_filtered (gdb_stderr
, warning_pre_print
);
1290 vfprintf_filtered (gdb_stderr
, string
, args
);
1291 fprintf_filtered (gdb_stderr
, "\n");
1293 if (type_check
== type_check_on
)
1294 return_to_top_level (RETURN_ERROR
);
1298 range_error (char *string
,...)
1301 va_start (args
, string
);
1303 if (range_check
== range_check_warn
)
1304 fprintf_filtered (gdb_stderr
, warning_pre_print
);
1308 vfprintf_filtered (gdb_stderr
, string
, args
);
1309 fprintf_filtered (gdb_stderr
, "\n");
1311 if (range_check
== range_check_on
)
1312 return_to_top_level (RETURN_ERROR
);
1316 /* This page contains miscellaneous functions */
1318 /* Return the language enum for a given language string. */
1321 language_enum (char *str
)
1325 for (i
= 0; i
< languages_size
; i
++)
1326 if (STREQ (languages
[i
]->la_name
, str
))
1327 return languages
[i
]->la_language
;
1329 return language_unknown
;
1332 /* Return the language struct for a given language enum. */
1334 const struct language_defn
*
1335 language_def (enum language lang
)
1339 for (i
= 0; i
< languages_size
; i
++)
1341 if (languages
[i
]->la_language
== lang
)
1343 return languages
[i
];
1349 /* Return the language as a string */
1351 language_str (enum language lang
)
1355 for (i
= 0; i
< languages_size
; i
++)
1357 if (languages
[i
]->la_language
== lang
)
1359 return languages
[i
]->la_name
;
1366 set_check (char *ignore
, int from_tty
)
1369 "\"set check\" must be followed by the name of a check subcommand.\n");
1370 help_list (setchecklist
, "set check ", -1, gdb_stdout
);
1374 show_check (char *ignore
, int from_tty
)
1376 cmd_show_list (showchecklist
, from_tty
, "");
1379 /* Add a language to the set of known languages. */
1382 add_language (const struct language_defn
*lang
)
1384 if (lang
->la_magic
!= LANG_MAGIC
)
1386 fprintf_unfiltered (gdb_stderr
, "Magic number of %s language struct wrong\n",
1388 internal_error (__FILE__
, __LINE__
, "failed internal consistency check");
1393 languages_allocsize
= DEFAULT_ALLOCSIZE
;
1394 languages
= (const struct language_defn
**) xmalloc
1395 (languages_allocsize
* sizeof (*languages
));
1397 if (languages_size
>= languages_allocsize
)
1399 languages_allocsize
*= 2;
1400 languages
= (const struct language_defn
**) xrealloc ((char *) languages
,
1401 languages_allocsize
* sizeof (*languages
));
1403 languages
[languages_size
++] = lang
;
1406 /* Define the language that is no language. */
1409 unk_lang_parser (void)
1415 unk_lang_error (char *msg
)
1417 error ("Attempted to parse an expression with unknown language");
1421 unk_lang_emit_char (register int c
, struct ui_file
*stream
, int quoter
)
1423 error ("internal error - unimplemented function unk_lang_emit_char called.");
1427 unk_lang_printchar (register int c
, struct ui_file
*stream
)
1429 error ("internal error - unimplemented function unk_lang_printchar called.");
1433 unk_lang_printstr (struct ui_file
*stream
, char *string
, unsigned int length
,
1434 int width
, int force_ellipses
)
1436 error ("internal error - unimplemented function unk_lang_printstr called.");
1439 static struct type
*
1440 unk_lang_create_fundamental_type (struct objfile
*objfile
, int typeid)
1442 error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
1446 unk_lang_print_type (struct type
*type
, char *varstring
, struct ui_file
*stream
,
1447 int show
, int level
)
1449 error ("internal error - unimplemented function unk_lang_print_type called.");
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
)
1457 error ("internal error - unimplemented function unk_lang_val_print called.");
1461 unk_lang_value_print (value_ptr val
, struct ui_file
*stream
, int format
,
1462 enum val_prettyprint pretty
)
1464 error ("internal error - unimplemented function unk_lang_value_print called.");
1467 static struct type
**CONST_PTR (unknown_builtin_types
[]) =
1471 static const struct op_print unk_op_print_tab
[] =
1473 {NULL
, OP_NULL
, PREC_NULL
, 0}
1476 const struct language_defn unknown_language_defn
=
1480 &unknown_builtin_types
[0],
1486 evaluate_subexp_standard
,
1487 unk_lang_printchar
, /* Print character constant */
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 */
1505 /* These two structs define fake entries for the "local" and "auto" options. */
1506 const struct language_defn auto_language_defn
=
1510 &unknown_builtin_types
[0],
1516 evaluate_subexp_standard
,
1517 unk_lang_printchar
, /* Print character constant */
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 */
1535 const struct language_defn local_language_defn
=
1539 &unknown_builtin_types
[0],
1545 evaluate_subexp_standard
,
1546 unk_lang_printchar
, /* Print character constant */
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 */
1564 /* Initialize the language routines */
1567 _initialize_language (void)
1569 struct cmd_list_element
*set
, *show
;
1571 /* GDB commands for language specific stuff */
1573 set
= add_set_cmd ("language", class_support
, var_string_noescape
,
1575 "Set the current source language.",
1577 show
= add_show_from_set (set
, &showlist
);
1578 set
->function
.cfunc
= set_language_command
;
1579 show
->function
.cfunc
= show_language_command
;
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
);
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
);
1593 set
= add_set_cmd ("type", class_support
, var_string_noescape
,
1595 "Set type checking. (on/warn/off/auto)",
1597 show
= add_show_from_set (set
, &showchecklist
);
1598 set
->function
.cfunc
= set_type_command
;
1599 show
->function
.cfunc
= show_type_command
;
1601 set
= add_set_cmd ("range", class_support
, var_string_noescape
,
1603 "Set range checking. (on/warn/off/auto)",
1605 show
= add_show_from_set (set
, &showchecklist
);
1606 set
->function
.cfunc
= set_range_command
;
1607 show
->function
.cfunc
= show_range_command
;
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.",
1614 show
= add_show_from_set (set
, &showlist
);
1615 set
->function
.cfunc
= set_case_command
;
1616 show
->function
.cfunc
= show_case_command
;
1618 add_language (&unknown_language_defn
);
1619 add_language (&local_language_defn
);
1620 add_language (&auto_language_defn
);
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"));
1627 /* Have the above take effect */
1628 set_language (language_auto
);