]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - gdb/language.c
Replace free() with xfree().
[thirdparty/binutils-gdb.git] / gdb / language.c
CommitLineData
c906108c 1/* Multiple source language support for GDB.
d9fcf2fb 2 Copyright 1991, 1992, 2000 Free Software Foundation, Inc.
c906108c
SS
3 Contributed by the Department of Computer Science at the State University
4 of New York at Buffalo.
5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b
JM
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330,
21 Boston, MA 02111-1307, USA. */
c906108c
SS
22
23/* This file contains functions that return things that are specific
24 to languages. Each function should examine current_language if necessary,
25 and return the appropriate result. */
26
27/* FIXME: Most of these would be better organized as macros which
28 return data out of a "language-specific" struct pointer that is set
29 whenever the working language changes. That would be a lot faster. */
30
31#include "defs.h"
32#include <ctype.h>
33#include "gdb_string.h"
34
35#include "symtab.h"
36#include "gdbtypes.h"
37#include "value.h"
38#include "gdbcmd.h"
39#include "frame.h"
40#include "expression.h"
41#include "language.h"
42#include "target.h"
43#include "parser-defs.h"
8caabe69 44#include "jv-lang.h"
c906108c 45
a14ed312 46extern void _initialize_language (void);
392a587b 47
a14ed312 48static void show_language_command (char *, int);
c906108c 49
a14ed312 50static void set_language_command (char *, int);
c906108c 51
a14ed312 52static void show_type_command (char *, int);
c906108c 53
a14ed312 54static void set_type_command (char *, int);
c906108c 55
a14ed312 56static void show_range_command (char *, int);
c906108c 57
a14ed312 58static void set_range_command (char *, int);
c906108c 59
63872f9d
JG
60static void show_case_command (char *, int);
61
62static void set_case_command (char *, int);
63
64static void set_case_str (void);
65
a14ed312 66static void set_range_str (void);
c906108c 67
a14ed312 68static void set_type_str (void);
c906108c 69
a14ed312 70static void set_lang_str (void);
c906108c 71
a14ed312 72static void unk_lang_error (char *);
c906108c 73
a14ed312 74static int unk_lang_parser (void);
c906108c 75
a14ed312 76static void show_check (char *, int);
c906108c 77
a14ed312 78static void set_check (char *, int);
c906108c 79
63872f9d 80static void set_type_range_case (void);
c906108c 81
d9fcf2fb 82static void unk_lang_emit_char (int c, struct ui_file *stream, int quoter);
c906108c 83
d9fcf2fb 84static void unk_lang_printchar (int c, struct ui_file *stream);
c906108c 85
d9fcf2fb
JM
86static void unk_lang_printstr (struct ui_file * stream, char *string,
87 unsigned int length, int width,
88 int force_ellipses);
c906108c 89
a14ed312 90static struct type *unk_lang_create_fundamental_type (struct objfile *, int);
c906108c 91
d9fcf2fb
JM
92static void unk_lang_print_type (struct type *, char *, struct ui_file *,
93 int, int);
c906108c 94
d9fcf2fb
JM
95static int unk_lang_val_print (struct type *, char *, int, CORE_ADDR,
96 struct ui_file *, int, int, int,
97 enum val_prettyprint);
c906108c 98
d9fcf2fb 99static int unk_lang_value_print (value_ptr, struct ui_file *, int, enum val_prettyprint);
c906108c
SS
100
101/* Forward declaration */
102extern const struct language_defn unknown_language_defn;
103extern char *warning_pre_print;
c5aa993b 104
c906108c 105/* The current (default at startup) state of type and range checking.
c5aa993b
JM
106 (If the modes are set to "auto", though, these are changed based
107 on the default language at startup, and then again based on the
108 language of the first source file. */
c906108c
SS
109
110enum range_mode range_mode = range_mode_auto;
111enum range_check range_check = range_check_off;
112enum type_mode type_mode = type_mode_auto;
113enum type_check type_check = type_check_off;
63872f9d
JG
114enum case_mode case_mode = case_mode_auto;
115enum case_sensitivity case_sensitivity = case_sensitive_on;
c906108c
SS
116
117/* The current language and language_mode (see language.h) */
118
119const struct language_defn *current_language = &unknown_language_defn;
120enum language_mode language_mode = language_mode_auto;
121
122/* The language that the user expects to be typing in (the language
123 of main(), or the last language we notified them about, or C). */
124
125const struct language_defn *expected_language;
126
127/* The list of supported languages. The list itself is malloc'd. */
128
129static const struct language_defn **languages;
130static unsigned languages_size;
131static unsigned languages_allocsize;
132#define DEFAULT_ALLOCSIZE 4
133
134/* The "set language/type/range" commands all put stuff in these
135 buffers. This is to make them work as set/show commands. The
136 user's string is copied here, then the set_* commands look at
137 them and update them to something that looks nice when it is
138 printed out. */
139
140static char *language;
141static char *type;
142static char *range;
63872f9d 143static char *case_sensitive;
c906108c
SS
144
145/* Warning issued when current_language and the language of the current
146 frame do not match. */
147char lang_frame_mismatch_warn[] =
c5aa993b 148"Warning: the current language does not match this frame.";
c906108c 149\f
c5aa993b 150
c906108c
SS
151/* This page contains the functions corresponding to GDB commands
152 and their helpers. */
153
154/* Show command. Display a warning if the language set
155 does not match the frame. */
156static void
fba45db2 157show_language_command (char *ignore, int from_tty)
c906108c 158{
c5aa993b 159 enum language flang; /* The language of the current frame */
c906108c 160
c5aa993b
JM
161 flang = get_frame_language ();
162 if (flang != language_unknown &&
163 language_mode == language_mode_manual &&
164 current_language->la_language != flang)
165 printf_filtered ("%s\n", lang_frame_mismatch_warn);
c906108c
SS
166}
167
168/* Set command. Change the current working language. */
169static void
fba45db2 170set_language_command (char *ignore, int from_tty)
c906108c
SS
171{
172 int i;
173 enum language flang;
174 char *err_lang;
175
176 if (!language || !language[0])
177 {
c5aa993b 178 printf_unfiltered ("The currently understood settings are:\n\n");
c906108c
SS
179 printf_unfiltered ("local or auto Automatic setting based on source file\n");
180
181 for (i = 0; i < languages_size; ++i)
182 {
183 /* Already dealt with these above. */
184 if (languages[i]->la_language == language_unknown
185 || languages[i]->la_language == language_auto)
186 continue;
187
188 /* FIXME for now assume that the human-readable name is just
189 a capitalization of the internal name. */
190 printf_unfiltered ("%-16s Use the %c%s language\n",
191 languages[i]->la_name,
c5aa993b
JM
192 /* Capitalize first letter of language
193 name. */
c906108c
SS
194 toupper (languages[i]->la_name[0]),
195 languages[i]->la_name + 1);
196 }
197 /* Restore the silly string. */
c5aa993b 198 set_language (current_language->la_language);
c906108c
SS
199 return;
200 }
201
202 /* Search the list of languages for a match. */
c5aa993b
JM
203 for (i = 0; i < languages_size; i++)
204 {
205 if (STREQ (languages[i]->la_name, language))
206 {
207 /* Found it! Go into manual mode, and use this language. */
208 if (languages[i]->la_language == language_auto)
209 {
210 /* Enter auto mode. Set to the current frame's language, if known. */
211 language_mode = language_mode_auto;
212 flang = get_frame_language ();
213 if (flang != language_unknown)
214 set_language (flang);
215 expected_language = current_language;
216 return;
217 }
218 else
219 {
220 /* Enter manual mode. Set the specified language. */
221 language_mode = language_mode_manual;
222 current_language = languages[i];
63872f9d 223 set_type_range_case ();
c5aa993b
JM
224 set_lang_str ();
225 expected_language = current_language;
226 return;
227 }
228 }
c906108c 229 }
c906108c
SS
230
231 /* Reset the language (esp. the global string "language") to the
232 correct values. */
c5aa993b 233 err_lang = savestring (language, strlen (language));
b8c9b27d 234 make_cleanup (xfree, err_lang); /* Free it after error */
c5aa993b
JM
235 set_language (current_language->la_language);
236 error ("Unknown language `%s'.", err_lang);
c906108c
SS
237}
238
239/* Show command. Display a warning if the type setting does
240 not match the current language. */
241static void
fba45db2 242show_type_command (char *ignore, int from_tty)
c906108c 243{
c5aa993b
JM
244 if (type_check != current_language->la_type_check)
245 printf_unfiltered (
246 "Warning: the current type check setting does not match the language.\n");
c906108c
SS
247}
248
249/* Set command. Change the setting for type checking. */
250static void
fba45db2 251set_type_command (char *ignore, int from_tty)
c906108c 252{
c5aa993b
JM
253 if (STREQ (type, "on"))
254 {
c906108c
SS
255 type_check = type_check_on;
256 type_mode = type_mode_manual;
c5aa993b
JM
257 }
258 else if (STREQ (type, "warn"))
259 {
c906108c
SS
260 type_check = type_check_warn;
261 type_mode = type_mode_manual;
c5aa993b
JM
262 }
263 else if (STREQ (type, "off"))
264 {
c906108c
SS
265 type_check = type_check_off;
266 type_mode = type_mode_manual;
c5aa993b
JM
267 }
268 else if (STREQ (type, "auto"))
269 {
c906108c 270 type_mode = type_mode_auto;
63872f9d 271 set_type_range_case ();
c906108c 272 /* Avoid hitting the set_type_str call below. We
63872f9d 273 did it in set_type_range_case. */
c906108c 274 return;
c5aa993b 275 }
c4093a6a
JM
276 else
277 {
278 warning ("Unrecognized type check setting: \"%s\"", type);
279 }
c5aa993b
JM
280 set_type_str ();
281 show_type_command ((char *) NULL, from_tty);
c906108c
SS
282}
283
284/* Show command. Display a warning if the range setting does
285 not match the current language. */
286static void
fba45db2 287show_range_command (char *ignore, int from_tty)
c906108c
SS
288{
289
c5aa993b
JM
290 if (range_check != current_language->la_range_check)
291 printf_unfiltered (
292 "Warning: the current range check setting does not match the language.\n");
c906108c
SS
293}
294
295/* Set command. Change the setting for range checking. */
296static void
fba45db2 297set_range_command (char *ignore, int from_tty)
c906108c 298{
c5aa993b
JM
299 if (STREQ (range, "on"))
300 {
c906108c
SS
301 range_check = range_check_on;
302 range_mode = range_mode_manual;
c5aa993b
JM
303 }
304 else if (STREQ (range, "warn"))
305 {
c906108c
SS
306 range_check = range_check_warn;
307 range_mode = range_mode_manual;
c5aa993b
JM
308 }
309 else if (STREQ (range, "off"))
310 {
c906108c
SS
311 range_check = range_check_off;
312 range_mode = range_mode_manual;
c5aa993b
JM
313 }
314 else if (STREQ (range, "auto"))
315 {
c906108c 316 range_mode = range_mode_auto;
63872f9d 317 set_type_range_case ();
c906108c 318 /* Avoid hitting the set_range_str call below. We
63872f9d 319 did it in set_type_range_case. */
c906108c 320 return;
c5aa993b 321 }
c4093a6a
JM
322 else
323 {
324 warning ("Unrecognized range check setting: \"%s\"", range);
325 }
c5aa993b
JM
326 set_range_str ();
327 show_range_command ((char *) 0, from_tty);
c906108c
SS
328}
329
63872f9d
JG
330/* Show command. Display a warning if the case sensitivity setting does
331 not match the current language. */
332static void
ad525611 333show_case_command (char *ignore, int from_tty)
63872f9d
JG
334{
335 if (case_sensitivity != current_language->la_case_sensitivity)
336 printf_unfiltered(
337"Warning: the current case sensitivity setting does not match the language.\n");
338}
339
340/* Set command. Change the setting for case sensitivity. */
341static void
ad525611 342set_case_command (char *ignore, int from_tty)
63872f9d
JG
343{
344 if (STREQ (case_sensitive, "on"))
345 {
346 case_sensitivity = case_sensitive_on;
347 case_mode = case_mode_manual;
348 }
349 else if (STREQ (case_sensitive, "off"))
350 {
351 case_sensitivity = case_sensitive_off;
352 case_mode = case_mode_manual;
353 }
354 else if (STREQ (case_sensitive, "auto"))
355 {
356 case_mode = case_mode_auto;
357 set_type_range_case ();
358 /* Avoid hitting the set_case_str call below. We
359 did it in set_type_range_case. */
360 return;
361 }
362 else
363 {
364 warning ("Unrecognized case-sensitive setting: \"%s\"", case_sensitive);
365 }
366 set_case_str();
367 show_case_command ((char *) NULL, from_tty);
368}
369
370/* Set the status of range and type checking and case sensitivity based on
c906108c
SS
371 the current modes and the current language.
372 If SHOW is non-zero, then print out the current language,
373 type and range checking status. */
374static void
63872f9d 375set_type_range_case (void)
c906108c
SS
376{
377
378 if (range_mode == range_mode_auto)
379 range_check = current_language->la_range_check;
380
381 if (type_mode == type_mode_auto)
382 type_check = current_language->la_type_check;
383
63872f9d
JG
384 if (case_mode == case_mode_auto)
385 case_sensitivity = current_language->la_case_sensitivity;
386
c5aa993b
JM
387 set_type_str ();
388 set_range_str ();
63872f9d 389 set_case_str ();
c906108c
SS
390}
391
392/* Set current language to (enum language) LANG. Returns previous language. */
393
394enum language
fba45db2 395set_language (enum language lang)
c906108c
SS
396{
397 int i;
398 enum language prev_language;
399
400 prev_language = current_language->la_language;
401
c5aa993b
JM
402 for (i = 0; i < languages_size; i++)
403 {
404 if (languages[i]->la_language == lang)
405 {
406 current_language = languages[i];
63872f9d 407 set_type_range_case ();
c5aa993b
JM
408 set_lang_str ();
409 break;
410 }
c906108c 411 }
c906108c
SS
412
413 return prev_language;
414}
415\f
416/* This page contains functions that update the global vars
417 language, type and range. */
418static void
fba45db2 419set_lang_str (void)
c906108c 420{
c5aa993b 421 char *prefix = "";
c906108c 422
ccdaf797 423 if (language)
b8c9b27d 424 xfree (language);
c5aa993b
JM
425 if (language_mode == language_mode_auto)
426 prefix = "auto; currently ";
c906108c 427
c5aa993b 428 language = concat (prefix, current_language->la_name, NULL);
c906108c
SS
429}
430
431static void
fba45db2 432set_type_str (void)
c906108c 433{
c4093a6a 434 char *tmp = NULL, *prefix = "";
c906108c 435
ccdaf797 436 if (type)
b8c9b27d 437 xfree (type);
c5aa993b
JM
438 if (type_mode == type_mode_auto)
439 prefix = "auto; currently ";
c906108c 440
c5aa993b
JM
441 switch (type_check)
442 {
443 case type_check_on:
c906108c
SS
444 tmp = "on";
445 break;
c5aa993b 446 case type_check_off:
c906108c
SS
447 tmp = "off";
448 break;
c5aa993b 449 case type_check_warn:
c906108c
SS
450 tmp = "warn";
451 break;
c5aa993b 452 default:
c906108c 453 error ("Unrecognized type check setting.");
c5aa993b 454 }
c906108c 455
c5aa993b 456 type = concat (prefix, tmp, NULL);
c906108c
SS
457}
458
459static void
fba45db2 460set_range_str (void)
c906108c 461{
c5aa993b 462 char *tmp, *pref = "";
c906108c 463
c5aa993b
JM
464 if (range_mode == range_mode_auto)
465 pref = "auto; currently ";
c906108c 466
c5aa993b
JM
467 switch (range_check)
468 {
469 case range_check_on:
c906108c
SS
470 tmp = "on";
471 break;
c5aa993b 472 case range_check_off:
c906108c
SS
473 tmp = "off";
474 break;
c5aa993b 475 case range_check_warn:
c906108c
SS
476 tmp = "warn";
477 break;
c5aa993b 478 default:
c906108c 479 error ("Unrecognized range check setting.");
c5aa993b 480 }
c906108c 481
ccdaf797 482 if (range)
b8c9b27d 483 xfree (range);
c5aa993b 484 range = concat (pref, tmp, NULL);
c906108c
SS
485}
486
63872f9d
JG
487static void
488set_case_str()
489{
490 char *tmp = NULL, *prefix = "";
491
492 if (case_mode==case_mode_auto)
493 prefix = "auto; currently ";
494
495 switch (case_sensitivity)
496 {
497 case case_sensitive_on:
498 tmp = "on";
499 break;
500 case case_sensitive_off:
501 tmp = "off";
502 break;
503 default:
504 error ("Unrecognized case-sensitive setting.");
505 }
506
b8c9b27d 507 xfree (case_sensitive);
63872f9d
JG
508 case_sensitive = concat (prefix, tmp, NULL);
509}
c906108c
SS
510
511/* Print out the current language settings: language, range and
512 type checking. If QUIETLY, print only what has changed. */
513
514void
fba45db2 515language_info (int quietly)
c906108c
SS
516{
517 if (quietly && expected_language == current_language)
518 return;
519
520 expected_language = current_language;
c5aa993b
JM
521 printf_unfiltered ("Current language: %s\n", language);
522 show_language_command ((char *) 0, 1);
c906108c
SS
523
524 if (!quietly)
525 {
c5aa993b
JM
526 printf_unfiltered ("Type checking: %s\n", type);
527 show_type_command ((char *) 0, 1);
528 printf_unfiltered ("Range checking: %s\n", range);
529 show_range_command ((char *) 0, 1);
63872f9d
JG
530 printf_unfiltered ("Case sensitivity: %s\n", case_sensitive);
531 show_case_command ((char *) 0, 1);
c906108c
SS
532 }
533}
534\f
535/* Return the result of a binary operation. */
536
c5aa993b 537#if 0 /* Currently unused */
c906108c
SS
538
539struct type *
fba45db2 540binop_result_type (value_ptr v1, value_ptr v2)
c906108c 541{
c5aa993b
JM
542 int size, uns;
543 struct type *t1 = check_typedef (VALUE_TYPE (v1));
544 struct type *t2 = check_typedef (VALUE_TYPE (v2));
545
546 int l1 = TYPE_LENGTH (t1);
547 int l2 = TYPE_LENGTH (t2);
548
549 switch (current_language->la_language)
550 {
551 case language_c:
552 case language_cplus:
553 if (TYPE_CODE (t1) == TYPE_CODE_FLT)
554 return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
555 VALUE_TYPE (v2) : VALUE_TYPE (v1);
556 else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
557 return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
558 VALUE_TYPE (v1) : VALUE_TYPE (v2);
559 else if (TYPE_UNSIGNED (t1) && l1 > l2)
560 return VALUE_TYPE (v1);
561 else if (TYPE_UNSIGNED (t2) && l2 > l1)
562 return VALUE_TYPE (v2);
563 else /* Both are signed. Result is the longer type */
564 return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
c906108c 565 break;
c5aa993b 566 case language_m2:
c906108c 567 /* If we are doing type-checking, l1 should equal l2, so this is
c5aa993b
JM
568 not needed. */
569 return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
c906108c 570 break;
c5aa993b
JM
571 case language_chill:
572 error ("Missing Chill support in function binop_result_check."); /*FIXME */
573 }
574 abort ();
575 return (struct type *) 0; /* For lint */
c906108c
SS
576}
577
c5aa993b 578#endif /* 0 */
c906108c 579\f
c5aa993b 580
c906108c
SS
581/* This page contains functions that return format strings for
582 printf for printing out numbers in different formats */
583
584/* Returns the appropriate printf format for hexadecimal
585 numbers. */
586char *
fba45db2 587local_hex_format_custom (char *pre)
c906108c 588{
c5aa993b
JM
589 static char form[50];
590
591 strcpy (form, local_hex_format_prefix ());
592 strcat (form, "%");
593 strcat (form, pre);
594 strcat (form, local_hex_format_specifier ());
595 strcat (form, local_hex_format_suffix ());
596 return form;
c906108c
SS
597}
598
7acb79c8
AC
599#if 0
600/* FIXME: cagney/2000-03-04: This function does not appear to be used.
601 It can be deleted once 5.0 has been released. */
602/* FIXME: cagney/2000-03-04: This code assumes that the compiler
603 supports ``long long''. */
c4093a6a
JM
604/* Converts a number to hexadecimal (without leading "0x") and stores it in a
605 static string. Returns a pointer to this string. */
606
607char *
fba45db2 608longest_raw_hex_string (LONGEST num)
c4093a6a
JM
609{
610 static char res_longest_raw_hex_string[50];
611 long long ll = num; /* MERGEBUG ?? see below */
612 res_longest_raw_hex_string[0] = 0;
613 /* MERGEBUG ?? As a quick fix I am replacing this with sprintf
614 strcat_address_numeric (num, 0, res_longest_raw_hex_string, 50);
615 */
616
617 sprintf (res_longest_raw_hex_string, "%llx", ll);
618 return res_longest_raw_hex_string;
619}
7acb79c8 620#endif
c4093a6a 621
c906108c
SS
622/* Converts a number to hexadecimal and stores it in a static
623 string. Returns a pointer to this string. */
624char *
fba45db2 625local_hex_string (unsigned long num)
c906108c 626{
c5aa993b 627 static char res[50];
c906108c 628
c5aa993b
JM
629 sprintf (res, local_hex_format (), num);
630 return res;
c906108c
SS
631}
632
c4093a6a
JM
633/* Converts a LONGEST number to hexadecimal and stores it in a static
634 string. Returns a pointer to this string. */
635char *
fba45db2 636longest_local_hex_string (LONGEST num)
c4093a6a
JM
637{
638 return longest_local_hex_string_custom (num, "l");
639}
640
c906108c
SS
641/* Converts a number to custom hexadecimal and stores it in a static
642 string. Returns a pointer to this string. */
643char *
fba45db2 644local_hex_string_custom (unsigned long num, char *pre)
c906108c 645{
c5aa993b 646 static char res[50];
c906108c 647
c5aa993b
JM
648 sprintf (res, local_hex_format_custom (pre), num);
649 return res;
c906108c
SS
650}
651
c4093a6a
JM
652/* Converts a LONGEST number to custom hexadecimal and stores it in a static
653 string. Returns a pointer to this string. Note that the width parameter
654 should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
655
656char *
fba45db2 657longest_local_hex_string_custom (LONGEST num, char *width)
c4093a6a
JM
658{
659#define RESULT_BUF_LEN 50
660 static char res2[RESULT_BUF_LEN];
661 char format[RESULT_BUF_LEN];
662#if !defined (PRINTF_HAS_LONG_LONG)
663 int field_width;
664 int num_len;
665 int num_pad_chars;
666 char *pad_char; /* string with one character */
667 int pad_on_left;
668 char *parse_ptr;
669 char temp_nbr_buf[RESULT_BUF_LEN];
670#endif
671
672#ifndef CC_HAS_LONG_LONG
673 /* If there is no long long, then LONGEST should be just long and we
674 can use local_hex_string_custom
675 */
676 return local_hex_string_custom ((unsigned long) num, width);
392746e5 677#elif defined (PRINTF_HAS_LONG_LONG)
c4093a6a
JM
678 /* Just use printf. */
679 strcpy (format, local_hex_format_prefix ()); /* 0x */
680 strcat (format, "%");
681 strcat (format, width); /* e.g. "08l" */
682 strcat (format, "l"); /* need "ll" for long long */
683 strcat (format, local_hex_format_specifier ()); /* "x" */
684 strcat (format, local_hex_format_suffix ()); /* "" */
685 sprintf (res2, format, num);
686 return res2;
687#else /* !defined (PRINTF_HAS_LONG_LONG) */
688 /* Use strcat_address_numeric to print the number into a string, then
689 build the result string from local_hex_format_prefix, padding and
690 the hex representation as indicated by "width". */
691
692 temp_nbr_buf[0] = 0;
693 /* With use_local == 0, we don't get the leading "0x" prefix. */
694 /* MERGEBUG ?? As a quick fix I am replacing this call to
695 strcat_address_numeric with sprintf
696 strcat_address_numeric(num, 0, temp_nbr_buf, RESULT_BUF_LEN);
697 */
698
699 {
700 long long ll = num;
701 sprintf (temp_nbr_buf, "%llx", ll);
702 }
703 /* parse width */
704 parse_ptr = width;
705 pad_on_left = 1;
706 pad_char = " ";
707 if (*parse_ptr == '-')
708 {
709 parse_ptr++;
710 pad_on_left = 0;
711 }
712 if (*parse_ptr == '0')
713 {
714 parse_ptr++;
715 if (pad_on_left)
716 pad_char = "0"; /* If padding is on the right, it is blank */
717 }
718 field_width = atoi (parse_ptr);
719 num_len = strlen (temp_nbr_buf);
720 num_pad_chars = field_width - strlen (temp_nbr_buf); /* possibly negative */
721
722 if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
723 < RESULT_BUF_LEN) /* paranoia */
724 internal_error ("longest_local_hex_string_custom: insufficient space to store result");
725
726 strcpy (res2, local_hex_format_prefix ());
727 if (pad_on_left)
728 {
729 while (num_pad_chars > 0)
730 {
731 strcat (res2, pad_char);
732 num_pad_chars--;
733 }
734 }
735 strcat (res2, temp_nbr_buf);
736 if (!pad_on_left)
737 {
738 while (num_pad_chars > 0)
739 {
740 strcat (res2, pad_char);
741 num_pad_chars--;
742 }
743 }
744 return res2;
745#endif
746
747} /* longest_local_hex_string_custom */
748
c906108c
SS
749/* Returns the appropriate printf format for octal
750 numbers. */
751char *
fba45db2 752local_octal_format_custom (char *pre)
c906108c 753{
c5aa993b
JM
754 static char form[50];
755
756 strcpy (form, local_octal_format_prefix ());
757 strcat (form, "%");
758 strcat (form, pre);
759 strcat (form, local_octal_format_specifier ());
760 strcat (form, local_octal_format_suffix ());
761 return form;
c906108c
SS
762}
763
764/* Returns the appropriate printf format for decimal numbers. */
765char *
fba45db2 766local_decimal_format_custom (char *pre)
c906108c 767{
c5aa993b
JM
768 static char form[50];
769
770 strcpy (form, local_decimal_format_prefix ());
771 strcat (form, "%");
772 strcat (form, pre);
773 strcat (form, local_decimal_format_specifier ());
774 strcat (form, local_decimal_format_suffix ());
775 return form;
c906108c
SS
776}
777\f
778#if 0
779/* This page contains functions that are used in type/range checking.
780 They all return zero if the type/range check fails.
781
782 It is hoped that these will make extending GDB to parse different
783 languages a little easier. These are primarily used in eval.c when
784 evaluating expressions and making sure that their types are correct.
785 Instead of having a mess of conjucted/disjuncted expressions in an "if",
786 the ideas of type can be wrapped up in the following functions.
787
788 Note that some of them are not currently dependent upon which language
789 is currently being parsed. For example, floats are the same in
790 C and Modula-2 (ie. the only floating point type has TYPE_CODE of
791 TYPE_CODE_FLT), while booleans are different. */
792
793/* Returns non-zero if its argument is a simple type. This is the same for
794 both Modula-2 and for C. In the C case, TYPE_CODE_CHAR will never occur,
795 and thus will never cause the failure of the test. */
796int
fba45db2 797simple_type (struct type *type)
c906108c
SS
798{
799 CHECK_TYPEDEF (type);
c5aa993b
JM
800 switch (TYPE_CODE (type))
801 {
802 case TYPE_CODE_INT:
803 case TYPE_CODE_CHAR:
804 case TYPE_CODE_ENUM:
805 case TYPE_CODE_FLT:
806 case TYPE_CODE_RANGE:
807 case TYPE_CODE_BOOL:
808 return 1;
c906108c 809
c5aa993b
JM
810 default:
811 return 0;
812 }
c906108c
SS
813}
814
815/* Returns non-zero if its argument is of an ordered type.
816 An ordered type is one in which the elements can be tested for the
817 properties of "greater than", "less than", etc, or for which the
818 operations "increment" or "decrement" make sense. */
819int
fba45db2 820ordered_type (struct type *type)
c906108c
SS
821{
822 CHECK_TYPEDEF (type);
c5aa993b
JM
823 switch (TYPE_CODE (type))
824 {
825 case TYPE_CODE_INT:
826 case TYPE_CODE_CHAR:
827 case TYPE_CODE_ENUM:
828 case TYPE_CODE_FLT:
829 case TYPE_CODE_RANGE:
830 return 1;
c906108c 831
c5aa993b
JM
832 default:
833 return 0;
834 }
c906108c
SS
835}
836
837/* Returns non-zero if the two types are the same */
838int
fba45db2 839same_type (struct type *arg1, struct type *arg2)
c906108c
SS
840{
841 CHECK_TYPEDEF (type);
c5aa993b
JM
842 if (structured_type (arg1) ? !structured_type (arg2) : structured_type (arg2))
843 /* One is structured and one isn't */
844 return 0;
845 else if (structured_type (arg1) && structured_type (arg2))
846 return arg1 == arg2;
847 else if (numeric_type (arg1) && numeric_type (arg2))
848 return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
849 (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
850 ? 1 : 0;
851 else
852 return arg1 == arg2;
c906108c
SS
853}
854
855/* Returns non-zero if the type is integral */
856int
fba45db2 857integral_type (struct type *type)
c906108c
SS
858{
859 CHECK_TYPEDEF (type);
c5aa993b
JM
860 switch (current_language->la_language)
861 {
862 case language_c:
863 case language_cplus:
864 return (TYPE_CODE (type) != TYPE_CODE_INT) &&
865 (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
866 case language_m2:
750ba382 867 case language_pascal:
c5aa993b
JM
868 return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
869 case language_chill:
870 error ("Missing Chill support in function integral_type."); /*FIXME */
871 default:
c906108c 872 error ("Language not supported.");
c5aa993b 873 }
c906108c
SS
874}
875
876/* Returns non-zero if the value is numeric */
877int
fba45db2 878numeric_type (struct type *type)
c906108c
SS
879{
880 CHECK_TYPEDEF (type);
c5aa993b
JM
881 switch (TYPE_CODE (type))
882 {
883 case TYPE_CODE_INT:
884 case TYPE_CODE_FLT:
885 return 1;
c906108c 886
c5aa993b
JM
887 default:
888 return 0;
889 }
c906108c
SS
890}
891
892/* Returns non-zero if the value is a character type */
893int
fba45db2 894character_type (struct type *type)
c906108c
SS
895{
896 CHECK_TYPEDEF (type);
c5aa993b
JM
897 switch (current_language->la_language)
898 {
899 case language_chill:
900 case language_m2:
750ba382 901 case language_pascal:
c5aa993b
JM
902 return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
903
904 case language_c:
905 case language_cplus:
906 return (TYPE_CODE (type) == TYPE_CODE_INT) &&
907 TYPE_LENGTH (type) == sizeof (char)
908 ? 1 : 0;
909 default:
c906108c 910 return (0);
c5aa993b 911 }
c906108c
SS
912}
913
914/* Returns non-zero if the value is a string type */
915int
fba45db2 916string_type (struct type *type)
c906108c
SS
917{
918 CHECK_TYPEDEF (type);
c5aa993b
JM
919 switch (current_language->la_language)
920 {
921 case language_chill:
922 case language_m2:
750ba382 923 case language_pascal:
c5aa993b
JM
924 return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
925
926 case language_c:
927 case language_cplus:
c906108c
SS
928 /* C does not have distinct string type. */
929 return (0);
c5aa993b 930 default:
c906108c 931 return (0);
c5aa993b 932 }
c906108c
SS
933}
934
935/* Returns non-zero if the value is a boolean type */
936int
fba45db2 937boolean_type (struct type *type)
c906108c
SS
938{
939 CHECK_TYPEDEF (type);
940 if (TYPE_CODE (type) == TYPE_CODE_BOOL)
941 return 1;
c5aa993b 942 switch (current_language->la_language)
c906108c
SS
943 {
944 case language_c:
945 case language_cplus:
946 /* Might be more cleanly handled by having a TYPE_CODE_INT_NOT_BOOL
c5aa993b 947 for CHILL and such languages, or a TYPE_CODE_INT_OR_BOOL for C. */
c906108c
SS
948 if (TYPE_CODE (type) == TYPE_CODE_INT)
949 return 1;
c5aa993b 950 default:
c906108c 951 break;
c5aa993b 952 }
c906108c
SS
953 return 0;
954}
955
956/* Returns non-zero if the value is a floating-point type */
957int
fba45db2 958float_type (struct type *type)
c906108c
SS
959{
960 CHECK_TYPEDEF (type);
c5aa993b 961 return TYPE_CODE (type) == TYPE_CODE_FLT;
c906108c
SS
962}
963
964/* Returns non-zero if the value is a pointer type */
965int
fba45db2 966pointer_type (struct type *type)
c906108c 967{
c5aa993b
JM
968 return TYPE_CODE (type) == TYPE_CODE_PTR ||
969 TYPE_CODE (type) == TYPE_CODE_REF;
c906108c
SS
970}
971
972/* Returns non-zero if the value is a structured type */
973int
fba45db2 974structured_type (struct type *type)
c906108c
SS
975{
976 CHECK_TYPEDEF (type);
c5aa993b
JM
977 switch (current_language->la_language)
978 {
979 case language_c:
980 case language_cplus:
981 return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
982 (TYPE_CODE (type) == TYPE_CODE_UNION) ||
983 (TYPE_CODE (type) == TYPE_CODE_ARRAY);
750ba382
PM
984 case language_pascal:
985 return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
986 (TYPE_CODE(type) == TYPE_CODE_UNION) ||
987 (TYPE_CODE(type) == TYPE_CODE_SET) ||
988 (TYPE_CODE(type) == TYPE_CODE_ARRAY);
c5aa993b
JM
989 case language_m2:
990 return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
991 (TYPE_CODE (type) == TYPE_CODE_SET) ||
992 (TYPE_CODE (type) == TYPE_CODE_ARRAY);
993 case language_chill:
994 error ("Missing Chill support in function structured_type."); /*FIXME */
995 default:
c906108c 996 return (0);
c5aa993b 997 }
c906108c
SS
998}
999#endif
1000\f
1001struct type *
fba45db2 1002lang_bool_type (void)
c906108c
SS
1003{
1004 struct symbol *sym;
1005 struct type *type;
c5aa993b 1006 switch (current_language->la_language)
c906108c
SS
1007 {
1008 case language_chill:
1009 return builtin_type_chill_bool;
1010 case language_fortran:
1011 sym = lookup_symbol ("logical", NULL, VAR_NAMESPACE, NULL, NULL);
1012 if (sym)
1013 {
1014 type = SYMBOL_TYPE (sym);
1015 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
1016 return type;
1017 }
1018 return builtin_type_f_logical_s2;
1019 case language_cplus:
750ba382
PM
1020 case language_pascal:
1021 if (current_language->la_language==language_cplus)
1022 {sym = lookup_symbol ("bool", NULL, VAR_NAMESPACE, NULL, NULL);}
1023 else
1024 {sym = lookup_symbol ("boolean", NULL, VAR_NAMESPACE, NULL, NULL);}
c906108c
SS
1025 if (sym)
1026 {
1027 type = SYMBOL_TYPE (sym);
1028 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
1029 return type;
1030 }
1031 return builtin_type_bool;
8caabe69
AG
1032 case language_java:
1033 sym = lookup_symbol ("boolean", NULL, VAR_NAMESPACE, NULL, NULL);
1034 if (sym)
1035 {
1036 type = SYMBOL_TYPE (sym);
1037 if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
1038 return type;
1039 }
1040 return java_boolean_type;
c906108c
SS
1041 default:
1042 return builtin_type_int;
1043 }
1044}
1045\f
1046/* This page contains functions that return info about
1047 (struct value) values used in GDB. */
1048
1049/* Returns non-zero if the value VAL represents a true value. */
1050int
fba45db2 1051value_true (value_ptr val)
c906108c
SS
1052{
1053 /* It is possible that we should have some sort of error if a non-boolean
1054 value is used in this context. Possibly dependent on some kind of
1055 "boolean-checking" option like range checking. But it should probably
1056 not depend on the language except insofar as is necessary to identify
1057 a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
1058 should be an error, probably). */
1059 return !value_logical_not (val);
1060}
1061\f
1062/* Returns non-zero if the operator OP is defined on
1063 the values ARG1 and ARG2. */
1064
c5aa993b 1065#if 0 /* Currently unused */
c906108c
SS
1066
1067void
fba45db2 1068binop_type_check (value_ptr arg1, value_ptr arg2, int op)
c906108c 1069{
c5aa993b 1070 struct type *t1, *t2;
c906108c 1071
c5aa993b
JM
1072 /* If we're not checking types, always return success. */
1073 if (!STRICT_TYPE)
1074 return;
1075
1076 t1 = VALUE_TYPE (arg1);
1077 if (arg2 != NULL)
1078 t2 = VALUE_TYPE (arg2);
1079 else
1080 t2 = NULL;
c906108c 1081
c5aa993b
JM
1082 switch (op)
1083 {
1084 case BINOP_ADD:
1085 case BINOP_SUB:
1086 if ((numeric_type (t1) && pointer_type (t2)) ||
1087 (pointer_type (t1) && numeric_type (t2)))
1088 {
1089 warning ("combining pointer and integer.\n");
1090 break;
1091 }
1092 case BINOP_MUL:
1093 case BINOP_LSH:
1094 case BINOP_RSH:
1095 if (!numeric_type (t1) || !numeric_type (t2))
1096 type_op_error ("Arguments to %s must be numbers.", op);
1097 else if (!same_type (t1, t2))
1098 type_op_error ("Arguments to %s must be of the same type.", op);
c906108c
SS
1099 break;
1100
c5aa993b
JM
1101 case BINOP_LOGICAL_AND:
1102 case BINOP_LOGICAL_OR:
1103 if (!boolean_type (t1) || !boolean_type (t2))
1104 type_op_error ("Arguments to %s must be of boolean type.", op);
c906108c
SS
1105 break;
1106
c5aa993b
JM
1107 case BINOP_EQUAL:
1108 if ((pointer_type (t1) && !(pointer_type (t2) || integral_type (t2))) ||
1109 (pointer_type (t2) && !(pointer_type (t1) || integral_type (t1))))
1110 type_op_error ("A pointer can only be compared to an integer or pointer.", op);
1111 else if ((pointer_type (t1) && integral_type (t2)) ||
1112 (integral_type (t1) && pointer_type (t2)))
1113 {
1114 warning ("combining integer and pointer.\n");
1115 break;
1116 }
1117 else if (!simple_type (t1) || !simple_type (t2))
1118 type_op_error ("Arguments to %s must be of simple type.", op);
1119 else if (!same_type (t1, t2))
1120 type_op_error ("Arguments to %s must be of the same type.", op);
c906108c
SS
1121 break;
1122
c5aa993b
JM
1123 case BINOP_REM:
1124 case BINOP_MOD:
1125 if (!integral_type (t1) || !integral_type (t2))
1126 type_op_error ("Arguments to %s must be of integral type.", op);
c906108c
SS
1127 break;
1128
c5aa993b
JM
1129 case BINOP_LESS:
1130 case BINOP_GTR:
1131 case BINOP_LEQ:
1132 case BINOP_GEQ:
1133 if (!ordered_type (t1) || !ordered_type (t2))
1134 type_op_error ("Arguments to %s must be of ordered type.", op);
1135 else if (!same_type (t1, t2))
1136 type_op_error ("Arguments to %s must be of the same type.", op);
c906108c
SS
1137 break;
1138
c5aa993b
JM
1139 case BINOP_ASSIGN:
1140 if (pointer_type (t1) && !integral_type (t2))
1141 type_op_error ("A pointer can only be assigned an integer.", op);
1142 else if (pointer_type (t1) && integral_type (t2))
1143 {
1144 warning ("combining integer and pointer.");
1145 break;
1146 }
1147 else if (!simple_type (t1) || !simple_type (t2))
1148 type_op_error ("Arguments to %s must be of simple type.", op);
1149 else if (!same_type (t1, t2))
1150 type_op_error ("Arguments to %s must be of the same type.", op);
c906108c
SS
1151 break;
1152
1153 case BINOP_CONCAT:
1154 /* FIXME: Needs to handle bitstrings as well. */
c5aa993b
JM
1155 if (!(string_type (t1) || character_type (t1) || integral_type (t1))
1156 || !(string_type (t2) || character_type (t2) || integral_type (t2)))
1157 type_op_error ("Arguments to %s must be strings or characters.", op);
c906108c
SS
1158 break;
1159
c5aa993b 1160 /* Unary checks -- arg2 is null */
c906108c 1161
c5aa993b
JM
1162 case UNOP_LOGICAL_NOT:
1163 if (!boolean_type (t1))
1164 type_op_error ("Argument to %s must be of boolean type.", op);
c906108c
SS
1165 break;
1166
c5aa993b
JM
1167 case UNOP_PLUS:
1168 case UNOP_NEG:
1169 if (!numeric_type (t1))
1170 type_op_error ("Argument to %s must be of numeric type.", op);
c906108c
SS
1171 break;
1172
c5aa993b
JM
1173 case UNOP_IND:
1174 if (integral_type (t1))
1175 {
1176 warning ("combining pointer and integer.\n");
1177 break;
1178 }
1179 else if (!pointer_type (t1))
1180 type_op_error ("Argument to %s must be a pointer.", op);
c906108c
SS
1181 break;
1182
c5aa993b
JM
1183 case UNOP_PREINCREMENT:
1184 case UNOP_POSTINCREMENT:
1185 case UNOP_PREDECREMENT:
1186 case UNOP_POSTDECREMENT:
1187 if (!ordered_type (t1))
1188 type_op_error ("Argument to %s must be of an ordered type.", op);
c906108c
SS
1189 break;
1190
c5aa993b 1191 default:
c906108c 1192 /* Ok. The following operators have different meanings in
c5aa993b
JM
1193 different languages. */
1194 switch (current_language->la_language)
1195 {
c906108c 1196#ifdef _LANG_c
c5aa993b
JM
1197 case language_c:
1198 case language_cplus:
1199 switch (op)
1200 {
1201 case BINOP_DIV:
1202 if (!numeric_type (t1) || !numeric_type (t2))
1203 type_op_error ("Arguments to %s must be numbers.", op);
1204 break;
1205 }
1206 break;
c906108c
SS
1207#endif
1208
1209#ifdef _LANG_m2
c5aa993b
JM
1210 case language_m2:
1211 switch (op)
1212 {
1213 case BINOP_DIV:
1214 if (!float_type (t1) || !float_type (t2))
1215 type_op_error ("Arguments to %s must be floating point numbers.", op);
1216 break;
1217 case BINOP_INTDIV:
1218 if (!integral_type (t1) || !integral_type (t2))
1219 type_op_error ("Arguments to %s must be of integral type.", op);
1220 break;
1221 }
c906108c
SS
1222#endif
1223
750ba382
PM
1224#ifdef _LANG_pascal
1225 case language_pascal:
1226 switch(op)
1227 {
1228 case BINOP_DIV:
1229 if (!float_type(t1) && !float_type(t2))
1230 type_op_error ("Arguments to %s must be floating point numbers.",op);
1231 break;
1232 case BINOP_INTDIV:
1233 if (!integral_type(t1) || !integral_type(t2))
1234 type_op_error ("Arguments to %s must be of integral type.",op);
1235 break;
1236 }
1237#endif
1238
c906108c 1239#ifdef _LANG_chill
c5aa993b
JM
1240 case language_chill:
1241 error ("Missing Chill support in function binop_type_check."); /*FIXME */
c906108c
SS
1242#endif
1243
c5aa993b
JM
1244 }
1245 }
c906108c
SS
1246}
1247
c5aa993b 1248#endif /* 0 */
c906108c 1249\f
c5aa993b 1250
c906108c
SS
1251/* This page contains functions for the printing out of
1252 error messages that occur during type- and range-
1253 checking. */
1254
1255/* Prints the format string FMT with the operator as a string
1256 corresponding to the opcode OP. If FATAL is non-zero, then
1257 this is an error and error () is called. Otherwise, it is
1258 a warning and printf() is called. */
1259void
fba45db2 1260op_error (char *fmt, enum exp_opcode op, int fatal)
c906108c 1261{
c5aa993b
JM
1262 if (fatal)
1263 error (fmt, op_string (op));
1264 else
1265 {
1266 warning (fmt, op_string (op));
1267 }
c906108c
SS
1268}
1269
1270/* These are called when a language fails a type- or range-check.
1271 The first argument should be a printf()-style format string, and
1272 the rest of the arguments should be its arguments. If
1273 [type|range]_check is [type|range]_check_on, then return_to_top_level()
1274 is called in the style of error (). Otherwise, the message is prefixed
1275 by the value of warning_pre_print and we do not return to the top level. */
1276
1277void
c5aa993b 1278type_error (char *string,...)
c906108c 1279{
c5aa993b 1280 va_list args;
c5aa993b 1281 va_start (args, string);
c906108c 1282
c5aa993b
JM
1283 if (type_check == type_check_warn)
1284 fprintf_filtered (gdb_stderr, warning_pre_print);
1285 else
1286 error_begin ();
c906108c 1287
c5aa993b
JM
1288 vfprintf_filtered (gdb_stderr, string, args);
1289 fprintf_filtered (gdb_stderr, "\n");
1290 va_end (args);
1291 if (type_check == type_check_on)
1292 return_to_top_level (RETURN_ERROR);
c906108c
SS
1293}
1294
1295void
c5aa993b 1296range_error (char *string,...)
c906108c 1297{
c5aa993b 1298 va_list args;
c5aa993b 1299 va_start (args, string);
c906108c 1300
c5aa993b
JM
1301 if (range_check == range_check_warn)
1302 fprintf_filtered (gdb_stderr, warning_pre_print);
1303 else
1304 error_begin ();
c906108c 1305
c5aa993b
JM
1306 vfprintf_filtered (gdb_stderr, string, args);
1307 fprintf_filtered (gdb_stderr, "\n");
1308 va_end (args);
1309 if (range_check == range_check_on)
1310 return_to_top_level (RETURN_ERROR);
c906108c 1311}
c906108c 1312\f
c5aa993b 1313
c906108c
SS
1314/* This page contains miscellaneous functions */
1315
1316/* Return the language enum for a given language string. */
1317
1318enum language
fba45db2 1319language_enum (char *str)
c906108c
SS
1320{
1321 int i;
1322
c5aa993b 1323 for (i = 0; i < languages_size; i++)
c906108c
SS
1324 if (STREQ (languages[i]->la_name, str))
1325 return languages[i]->la_language;
1326
1327 return language_unknown;
1328}
1329
1330/* Return the language struct for a given language enum. */
1331
1332const struct language_defn *
fba45db2 1333language_def (enum language lang)
c906108c
SS
1334{
1335 int i;
1336
c5aa993b
JM
1337 for (i = 0; i < languages_size; i++)
1338 {
1339 if (languages[i]->la_language == lang)
1340 {
1341 return languages[i];
1342 }
c906108c 1343 }
c906108c
SS
1344 return NULL;
1345}
1346
1347/* Return the language as a string */
1348char *
fba45db2 1349language_str (enum language lang)
c906108c
SS
1350{
1351 int i;
1352
c5aa993b
JM
1353 for (i = 0; i < languages_size; i++)
1354 {
1355 if (languages[i]->la_language == lang)
1356 {
1357 return languages[i]->la_name;
1358 }
c906108c 1359 }
c906108c
SS
1360 return "Unknown";
1361}
1362
1363static void
fba45db2 1364set_check (char *ignore, int from_tty)
c906108c 1365{
c5aa993b
JM
1366 printf_unfiltered (
1367 "\"set check\" must be followed by the name of a check subcommand.\n");
1368 help_list (setchecklist, "set check ", -1, gdb_stdout);
c906108c
SS
1369}
1370
1371static void
fba45db2 1372show_check (char *ignore, int from_tty)
c906108c 1373{
c5aa993b 1374 cmd_show_list (showchecklist, from_tty, "");
c906108c
SS
1375}
1376\f
1377/* Add a language to the set of known languages. */
1378
1379void
fba45db2 1380add_language (const struct language_defn *lang)
c906108c
SS
1381{
1382 if (lang->la_magic != LANG_MAGIC)
1383 {
c5aa993b
JM
1384 fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
1385 lang->la_name);
1386 abort ();
c906108c
SS
1387 }
1388
1389 if (!languages)
1390 {
1391 languages_allocsize = DEFAULT_ALLOCSIZE;
1392 languages = (const struct language_defn **) xmalloc
1393 (languages_allocsize * sizeof (*languages));
1394 }
1395 if (languages_size >= languages_allocsize)
1396 {
1397 languages_allocsize *= 2;
1398 languages = (const struct language_defn **) xrealloc ((char *) languages,
c5aa993b 1399 languages_allocsize * sizeof (*languages));
c906108c
SS
1400 }
1401 languages[languages_size++] = lang;
1402}
1403
1404/* Define the language that is no language. */
1405
1406static int
fba45db2 1407unk_lang_parser (void)
c906108c
SS
1408{
1409 return 1;
1410}
1411
1412static void
fba45db2 1413unk_lang_error (char *msg)
c906108c
SS
1414{
1415 error ("Attempted to parse an expression with unknown language");
1416}
1417
1418static void
fba45db2 1419unk_lang_emit_char (register int c, struct ui_file *stream, int quoter)
c906108c
SS
1420{
1421 error ("internal error - unimplemented function unk_lang_emit_char called.");
1422}
1423
1424static void
fba45db2 1425unk_lang_printchar (register int c, struct ui_file *stream)
c906108c
SS
1426{
1427 error ("internal error - unimplemented function unk_lang_printchar called.");
1428}
1429
1430static void
fba45db2
KB
1431unk_lang_printstr (struct ui_file *stream, char *string, unsigned int length,
1432 int width, int force_ellipses)
c906108c
SS
1433{
1434 error ("internal error - unimplemented function unk_lang_printstr called.");
1435}
1436
1437static struct type *
fba45db2 1438unk_lang_create_fundamental_type (struct objfile *objfile, int typeid)
c906108c
SS
1439{
1440 error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
1441}
1442
1443static void
fba45db2
KB
1444unk_lang_print_type (struct type *type, char *varstring, struct ui_file *stream,
1445 int show, int level)
c906108c
SS
1446{
1447 error ("internal error - unimplemented function unk_lang_print_type called.");
1448}
1449
1450static int
fba45db2
KB
1451unk_lang_val_print (struct type *type, char *valaddr, int embedded_offset,
1452 CORE_ADDR address, struct ui_file *stream, int format,
1453 int deref_ref, int recurse, enum val_prettyprint pretty)
c906108c
SS
1454{
1455 error ("internal error - unimplemented function unk_lang_val_print called.");
1456}
1457
1458static int
fba45db2
KB
1459unk_lang_value_print (value_ptr val, struct ui_file *stream, int format,
1460 enum val_prettyprint pretty)
c906108c
SS
1461{
1462 error ("internal error - unimplemented function unk_lang_value_print called.");
1463}
1464
c5aa993b
JM
1465static struct type **CONST_PTR (unknown_builtin_types[]) =
1466{
1467 0
1468};
1469static const struct op_print unk_op_print_tab[] =
1470{
1471 {NULL, OP_NULL, PREC_NULL, 0}
c906108c
SS
1472};
1473
c5aa993b
JM
1474const struct language_defn unknown_language_defn =
1475{
c906108c
SS
1476 "unknown",
1477 language_unknown,
1478 &unknown_builtin_types[0],
1479 range_check_off,
1480 type_check_off,
63872f9d 1481 case_sensitive_on,
c906108c
SS
1482 unk_lang_parser,
1483 unk_lang_error,
1484 evaluate_subexp_standard,
1485 unk_lang_printchar, /* Print character constant */
1486 unk_lang_printstr,
1487 unk_lang_emit_char,
1488 unk_lang_create_fundamental_type,
1489 unk_lang_print_type, /* Print a type using appropriate syntax */
1490 unk_lang_val_print, /* Print a value using appropriate syntax */
1491 unk_lang_value_print, /* Print a top-level value */
c5aa993b
JM
1492 {"", "", "", ""}, /* Binary format info */
1493 {"0%lo", "0", "o", ""}, /* Octal format info */
1494 {"%ld", "", "d", ""}, /* Decimal format info */
1495 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1496 unk_op_print_tab, /* expression operators for printing */
1497 1, /* c-style arrays */
1498 0, /* String lower bound */
c5aa993b 1499 &builtin_type_char, /* Type of string elements */
c906108c
SS
1500 LANG_MAGIC
1501};
1502
1503/* These two structs define fake entries for the "local" and "auto" options. */
c5aa993b
JM
1504const struct language_defn auto_language_defn =
1505{
c906108c
SS
1506 "auto",
1507 language_auto,
1508 &unknown_builtin_types[0],
1509 range_check_off,
1510 type_check_off,
63872f9d 1511 case_sensitive_on,
c906108c
SS
1512 unk_lang_parser,
1513 unk_lang_error,
1514 evaluate_subexp_standard,
1515 unk_lang_printchar, /* Print character constant */
1516 unk_lang_printstr,
1517 unk_lang_emit_char,
1518 unk_lang_create_fundamental_type,
1519 unk_lang_print_type, /* Print a type using appropriate syntax */
1520 unk_lang_val_print, /* Print a value using appropriate syntax */
1521 unk_lang_value_print, /* Print a top-level value */
c5aa993b
JM
1522 {"", "", "", ""}, /* Binary format info */
1523 {"0%lo", "0", "o", ""}, /* Octal format info */
1524 {"%ld", "", "d", ""}, /* Decimal format info */
1525 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1526 unk_op_print_tab, /* expression operators for printing */
1527 1, /* c-style arrays */
1528 0, /* String lower bound */
c5aa993b 1529 &builtin_type_char, /* Type of string elements */
c906108c
SS
1530 LANG_MAGIC
1531};
1532
c5aa993b
JM
1533const struct language_defn local_language_defn =
1534{
c906108c
SS
1535 "local",
1536 language_auto,
1537 &unknown_builtin_types[0],
1538 range_check_off,
1539 type_check_off,
63872f9d 1540 case_sensitive_on,
c906108c
SS
1541 unk_lang_parser,
1542 unk_lang_error,
1543 evaluate_subexp_standard,
1544 unk_lang_printchar, /* Print character constant */
1545 unk_lang_printstr,
1546 unk_lang_emit_char,
1547 unk_lang_create_fundamental_type,
1548 unk_lang_print_type, /* Print a type using appropriate syntax */
1549 unk_lang_val_print, /* Print a value using appropriate syntax */
1550 unk_lang_value_print, /* Print a top-level value */
c5aa993b
JM
1551 {"", "", "", ""}, /* Binary format info */
1552 {"0%lo", "0", "o", ""}, /* Octal format info */
1553 {"%ld", "", "d", ""}, /* Decimal format info */
1554 {"0x%lx", "0x", "x", ""}, /* Hex format info */
c906108c
SS
1555 unk_op_print_tab, /* expression operators for printing */
1556 1, /* c-style arrays */
1557 0, /* String lower bound */
c5aa993b 1558 &builtin_type_char, /* Type of string elements */
c906108c
SS
1559 LANG_MAGIC
1560};
1561\f
1562/* Initialize the language routines */
1563
1564void
fba45db2 1565_initialize_language (void)
c906108c 1566{
c5aa993b
JM
1567 struct cmd_list_element *set, *show;
1568
1569 /* GDB commands for language specific stuff */
1570
1571 set = add_set_cmd ("language", class_support, var_string_noescape,
1572 (char *) &language,
1573 "Set the current source language.",
1574 &setlist);
1575 show = add_show_from_set (set, &showlist);
1576 set->function.cfunc = set_language_command;
1577 show->function.cfunc = show_language_command;
1578
1579 add_prefix_cmd ("check", no_class, set_check,
1580 "Set the status of the type/range checker",
1581 &setchecklist, "set check ", 0, &setlist);
1582 add_alias_cmd ("c", "check", no_class, 1, &setlist);
1583 add_alias_cmd ("ch", "check", no_class, 1, &setlist);
1584
1585 add_prefix_cmd ("check", no_class, show_check,
1586 "Show the status of the type/range checker",
1587 &showchecklist, "show check ", 0, &showlist);
1588 add_alias_cmd ("c", "check", no_class, 1, &showlist);
1589 add_alias_cmd ("ch", "check", no_class, 1, &showlist);
1590
1591 set = add_set_cmd ("type", class_support, var_string_noescape,
1592 (char *) &type,
1593 "Set type checking. (on/warn/off/auto)",
1594 &setchecklist);
1595 show = add_show_from_set (set, &showchecklist);
1596 set->function.cfunc = set_type_command;
1597 show->function.cfunc = show_type_command;
1598
1599 set = add_set_cmd ("range", class_support, var_string_noescape,
1600 (char *) &range,
1601 "Set range checking. (on/warn/off/auto)",
1602 &setchecklist);
1603 show = add_show_from_set (set, &showchecklist);
1604 set->function.cfunc = set_range_command;
1605 show->function.cfunc = show_range_command;
1606
63872f9d
JG
1607 set = add_set_cmd ("case-sensitive", class_support, var_string_noescape,
1608 (char *) &case_sensitive,
1609 "Set case sensitivity in name search. (on/off/auto)\n\
1610For Fortran the default is off; for other languages the default is on.",
1611 &setlist);
1612 show = add_show_from_set (set, &showlist);
1613 set->function.cfunc = set_case_command;
1614 show->function.cfunc = show_case_command;
1615
c5aa993b
JM
1616 add_language (&unknown_language_defn);
1617 add_language (&local_language_defn);
1618 add_language (&auto_language_defn);
1619
1620 language = savestring ("auto", strlen ("auto"));
ed9a39eb 1621 type = savestring ("auto", strlen ("auto"));
ed9a39eb 1622 range = savestring ("auto", strlen ("auto"));
63872f9d
JG
1623 case_sensitive = savestring ("auto",strlen ("auto"));
1624
1625 /* Have the above take effect */
1626 set_language (language_auto);
c906108c 1627}