xref: /openbsd-src/gnu/usr.bin/binutils/gdb/language.h (revision 63addd46c1e40ca0f49488ddcdc4ab598023b0c1)
1e93f7393Sniklas /* Source-language-related definitions for GDB.
2b725ae77Skettenis 
3b725ae77Skettenis    Copyright 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2000, 2003,
4b725ae77Skettenis    2004 Free Software Foundation, Inc.
5b725ae77Skettenis 
6e93f7393Sniklas    Contributed by the Department of Computer Science at the State University
7e93f7393Sniklas    of New York at Buffalo.
8e93f7393Sniklas 
9e93f7393Sniklas    This file is part of GDB.
10e93f7393Sniklas 
11e93f7393Sniklas    This program is free software; you can redistribute it and/or modify
12e93f7393Sniklas    it under the terms of the GNU General Public License as published by
13e93f7393Sniklas    the Free Software Foundation; either version 2 of the License, or
14e93f7393Sniklas    (at your option) any later version.
15e93f7393Sniklas 
16e93f7393Sniklas    This program is distributed in the hope that it will be useful,
17e93f7393Sniklas    but WITHOUT ANY WARRANTY; without even the implied warranty of
18e93f7393Sniklas    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19e93f7393Sniklas    GNU General Public License for more details.
20e93f7393Sniklas 
21e93f7393Sniklas    You should have received a copy of the GNU General Public License
22e93f7393Sniklas    along with this program; if not, write to the Free Software
23b725ae77Skettenis    Foundation, Inc., 59 Temple Place - Suite 330,
24b725ae77Skettenis    Boston, MA 02111-1307, USA.  */
25e93f7393Sniklas 
26e93f7393Sniklas #if !defined (LANGUAGE_H)
27e93f7393Sniklas #define LANGUAGE_H 1
28e93f7393Sniklas 
29b725ae77Skettenis /* Forward decls for prototypes */
30e93f7393Sniklas struct value;
31e93f7393Sniklas struct objfile;
32e93f7393Sniklas struct expression;
33b725ae77Skettenis struct ui_file;
34b725ae77Skettenis 
35e93f7393Sniklas /* enum exp_opcode;     ANSI's `wisdom' didn't include forward enum decls. */
36e93f7393Sniklas 
37e93f7393Sniklas /* This used to be included to configure GDB for one or more specific
38b725ae77Skettenis    languages.  Now it is left out to configure for all of them.  FIXME.  */
39e93f7393Sniklas /* #include "lang_def.h" */
40e93f7393Sniklas #define	_LANG_c
41e93f7393Sniklas #define	_LANG_m2
42e93f7393Sniklas #define  _LANG_fortran
43b725ae77Skettenis #define  _LANG_pascal
44e93f7393Sniklas 
45e93f7393Sniklas #define MAX_FORTRAN_DIMS  7	/* Maximum number of F77 array dims */
46e93f7393Sniklas 
47e93f7393Sniklas /* range_mode ==
48e93f7393Sniklas    range_mode_auto:   range_check set automatically to default of language.
49e93f7393Sniklas    range_mode_manual: range_check set manually by user.  */
50e93f7393Sniklas 
51b725ae77Skettenis extern enum range_mode
52b725ae77Skettenis   {
53b725ae77Skettenis     range_mode_auto, range_mode_manual
54b725ae77Skettenis   }
55b725ae77Skettenis range_mode;
56e93f7393Sniklas 
57e93f7393Sniklas /* range_check ==
58e93f7393Sniklas    range_check_on:    Ranges are checked in GDB expressions, producing errors.
59e93f7393Sniklas    range_check_warn:  Ranges are checked, producing warnings.
60e93f7393Sniklas    range_check_off:   Ranges are not checked in GDB expressions.  */
61e93f7393Sniklas 
62e93f7393Sniklas extern enum range_check
63b725ae77Skettenis   {
64b725ae77Skettenis     range_check_off, range_check_warn, range_check_on
65b725ae77Skettenis   }
66b725ae77Skettenis range_check;
67e93f7393Sniklas 
68e93f7393Sniklas /* type_mode ==
69e93f7393Sniklas    type_mode_auto:   type_check set automatically to default of language
70e93f7393Sniklas    type_mode_manual: type_check set manually by user. */
71e93f7393Sniklas 
72b725ae77Skettenis extern enum type_mode
73b725ae77Skettenis   {
74b725ae77Skettenis     type_mode_auto, type_mode_manual
75b725ae77Skettenis   }
76b725ae77Skettenis type_mode;
77e93f7393Sniklas 
78e93f7393Sniklas /* type_check ==
79e93f7393Sniklas    type_check_on:    Types are checked in GDB expressions, producing errors.
80e93f7393Sniklas    type_check_warn:  Types are checked, producing warnings.
81e93f7393Sniklas    type_check_off:   Types are not checked in GDB expressions.  */
82e93f7393Sniklas 
83e93f7393Sniklas extern enum type_check
84b725ae77Skettenis   {
85b725ae77Skettenis     type_check_off, type_check_warn, type_check_on
86b725ae77Skettenis   }
87b725ae77Skettenis type_check;
88b725ae77Skettenis 
89b725ae77Skettenis /* case_mode ==
90b725ae77Skettenis    case_mode_auto:   case_sensitivity set upon selection of scope
91b725ae77Skettenis    case_mode_manual: case_sensitivity set only by user.  */
92b725ae77Skettenis 
93b725ae77Skettenis extern enum case_mode
94b725ae77Skettenis   {
95b725ae77Skettenis     case_mode_auto, case_mode_manual
96b725ae77Skettenis   }
97b725ae77Skettenis case_mode;
98b725ae77Skettenis 
99*63addd46Skettenis /* array_ordering ==
100*63addd46Skettenis    array_row_major:     Arrays are in row major order
101*63addd46Skettenis    array_column_major:  Arrays are in column major order.*/
102*63addd46Skettenis 
103*63addd46Skettenis extern enum array_ordering
104*63addd46Skettenis   {
105*63addd46Skettenis     array_row_major, array_column_major
106*63addd46Skettenis   }
107*63addd46Skettenis array_ordering;
108*63addd46Skettenis 
109*63addd46Skettenis 
110b725ae77Skettenis /* case_sensitivity ==
111b725ae77Skettenis    case_sensitive_on:   Case sensitivity in name matching is used
112b725ae77Skettenis    case_sensitive_off:  Case sensitivity in name matching is not used  */
113b725ae77Skettenis 
114b725ae77Skettenis extern enum case_sensitivity
115b725ae77Skettenis   {
116b725ae77Skettenis     case_sensitive_on, case_sensitive_off
117b725ae77Skettenis   }
118b725ae77Skettenis case_sensitivity;
119e93f7393Sniklas 
120*63addd46Skettenis /* Per architecture (OS/ABI) language information.  */
121e93f7393Sniklas 
122*63addd46Skettenis struct language_arch_info
123e93f7393Sniklas {
124*63addd46Skettenis   /* Its primitive types.  This is a vector ended by a NULL pointer.
125*63addd46Skettenis      These types can be specified by name in parsing types in
126*63addd46Skettenis      expressions, regardless of whether the program being debugged
127*63addd46Skettenis      actually defines such a type.  */
128*63addd46Skettenis   struct type **primitive_type_vector;
129*63addd46Skettenis   /* Type of elements of strings. */
130*63addd46Skettenis   struct type *string_char_type;
131e93f7393Sniklas };
132e93f7393Sniklas 
133*63addd46Skettenis struct type *language_string_char_type (const struct language_defn *l,
134*63addd46Skettenis 					struct gdbarch *gdbarch);
135*63addd46Skettenis 
136*63addd46Skettenis struct type *language_lookup_primitive_type_by_name (const struct language_defn *l,
137*63addd46Skettenis 						     struct gdbarch *gdbarch,
138*63addd46Skettenis 						     const char *name);
139*63addd46Skettenis 
140e93f7393Sniklas /* Structure tying together assorted information about a language.  */
141e93f7393Sniklas 
142e93f7393Sniklas struct language_defn
143e93f7393Sniklas   {
144e93f7393Sniklas     /* Name of the language */
145e93f7393Sniklas 
146e93f7393Sniklas     char *la_name;
147e93f7393Sniklas 
148e93f7393Sniklas     /* its symtab language-enum (defs.h) */
149e93f7393Sniklas 
150e93f7393Sniklas     enum language la_language;
151e93f7393Sniklas 
152e93f7393Sniklas     /* Its builtin types.  This is a vector ended by a NULL pointer.  These
153e93f7393Sniklas        types can be specified by name in parsing types in expressions,
154e93f7393Sniklas        regardless of whether the program being debugged actually defines
155e93f7393Sniklas        such a type.  */
156e93f7393Sniklas 
157e93f7393Sniklas     struct type **const *la_builtin_type_vector;
158e93f7393Sniklas 
159e93f7393Sniklas     /* Default range checking */
160e93f7393Sniklas 
161e93f7393Sniklas     enum range_check la_range_check;
162e93f7393Sniklas 
163e93f7393Sniklas     /* Default type checking */
164e93f7393Sniklas 
165e93f7393Sniklas     enum type_check la_type_check;
166e93f7393Sniklas 
167b725ae77Skettenis     /* Default case sensitivity */
168b725ae77Skettenis     enum case_sensitivity la_case_sensitivity;
169b725ae77Skettenis 
170*63addd46Skettenis     /* Multi-dimensional array ordering */
171*63addd46Skettenis     enum array_ordering la_array_ordering;
172*63addd46Skettenis 
173b725ae77Skettenis     /* Definitions related to expression printing, prefixifying, and
174b725ae77Skettenis        dumping */
175b725ae77Skettenis 
176b725ae77Skettenis     const struct exp_descriptor *la_exp_desc;
177b725ae77Skettenis 
178e93f7393Sniklas     /* Parser function. */
179e93f7393Sniklas 
180b725ae77Skettenis     int (*la_parser) (void);
181e93f7393Sniklas 
182e93f7393Sniklas     /* Parser error function */
183e93f7393Sniklas 
184b725ae77Skettenis     void (*la_error) (char *);
185e93f7393Sniklas 
186*63addd46Skettenis     /* Given an expression *EXPP created by prefixifying the result of
187*63addd46Skettenis        la_parser, perform any remaining processing necessary to complete
188*63addd46Skettenis        its translation.  *EXPP may change; la_post_parser is responsible
189*63addd46Skettenis        for releasing its previous contents, if necessary.  If
190*63addd46Skettenis        VOID_CONTEXT_P, then no value is expected from the expression.  */
191*63addd46Skettenis 
192*63addd46Skettenis     void (*la_post_parser) (struct expression ** expp, int void_context_p);
193*63addd46Skettenis 
194b725ae77Skettenis     void (*la_printchar) (int ch, struct ui_file * stream);
195e93f7393Sniklas 
196b725ae77Skettenis     void (*la_printstr) (struct ui_file * stream, char *string,
197b725ae77Skettenis 			 unsigned int length, int width,
198b725ae77Skettenis 			 int force_ellipses);
199e93f7393Sniklas 
200b725ae77Skettenis     void (*la_emitchar) (int ch, struct ui_file * stream, int quoter);
201e93f7393Sniklas 
202b725ae77Skettenis     struct type *(*la_fund_type) (struct objfile *, int);
203e93f7393Sniklas 
204e93f7393Sniklas     /* Print a type using syntax appropriate for this language. */
205e93f7393Sniklas 
206b725ae77Skettenis     void (*la_print_type) (struct type *, char *, struct ui_file *, int,
207b725ae77Skettenis 			   int);
208e93f7393Sniklas 
209e93f7393Sniklas     /* Print a value using syntax appropriate for this language. */
210e93f7393Sniklas 
211b725ae77Skettenis     int (*la_val_print) (struct type *, char *, int, CORE_ADDR,
212b725ae77Skettenis 			 struct ui_file *, int, int, int,
213b725ae77Skettenis 			 enum val_prettyprint);
214e93f7393Sniklas 
215e93f7393Sniklas     /* Print a top-level value using syntax appropriate for this language. */
216e93f7393Sniklas 
217b725ae77Skettenis     int (*la_value_print) (struct value *, struct ui_file *,
218b725ae77Skettenis 			   int, enum val_prettyprint);
219b725ae77Skettenis 
220b725ae77Skettenis     /* PC is possibly an unknown languages trampoline.
221b725ae77Skettenis        If that PC falls in a trampoline belonging to this language,
222b725ae77Skettenis        return the address of the first pc in the real function, or 0
223b725ae77Skettenis        if it isn't a language tramp for this language.  */
224b725ae77Skettenis     CORE_ADDR (*skip_trampoline) (CORE_ADDR pc);
225b725ae77Skettenis 
226b725ae77Skettenis     /* Now come some hooks for lookup_symbol.  */
227b725ae77Skettenis 
228b725ae77Skettenis     /* If this is non-NULL, lookup_symbol will do the 'field_of_this'
229b725ae77Skettenis        check, using this function to find the value of this.  */
230b725ae77Skettenis 
231b725ae77Skettenis     /* FIXME: carlton/2003-05-19: Audit all the language_defn structs
232b725ae77Skettenis        to make sure we're setting this appropriately: I'm sure it
233b725ae77Skettenis        could be NULL in more languages.  */
234b725ae77Skettenis 
235b725ae77Skettenis     struct value *(*la_value_of_this) (int complain);
236b725ae77Skettenis 
237b725ae77Skettenis     /* This is a function that lookup_symbol will call when it gets to
238b725ae77Skettenis        the part of symbol lookup where C looks up static and global
239b725ae77Skettenis        variables.  */
240b725ae77Skettenis 
241b725ae77Skettenis     struct symbol *(*la_lookup_symbol_nonlocal) (const char *,
242b725ae77Skettenis 						 const char *,
243b725ae77Skettenis 						 const struct block *,
244b725ae77Skettenis 						 const domain_enum,
245b725ae77Skettenis 						 struct symtab **);
246b725ae77Skettenis 
247b725ae77Skettenis     /* Find the definition of the type with the given name.  */
248b725ae77Skettenis     struct type *(*la_lookup_transparent_type) (const char *);
249b725ae77Skettenis 
250b725ae77Skettenis     /* Return demangled language symbol, or NULL.  */
251b725ae77Skettenis     char *(*la_demangle) (const char *mangled, int options);
252e93f7393Sniklas 
253*63addd46Skettenis     /* Return class name of a mangled method name or NULL.  */
254*63addd46Skettenis     char *(*la_class_name_from_physname) (const char *physname);
255e93f7393Sniklas 
256e93f7393Sniklas     /* Table for printing expressions */
257e93f7393Sniklas 
258e93f7393Sniklas     const struct op_print *la_op_print_tab;
259e93f7393Sniklas 
260e93f7393Sniklas     /* Zero if the language has first-class arrays.  True if there are no
261e93f7393Sniklas        array values, and array objects decay to pointers, as in C. */
262e93f7393Sniklas 
263e93f7393Sniklas     char c_style_arrays;
264e93f7393Sniklas 
265e93f7393Sniklas     /* Index to use for extracting the first element of a string. */
266e93f7393Sniklas     char string_lower_bound;
267e93f7393Sniklas 
268e93f7393Sniklas     /* Type of elements of strings. */
269e93f7393Sniklas     struct type **string_char_type;
270e93f7393Sniklas 
271b725ae77Skettenis     /* The list of characters forming word boundaries.  */
272b725ae77Skettenis     char *(*la_word_break_characters) (void);
273b725ae77Skettenis 
274*63addd46Skettenis     /* The per-architecture (OS/ABI) language information.  */
275*63addd46Skettenis     void (*la_language_arch_info) (struct gdbarch *,
276*63addd46Skettenis 				   struct language_arch_info *);
277*63addd46Skettenis 
278e93f7393Sniklas     /* Add fields above this point, so the magic number is always last. */
279e93f7393Sniklas     /* Magic number for compat checking */
280e93f7393Sniklas 
281e93f7393Sniklas     long la_magic;
282e93f7393Sniklas 
283e93f7393Sniklas   };
284e93f7393Sniklas 
285e93f7393Sniklas #define LANG_MAGIC	910823L
286e93f7393Sniklas 
287e93f7393Sniklas /* Pointer to the language_defn for our current language.  This pointer
288e93f7393Sniklas    always points to *some* valid struct; it can be used without checking
289e93f7393Sniklas    it for validity.
290e93f7393Sniklas 
291e93f7393Sniklas    The current language affects expression parsing and evaluation
292e93f7393Sniklas    (FIXME: it might be cleaner to make the evaluation-related stuff
293e93f7393Sniklas    separate exp_opcodes for each different set of semantics.  We
294e93f7393Sniklas    should at least think this through more clearly with respect to
295e93f7393Sniklas    what happens if the language is changed between parsing and
296e93f7393Sniklas    evaluation) and printing of things like types and arrays.  It does
297e93f7393Sniklas    *not* affect symbol-reading-- each source file in a symbol-file has
298e93f7393Sniklas    its own language and we should keep track of that regardless of the
299e93f7393Sniklas    language when symbols are read.  If we want some manual setting for
300e93f7393Sniklas    the language of symbol files (e.g. detecting when ".c" files are
301b725ae77Skettenis    C++), it should be a separate setting from the current_language.  */
302e93f7393Sniklas 
303e93f7393Sniklas extern const struct language_defn *current_language;
304e93f7393Sniklas 
305e93f7393Sniklas /* Pointer to the language_defn expected by the user, e.g. the language
306e93f7393Sniklas    of main(), or the language we last mentioned in a message, or C.  */
307e93f7393Sniklas 
308e93f7393Sniklas extern const struct language_defn *expected_language;
309e93f7393Sniklas 
310e93f7393Sniklas /* language_mode ==
311e93f7393Sniklas    language_mode_auto:   current_language automatically set upon selection
312e93f7393Sniklas    of scope (e.g. stack frame)
313e93f7393Sniklas    language_mode_manual: current_language set only by user.  */
314e93f7393Sniklas 
315e93f7393Sniklas extern enum language_mode
316b725ae77Skettenis   {
317b725ae77Skettenis     language_mode_auto, language_mode_manual
318b725ae77Skettenis   }
319b725ae77Skettenis language_mode;
320e93f7393Sniklas 
321e93f7393Sniklas /* These macros define the behaviour of the expression
322e93f7393Sniklas    evaluator.  */
323e93f7393Sniklas 
324e93f7393Sniklas /* Should we strictly type check expressions? */
325e93f7393Sniklas #define STRICT_TYPE (type_check != type_check_off)
326e93f7393Sniklas 
327e93f7393Sniklas /* Should we range check values against the domain of their type? */
328e93f7393Sniklas #define RANGE_CHECK (range_check != range_check_off)
329e93f7393Sniklas 
330e93f7393Sniklas /* "cast" really means conversion */
331e93f7393Sniklas /* FIXME -- should be a setting in language_defn */
332e93f7393Sniklas #define CAST_IS_CONVERSION (current_language->la_language == language_c  || \
333b725ae77Skettenis 			    current_language->la_language == language_cplus || \
334b725ae77Skettenis 			    current_language->la_language == language_objc)
335e93f7393Sniklas 
336b725ae77Skettenis extern void language_info (int);
337e93f7393Sniklas 
338b725ae77Skettenis extern enum language set_language (enum language);
339e93f7393Sniklas 
340b725ae77Skettenis 
341e93f7393Sniklas /* This page contains functions that return things that are
342e93f7393Sniklas    specific to languages.  Each of these functions is based on
343e93f7393Sniklas    the current setting of working_lang, which the user sets
344e93f7393Sniklas    with the "set language" command. */
345e93f7393Sniklas 
346e93f7393Sniklas #define create_fundamental_type(objfile,typeid) \
347e93f7393Sniklas   (current_language->la_fund_type(objfile, typeid))
348e93f7393Sniklas 
349e93f7393Sniklas #define LA_PRINT_TYPE(type,varstring,stream,show,level) \
350e93f7393Sniklas   (current_language->la_print_type(type,varstring,stream,show,level))
351e93f7393Sniklas 
352b725ae77Skettenis #define LA_VAL_PRINT(type,valaddr,offset,addr,stream,fmt,deref,recurse,pretty) \
353b725ae77Skettenis   (current_language->la_val_print(type,valaddr,offset,addr,stream,fmt,deref, \
354e93f7393Sniklas 				  recurse,pretty))
355e93f7393Sniklas #define LA_VALUE_PRINT(val,stream,fmt,pretty) \
356e93f7393Sniklas   (current_language->la_value_print(val,stream,fmt,pretty))
357e93f7393Sniklas 
358e93f7393Sniklas #define LA_PRINT_CHAR(ch, stream) \
359e93f7393Sniklas   (current_language->la_printchar(ch, stream))
360b725ae77Skettenis #define LA_PRINT_STRING(stream, string, length, width, force_ellipses) \
361b725ae77Skettenis   (current_language->la_printstr(stream, string, length, width, force_ellipses))
362b725ae77Skettenis #define LA_EMIT_CHAR(ch, stream, quoter) \
363b725ae77Skettenis   (current_language->la_emitchar(ch, stream, quoter))
364e93f7393Sniklas 
365e93f7393Sniklas /* Test a character to decide whether it can be printed in literal form
366e93f7393Sniklas    or needs to be printed in another representation.  For example,
367e93f7393Sniklas    in C the literal form of the character with octal value 141 is 'a'
368e93f7393Sniklas    and the "other representation" is '\141'.  The "other representation"
369e93f7393Sniklas    is program language dependent. */
370e93f7393Sniklas 
371e93f7393Sniklas #define PRINT_LITERAL_FORM(c)		\
372b725ae77Skettenis   ((c) >= 0x20				\
373b725ae77Skettenis    && ((c) < 0x7F || (c) >= 0xA0)	\
374b725ae77Skettenis    && (!sevenbit_strings || (c) < 0x80))
375e93f7393Sniklas 
376b725ae77Skettenis #if 0
377b725ae77Skettenis /* FIXME: cagney/2000-03-04: This function does not appear to be used.
378b725ae77Skettenis    It can be deleted once 5.0 has been released. */
379b725ae77Skettenis /* Return a string that contains the hex digits of the number.  No preceeding
380b725ae77Skettenis    "0x" */
381b725ae77Skettenis 
382b725ae77Skettenis extern char *longest_raw_hex_string (LONGEST);
383b725ae77Skettenis #endif
384e93f7393Sniklas 
385e93f7393Sniklas /* Type predicates */
386e93f7393Sniklas 
387b725ae77Skettenis extern int simple_type (struct type *);
388e93f7393Sniklas 
389b725ae77Skettenis extern int ordered_type (struct type *);
390e93f7393Sniklas 
391b725ae77Skettenis extern int same_type (struct type *, struct type *);
392e93f7393Sniklas 
393b725ae77Skettenis extern int integral_type (struct type *);
394e93f7393Sniklas 
395b725ae77Skettenis extern int numeric_type (struct type *);
396e93f7393Sniklas 
397b725ae77Skettenis extern int character_type (struct type *);
398e93f7393Sniklas 
399b725ae77Skettenis extern int boolean_type (struct type *);
400e93f7393Sniklas 
401b725ae77Skettenis extern int float_type (struct type *);
402e93f7393Sniklas 
403b725ae77Skettenis extern int pointer_type (struct type *);
404e93f7393Sniklas 
405b725ae77Skettenis extern int structured_type (struct type *);
406e93f7393Sniklas 
407e93f7393Sniklas /* Checks Binary and Unary operations for semantic type correctness */
408e93f7393Sniklas /* FIXME:  Does not appear to be used */
409e93f7393Sniklas #define unop_type_check(v,o) binop_type_check((v),NULL,(o))
410e93f7393Sniklas 
411b725ae77Skettenis extern void binop_type_check (struct value *, struct value *, int);
412e93f7393Sniklas 
413e93f7393Sniklas /* Error messages */
414e93f7393Sniklas 
415b725ae77Skettenis extern void op_error (const char *lhs, enum exp_opcode,
416b725ae77Skettenis 		      const char *rhs);
417e93f7393Sniklas 
418b725ae77Skettenis extern void type_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
419e93f7393Sniklas 
420b725ae77Skettenis extern void range_error (const char *, ...) ATTR_FORMAT (printf, 1, 2);
421e93f7393Sniklas 
422e93f7393Sniklas /* Data:  Does this value represent "truth" to the current language?  */
423e93f7393Sniklas 
424b725ae77Skettenis extern int value_true (struct value *);
425e93f7393Sniklas 
426b725ae77Skettenis extern struct type *lang_bool_type (void);
427e93f7393Sniklas 
428e93f7393Sniklas /* The type used for Boolean values in the current language. */
429e93f7393Sniklas #define LA_BOOL_TYPE lang_bool_type ()
430e93f7393Sniklas 
431e93f7393Sniklas /* Misc:  The string representing a particular enum language.  */
432e93f7393Sniklas 
433b725ae77Skettenis extern enum language language_enum (char *str);
434e93f7393Sniklas 
435b725ae77Skettenis extern const struct language_defn *language_def (enum language);
436b725ae77Skettenis 
437b725ae77Skettenis extern char *language_str (enum language);
438e93f7393Sniklas 
439e93f7393Sniklas /* Add a language to the set known by GDB (at initialization time).  */
440e93f7393Sniklas 
441b725ae77Skettenis extern void add_language (const struct language_defn *);
442e93f7393Sniklas 
443b725ae77Skettenis extern enum language get_frame_language (void);	/* In stack.c */
444b725ae77Skettenis 
445b725ae77Skettenis /* Check for a language-specific trampoline. */
446b725ae77Skettenis 
447b725ae77Skettenis extern CORE_ADDR skip_language_trampoline (CORE_ADDR pc);
448b725ae77Skettenis 
449b725ae77Skettenis /* Return demangled language symbol, or NULL.  */
450b725ae77Skettenis extern char *language_demangle (const struct language_defn *current_language,
451b725ae77Skettenis 				const char *mangled, int options);
452b725ae77Skettenis 
453*63addd46Skettenis /* Return class name from physname, or NULL.  */
454*63addd46Skettenis extern char *language_class_name_from_physname (const struct language_defn *,
455*63addd46Skettenis 					        const char *physname);
456*63addd46Skettenis 
457b725ae77Skettenis /* Splitting strings into words.  */
458b725ae77Skettenis extern char *default_word_break_characters (void);
459e93f7393Sniklas 
460e93f7393Sniklas #endif /* defined (LANGUAGE_H) */
461