OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [libiberty/] [cp-demangle.h] - Diff between revs 227 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 227 Rev 816
/* Internal demangler interface for g++ V3 ABI.
/* Internal demangler interface for g++ V3 ABI.
   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
   Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
   Written by Ian Lance Taylor <ian@wasabisystems.com>.
   Written by Ian Lance Taylor <ian@wasabisystems.com>.
 
 
   This file is part of the libiberty library, which is part of GCC.
   This file is part of the libiberty library, which is part of GCC.
 
 
   This file is free software; you can redistribute it and/or modify
   This file is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   In addition to the permissions in the GNU General Public License, the
   In addition to the permissions in the GNU General Public License, the
   Free Software Foundation gives you unlimited permission to link the
   Free Software Foundation gives you unlimited permission to link the
   compiled version of this file into combinations with other programs,
   compiled version of this file into combinations with other programs,
   and to distribute those combinations without any restriction coming
   and to distribute those combinations without any restriction coming
   from the use of this file.  (The General Public License restrictions
   from the use of this file.  (The General Public License restrictions
   do apply in other respects; for example, they cover modification of
   do apply in other respects; for example, they cover modification of
   the file, and distribution when not linked into a combined
   the file, and distribution when not linked into a combined
   executable.)
   executable.)
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
*/
 
 
/* This file provides some definitions shared by cp-demangle.c and
/* This file provides some definitions shared by cp-demangle.c and
   cp-demint.c.  It should not be included by any other files.  */
   cp-demint.c.  It should not be included by any other files.  */
 
 
/* Information we keep for operators.  */
/* Information we keep for operators.  */
 
 
struct demangle_operator_info
struct demangle_operator_info
{
{
  /* Mangled name.  */
  /* Mangled name.  */
  const char *code;
  const char *code;
  /* Real name.  */
  /* Real name.  */
  const char *name;
  const char *name;
  /* Length of real name.  */
  /* Length of real name.  */
  int len;
  int len;
  /* Number of arguments.  */
  /* Number of arguments.  */
  int args;
  int args;
};
};
 
 
/* How to print the value of a builtin type.  */
/* How to print the value of a builtin type.  */
 
 
enum d_builtin_type_print
enum d_builtin_type_print
{
{
  /* Print as (type)val.  */
  /* Print as (type)val.  */
  D_PRINT_DEFAULT,
  D_PRINT_DEFAULT,
  /* Print as integer.  */
  /* Print as integer.  */
  D_PRINT_INT,
  D_PRINT_INT,
  /* Print as unsigned integer, with trailing "u".  */
  /* Print as unsigned integer, with trailing "u".  */
  D_PRINT_UNSIGNED,
  D_PRINT_UNSIGNED,
  /* Print as long, with trailing "l".  */
  /* Print as long, with trailing "l".  */
  D_PRINT_LONG,
  D_PRINT_LONG,
  /* Print as unsigned long, with trailing "ul".  */
  /* Print as unsigned long, with trailing "ul".  */
  D_PRINT_UNSIGNED_LONG,
  D_PRINT_UNSIGNED_LONG,
  /* Print as long long, with trailing "ll".  */
  /* Print as long long, with trailing "ll".  */
  D_PRINT_LONG_LONG,
  D_PRINT_LONG_LONG,
  /* Print as unsigned long long, with trailing "ull".  */
  /* Print as unsigned long long, with trailing "ull".  */
  D_PRINT_UNSIGNED_LONG_LONG,
  D_PRINT_UNSIGNED_LONG_LONG,
  /* Print as bool.  */
  /* Print as bool.  */
  D_PRINT_BOOL,
  D_PRINT_BOOL,
  /* Print as float--put value in square brackets.  */
  /* Print as float--put value in square brackets.  */
  D_PRINT_FLOAT,
  D_PRINT_FLOAT,
  /* Print in usual way, but here to detect void.  */
  /* Print in usual way, but here to detect void.  */
  D_PRINT_VOID
  D_PRINT_VOID
};
};
 
 
/* Information we keep for a builtin type.  */
/* Information we keep for a builtin type.  */
 
 
struct demangle_builtin_type_info
struct demangle_builtin_type_info
{
{
  /* Type name.  */
  /* Type name.  */
  const char *name;
  const char *name;
  /* Length of type name.  */
  /* Length of type name.  */
  int len;
  int len;
  /* Type name when using Java.  */
  /* Type name when using Java.  */
  const char *java_name;
  const char *java_name;
  /* Length of java name.  */
  /* Length of java name.  */
  int java_len;
  int java_len;
  /* How to print a value of this type.  */
  /* How to print a value of this type.  */
  enum d_builtin_type_print print;
  enum d_builtin_type_print print;
};
};
 
 
/* The information structure we pass around.  */
/* The information structure we pass around.  */
 
 
struct d_info
struct d_info
{
{
  /* The string we are demangling.  */
  /* The string we are demangling.  */
  const char *s;
  const char *s;
  /* The end of the string we are demangling.  */
  /* The end of the string we are demangling.  */
  const char *send;
  const char *send;
  /* The options passed to the demangler.  */
  /* The options passed to the demangler.  */
  int options;
  int options;
  /* The next character in the string to consider.  */
  /* The next character in the string to consider.  */
  const char *n;
  const char *n;
  /* The array of components.  */
  /* The array of components.  */
  struct demangle_component *comps;
  struct demangle_component *comps;
  /* The index of the next available component.  */
  /* The index of the next available component.  */
  int next_comp;
  int next_comp;
  /* The number of available component structures.  */
  /* The number of available component structures.  */
  int num_comps;
  int num_comps;
  /* The array of substitutions.  */
  /* The array of substitutions.  */
  struct demangle_component **subs;
  struct demangle_component **subs;
  /* The index of the next substitution.  */
  /* The index of the next substitution.  */
  int next_sub;
  int next_sub;
  /* The number of available entries in the subs array.  */
  /* The number of available entries in the subs array.  */
  int num_subs;
  int num_subs;
  /* The number of substitutions which we actually made from the subs
  /* The number of substitutions which we actually made from the subs
     array, plus the number of template parameter references we
     array, plus the number of template parameter references we
     saw.  */
     saw.  */
  int did_subs;
  int did_subs;
  /* The last name we saw, for constructors and destructors.  */
  /* The last name we saw, for constructors and destructors.  */
  struct demangle_component *last_name;
  struct demangle_component *last_name;
  /* A running total of the length of large expansions from the
  /* A running total of the length of large expansions from the
     mangled name to the demangled name, such as standard
     mangled name to the demangled name, such as standard
     substitutions and builtin types.  */
     substitutions and builtin types.  */
  int expansion;
  int expansion;
};
};
 
 
/* To avoid running past the ending '\0', don't:
/* To avoid running past the ending '\0', don't:
   - call d_peek_next_char if d_peek_char returned '\0'
   - call d_peek_next_char if d_peek_char returned '\0'
   - call d_advance with an 'i' that is too large
   - call d_advance with an 'i' that is too large
   - call d_check_char(di, '\0')
   - call d_check_char(di, '\0')
   Everything else is safe.  */
   Everything else is safe.  */
