OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.3/] [gdb/] [language.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.