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