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