#define d_peek_char(di) (*((di)->n))
#define d_peek_char(di) (*((di)->n))
#define d_peek_next_char(di) ((di)->n[1])
#define d_peek_next_char(di) ((di)->n[1])
#define d_advance(di, i) ((di)->n += (i))
#define d_advance(di, i) ((di)->n += (i))
#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
#define d_str(di) ((di)->n)
#define d_str(di) ((di)->n)
 
 
/* Functions and arrays in cp-demangle.c which are referenced by
/* Functions and arrays in cp-demangle.c which are referenced by
   functions in cp-demint.c.  */
   functions in cp-demint.c.  */
#ifdef IN_GLIBCPP_V3
#ifdef IN_GLIBCPP_V3
#define CP_STATIC_IF_GLIBCPP_V3 static
#define CP_STATIC_IF_GLIBCPP_V3 static
#else
#else
#define CP_STATIC_IF_GLIBCPP_V3 extern
#define CP_STATIC_IF_GLIBCPP_V3 extern
#endif
#endif
 
 
#ifndef IN_GLIBCPP_V3
#ifndef IN_GLIBCPP_V3
extern const struct demangle_operator_info cplus_demangle_operators[];
extern const struct demangle_operator_info cplus_demangle_operators[];
#endif
#endif
 
 
#define D_BUILTIN_TYPE_COUNT (32)
#define D_BUILTIN_TYPE_COUNT (32)
 
 
CP_STATIC_IF_GLIBCPP_V3
CP_STATIC_IF_GLIBCPP_V3
const struct demangle_builtin_type_info
const struct demangle_builtin_type_info
cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
 
 
CP_STATIC_IF_GLIBCPP_V3
CP_STATIC_IF_GLIBCPP_V3
struct demangle_component *
struct demangle_component *
cplus_demangle_mangled_name (struct d_info *, int);
cplus_demangle_mangled_name (struct d_info *, int);
 
 
CP_STATIC_IF_GLIBCPP_V3
CP_STATIC_IF_GLIBCPP_V3
struct demangle_component *
struct demangle_component *
cplus_demangle_type (struct d_info *);
cplus_demangle_type (struct d_info *);
 
 
extern void
extern void
cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
 
 
/* cp-demangle.c needs to define this a little differently */
/* cp-demangle.c needs to define this a little differently */
#undef CP_STATIC_IF_GLIBCPP_V3
#undef CP_STATIC_IF_GLIBCPP_V3
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.