(linenum→info "unix/slp.c:2238")

binutils/2.18/libiberty/cp-demangle.h

    1: /* Internal demangler interface for g++ V3 ABI.
    2:    Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
    3:    Written by Ian Lance Taylor <ian@wasabisystems.com>.
    4: 
    5:    This file is part of the libiberty library, which is part of GCC.
    6: 
    7:    This file is free software; you can redistribute it and/or modify
    8:    it under the terms of the GNU General Public License as published by
    9:    the Free Software Foundation; either version 2 of the License, or
   10:    (at your option) any later version.
   11: 
   12:    In addition to the permissions in the GNU General Public License, the
   13:    Free Software Foundation gives you unlimited permission to link the
   14:    compiled version of this file into combinations with other programs,
   15:    and to distribute those combinations without any restriction coming
   16:    from the use of this file.  (The General Public License restrictions
   17:    do apply in other respects; for example, they cover modification of
   18:    the file, and distribution when not linked into a combined
   19:    executable.)
   20: 
   21:    This program is distributed in the hope that it will be useful,
   22:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   23:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   24:    GNU General Public License for more details.
   25: 
   26:    You should have received a copy of the GNU General Public License
   27:    along with this program; if not, write to the Free Software
   28:    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. 
   29: */
   30: 
   31: /* This file provides some definitions shared by cp-demangle.c and
   32:    cp-demint.c.  It should not be included by any other files.  */
   33: 
   34: /* Information we keep for operators.  */
   35: 
   36: struct demangle_operator_info
   37: {
   38:   /* Mangled name.  */
   39:   const char *code;
   40:   /* Real name.  */
   41:   const char *name;
   42:   /* Length of real name.  */
   43:   int len;
   44:   /* Number of arguments.  */
   45:   int args;
   46: };
   47: 
   48: /* How to print the value of a builtin type.  */
   49: 
   50: enum d_builtin_type_print
   51: {
   52:   /* Print as (type)val.  */
   53:   D_PRINT_DEFAULT,
   54:   /* Print as integer.  */
   55:   D_PRINT_INT,
   56:   /* Print as unsigned integer, with trailing "u".  */
   57:   D_PRINT_UNSIGNED,
   58:   /* Print as long, with trailing "l".  */
   59:   D_PRINT_LONG,
   60:   /* Print as unsigned long, with trailing "ul".  */
   61:   D_PRINT_UNSIGNED_LONG,
   62:   /* Print as long long, with trailing "ll".  */
   63:   D_PRINT_LONG_LONG,
   64:   /* Print as unsigned long long, with trailing "ull".  */
   65:   D_PRINT_UNSIGNED_LONG_LONG,
   66:   /* Print as bool.  */
   67:   D_PRINT_BOOL,
   68:   /* Print as float--put value in square brackets.  */
   69:   D_PRINT_FLOAT,
   70:   /* Print in usual way, but here to detect void.  */
   71:   D_PRINT_VOID
   72: };
   73: 
   74: /* Information we keep for a builtin type.  */
   75: 
   76: struct demangle_builtin_type_info
   77: {
   78:   /* Type name.  */
   79:   const char *name;
   80:   /* Length of type name.  */
   81:   int len;
   82:   /* Type name when using Java.  */
   83:   const char *java_name;
   84:   /* Length of java name.  */
   85:   int java_len;
   86:   /* How to print a value of this type.  */
   87:   enum d_builtin_type_print print;
   88: };
   89: 
   90: /* The information structure we pass around.  */
   91: 
   92: struct d_info
   93: {
   94:   /* The string we are demangling.  */
   95:   const char *s;
   96:   /* The end of the string we are demangling.  */
   97:   const char *send;
   98:   /* The options passed to the demangler.  */
   99:   int options;
  100:   /* The next character in the string to consider.  */
  101:   const char *n;
  102:   /* The array of components.  */
  103:   struct demangle_component *comps;
  104:   /* The index of the next available component.  */
  105:   int next_comp;
  106:   /* The number of available component structures.  */
  107:   int num_comps;
  108:   /* The array of substitutions.  */
  109:   struct demangle_component **subs;
  110:   /* The index of the next substitution.  */
  111:   int next_sub;
  112:   /* The number of available entries in the subs array.  */
  113:   int num_subs;
  114:   /* The number of substitutions which we actually made from the subs
  115:      array, plus the number of template parameter references we
  116:      saw.  */
  117:   int did_subs;
  118:   /* The last name we saw, for constructors and destructors.  */
  119:   struct demangle_component *last_name;
  120:   /* A running total of the length of large expansions from the
  121:      mangled name to the demangled name, such as standard
  122:      substitutions and builtin types.  */
  123:   int expansion;
  124: };
  125: 
  126: /* To avoid running past the ending '\0', don't:
  127:    - call d_peek_next_char if d_peek_char returned '\0'
  128:    - call d_advance with an 'i' that is too large
  129:    - call d_check_char(di, '\0')
  130:    Everything else is safe.  */
  131: #define d_peek_char(di) (*((di)->n))
  132: #define d_peek_next_char(di) ((di)->n[1])
  133: #define d_advance(di, i) ((di)->n += (i))
  134: #define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
  135: #define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
  136: #define d_str(di) ((di)->n)
  137: 
  138: /* Functions and arrays in cp-demangle.c which are referenced by
  139:    functions in cp-demint.c.  */
  140: #ifdef IN_GLIBCPP_V3
  141: #define CP_STATIC_IF_GLIBCPP_V3 static
  142: #else
  143: #define CP_STATIC_IF_GLIBCPP_V3 extern
  144: #endif
  145: 
  146: #ifndef IN_GLIBCPP_V3
  147: extern const struct demangle_operator_info cplus_demangle_operators[];
  148: #endif
  149: 
  150: #define D_BUILTIN_TYPE_COUNT (26)
  151: 
  152: CP_STATIC_IF_GLIBCPP_V3
  153: const struct demangle_builtin_type_info
  154: cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
  155: 
  156: CP_STATIC_IF_GLIBCPP_V3
  157: struct demangle_component *
  158: cplus_demangle_mangled_name (struct d_info *, int);
  159: 
  160: CP_STATIC_IF_GLIBCPP_V3
  161: struct demangle_component *
  162: cplus_demangle_type (struct d_info *);
  163: 
  164: extern void
  165: cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
  166: 
  167: /* cp-demangle.c needs to define this a little differently */
  168: #undef CP_STATIC_IF_GLIBCPP_V3
Syntax (Markdown)