demangle.h

Go to the documentation of this file.
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 */

Generated on Wed Jul 20 21:06:04 2005 for MySQL 5.0.9 Beta by  doxygen 1.4.3