]>
Commit | Line | Data |
---|---|---|
c906108c | 1 | /* Source-language-related definitions for GDB. |
1bac305b AC |
2 | |
3 | Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2003 Free | |
4 | Software Foundation, Inc. | |
5 | ||
c906108c SS |
6 | Contributed by the Department of Computer Science at the State University |
7 | of New York at Buffalo. | |
8 | ||
c5aa993b | 9 | This file is part of GDB. |
c906108c | 10 | |
c5aa993b JM |
11 | This program is free software; you can redistribute it and/or modify |
12 | it under the terms of the GNU General Public License as published by | |
13 | the Free Software Foundation; either version 2 of the License, or | |
14 | (at your option) any later version. | |
c906108c | 15 | |
c5aa993b JM |
16 | This program is distributed in the hope that it will be useful, |
17 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 | GNU General Public License for more details. | |
c906108c | 20 | |
c5aa993b JM |
21 | You should have received a copy of the GNU General Public License |
22 | along with this program; if not, write to the Free Software | |
23 | Foundation, Inc., 59 Temple Place - Suite 330, | |
24 | Boston, MA 02111-1307, USA. */ | |
c906108c SS |
25 | |
26 | #if !defined (LANGUAGE_H) | |
27 | #define LANGUAGE_H 1 | |
28 | ||
104c1213 | 29 | /* Forward decls for prototypes */ |
c906108c SS |
30 | struct value; |
31 | struct objfile; | |
32 | struct expression; | |
c5aa993b | 33 | /* enum exp_opcode; ANSI's `wisdom' didn't include forward enum decls. */ |
c906108c SS |
34 | |
35 | /* This used to be included to configure GDB for one or more specific | |
7e73cedf | 36 | languages. Now it is left out to configure for all of them. FIXME. */ |
c906108c SS |
37 | /* #include "lang_def.h" */ |
38 | #define _LANG_c | |
39 | #define _LANG_m2 | |
750ba382 PM |
40 | #define _LANG_fortran |
41 | #define _LANG_pascal | |
c906108c | 42 | |
c5aa993b | 43 | #define MAX_FORTRAN_DIMS 7 /* Maximum number of F77 array dims */ |
c906108c SS |
44 | |
45 | /* range_mode == | |
46 | range_mode_auto: range_check set automatically to default of language. | |
47 | range_mode_manual: range_check set manually by user. */ | |
48 | ||
c5aa993b JM |
49 | extern enum range_mode |
50 | { | |
51 | range_mode_auto, range_mode_manual | |
52 | } | |
53 | range_mode; | |
c906108c SS |
54 | |
55 | /* range_check == | |
56 | range_check_on: Ranges are checked in GDB expressions, producing errors. | |
57 | range_check_warn: Ranges are checked, producing warnings. | |
58 | range_check_off: Ranges are not checked in GDB expressions. */ | |
59 | ||
60 | extern enum range_check | |
c5aa993b JM |
61 | { |
62 | range_check_off, range_check_warn, range_check_on | |
63 | } | |
64 | range_check; | |
c906108c SS |
65 | |
66 | /* type_mode == | |
67 | type_mode_auto: type_check set automatically to default of language | |
68 | type_mode_manual: type_check set manually by user. */ | |
69 | ||
c5aa993b JM |
70 | extern enum type_mode |
71 | { | |
72 | type_mode_auto, type_mode_manual | |
73 | } | |
74 | type_mode; | |
c906108c SS |
75 | |
76 | /* type_check == | |
77 | type_check_on: Types are checked in GDB expressions, producing errors. | |
78 | type_check_warn: Types are checked, producing warnings. | |
79 | type_check_off: Types are not checked in GDB expressions. */ | |
80 | ||
81 | extern enum type_check | |
c5aa993b JM |
82 | { |
83 | type_check_off, type_check_warn, type_check_on | |
84 | } | |
85 | type_check; | |
63872f9d JG |
86 | |
87 | /* case_mode == | |
88 | case_mode_auto: case_sensitivity set upon selection of scope | |
89 | case_mode_manual: case_sensitivity set only by user. */ | |
90 | ||
91 | extern enum case_mode | |
92 | { | |
93 | case_mode_auto, case_mode_manual | |
94 | } | |
95 | case_mode; | |
96 | ||
97 | /* case_sensitivity == | |
98 | case_sensitive_on: Case sensitivity in name matching is used | |
99 | case_sensitive_off: Case sensitivity in name matching is not used */ | |
100 | ||
101 | extern enum case_sensitivity | |
102 | { | |
103 | case_sensitive_on, case_sensitive_off | |
104 | } | |
105 | case_sensitivity; | |
c906108c SS |
106 | \f |
107 | /* Information for doing language dependent formatting of printed values. */ | |
108 | ||
109 | struct language_format_info | |
c5aa993b JM |
110 | { |
111 | /* The format that can be passed directly to standard C printf functions | |
112 | to generate a completely formatted value in the format appropriate for | |
113 | the language. */ | |
c906108c | 114 | |
c5aa993b | 115 | char *la_format; |
c906108c | 116 | |
c5aa993b JM |
117 | /* The prefix to be used when directly printing a value, or constructing |
118 | a standard C printf format. This generally is everything up to the | |
119 | conversion specification (the part introduced by the '%' character | |
120 | and terminated by the conversion specifier character). */ | |
c906108c | 121 | |
c5aa993b | 122 | char *la_format_prefix; |
c906108c | 123 | |
c5aa993b JM |
124 | /* The conversion specifier. This is generally everything after the |
125 | field width and precision, typically only a single character such | |
126 | as 'o' for octal format or 'x' for hexadecimal format. */ | |
c906108c | 127 | |
c5aa993b | 128 | char *la_format_specifier; |
c906108c | 129 | |
c5aa993b JM |
130 | /* The suffix to be used when directly printing a value, or constructing |
131 | a standard C printf format. This generally is everything after the | |
132 | conversion specification (the part introduced by the '%' character | |
133 | and terminated by the conversion specifier character). */ | |
c906108c | 134 | |
c5aa993b JM |
135 | char *la_format_suffix; /* Suffix for custom format string */ |
136 | }; | |
c906108c SS |
137 | |
138 | /* Structure tying together assorted information about a language. */ | |
139 | ||
140 | struct language_defn | |
c5aa993b JM |
141 | { |
142 | /* Name of the language */ | |
c906108c | 143 | |
c5aa993b | 144 | char *la_name; |
c906108c | 145 | |
c5aa993b | 146 | /* its symtab language-enum (defs.h) */ |
c906108c | 147 | |
c5aa993b | 148 | enum language la_language; |
c906108c | 149 | |
c5aa993b JM |
150 | /* Its builtin types. This is a vector ended by a NULL pointer. These |
151 | types can be specified by name in parsing types in expressions, | |
152 | regardless of whether the program being debugged actually defines | |
153 | such a type. */ | |
c906108c | 154 | |
c5aa993b | 155 | struct type **const *la_builtin_type_vector; |
c906108c | 156 | |
c5aa993b | 157 | /* Default range checking */ |
c906108c | 158 | |
c5aa993b | 159 | enum range_check la_range_check; |
c906108c | 160 | |
c5aa993b | 161 | /* Default type checking */ |
c906108c | 162 | |
c5aa993b | 163 | enum type_check la_type_check; |
c906108c | 164 | |
63872f9d JG |
165 | /* Default case sensitivity */ |
166 | enum case_sensitivity la_case_sensitivity; | |
167 | ||
c5aa993b | 168 | /* Parser function. */ |
c906108c | 169 | |
507f3c78 | 170 | int (*la_parser) (void); |
c906108c | 171 | |
c5aa993b | 172 | /* Parser error function */ |
c906108c | 173 | |
507f3c78 | 174 | void (*la_error) (char *); |
c906108c | 175 | |
c5aa993b | 176 | /* Evaluate an expression. */ |
507f3c78 KB |
177 | struct value *(*evaluate_exp) (struct type *, struct expression *, |
178 | int *, enum noside); | |
c906108c | 179 | |
d9fcf2fb | 180 | void (*la_printchar) (int ch, struct ui_file * stream); |
c906108c | 181 | |
d9fcf2fb JM |
182 | void (*la_printstr) (struct ui_file * stream, char *string, |
183 | unsigned int length, int width, | |
184 | int force_ellipses); | |
c906108c | 185 | |
d9fcf2fb | 186 | void (*la_emitchar) (int ch, struct ui_file * stream, int quoter); |
c906108c | 187 | |
507f3c78 | 188 | struct type *(*la_fund_type) (struct objfile *, int); |
c906108c | 189 | |
c5aa993b | 190 | /* Print a type using syntax appropriate for this language. */ |
c906108c | 191 | |
d9fcf2fb JM |
192 | void (*la_print_type) (struct type *, char *, struct ui_file *, int, |
193 | int); | |
c906108c | 194 | |
c5aa993b | 195 | /* Print a value using syntax appropriate for this language. */ |
c906108c | 196 | |
d9fcf2fb JM |
197 | int (*la_val_print) (struct type *, char *, int, CORE_ADDR, |
198 | struct ui_file *, int, int, int, | |
199 | enum val_prettyprint); | |
c906108c | 200 | |
c5aa993b | 201 | /* Print a top-level value using syntax appropriate for this language. */ |
c906108c | 202 | |
d9fcf2fb JM |
203 | int (*la_value_print) (struct value *, struct ui_file *, |
204 | int, enum val_prettyprint); | |
c906108c | 205 | |
f636b87d AF |
206 | /* PC is possibly an unknown languages trampoline. |
207 | If that PC falls in a trampoline belonging to this language, | |
208 | return the address of the first pc in the real function, or 0 | |
209 | if it isn't a language tramp for this language. */ | |
210 | CORE_ADDR (*skip_trampoline) (CORE_ADDR pc); | |
211 | ||
c5aa993b | 212 | /* Base 2 (binary) formats. */ |
c906108c | 213 | |
c5aa993b | 214 | struct language_format_info la_binary_format; |
c906108c | 215 | |
c5aa993b | 216 | /* Base 8 (octal) formats. */ |
c906108c | 217 | |
c5aa993b | 218 | struct language_format_info la_octal_format; |
c906108c | 219 | |
c5aa993b | 220 | /* Base 10 (decimal) formats */ |
c906108c | 221 | |
c5aa993b | 222 | struct language_format_info la_decimal_format; |
c906108c | 223 | |
c5aa993b | 224 | /* Base 16 (hexadecimal) formats */ |
c906108c | 225 | |
c5aa993b | 226 | struct language_format_info la_hex_format; |
c906108c | 227 | |
c5aa993b | 228 | /* Table for printing expressions */ |
c906108c | 229 | |
c5aa993b | 230 | const struct op_print *la_op_print_tab; |
c906108c | 231 | |
c5aa993b JM |
232 | /* Zero if the language has first-class arrays. True if there are no |
233 | array values, and array objects decay to pointers, as in C. */ | |
c906108c | 234 | |
c5aa993b | 235 | char c_style_arrays; |
c906108c | 236 | |
c5aa993b JM |
237 | /* Index to use for extracting the first element of a string. */ |
238 | char string_lower_bound; | |
c906108c | 239 | |
c5aa993b JM |
240 | /* Type of elements of strings. */ |
241 | struct type **string_char_type; | |
c906108c | 242 | |
c5aa993b JM |
243 | /* Add fields above this point, so the magic number is always last. */ |
244 | /* Magic number for compat checking */ | |
245 | ||
246 | long la_magic; | |
247 | ||
248 | }; | |
c906108c SS |
249 | |
250 | #define LANG_MAGIC 910823L | |
251 | ||
252 | /* Pointer to the language_defn for our current language. This pointer | |
253 | always points to *some* valid struct; it can be used without checking | |
254 | it for validity. | |
255 | ||
256 | The current language affects expression parsing and evaluation | |
257 | (FIXME: it might be cleaner to make the evaluation-related stuff | |
258 | separate exp_opcodes for each different set of semantics. We | |
259 | should at least think this through more clearly with respect to | |
260 | what happens if the language is changed between parsing and | |
261 | evaluation) and printing of things like types and arrays. It does | |
262 | *not* affect symbol-reading-- each source file in a symbol-file has | |
263 | its own language and we should keep track of that regardless of the | |
264 | language when symbols are read. If we want some manual setting for | |
265 | the language of symbol files (e.g. detecting when ".c" files are | |
7e73cedf | 266 | C++), it should be a separate setting from the current_language. */ |
c906108c SS |
267 | |
268 | extern const struct language_defn *current_language; | |
269 | ||
270 | /* Pointer to the language_defn expected by the user, e.g. the language | |
271 | of main(), or the language we last mentioned in a message, or C. */ | |
272 | ||
273 | extern const struct language_defn *expected_language; | |
274 | ||
275 | /* language_mode == | |
276 | language_mode_auto: current_language automatically set upon selection | |
c5aa993b | 277 | of scope (e.g. stack frame) |
c906108c SS |
278 | language_mode_manual: current_language set only by user. */ |
279 | ||
280 | extern enum language_mode | |
c5aa993b JM |
281 | { |
282 | language_mode_auto, language_mode_manual | |
283 | } | |
284 | language_mode; | |
c906108c SS |
285 | \f |
286 | /* These macros define the behaviour of the expression | |
287 | evaluator. */ | |
288 | ||
289 | /* Should we strictly type check expressions? */ | |
290 | #define STRICT_TYPE (type_check != type_check_off) | |
291 | ||
292 | /* Should we range check values against the domain of their type? */ | |
293 | #define RANGE_CHECK (range_check != range_check_off) | |
294 | ||
295 | /* "cast" really means conversion */ | |
296 | /* FIXME -- should be a setting in language_defn */ | |
297 | #define CAST_IS_CONVERSION (current_language->la_language == language_c || \ | |
806e6073 AF |
298 | current_language->la_language == language_cplus || \ |
299 | current_language->la_language == language_objc) | |
c906108c | 300 | |
a14ed312 | 301 | extern void language_info (int); |
c906108c | 302 | |
a14ed312 | 303 | extern enum language set_language (enum language); |
c906108c | 304 | \f |
c5aa993b | 305 | |
c906108c SS |
306 | /* This page contains functions that return things that are |
307 | specific to languages. Each of these functions is based on | |
308 | the current setting of working_lang, which the user sets | |
309 | with the "set language" command. */ | |
310 | ||
311 | #define create_fundamental_type(objfile,typeid) \ | |
312 | (current_language->la_fund_type(objfile, typeid)) | |
313 | ||
314 | #define LA_PRINT_TYPE(type,varstring,stream,show,level) \ | |
315 | (current_language->la_print_type(type,varstring,stream,show,level)) | |
316 | ||
317 | #define LA_VAL_PRINT(type,valaddr,offset,addr,stream,fmt,deref,recurse,pretty) \ | |
318 | (current_language->la_val_print(type,valaddr,offset,addr,stream,fmt,deref, \ | |
319 | recurse,pretty)) | |
320 | #define LA_VALUE_PRINT(val,stream,fmt,pretty) \ | |
321 | (current_language->la_value_print(val,stream,fmt,pretty)) | |
322 | ||
323 | /* Return a format string for printf that will print a number in one of | |
324 | the local (language-specific) formats. Result is static and is | |
325 | overwritten by the next call. Takes printf options like "08" or "l" | |
326 | (to produce e.g. %08x or %lx). */ | |
327 | ||
328 | #define local_binary_format() \ | |
329 | (current_language->la_binary_format.la_format) | |
330 | #define local_binary_format_prefix() \ | |
331 | (current_language->la_binary_format.la_format_prefix) | |
332 | #define local_binary_format_specifier() \ | |
333 | (current_language->la_binary_format.la_format_specifier) | |
334 | #define local_binary_format_suffix() \ | |
335 | (current_language->la_binary_format.la_format_suffix) | |
336 | ||
337 | #define local_octal_format() \ | |
338 | (current_language->la_octal_format.la_format) | |
339 | #define local_octal_format_prefix() \ | |
340 | (current_language->la_octal_format.la_format_prefix) | |
341 | #define local_octal_format_specifier() \ | |
342 | (current_language->la_octal_format.la_format_specifier) | |
343 | #define local_octal_format_suffix() \ | |
344 | (current_language->la_octal_format.la_format_suffix) | |
345 | ||
346 | #define local_decimal_format() \ | |
347 | (current_language->la_decimal_format.la_format) | |
348 | #define local_decimal_format_prefix() \ | |
349 | (current_language->la_decimal_format.la_format_prefix) | |
350 | #define local_decimal_format_specifier() \ | |
351 | (current_language->la_decimal_format.la_format_specifier) | |
352 | #define local_decimal_format_suffix() \ | |
353 | (current_language->la_decimal_format.la_format_suffix) | |
354 | ||
355 | #define local_hex_format() \ | |
356 | (current_language->la_hex_format.la_format) | |
357 | #define local_hex_format_prefix() \ | |
358 | (current_language->la_hex_format.la_format_prefix) | |
359 | #define local_hex_format_specifier() \ | |
360 | (current_language->la_hex_format.la_format_specifier) | |
361 | #define local_hex_format_suffix() \ | |
362 | (current_language->la_hex_format.la_format_suffix) | |
363 | ||
364 | #define LA_PRINT_CHAR(ch, stream) \ | |
365 | (current_language->la_printchar(ch, stream)) | |
366 | #define LA_PRINT_STRING(stream, string, length, width, force_ellipses) \ | |
367 | (current_language->la_printstr(stream, string, length, width, force_ellipses)) | |
368 | #define LA_EMIT_CHAR(ch, stream, quoter) \ | |
369 | (current_language->la_emitchar(ch, stream, quoter)) | |
370 | ||
371 | /* Test a character to decide whether it can be printed in literal form | |
372 | or needs to be printed in another representation. For example, | |
373 | in C the literal form of the character with octal value 141 is 'a' | |
374 | and the "other representation" is '\141'. The "other representation" | |
375 | is program language dependent. */ | |
376 | ||
377 | #define PRINT_LITERAL_FORM(c) \ | |
378 | ((c) >= 0x20 \ | |
379 | && ((c) < 0x7F || (c) >= 0xA0) \ | |
380 | && (!sevenbit_strings || (c) < 0x80)) | |
381 | ||
382 | /* Return a format string for printf that will print a number in one of | |
383 | the local (language-specific) formats. Result is static and is | |
384 | overwritten by the next call. Takes printf options like "08" or "l" | |
385 | (to produce e.g. %08x or %lx). */ | |
386 | ||
a14ed312 | 387 | extern char *local_decimal_format_custom (char *); /* language.c */ |
c906108c | 388 | |
a14ed312 | 389 | extern char *local_octal_format_custom (char *); /* language.c */ |
c906108c | 390 | |
a14ed312 | 391 | extern char *local_hex_format_custom (char *); /* language.c */ |
c906108c | 392 | |
7acb79c8 AC |
393 | #if 0 |
394 | /* FIXME: cagney/2000-03-04: This function does not appear to be used. | |
395 | It can be deleted once 5.0 has been released. */ | |
c4093a6a JM |
396 | /* Return a string that contains the hex digits of the number. No preceeding |
397 | "0x" */ | |
398 | ||
a14ed312 | 399 | extern char *longest_raw_hex_string (LONGEST); |
7acb79c8 | 400 | #endif |
c4093a6a | 401 | |
c906108c SS |
402 | /* Return a string that contains a number formatted in one of the local |
403 | (language-specific) formats. Result is static and is overwritten by | |
c4093a6a | 404 | the next call. Takes printf options like "08l" or "l". */ |
c906108c | 405 | |
14a5e767 | 406 | extern char *local_hex_string (LONGEST); /* language.c */ |
c906108c | 407 | |
14a5e767 | 408 | extern char *local_hex_string_custom (LONGEST, char *); /* language.c */ |
c4093a6a | 409 | |
c906108c SS |
410 | /* Type predicates */ |
411 | ||
a14ed312 | 412 | extern int simple_type (struct type *); |
c906108c | 413 | |
a14ed312 | 414 | extern int ordered_type (struct type *); |
c906108c | 415 | |
a14ed312 | 416 | extern int same_type (struct type *, struct type *); |
c906108c | 417 | |
a14ed312 | 418 | extern int integral_type (struct type *); |
c906108c | 419 | |
a14ed312 | 420 | extern int numeric_type (struct type *); |
c906108c | 421 | |
a14ed312 | 422 | extern int character_type (struct type *); |
c906108c | 423 | |
a14ed312 | 424 | extern int boolean_type (struct type *); |
c906108c | 425 | |
a14ed312 | 426 | extern int float_type (struct type *); |
c906108c | 427 | |
a14ed312 | 428 | extern int pointer_type (struct type *); |
c906108c | 429 | |
a14ed312 | 430 | extern int structured_type (struct type *); |
c906108c SS |
431 | |
432 | /* Checks Binary and Unary operations for semantic type correctness */ | |
433 | /* FIXME: Does not appear to be used */ | |
434 | #define unop_type_check(v,o) binop_type_check((v),NULL,(o)) | |
435 | ||
a14ed312 | 436 | extern void binop_type_check (struct value *, struct value *, int); |
c906108c SS |
437 | |
438 | /* Error messages */ | |
439 | ||
a14ed312 | 440 | extern void op_error (char *fmt, enum exp_opcode, int); |
c906108c SS |
441 | |
442 | #define type_op_error(f,o) \ | |
443 | op_error((f),(o),type_check==type_check_on ? 1 : 0) | |
444 | #define range_op_error(f,o) \ | |
445 | op_error((f),(o),range_check==range_check_on ? 1 : 0) | |
446 | ||
ddfe3c15 | 447 | extern void type_error (const char *, ...) ATTR_FORMAT (printf, 1, 2); |
c906108c | 448 | |
ddfe3c15 | 449 | extern void range_error (const char *, ...) ATTR_FORMAT (printf, 1, 2); |
c906108c SS |
450 | |
451 | /* Data: Does this value represent "truth" to the current language? */ | |
452 | ||
a14ed312 | 453 | extern int value_true (struct value *); |
c906108c | 454 | |
a14ed312 | 455 | extern struct type *lang_bool_type (void); |
c906108c SS |
456 | |
457 | /* The type used for Boolean values in the current language. */ | |
458 | #define LA_BOOL_TYPE lang_bool_type () | |
459 | ||
460 | /* Misc: The string representing a particular enum language. */ | |
461 | ||
a14ed312 | 462 | extern enum language language_enum (char *str); |
c906108c | 463 | |
a14ed312 | 464 | extern const struct language_defn *language_def (enum language); |
7a292a7a | 465 | |
a14ed312 | 466 | extern char *language_str (enum language); |
c906108c SS |
467 | |
468 | /* Add a language to the set known by GDB (at initialization time). */ | |
469 | ||
a14ed312 | 470 | extern void add_language (const struct language_defn *); |
c906108c | 471 | |
a14ed312 | 472 | extern enum language get_frame_language (void); /* In stack.c */ |
c906108c | 473 | |
f636b87d AF |
474 | /* Check for a language-specific trampoline. */ |
475 | ||
476 | extern CORE_ADDR skip_language_trampoline (CORE_ADDR pc); | |
477 | ||
c5aa993b | 478 | #endif /* defined (LANGUAGE_H) */ |