* elf32-i386.c (elf_i386_relocate_section): Don't complain about
[deliverable/binutils-gdb.git] / gdb / c-lang.c
CommitLineData
c906108c 1/* C language support routines for GDB, the GNU debugger.
6c6ea35e 2 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002
b6ba6518 3 Free Software Foundation, Inc.
c906108c 4
c5aa993b 5 This file is part of GDB.
c906108c 6
c5aa993b
JM
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.
c906108c 11
c5aa993b
JM
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.
c906108c 16
c5aa993b
JM
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. */
c906108c
SS
21
22#include "defs.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "expression.h"
26#include "parser-defs.h"
27#include "language.h"
28#include "c-lang.h"
745b8ca0 29#include "valprint.h"
84f0252a
JB
30#include "macroscope.h"
31#include "gdb_assert.h"
c906108c 32
a14ed312 33extern void _initialize_c_language (void);
d9fcf2fb 34static void c_emit_char (int c, struct ui_file * stream, int quoter);
c906108c
SS
35
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. */
39
40static void
fba45db2 41c_emit_char (register int c, struct ui_file *stream, int quoter)
c906108c
SS
42{
43 c &= 0xFF; /* Avoid sign bit follies */
44
45 if (PRINT_LITERAL_FORM (c))
46 {
47 if (c == '\\' || c == quoter)
48 {
49 fputs_filtered ("\\", stream);
50 }
51 fprintf_filtered (stream, "%c", c);
52 }
53 else
54 {
55 switch (c)
56 {
57 case '\n':
58 fputs_filtered ("\\n", stream);
59 break;
60 case '\b':
61 fputs_filtered ("\\b", stream);
62 break;
63 case '\t':
64 fputs_filtered ("\\t", stream);
65 break;
66 case '\f':
67 fputs_filtered ("\\f", stream);
68 break;
69 case '\r':
70 fputs_filtered ("\\r", stream);
71 break;
ae23c7a3
JB
72 case '\013':
73 fputs_filtered ("\\v", stream);
74 break;
c906108c
SS
75 case '\033':
76 fputs_filtered ("\\e", stream);
77 break;
78 case '\007':
79 fputs_filtered ("\\a", stream);
80 break;
ae23c7a3
JB
81 case '\0':
82 fputs_filtered ("\\0", stream);
83 break;
c906108c
SS
84 default:
85 fprintf_filtered (stream, "\\%.3o", (unsigned int) c);
86 break;
87 }
88 }
89}
90
91void
fba45db2 92c_printchar (int c, struct ui_file *stream)
c906108c
SS
93{
94 fputc_filtered ('\'', stream);
95 LA_EMIT_CHAR (c, stream, '\'');
96 fputc_filtered ('\'', stream);
97}
98
99/* Print the character string STRING, printing at most LENGTH characters.
100 LENGTH is -1 if the string is nul terminated. Each character is WIDTH bytes
101 long. Printing stops early if the number hits print_max; repeat counts are
102 printed as appropriate. Print ellipses at the end if we had to stop before
103 printing LENGTH characters, or if FORCE_ELLIPSES. */
104
105void
fba45db2
KB
106c_printstr (struct ui_file *stream, char *string, unsigned int length,
107 int width, int force_ellipses)
c906108c
SS
108{
109 register unsigned int i;
110 unsigned int things_printed = 0;
111 int in_quotes = 0;
112 int need_comma = 0;
113 extern int inspect_it;
c906108c
SS
114
115 /* If the string was not truncated due to `set print elements', and
116 the last byte of it is a null, we don't print that, in traditional C
117 style. */
118 if (!force_ellipses
119 && length > 0
78a51202
JB
120 && (extract_unsigned_integer (string + (length - 1) * width, width)
121 == '\0'))
c906108c
SS
122 length--;
123
124 if (length == 0)
125 {
126 fputs_filtered ("\"\"", stream);
127 return;
128 }
129
130 for (i = 0; i < length && things_printed < print_max; ++i)
131 {
132 /* Position of the character we are examining
c5aa993b 133 to see whether it is repeated. */
c906108c
SS
134 unsigned int rep1;
135 /* Number of repetitions we have detected so far. */
136 unsigned int reps;
137 unsigned long current_char;
138
139 QUIT;
140
141 if (need_comma)
142 {
143 fputs_filtered (", ", stream);
144 need_comma = 0;
145 }
146
147 current_char = extract_unsigned_integer (string + i * width, width);
148
149 rep1 = i + 1;
150 reps = 1;
151 while (rep1 < length
152 && extract_unsigned_integer (string + rep1 * width, width)
c5aa993b 153 == current_char)
c906108c
SS
154 {
155 ++rep1;
156 ++reps;
157 }
158
159 if (reps > repeat_count_threshold)
160 {
161 if (in_quotes)
162 {
163 if (inspect_it)
164 fputs_filtered ("\\\", ", stream);
165 else
166 fputs_filtered ("\", ", stream);
167 in_quotes = 0;
168 }
169 LA_PRINT_CHAR (current_char, stream);
170 fprintf_filtered (stream, " <repeats %u times>", reps);
171 i = rep1 - 1;
172 things_printed += repeat_count_threshold;
173 need_comma = 1;
174 }
175 else
176 {
177 if (!in_quotes)
178 {
179 if (inspect_it)
180 fputs_filtered ("\\\"", stream);
181 else
182 fputs_filtered ("\"", stream);
183 in_quotes = 1;
184 }
185 LA_EMIT_CHAR (current_char, stream, '"');
186 ++things_printed;
187 }
188 }
189
190 /* Terminate the quotes if necessary. */
191 if (in_quotes)
192 {
193 if (inspect_it)
194 fputs_filtered ("\\\"", stream);
195 else
196 fputs_filtered ("\"", stream);
197 }
198
199 if (force_ellipses || i < length)
200 fputs_filtered ("...", stream);
201}
202
203/* Create a fundamental C type using default reasonable for the current
204 target machine.
205
206 Some object/debugging file formats (DWARF version 1, COFF, etc) do not
207 define fundamental types such as "int" or "double". Others (stabs or
208 DWARF version 2, etc) do define fundamental types. For the formats which
209 don't provide fundamental types, gdb can create such types using this
210 function.
211
212 FIXME: Some compilers distinguish explicitly signed integral types
213 (signed short, signed int, signed long) from "regular" integral types
214 (short, int, long) in the debugging information. There is some dis-
215 agreement as to how useful this feature is. In particular, gcc does
216 not support this. Also, only some debugging formats allow the
217 distinction to be passed on to a debugger. For now, we always just
218 use "short", "int", or "long" as the type name, for both the implicit
219 and explicitly signed types. This also makes life easier for the
220 gdb test suite since we don't have to account for the differences
221 in output depending upon what the compiler and debugging format
222 support. We will probably have to re-examine the issue when gdb
223 starts taking it's fundamental type information directly from the
224 debugging information supplied by the compiler. fnf@cygnus.com */
225
226struct type *
fba45db2 227c_create_fundamental_type (struct objfile *objfile, int typeid)
c906108c
SS
228{
229 register struct type *type = NULL;
230
231 switch (typeid)
232 {
c5aa993b
JM
233 default:
234 /* FIXME: For now, if we are asked to produce a type not in this
235 language, create the equivalent of a C integer type with the
236 name "<?type?>". When all the dust settles from the type
237 reconstruction work, this should probably become an error. */
238 type = init_type (TYPE_CODE_INT,
239 TARGET_INT_BIT / TARGET_CHAR_BIT,
240 0, "<?type?>", objfile);
241 warning ("internal error: no C/C++ fundamental type %d", typeid);
242 break;
243 case FT_VOID:
244 type = init_type (TYPE_CODE_VOID,
245 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
246 0, "void", objfile);
247 break;
248 case FT_BOOLEAN:
249 type = init_type (TYPE_CODE_BOOL,
250 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
251 0, "bool", objfile);
c5aa993b
JM
252 break;
253 case FT_CHAR:
254 type = init_type (TYPE_CODE_INT,
255 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
6edc140f 256 TYPE_FLAG_NOSIGN, "char", objfile);
c5aa993b
JM
257 break;
258 case FT_SIGNED_CHAR:
259 type = init_type (TYPE_CODE_INT,
260 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
261 0, "signed char", objfile);
262 break;
263 case FT_UNSIGNED_CHAR:
264 type = init_type (TYPE_CODE_INT,
265 TARGET_CHAR_BIT / TARGET_CHAR_BIT,
266 TYPE_FLAG_UNSIGNED, "unsigned char", objfile);
267 break;
268 case FT_SHORT:
269 type = init_type (TYPE_CODE_INT,
270 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
271 0, "short", objfile);
272 break;
273 case FT_SIGNED_SHORT:
274 type = init_type (TYPE_CODE_INT,
275 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
276 0, "short", objfile); /* FIXME-fnf */
277 break;
278 case FT_UNSIGNED_SHORT:
279 type = init_type (TYPE_CODE_INT,
280 TARGET_SHORT_BIT / TARGET_CHAR_BIT,
281 TYPE_FLAG_UNSIGNED, "unsigned short", objfile);
282 break;
283 case FT_INTEGER:
284 type = init_type (TYPE_CODE_INT,
285 TARGET_INT_BIT / TARGET_CHAR_BIT,
286 0, "int", objfile);
287 break;
288 case FT_SIGNED_INTEGER:
289 type = init_type (TYPE_CODE_INT,
290 TARGET_INT_BIT / TARGET_CHAR_BIT,
291 0, "int", objfile); /* FIXME -fnf */
292 break;
293 case FT_UNSIGNED_INTEGER:
294 type = init_type (TYPE_CODE_INT,
295 TARGET_INT_BIT / TARGET_CHAR_BIT,
296 TYPE_FLAG_UNSIGNED, "unsigned int", objfile);
297 break;
298 case FT_LONG:
299 type = init_type (TYPE_CODE_INT,
300 TARGET_LONG_BIT / TARGET_CHAR_BIT,
301 0, "long", objfile);
302 break;
303 case FT_SIGNED_LONG:
304 type = init_type (TYPE_CODE_INT,
305 TARGET_LONG_BIT / TARGET_CHAR_BIT,
306 0, "long", objfile); /* FIXME -fnf */
307 break;
308 case FT_UNSIGNED_LONG:
309 type = init_type (TYPE_CODE_INT,
310 TARGET_LONG_BIT / TARGET_CHAR_BIT,
311 TYPE_FLAG_UNSIGNED, "unsigned long", objfile);
312 break;
313 case FT_LONG_LONG:
314 type = init_type (TYPE_CODE_INT,
315 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
316 0, "long long", objfile);
317 break;
318 case FT_SIGNED_LONG_LONG:
319 type = init_type (TYPE_CODE_INT,
320 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
321 0, "signed long long", objfile);
322 break;
323 case FT_UNSIGNED_LONG_LONG:
324 type = init_type (TYPE_CODE_INT,
325 TARGET_LONG_LONG_BIT / TARGET_CHAR_BIT,
326 TYPE_FLAG_UNSIGNED, "unsigned long long", objfile);
327 break;
328 case FT_FLOAT:
329 type = init_type (TYPE_CODE_FLT,
330 TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
331 0, "float", objfile);
332 break;
333 case FT_DBL_PREC_FLOAT:
334 type = init_type (TYPE_CODE_FLT,
335 TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
336 0, "double", objfile);
337 break;
338 case FT_EXT_PREC_FLOAT:
339 type = init_type (TYPE_CODE_FLT,
340 TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
341 0, "long double", objfile);
342 break;
f65ca430
DJ
343 case FT_COMPLEX:
344 type = init_type (TYPE_CODE_FLT,
345 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
346 0, "complex float", objfile);
347 TYPE_TARGET_TYPE (type)
348 = init_type (TYPE_CODE_FLT, TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
349 0, "float", objfile);
350 break;
351 case FT_DBL_PREC_COMPLEX:
352 type = init_type (TYPE_CODE_FLT,
353 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
354 0, "complex double", objfile);
355 TYPE_TARGET_TYPE (type)
356 = init_type (TYPE_CODE_FLT, TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
357 0, "double", objfile);
358 break;
359 case FT_EXT_PREC_COMPLEX:
360 type = init_type (TYPE_CODE_FLT,
361 2 * TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
362 0, "complex long double", objfile);
363 TYPE_TARGET_TYPE (type)
364 = init_type (TYPE_CODE_FLT, TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
365 0, "long double", objfile);
366 break;
c5aa993b
JM
367 case FT_TEMPLATE_ARG:
368 type = init_type (TYPE_CODE_TEMPLATE_ARG,
369 0,
370 0, "<template arg>", objfile);
c5aa993b
JM
371 break;
372 }
c906108c
SS
373 return (type);
374}
c906108c 375\f
84f0252a 376/* Preprocessing and parsing C and C++ expressions. */
c5aa993b 377
84f0252a
JB
378
379/* When we find that lexptr (the global var defined in parse.c) is
380 pointing at a macro invocation, we expand the invocation, and call
381 scan_macro_expansion to save the old lexptr here and point lexptr
382 into the expanded text. When we reach the end of that, we call
383 end_macro_expansion to pop back to the value we saved here. The
384 macro expansion code promises to return only fully-expanded text,
385 so we don't need to "push" more than one level.
386
387 This is disgusting, of course. It would be cleaner to do all macro
388 expansion beforehand, and then hand that to lexptr. But we don't
389 really know where the expression ends. Remember, in a command like
390
391 (gdb) break *ADDRESS if CONDITION
392
393 we evaluate ADDRESS in the scope of the current frame, but we
394 evaluate CONDITION in the scope of the breakpoint's location. So
395 it's simply wrong to try to macro-expand the whole thing at once. */
396static char *macro_original_text;
397static char *macro_expanded_text;
398
399
400void
401scan_macro_expansion (char *expansion)
402{
403 /* We'd better not be trying to push the stack twice. */
404 gdb_assert (! macro_original_text);
405 gdb_assert (! macro_expanded_text);
406
407 /* Save the old lexptr value, so we can return to it when we're done
408 parsing the expanded text. */
409 macro_original_text = lexptr;
410 lexptr = expansion;
411
412 /* Save the expanded text, so we can free it when we're finished. */
413 macro_expanded_text = expansion;
414}
415
416
417int
418scanning_macro_expansion ()
419{
420 return macro_original_text != 0;
421}
422
423
424void
425finished_macro_expansion ()
426{
427 /* There'd better be something to pop back to, and we better have
428 saved a pointer to the start of the expanded text. */
429 gdb_assert (macro_original_text);
430 gdb_assert (macro_expanded_text);
431
432 /* Pop back to the original text. */
433 lexptr = macro_original_text;
434 macro_original_text = 0;
435
436 /* Free the expanded text. */
437 xfree (macro_expanded_text);
438 macro_expanded_text = 0;
439}
440
441
442static void
443scan_macro_cleanup (void *dummy)
444{
445 if (macro_original_text)
446 finished_macro_expansion ();
447}
448
449
450/* We set these global variables before calling c_parse, to tell it
451 how it to find macro definitions for the expression at hand. */
452macro_lookup_ftype *expression_macro_lookup_func;
453void *expression_macro_lookup_baton;
454
455
456static struct macro_definition *
457null_macro_lookup (const char *name, void *baton)
458{
459 return 0;
460}
461
462
463static int
464c_preprocess_and_parse ()
465{
466 /* Set up a lookup function for the macro expander. */
467 struct macro_scope *scope = 0;
468 struct cleanup *back_to = make_cleanup (free_current_contents, &scope);
469
470 if (expression_context_block)
471 scope = sal_macro_scope (find_pc_line (expression_context_pc, 0));
472 else
473 scope = default_macro_scope ();
474
475 if (scope)
476 {
477 expression_macro_lookup_func = standard_macro_lookup;
478 expression_macro_lookup_baton = (void *) scope;
479 }
480 else
481 {
482 expression_macro_lookup_func = null_macro_lookup;
483 expression_macro_lookup_baton = 0;
484 }
485
486 gdb_assert (! macro_original_text);
487 make_cleanup (scan_macro_cleanup, 0);
488
489 {
490 int result = c_parse ();
491 do_cleanups (back_to);
492 return result;
493 }
494}
495
496
497\f
c906108c
SS
498/* Table mapping opcodes into strings for printing operators
499 and precedences of the operators. */
500
501const struct op_print c_op_print_tab[] =
c5aa993b
JM
502{
503 {",", BINOP_COMMA, PREC_COMMA, 0},
504 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
505 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
506 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
507 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
508 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
509 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
510 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
511 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
512 {"<=", BINOP_LEQ, PREC_ORDER, 0},
513 {">=", BINOP_GEQ, PREC_ORDER, 0},
514 {">", BINOP_GTR, PREC_ORDER, 0},
515 {"<", BINOP_LESS, PREC_ORDER, 0},
516 {">>", BINOP_RSH, PREC_SHIFT, 0},
517 {"<<", BINOP_LSH, PREC_SHIFT, 0},
518 {"+", BINOP_ADD, PREC_ADD, 0},
519 {"-", BINOP_SUB, PREC_ADD, 0},
520 {"*", BINOP_MUL, PREC_MUL, 0},
521 {"/", BINOP_DIV, PREC_MUL, 0},
522 {"%", BINOP_REM, PREC_MUL, 0},
523 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
524 {"-", UNOP_NEG, PREC_PREFIX, 0},
525 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
526 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
527 {"*", UNOP_IND, PREC_PREFIX, 0},
528 {"&", UNOP_ADDR, PREC_PREFIX, 0},
529 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
530 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
531 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
c5aa993b 532 {NULL, 0, 0, 0}
c906108c
SS
533};
534\f
6c6ea35e 535struct type **const (c_builtin_types[]) =
c906108c
SS
536{
537 &builtin_type_int,
78a51202
JB
538 &builtin_type_long,
539 &builtin_type_short,
540 &builtin_type_char,
541 &builtin_type_float,
542 &builtin_type_double,
543 &builtin_type_void,
544 &builtin_type_long_long,
545 &builtin_type_signed_char,
546 &builtin_type_unsigned_char,
547 &builtin_type_unsigned_short,
548 &builtin_type_unsigned_int,
549 &builtin_type_unsigned_long,
550 &builtin_type_unsigned_long_long,
551 &builtin_type_long_double,
552 &builtin_type_complex,
553 &builtin_type_double_complex,
554 0
c906108c
SS
555};
556
c5aa993b
JM
557const struct language_defn c_language_defn =
558{
c906108c
SS
559 "c", /* Language name */
560 language_c,
561 c_builtin_types,
562 range_check_off,
563 type_check_off,
63872f9d 564 case_sensitive_on,
84f0252a 565 c_preprocess_and_parse,
c906108c
SS
566 c_error,
567 evaluate_subexp_standard,
568 c_printchar, /* Print a character constant */
569 c_printstr, /* Function to print string constant */
570 c_emit_char, /* Print a single char */
571 c_create_fundamental_type, /* Create fundamental type in this language */
572 c_print_type, /* Print a type using appropriate syntax */
573 c_val_print, /* Print a value using appropriate syntax */
574 c_value_print, /* Print a top-level value */
c5aa993b
JM
575 {"", "", "", ""}, /* Binary format info */
576 {"0%lo", "0", "o", ""}, /* Octal format info */
577 {"%ld", "", "d", ""}, /* Decimal format info */
578 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
579 c_op_print_tab, /* expression operators for printing */
580 1, /* c-style arrays */
581 0, /* String lower bound */
c5aa993b 582 &builtin_type_char, /* Type of string elements */
c906108c
SS
583 LANG_MAGIC
584};
585
c5aa993b 586struct type **const (cplus_builtin_types[]) =
c906108c
SS
587{
588 &builtin_type_int,
78a51202
JB
589 &builtin_type_long,
590 &builtin_type_short,
591 &builtin_type_char,
592 &builtin_type_float,
593 &builtin_type_double,
594 &builtin_type_void,
595 &builtin_type_long_long,
596 &builtin_type_signed_char,
597 &builtin_type_unsigned_char,
598 &builtin_type_unsigned_short,
599 &builtin_type_unsigned_int,
600 &builtin_type_unsigned_long,
601 &builtin_type_unsigned_long_long,
602 &builtin_type_long_double,
603 &builtin_type_complex,
604 &builtin_type_double_complex,
605 &builtin_type_bool,
606 0
c906108c
SS
607};
608
c5aa993b
JM
609const struct language_defn cplus_language_defn =
610{
611 "c++", /* Language name */
c906108c
SS
612 language_cplus,
613 cplus_builtin_types,
614 range_check_off,
615 type_check_off,
63872f9d 616 case_sensitive_on,
84f0252a 617 c_preprocess_and_parse,
c906108c
SS
618 c_error,
619 evaluate_subexp_standard,
620 c_printchar, /* Print a character constant */
621 c_printstr, /* Function to print string constant */
622 c_emit_char, /* Print a single char */
623 c_create_fundamental_type, /* Create fundamental type in this language */
624 c_print_type, /* Print a type using appropriate syntax */
625 c_val_print, /* Print a value using appropriate syntax */
626 c_value_print, /* Print a top-level value */
c5aa993b
JM
627 {"", "", "", ""}, /* Binary format info */
628 {"0%lo", "0", "o", ""}, /* Octal format info */
629 {"%ld", "", "d", ""}, /* Decimal format info */
630 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
631 c_op_print_tab, /* expression operators for printing */
632 1, /* c-style arrays */
633 0, /* String lower bound */
c5aa993b 634 &builtin_type_char, /* Type of string elements */
c906108c
SS
635 LANG_MAGIC
636};
637
c5aa993b
JM
638const struct language_defn asm_language_defn =
639{
c906108c
SS
640 "asm", /* Language name */
641 language_asm,
642 c_builtin_types,
643 range_check_off,
644 type_check_off,
63872f9d 645 case_sensitive_on,
84f0252a 646 c_preprocess_and_parse,
c906108c
SS
647 c_error,
648 evaluate_subexp_standard,
649 c_printchar, /* Print a character constant */
650 c_printstr, /* Function to print string constant */
651 c_emit_char, /* Print a single char */
652 c_create_fundamental_type, /* Create fundamental type in this language */
653 c_print_type, /* Print a type using appropriate syntax */
654 c_val_print, /* Print a value using appropriate syntax */
655 c_value_print, /* Print a top-level value */
c5aa993b
JM
656 {"", "", "", ""}, /* Binary format info */
657 {"0%lo", "0", "o", ""}, /* Octal format info */
658 {"%ld", "", "d", ""}, /* Decimal format info */
659 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
660 c_op_print_tab, /* expression operators for printing */
661 1, /* c-style arrays */
662 0, /* String lower bound */
c5aa993b 663 &builtin_type_char, /* Type of string elements */
c906108c
SS
664 LANG_MAGIC
665};
666
667void
fba45db2 668_initialize_c_language (void)
c906108c
SS
669{
670 add_language (&c_language_defn);
671 add_language (&cplus_language_defn);
672 add_language (&asm_language_defn);
673}
This page took 0.203668 seconds and 4 git commands to generate.