CVS Repository/ src/ gnu/ usr.bin/ binutils/ include/ demangle.h

Annotated Revision 1.4 Back
1.1  (niklas 08-Jan-96)  1
: /* Defs for interface to demanglers.
1.2  (niklas 10-Jun-96)  2
:    Copyright 1992, 1995, 1996 Free Software Foundation, Inc.
1.1  (niklas 08-Jan-96)  3
:    
   4
:    This program is free software; you can redistribute it and/or modify
   5
:    it under the terms of the GNU General Public License as published by
   6
:    the Free Software Foundation; either version 2, or (at your option)
   7
:    any later version.
   8
: 
   9
:    This program is distributed in the hope that it will be useful,
   10
:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11
:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   12
:    GNU General Public License for more details.
   13
: 
   14
:    You should have received a copy of the GNU General Public License
   15
:    along with this program; if not, write to the Free Software
1.2  (niklas 10-Jun-96)  16
:    Foundation, Inc., 59 Temple Place - Suite 330,
   17
:    Boston, MA 02111-1307, USA.  */
1.1  (niklas 08-Jan-96)  18
: 
   19
: 
   20
: #if !defined (DEMANGLE_H)
   21
: #define DEMANGLE_H
   22
: 
   23
: #include <ansidecl.h>
   24
: 
   25
: /* Options passed to cplus_demangle (in 2nd parameter). */
   26
: 
1.4  (espie 09-Jun-01)  27
: #define DMGL_NO_OPTS	 0		/* For readability... */
   28
: #define DMGL_PARAMS	 (1 << 0)	/* Include function args */
   29
: #define DMGL_ANSI	 (1 << 1)	/* Include const, volatile, etc */
   30
: #define DMGL_JAVA	 (1 << 2)	/* Demangle as Java rather than C++. */
   31
: 
   32
: #define DMGL_AUTO	 (1 << 8)
   33
: #define DMGL_GNU	 (1 << 9)
   34
: #define DMGL_LUCID	 (1 << 10)
   35
: #define DMGL_ARM	 (1 << 11)
   36
: #define DMGL_HP 	 (1 << 12)       /* For the HP aCC compiler;
   37
:                                             same as ARM except for
   38
:                                             template arguments, etc. */
   39
: #define DMGL_EDG	 (1 << 13)
   40
: #define DMGL_GNU_NEW_ABI (1 << 14)
1.3  (espie 12-Sep-00)  41
: 
1.1  (niklas 08-Jan-96)  42
: /* If none of these are set, use 'current_demangling_style' as the default. */
1.4  (espie 09-Jun-01)  43
: #define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM|DMGL_HP|DMGL_EDG|DMGL_GNU_NEW_ABI)
1.1  (niklas 08-Jan-96)  44
: 
   45
: /* Enumeration of possible demangling styles.
   46
: 
   47
:    Lucid and ARM styles are still kept logically distinct, even though
   48
:    they now both behave identically.  The resulting style is actual the
   49
:    union of both.  I.E. either style recognizes both "__pt__" and "__rf__"
   50
:    for operator "->", even though the first is lucid style and the second
   51
:    is ARM style. (FIXME?) */
   52
: 
   53
: extern enum demangling_styles
   54
: {
   55
:   unknown_demangling = 0,
   56
:   auto_demangling = DMGL_AUTO,
   57
:   gnu_demangling = DMGL_GNU,
   58
:   lucid_demangling = DMGL_LUCID,
1.3  (espie 12-Sep-00)  59
:   arm_demangling = DMGL_ARM,
   60
:   hp_demangling = DMGL_HP,
1.4  (espie 09-Jun-01)  61
:   edg_demangling = DMGL_EDG,
   62
:   gnu_new_abi_demangling = DMGL_GNU_NEW_ABI
1.1  (niklas 08-Jan-96)  63
: } current_demangling_style;
   64
: 
   65
: /* Define string names for the various demangling styles. */
   66
: 
1.4  (espie 09-Jun-01)  67
: #define AUTO_DEMANGLING_STYLE_STRING	      "auto"
   68
: #define GNU_DEMANGLING_STYLE_STRING    	      "gnu"
   69
: #define LUCID_DEMANGLING_STYLE_STRING	      "lucid"
   70
: #define ARM_DEMANGLING_STYLE_STRING	      "arm"
   71
: #define HP_DEMANGLING_STYLE_STRING	      "hp"
   72
: #define EDG_DEMANGLING_STYLE_STRING	      "edg"
   73
: #define GNU_NEW_ABI_DEMANGLING_STYLE_STRING   "gnu-new-abi"
1.1  (niklas 08-Jan-96)  74
: 
   75
: /* Some macros to test what demangling style is active. */
   76
: 
   77
: #define CURRENT_DEMANGLING_STYLE current_demangling_style
   78
: #define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO)
   79
: #define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU)
   80
: #define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID)
1.3  (espie 12-Sep-00)  81
: #define ARM_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_ARM)
   82
: #define HP_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_HP)
   83
: #define EDG_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_EDG)
1.4  (espie 09-Jun-01)  84
: #define GNU_NEW_ABI_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU_NEW_ABI)
   85
: 
   86
: /* Provide information about the available demangle styles. This code is
   87
:    pulled from gdb into libiberty because it is useful to binutils also.  */
   88
: 
   89
: extern struct demangler_engine
   90
: {
   91
:   const char *demangling_style_name;
   92
:   enum demangling_styles demangling_style;
   93
:   const char *demangling_style_doc;
   94
: } libiberty_demanglers[];
1.1  (niklas 08-Jan-96)  95
: 
   96
: extern char *
   97
: cplus_demangle PARAMS ((const char *mangled, int options));
   98
: 
   99
: extern int
1.2  (niklas 10-Jun-96)  100
: cplus_demangle_opname PARAMS ((const char *opname, char *result, int options));
1.1  (niklas 08-Jan-96)  101
: 
1.2  (niklas 10-Jun-96)  102
: extern const char *
   103
: cplus_mangle_opname PARAMS ((const char *opname, int options));
1.1  (niklas 08-Jan-96)  104
: 
   105
: /* Note: This sets global state.  FIXME if you care about multi-threading. */
   106
: 
   107
: extern void
   108
: set_cplus_marker_for_demangling PARAMS ((int ch));
1.4  (espie 09-Jun-01)  109
: 
   110
: extern enum demangling_styles 
   111
: cplus_demangle_set_style PARAMS ((enum demangling_styles style));
   112
: 
   113
: extern enum demangling_styles 
   114
: cplus_demangle_name_to_style PARAMS ((const char *name));
   115
: 
   116
: /* New-ABI demangling entry point, defined in cp-demangle.c.  */
   117
: extern char*
   118
: cplus_demangle_new_abi PARAMS ((const char* mangled));
1.1  (niklas 08-Jan-96)  119
: 
   120
: #endif	/* DEMANGLE_H */