00001 /* Defs for interface to demanglers. 00002 Copyright 1992, 1995, 1996 Free Software Foundation, Inc. 00003 00004 This program is free software; you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation; either version 2, or (at your option) 00007 any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program; if not, write to the Free Software 00016 Foundation, Inc., 59 Temple Place - Suite 330, 00017 Boston, MA 02111-1307, USA. */ 00018 00019 00020 #if !defined (DEMANGLE_H) 00021 #define DEMANGLE_H 00022 00023 #ifdef IN_GCC 00024 #include "gansidecl.h" 00025 #define PARAMS(ARGS) PROTO(ARGS) 00026 #else /* ! IN_GCC */ 00027 #include <ansidecl.h> 00028 #endif /* IN_GCC */ 00029 00030 /* Options passed to cplus_demangle (in 2nd parameter). */ 00031 00032 #define DMGL_NO_OPTS 0 /* For readability... */ 00033 #define DMGL_PARAMS (1 << 0) /* Include function args */ 00034 #define DMGL_ANSI (1 << 1) /* Include const, volatile, etc */ 00035 #define DMGL_JAVA (1 << 2) /* Demangle as Java rather than C++. */ 00036 00037 #define DMGL_AUTO (1 << 8) 00038 #define DMGL_GNU (1 << 9) 00039 #define DMGL_LUCID (1 << 10) 00040 #define DMGL_ARM (1 << 11) 00041 /* If none of these are set, use 'current_demangling_style' as the default. */ 00042 #define DMGL_STYLE_MASK (DMGL_AUTO|DMGL_GNU|DMGL_LUCID|DMGL_ARM) 00043 00044 /* Enumeration of possible demangling styles. 00045 00046 Lucid and ARM styles are still kept logically distinct, even though 00047 they now both behave identically. The resulting style is actual the 00048 union of both. I.E. either style recognizes both "__pt__" and "__rf__" 00049 for operator "->", even though the first is lucid style and the second 00050 is ARM style. (FIXME?) */ 00051 00052 extern enum demangling_styles 00053 { 00054 unknown_demangling = 0, 00055 auto_demangling = DMGL_AUTO, 00056 gnu_demangling = DMGL_GNU, 00057 lucid_demangling = DMGL_LUCID, 00058 arm_demangling = DMGL_ARM 00059 } current_demangling_style; 00060 00061 /* Define string names for the various demangling styles. */ 00062 00063 #define AUTO_DEMANGLING_STYLE_STRING "auto" 00064 #define GNU_DEMANGLING_STYLE_STRING "gnu" 00065 #define LUCID_DEMANGLING_STYLE_STRING "lucid" 00066 #define ARM_DEMANGLING_STYLE_STRING "arm" 00067 00068 /* Some macros to test what demangling style is active. */ 00069 00070 #define CURRENT_DEMANGLING_STYLE current_demangling_style 00071 #define AUTO_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_AUTO) 00072 #define GNU_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_GNU) 00073 #define LUCID_DEMANGLING (((int) CURRENT_DEMANGLING_STYLE) & DMGL_LUCID) 00074 #define ARM_DEMANGLING (CURRENT_DEMANGLING_STYLE & DMGL_ARM) 00075 00076 extern char * 00077 cplus_demangle PARAMS ((const char *mangled, int options)); 00078 00079 extern int 00080 cplus_demangle_opname PARAMS ((const char *opname, char *result, int options)); 00081 00082 extern const char * 00083 cplus_mangle_opname PARAMS ((const char *opname, int options)); 00084 00085 /* Note: This sets global state. FIXME if you care about multi-threading. */ 00086 00087 extern void 00088 set_cplus_marker_for_demangling PARAMS ((int ch)); 00089 00090 #endif /* DEMANGLE_H */
1.4.7

