1 /* C language support routines for GDB, the GNU debugger.
2 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330,
20 Boston, MA 02111-1307, USA. */
25 #include "expression.h"
26 #include "parser-defs.h"
30 #include "macroscope.h"
31 #include "gdb_assert.h"
33 extern void _initialize_c_language (void);
34 static void c_emit_char (int c, struct ui_file * stream, int quoter);
36 /* Print the character C on STREAM as part of the contents of a literal
37 string whose delimiter is QUOTER. Note that that format for printing
38 characters and strings is language specific. */
41 c_emit_char (register int c, struct ui_file *stream, int quoter)
43 c &= 0xFF; /* Avoid sign bit follies */
45 if (PRINT_LITERAL_FORM (c))
47 if (c == '\\' || c == quoter)
49 fputs_filtered ("\\", stream);
51 fprintf_filtered (stream, "%c", c);
58 fputs_filtered ("\\n", stream);
61 fputs_filtered ("\\b", stream);
64 fputs_filtered ("\\t", stream);
67 fputs_filtered ("\\f", stream);
70 fputs_filtered ("\\r", stream);
73 fputs_filtered ("\\v", stream);
76 fputs_filtered ("\\e", stream);
79 fputs_filtered ("\\a", stream);
83 fputs_filtered ("\\0", stream);
85 fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
88 fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
95 c_printchar (int c, struct ui_file *stream)
97 fputc_filtered ('\'', stream);
98 LA_EMIT_CHAR (c, stream, '\'');
99 fputc_filtered ('\'', stream);
102 /* Print the character string STRING, printing at most LENGTH characters.
103 LENGTH is -1 if the string is nul terminated. Each character is WIDTH bytes
104 long. Printing stops early if the number hits print_max; repeat counts are
105 printed as appropriate. Print ellipses at the end if we had to stop before
106 printing LENGTH characters, or if FORCE_ELLIPSES. */
109 c_printstr (struct ui_file *stream, char *string, unsigned int length,
110 int width, int force_ellipses)
112 register unsigned int i;
113 unsigned int things_printed = 0;
116 extern int inspect_it;
118 /* If the string was not truncated due to `set print elements', and
119 the last byte of it is a null, we don't print that, in traditional C
123 && (extract_unsigned_integer (string + (length - 1) * width, width)
129 fputs_filtered ("\"\"", stream);
133 for (i = 0; i < length && things_printed < print_max; ++i)
135 /* Position of the character we are examining
136 to see whether it is repeated. */
138 /* Number of repetitions we have detected so far. */
140 unsigned long current_char;
146 fputs_filtered (", ", stream);
150 current_char = extract_unsigned_integer (string + i * width, width);
155 && extract_unsigned_integer (string + rep1 * width, width)
162 if (reps > repeat_count_threshold)
167 fputs_filtered ("\\\", ", stream);
169 fputs_filtered ("\", ", stream);
172 LA_PRINT_CHAR (current_char, stream);
173 fprintf_filtered (stream, " <repeats %u times>", reps);
175 things_printed += repeat_count_threshold;
183 fputs_filtered ("\\\"", stream);
185 fputs_filtered ("\"", stream);
188 LA_EMIT_CHAR (current_char, stream, '"');
193 /* Terminate the quotes if necessary. */
197 fputs_filtered ("\\\"", stream);
199 fputs_filtered ("\"", stream);
202 if (force_ellipses || i < length)
203 fputs_filtered ("...", stream);
206 /* Create a fundamental C type using default reasonable for the current
209 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
210 define fundamental types such as "int" or "double". Others (stabs or
211 DWARF version 2, etc) do define fundamental types. For the formats which
212 don't provide fundamental types, gdb can create such types using this
215 FIXME: Some compilers distinguish explicitly signed integral types
216 (signed short, signed int, signed long) from "regular" integral types
217 (short, int, long) in the debugging information. There is some dis-
218 agreement as to how useful this feature is. In particular, gcc does
219 not support this. Also, only some debugging formats allow the
220 distinction to be passed on to a debugger. For now, we always just
221 use "short", "int", or "long" as the type name, for both the implicit
222 and explicitly signed types. This also makes life easier for the
223 gdb test suite since we don't have to account for the differences
224 in output depending upon what the compiler and debugging format
225 support. We will probably have to re-examine the issue when gdb
226 starts taking it's fundamental type information directly from the
227 debugging information supplied by the compiler. fnf@cygnus.com */
230 c_create_fundamental_type (struct objfile *objfile, int typeid)
232 register struct type *type = NULL;
237 /* FIXME: For now, if we are asked to produce a type not in this
238 language, create the equivalent of a C integer type with the
239 name "<?type?>". When all the dust settles from the type
240 reconstruction work, this should probably become an error. */
241 type = init_type (TYPE_CODE_INT,
242 TARGET_INT_BIT / TARGET_CHAR_BIT,
243 0, "<?type?>", objfile);
244 warning ("internal error: no C/C++ fundamental type %d", typeid);
247 type = init_type (TYPE_CODE_VOID,
248 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
252 type = init_type (TYPE_CODE_BOOL,
253 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
257 type = init_type (TYPE_CODE_INT,
258 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
259 TYPE_FLAG_NOSIGN, "char", objfile);
262 type = init_type (TYPE_CODE_INT,
263 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
264 0, "signed char", objfile);
266 case FT_UNSIGNED_CHAR:
267 type = init_type (TYPE_CODE_INT,
268 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
269 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
272 type = init_type (TYPE_CODE_INT,
273 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
274 0, "short", objfile);
276 case FT_SIGNED_SHORT:
277 type = init_type (TYPE_CODE_INT,
278 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
279 0, "short", objfile); /* FIXME-fnf */
281 case FT_UNSIGNED_SHORT:
282 type = init_type (TYPE_CODE_INT,
283 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
284 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
287 type = init_type (TYPE_CODE_INT,
288 TARGET_INT_BIT / TARGET_CHAR_BIT,
291 case FT_SIGNED_INTEGER:
292 type = init_type (TYPE_CODE_INT,
293 TARGET_INT_BIT / TARGET_CHAR_BIT,
294 0, "int", objfile); /* FIXME -fnf */
296 case FT_UNSIGNED_INTEGER:
297 type = init_type (TYPE_CODE_INT,
298 TARGET_INT_BIT / TARGET_CHAR_BIT,
299 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
302 type = init_type (TYPE_CODE_INT,
303 TARGET_LONG_BIT / TARGET_CHAR_BIT,
307 type = init_type (TYPE_CODE_INT,
308 TARGET_LONG_BIT / TARGET_CHAR_BIT,
309 0, "long", objfile); /* FIXME -fnf */
311 case FT_UNSIGNED_LONG:
312 type = init_type (TYPE_CODE_INT,
313 TARGET_LONG_BIT / TARGET_CHAR_BIT,
314 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
317 type = init_type (TYPE_CODE_INT,
318 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
319 0, "long long", objfile);
321 case FT_SIGNED_LONG_LONG:
322 type = init_type (TYPE_CODE_INT,
323 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
324 0, "signed long long", objfile);
326 case FT_UNSIGNED_LONG_LONG:
327 type = init_type (TYPE_CODE_INT,
328 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
329 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
332 type = init_type (TYPE_CODE_FLT,
333 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
334 0, "float", objfile);
336 case FT_DBL_PREC_FLOAT:
337 type = init_type (TYPE_CODE_FLT,
338 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
339 0, "double", objfile);
341 case FT_EXT_PREC_FLOAT:
342 type = init_type (TYPE_CODE_FLT,
343 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
344 0, "long double", objfile);
347 type = init_type (TYPE_CODE_FLT,
348 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
349 0, "complex float", objfile);
350 TYPE_TARGET_TYPE (type)
351 = init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
352 0, "float", objfile);
354 case FT_DBL_PREC_COMPLEX:
355 type = init_type (TYPE_CODE_FLT,
356 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
357 0, "complex double", objfile);
358 TYPE_TARGET_TYPE (type)
359 = init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
360 0, "double", objfile);
362 case FT_EXT_PREC_COMPLEX:
363 type = init_type (TYPE_CODE_FLT,
364 2 * TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
365 0, "complex long double", objfile);
366 TYPE_TARGET_TYPE (type)
367 = init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
368 0, "long double", objfile);
370 case FT_TEMPLATE_ARG:
371 type = init_type (TYPE_CODE_TEMPLATE_ARG,
373 0, "<template arg>", objfile);
379 /* Preprocessing and parsing C and C++ expressions. */
382 /* When we find that lexptr (the global var defined in parse.c) is
383 pointing at a macro invocation, we expand the invocation, and call
384 scan_macro_expansion to save the old lexptr here and point lexptr
385 into the expanded text. When we reach the end of that, we call
386 end_macro_expansion to pop back to the value we saved here. The
387 macro expansion code promises to return only fully-expanded text,
388 so we don't need to "push" more than one level.
390 This is disgusting, of course. It would be cleaner to do all macro
391 expansion beforehand, and then hand that to lexptr. But we don't
392 really know where the expression ends. Remember, in a command like
394 (gdb) break *ADDRESS if CONDITION
396 we evaluate ADDRESS in the scope of the current frame, but we
397 evaluate CONDITION in the scope of the breakpoint's location. So
398 it's simply wrong to try to macro-expand the whole thing at once. */
399 static char *macro_original_text;
400 static char *macro_expanded_text;
404 scan_macro_expansion (char *expansion)
406 /* We'd better not be trying to push the stack twice. */
407 gdb_assert (! macro_original_text);
408 gdb_assert (! macro_expanded_text);
410 /* Save the old lexptr value, so we can return to it when we're done
411 parsing the expanded text. */
412 macro_original_text = lexptr;
415 /* Save the expanded text, so we can free it when we're finished. */
416 macro_expanded_text = expansion;
421 scanning_macro_expansion (void)
423 return macro_original_text != 0;
428 finished_macro_expansion (void)
430 /* There'd better be something to pop back to, and we better have
431 saved a pointer to the start of the expanded text. */
432 gdb_assert (macro_original_text);
433 gdb_assert (macro_expanded_text);
435 /* Pop back to the original text. */
436 lexptr = macro_original_text;
437 macro_original_text = 0;
439 /* Free the expanded text. */
440 xfree (macro_expanded_text);
441 macro_expanded_text = 0;
446 scan_macro_cleanup (void *dummy)
448 if (macro_original_text)
449 finished_macro_expansion ();
453 /* We set these global variables before calling c_parse, to tell it
454 how it to find macro definitions for the expression at hand. */
455 macro_lookup_ftype *expression_macro_lookup_func;
456 void *expression_macro_lookup_baton;
459 static struct macro_definition *
460 null_macro_lookup (const char *name, void *baton)
467 c_preprocess_and_parse (void)
469 /* Set up a lookup function for the macro expander. */
470 struct macro_scope *scope = 0;
471 struct cleanup *back_to = make_cleanup (free_current_contents, &scope);
473 if (expression_context_block)
474 scope = sal_macro_scope (find_pc_line (expression_context_pc, 0));
476 scope = default_macro_scope ();
480 expression_macro_lookup_func = standard_macro_lookup;
481 expression_macro_lookup_baton = (void *) scope;
485 expression_macro_lookup_func = null_macro_lookup;
486 expression_macro_lookup_baton = 0;
489 gdb_assert (! macro_original_text);
490 make_cleanup (scan_macro_cleanup, 0);
493 int result = c_parse ();
494 do_cleanups (back_to);
501 /* Table mapping opcodes into strings for printing operators
502 and precedences of the operators. */
504 const struct op_print c_op_print_tab[] =
506 {",", BINOP_COMMA, PREC_COMMA, 0},
507 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
508 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
509 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
510 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
511 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
512 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
513 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
514 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
515 {"<=", BINOP_LEQ, PREC_ORDER, 0},
516 {">=", BINOP_GEQ, PREC_ORDER, 0},
517 {">", BINOP_GTR, PREC_ORDER, 0},
518 {"<", BINOP_LESS, PREC_ORDER, 0},
519 {">>", BINOP_RSH, PREC_SHIFT, 0},
520 {"<<", BINOP_LSH, PREC_SHIFT, 0},
521 {"+", BINOP_ADD, PREC_ADD, 0},
522 {"-", BINOP_SUB, PREC_ADD, 0},
523 {"*", BINOP_MUL, PREC_MUL, 0},
524 {"/", BINOP_DIV, PREC_MUL, 0},
525 {"%", BINOP_REM, PREC_MUL, 0},
526 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
527 {"-", UNOP_NEG, PREC_PREFIX, 0},
528 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
529 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
530 {"*", UNOP_IND, PREC_PREFIX, 0},
531 {"&", UNOP_ADDR, PREC_PREFIX, 0},
532 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
533 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
534 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
538 struct type **const (c_builtin_types[]) =
545 &builtin_type_double,
547 &builtin_type_long_long,
548 &builtin_type_signed_char,
549 &builtin_type_unsigned_char,
550 &builtin_type_unsigned_short,
551 &builtin_type_unsigned_int,
552 &builtin_type_unsigned_long,
553 &builtin_type_unsigned_long_long,
554 &builtin_type_long_double,
555 &builtin_type_complex,
556 &builtin_type_double_complex,
560 const struct language_defn c_language_defn =
562 "c", /* Language name */
568 c_preprocess_and_parse,
570 evaluate_subexp_standard,
571 c_printchar, /* Print a character constant */
572 c_printstr, /* Function to print string constant */
573 c_emit_char, /* Print a single char */
574 c_create_fundamental_type, /* Create fundamental type in this language */
575 c_print_type, /* Print a type using appropriate syntax */
576 c_val_print, /* Print a value using appropriate syntax */
577 c_value_print, /* Print a top-level value */
578 {"", "", "", ""}, /* Binary format info */
579 {"0%lo", "0", "o", ""}, /* Octal format info */
580 {"%ld", "", "d", ""}, /* Decimal format info */
581 {"0x%lx", "0x", "x", ""}, /* Hex format info */
582 c_op_print_tab, /* expression operators for printing */
583 1, /* c-style arrays */
584 0, /* String lower bound */
585 &builtin_type_char, /* Type of string elements */
589 struct type **const (cplus_builtin_types[]) =
596 &builtin_type_double,
598 &builtin_type_long_long,
599 &builtin_type_signed_char,
600 &builtin_type_unsigned_char,
601 &builtin_type_unsigned_short,
602 &builtin_type_unsigned_int,
603 &builtin_type_unsigned_long,
604 &builtin_type_unsigned_long_long,
605 &builtin_type_long_double,
606 &builtin_type_complex,
607 &builtin_type_double_complex,
612 const struct language_defn cplus_language_defn =
614 "c++", /* Language name */
620 c_preprocess_and_parse,
622 evaluate_subexp_standard,
623 c_printchar, /* Print a character constant */
624 c_printstr, /* Function to print string constant */
625 c_emit_char, /* Print a single char */
626 c_create_fundamental_type, /* Create fundamental type in this language */
627 c_print_type, /* Print a type using appropriate syntax */
628 c_val_print, /* Print a value using appropriate syntax */
629 c_value_print, /* Print a top-level value */
630 {"", "", "", ""}, /* Binary format info */
631 {"0%lo", "0", "o", ""}, /* Octal format info */
632 {"%ld", "", "d", ""}, /* Decimal format info */
633 {"0x%lx", "0x", "x", ""}, /* Hex format info */
634 c_op_print_tab, /* expression operators for printing */
635 1, /* c-style arrays */
636 0, /* String lower bound */
637 &builtin_type_char, /* Type of string elements */
641 const struct language_defn asm_language_defn =
643 "asm", /* Language name */
649 c_preprocess_and_parse,
651 evaluate_subexp_standard,
652 c_printchar, /* Print a character constant */
653 c_printstr, /* Function to print string constant */
654 c_emit_char, /* Print a single char */
655 c_create_fundamental_type, /* Create fundamental type in this language */
656 c_print_type, /* Print a type using appropriate syntax */
657 c_val_print, /* Print a value using appropriate syntax */
658 c_value_print, /* Print a top-level value */
659 {"", "", "", ""}, /* Binary format info */
660 {"0%lo", "0", "o", ""}, /* Octal format info */
661 {"%ld", "", "d", ""}, /* Decimal format info */
662 {"0x%lx", "0x", "x", ""}, /* Hex format info */
663 c_op_print_tab, /* expression operators for printing */
664 1, /* c-style arrays */
665 0, /* String lower bound */
666 &builtin_type_char, /* Type of string elements */
671 _initialize_c_language (void)
673 add_language (&c_language_defn);
674 add_language (&cplus_language_defn);
675 add_language (&asm_language_defn);