summaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog192
-rw-r--r--libiberty/Makefile.in824
-rw-r--r--libiberty/README2
-rw-r--r--libiberty/config.in391
-rwxr-xr-xlibiberty/configure20
-rw-r--r--libiberty/configure.ac (renamed from libiberty/configure.in)20
-rw-r--r--libiberty/cp-demangle.c2375
-rw-r--r--libiberty/cp-demangle.h139
-rw-r--r--libiberty/cp-demint.c241
-rw-r--r--libiberty/cplus-dem.c23
-rw-r--r--libiberty/getpwd.c3
-rw-r--r--libiberty/lbasename.c20
-rw-r--r--libiberty/maint-tool17
-rw-r--r--libiberty/strdup.c2
-rw-r--r--libiberty/testsuite/demangle-expected2262
-rw-r--r--libiberty/testsuite/test-demangle.c164
16 files changed, 4536 insertions, 2159 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index cd7200d0404..10c7f4690e6 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,195 @@
+2004-01-25 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * configure.ac: Add m4_pattern_allow(LIBOBJS).
+ * configure: Regenerate.
+
+2004-01-22 DJ Delorie <dj@redhat.com>
+
+ * Makefile.in: Convert to ./ throughout. Rebuild dependencies
+ with explicit build rules.
+ (VPATH): Remove.
+ (.c.o): Poison.
+ * configure.ac (pexecute, LIBOBJS): Add ./ .
+ * maint-tool: Build dependencies with explicit rules.
+
+2004-01-15 Kazu Hirata <kazu@cs.umass.edu>
+
+ * strdup.c (strdup): Constify the argument.
+
+2004-01-14 Loren J. Rittle <ljrittle@acm.org>
+
+ * Makefile.in (distclean): Remove config.cache.
+
+2004-01-13 Daniel Jacobowitz <drow@mvista.com>
+
+ * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE
+ takes two parameters.
+ * cp-demint.c (cplus_demangle_fill_component): Likewise.
+
+2004-01-12 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * cp-demangle.c: Include "cp-demangle.h". If IN_GLIBCPP_V3 is
+ defined, rename some functions which are to become static via
+ #define.
+ (CP_STATIC_IF_GLIBCPP_V3): Define.
+ (struct d_operator_info): Move definition to cp-demangle.h, and
+ rename to demangle_operator_info. Change all uses.
+ (enum d_builtin_type_print): Move definition to cp-demangle.h.
+ (struct d_builtin_type_info): Move definition to cp-demangle.h,
+ and rename to demangle_builtin_type_info. Change all uses.
+ (enum d_comp_type): Move definition to include/demangle.h, and
+ rename to demangle_component_type, and change all enums to start
+ with DEMANGLE_COMPONENT_ instead of D_. Change all uses.
+ (struct d_comp): Move definition to include/demangle.h, and rename
+ to demangle_component. Change all uses.
+ (struct d_info): Move definition to cp-demangle.h.
+ (cplus_demangle_fill_name): New function.
+ (cplus_demangle_fill_extended_operator): New function.
+ (cplus_demangle_fill_ctor): New function.
+ (cplus_demangle_fill_dtor): New function.
+ (d_make_empty): Remove type parameter. Change all callers.
+ (d_make_name): Use cplus_demangle_fill_name.
+ (d_make_extended_operator): Use
+ cplus_demangle_fill_extended_operator.
+ (d_make_ctor): Use cplus_demangle_fill_ctor.
+ (d_make_dtor): Use cplus_demangle_fill_dtor.
+ (cplus_demangle_mangled_name): Rename from d_mangled_name. Make
+ non-static by default. Change all callers.
+ (cplus_demangle_operators): Rename from d_operators. Change all
+ uses. Make non-static by default. Add sentinel at end of array.
+ (d_operator_name): Adjust initialization of high for new sentinel
+ in cplus_demangle_operators.
+ (cplus_demangle_builtin_types): Rename from d_builtin_types.
+ Change all uses. Make non-static by default. Change initializer
+ to use D_BUILTIN_TYPE_COUNT instead of magic number 26.
+ (cplus_demangle_type): Rename from d_type. Make non-static by
+ default. Change all callers.
+ (cplus_demangle_init_info): Rename from d_init_info. Make
+ non-static by default. Change all callers.
+ * cp-demangle.h: New file.
+ * cp-demint.c: New file.
+ * Makefile.in: Rebuild dependencies.
+ (CFILES): Add cp-demint.c.
+ (REQUIRED_OFILES): Add cp-demint.o.
+
+2004-01-09 Kelley Cook <kcook@gcc.gnu.org>
+
+ * configure.in: Rename file to ...
+ * configure.ac: ... this.
+ * Makefile.in: Update a comment for above change.
+ * README: Likewise.
+ * config.in: Regenerate.
+
+2004-01-02 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip
+ CV-qualifiers from D_COMP_LOCAL_NAME right subtree.
+ * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when
+ demangling template parameters.
+ * testsuite/test-demangle.c (fail): New static function.
+ (main): Support new options in input file: --no-params,
+ --is-v3-ctor, and --is-v3-dtor.
+ * testsuite/demangle-expected: Add --no-params to most tests, and
+ add the correct result when parameters are not demangled. Add
+ some simple tests for V3 constructor/destructor recognition.
+
+2003-12-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * cp-demangle.c (is_ctor_or_dtor): Fix error in last change.
+
+2003-12-22 Daniel Jacobowitz <drow@mvista.com>
+
+ PR debug/13272
+ * Makefile.in (lbasename.o): Depend on filenames.h.
+ * lbasename.c: Include "filenames.h" instead of defining
+ its macros locally.
+
+2003-12-22 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports
+ dynamic arrays.
+ (struct d_operator_info): Add len field.
+ (struct d_builtin_type_info): Add len and java_len fields.
+ (struct d_standard_sub_info): Add simple_len, full_len, and
+ set_last_name_len fields.
+ (struct d_comp): Add len field to s_string.
+ (struct d_info): Add send, did_subs, and expansion fields.
+ (d_append_string_constant): Define.
+ (d_append_string): Remove. Change all users to use
+ d_append_string_constant or d_append_buffer instead.
+ (d_make_sub): Add len parameter. Change all callers.
+ (d_name): Increase expansion when substituting std::.
+ (d_unqualified_name): Increase expansion for an operator.
+ (d_number): Don't use multiplication for negative numbers.
+ (d_identifier): Make sure there are enough characters in the
+ string for the specified length. Adjust expansion for an
+ anonymous namespace.
+ (d_operators): Initialize len field.
+ (d_special_name, d_ctor_dtor_name): Increase expansion.
+ (d_builtin_types): Initialize len and java_len fields.
+ (d_type): Increase expansion for a builtin type.
+ (d_cv_qualifiers): Increase expansion for each qualifier.
+ (d_bare_function_type): Decrease expansion when removing single
+ void parameter.
+ (d_template_param): Increment did_subs.
+ (d_expression): Increase expansion for an operator.
+ (d_expr_primary): Decrease expansion for a type we will print
+ specially.
+ (standard_subs): Initialize new fields.
+ (d_substitution): Increment did_subs when doing a normal
+ substitution. Increase expansion for a special substitution.
+ (d_print): Add estimate parameter. Change all callers.
+ (d_print_comp) [D_COMP_NAME]: Handle C++ case inline.
+ (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call.
+ (d_print_java_identifier): Rename from d_print_identifier. Handle
+ only Java case. Change caller.
+ (d_init_info): Change return type to void. Change all callers.
+ Initialize send, did_subs, and expansion fields. Do not
+ initialize comps and subs fields.
+ (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs
+ arrays on stack. Make an estimate of the length of the demangled
+ name. Ifdef CP_DEMANGLE_DEBUG, print estimation failures.
+ (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and
+ subs arrays on stack.
+
+2003-12-20 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * cp-demangle.c (d_identifier): In Java mode, skip an optional '$'
+ after the identifier.
+ * testsuite/demangle-expected: Add test case.
+
+2003-12-19 Ian Lance Taylor <ian@wasabisystems.com>
+
+ Fix for PR c++/13447:
+ * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME.
+ (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME.
+ (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like
+ D_COMP_QUAL_NAME.
+ (is_ctor_or_dtor): Likewise.
+ (d_local_name): Use D_COMP_LOCAL_NAME rather than
+ D_COMP_QUAL_NAME.
+ (d_print_comp) [D_COMP_LOCAL_NAME]: New.
+ (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is
+ D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree.
+ (d_print_mod_list): Handle D_COMP_LOCAL_NAME.
+ * testsuite/demangle-expected: Add two test cases.
+
+ * cp-demangle.c (d_print_function_type): Clear the global modifier
+ list when printing the modifiers, not just when printing the
+ function parameters.
+ * testsuite/demangle-expected: Add two test cases.
+
+2003-12-15 Ian Lance Taylor <ian@wasabisystems.com>
+
+ * cp-demangle.c (d_print_function_type): Print the function
+ parameters with no modifiers.
+ * testsuite/demangle-expected: Add test case.
+
+ * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't
+ expect that we've read the entire string.
+ (is_ctor_or_dtor): Don't expect that we've read the entire
+ string--reverse patch of 2003-11-29.
+
2003-12-15 Brendan Kehoe <brendan@zen.org>
* libiberty/Makefile.in (floatformat.o): Add dependency on
diff --git a/libiberty/Makefile.in b/libiberty/Makefile.in
index 5fff39be8b8..bbb5c2a7929 100644
--- a/libiberty/Makefile.in
+++ b/libiberty/Makefile.in
@@ -1,6 +1,6 @@
#
# Makefile
-# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003
+# Copyright (C) 1990, 91-99, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation
#
# This file is part of the libiberty library.
@@ -28,7 +28,6 @@
libiberty_topdir = @libiberty_topdir@
srcdir = @srcdir@
-VPATH = @srcdir@
prefix = @prefix@
@@ -70,8 +69,8 @@ PICFLAG =
MAKEOVERRIDES =
-TARGETLIB = libiberty.a
-TESTLIB = testlib.a
+TARGETLIB = ./libiberty.a
+TESTLIB = ./testlib.a
LIBOBJS = @LIBOBJS@
@@ -118,19 +117,19 @@ installcheck: installcheck-subdir
INCDIR=$(srcdir)/$(MULTISRCTOP)../include
COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
+
+# Just to make sure we don't use a built-in rule with VPATH
.c.o:
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $< -o pic/$@; \
- else true; fi
- $(COMPILE.c) $< $(OUTPUT_OPTION)
+ false
# NOTE: If you add new files to the library, add them to this list
# (alphabetical), and add them to REQUIRED_OFILES, or
-# CONFIGURED_OFILES and funcs in configure.in.
+# CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps"
+# to build the new rules.
CFILES = alloca.c argv.c asprintf.c atexit.c \
basename.c bcmp.c bcopy.c bsearch.c bzero.c \
calloc.c choose-temp.c clock.c concat.c cp-demangle.c \
- cplus-dem.c \
+ cp-demint.c cplus-dem.c \
dyn-string.c \
fdmatch.c ffs.c fibheap.c floatformat.c fnmatch.c \
getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \
@@ -158,45 +157,45 @@ CFILES = alloca.c argv.c asprintf.c atexit.c \
# These are always included in the library. The first four are listed
# first and by compile time to optimize parallel builds.
-REQUIRED_OFILES = regex.o cplus-dem.o cp-demangle.o md5.o \
- alloca.o argv.o \
- choose-temp.o concat.o \
- dyn-string.o \
- fdmatch.o fibheap.o floatformat.o fnmatch.o \
- getopt.o getopt1.o getpwd.o getruntime.o \
- hashtab.o hex.o \
- lbasename.o \
- lrealpath.o \
- make-relative-prefix.o \
- make-temp-file.o \
- objalloc.o obstack.o \
- partition.o physmem.o @pexecute@ \
- safe-ctype.o sort.o spaces.o splay-tree.o strerror.o \
- strsignal.o \
- ternary.o \
- xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o
+REQUIRED_OFILES = ./regex.o ./cplus-dem.o ./cp-demangle.o ./cp-demint.o ./md5.o \
+ ./alloca.o ./argv.o \
+ ./choose-temp.o ./concat.o \
+ ./dyn-string.o \
+ ./fdmatch.o ./fibheap.o ./floatformat.o ./fnmatch.o \
+ ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o \
+ ./hashtab.o ./hex.o \
+ ./lbasename.o \
+ ./lrealpath.o \
+ ./make-relative-prefix.o \
+ ./make-temp-file.o \
+ ./objalloc.o ./obstack.o \
+ ./partition.o ./physmem.o @pexecute@ \
+ ./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o ./strerror.o \
+ ./strsignal.o \
+ ./ternary.o \
+ ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o
# These are all the objects that configure may add to the library via
# $funcs or EXTRA_OFILES. This list exists here only for "make
# maint-missing" and "make check".
-CONFIGURED_OFILES = asprintf.o atexit.o \
- basename.o bcmp.o bcopy.o bsearch.o bzero.o \
- calloc.o clock.o copysign.o \
- _doprnt.o \
- ffs.o \
- getcwd.o getpagesize.o \
- index.o insque.o \
- memchr.o memcmp.o memcpy.o memmove.o mempcpy.o memset.o mkstemps.o \
- pex-djgpp.o pex-mpw.o pex-msdos.o pex-os2.o \
- pex-unix.o pex-win32.o \
- putenv.o \
- random.o rename.o rindex.o \
- setenv.o sigsetmask.o snprintf.o stpcpy.o stpncpy.o strcasecmp.o \
- strchr.o strdup.o strncasecmp.o strncmp.o strrchr.o strstr.o \
- strtod.o strtol.o strtoul.o \
- tmpnam.o \
- vasprintf.o vfork.o vfprintf.o vprintf.o vsnprintf.o vsprintf.o \
- waitpid.o
+CONFIGURED_OFILES = ./asprintf.o ./atexit.o \
+ ./basename.o ./bcmp.o ./bcopy.o ./bsearch.o ./bzero.o \
+ ./calloc.o ./clock.o ./copysign.o \
+ ./_doprnt.o \
+ ./ffs.o \
+ ./getcwd.o ./getpagesize.o \
+ ./index.o ./insque.o \
+ ./memchr.o ./memcmp.o ./memcpy.o ./memmove.o ./mempcpy.o ./memset.o ./mkstemps.o \
+ ./pex-djgpp.o ./pex-mpw.o ./pex-msdos.o ./pex-os2.o \
+ ./pex-unix.o ./pex-win32.o \
+ ./putenv.o \
+ ./random.o ./rename.o ./rindex.o \
+ ./setenv.o ./sigsetmask.o ./snprintf.o ./stpcpy.o ./stpncpy.o ./strcasecmp.o \
+ ./strchr.o ./strdup.o ./strncasecmp.o ./strncmp.o ./strrchr.o ./strstr.o \
+ ./strtod.o ./strtol.o ./strtoul.o \
+ ./tmpnam.o \
+ ./vasprintf.o ./vfork.o ./vfprintf.o ./vprintf.o ./vsnprintf.o ./vsprintf.o \
+ ./waitpid.o
# These files are installed if the library has been configured to do so.
INSTALLED_HEADERS = \
@@ -376,7 +375,7 @@ clean: clean-subdir
distclean: distclean-subdir
$(MAKE) SUBDIRS="" clean
@$(MULTICLEAN) multi-clean DO=distclean
- -rm -f *~ Makefile config.status xhost-mkfrag TAGS multilib.out
+ -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out
-rm -f config.log
-rmdir testsuite 2>/dev/null
maintainer-clean realclean: maintainer-clean-subdir
@@ -390,8 +389,8 @@ Makefile: $(srcdir)/Makefile.in config.status
# Depending on Makefile makes sure that config.status has been re-run
# if needed. This prevents problems with parallel builds.
config.h: stamp-h ; @true
-stamp-h: config.in config.status Makefile
- CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
+stamp-h: $(srcdir)/config.in config.status Makefile
+ CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
config.status: $(srcdir)/configure $(srcdir)/config.table
$(SHELL) ./config.status --recheck
@@ -415,110 +414,643 @@ $(CONFIGURED_OFILES): stamp-picdir
# The dependencies in the remainder of this file are automatically
# generated by "make maint-deps". Manual edits will be lost.
-_doprnt.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-alloca.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-argv.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-asprintf.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-atexit.o: config.h
-basename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+./_doprnt.o: $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/safe-ctype.h
-bsearch.o: config.h $(INCDIR)/ansidecl.h
-calloc.o: $(INCDIR)/ansidecl.h
-choose-temp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-clock.o: config.h
-concat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-copysign.o: $(INCDIR)/ansidecl.h
-cp-demangle.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \
- $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
-cplus-dem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/demangle.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-dyn-string.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/dyn-string.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
+
+./alloca.o: $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/libiberty.h
-fdmatch.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-fibheap.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/fibheap.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
+
+./argv.o: $(srcdir)/argv.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
+
+./asprintf.o: $(srcdir)/asprintf.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
+
+./atexit.o: $(srcdir)/atexit.c config.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
+
+./basename.o: $(srcdir)/basename.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
+
+./bcmp.o: $(srcdir)/bcmp.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
+
+./bcopy.o: $(srcdir)/bcopy.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
+
+./bsearch.o: $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
+
+./bzero.o: $(srcdir)/bzero.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
+
+./calloc.o: $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
+
+./choose-temp.o: $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/libiberty.h
-floatformat.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/floatformat.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
+
+./clock.o: $(srcdir)/clock.c config.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
+
+./concat.o: $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/libiberty.h
-fnmatch.o: config.h $(INCDIR)/fnmatch.h $(INCDIR)/safe-ctype.h
-getcwd.o: config.h
-getopt.o: config.h $(INCDIR)/getopt.h
-getopt1.o: config.h $(INCDIR)/getopt.h
-getpagesize.o: config.h
-getpwd.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-getruntime.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-hashtab.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/hashtab.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
+
+./copysign.o: $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
+
+./cp-demangle.o: $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
+ $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
+ $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
+
+./cp-demint.o: $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
+ $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
$(INCDIR)/libiberty.h
-hex.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
+
+./cplus-dem.o: $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
+
+./dyn-string.o: $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
+
+./fdmatch.o: $(srcdir)/fdmatch.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
+
+./ffs.o: $(srcdir)/ffs.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
+
+./fibheap.o: $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/fibheap.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
+
+./floatformat.o: $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
+
+./fnmatch.o: $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
$(INCDIR)/safe-ctype.h
-lbasename.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
+
+./getcwd.o: $(srcdir)/getcwd.c config.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
+
+./getopt.o: $(srcdir)/getopt.c config.h $(INCDIR)/getopt.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
+
+./getopt1.o: $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
+
+./getpagesize.o: $(srcdir)/getpagesize.c config.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
+
+./getpwd.o: $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
+
+./getruntime.o: $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
+
+./hashtab.o: $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
+
+./hex.o: $(srcdir)/hex.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
+
+./index.o: $(srcdir)/index.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
+
+./insque.o: $(srcdir)/insque.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
+
+./lbasename.o: $(srcdir)/lbasename.c $(INCDIR)/ansidecl.h $(INCDIR)/filenames.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
+
+./lrealpath.o: $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
+
+./make-relative-prefix.o: $(srcdir)/make-relative-prefix.c config.h \
+ $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
+
+./make-temp-file.o: $(srcdir)/make-temp-file.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
+
+./md5.o: $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
+
+./memchr.o: $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
+
+./memcmp.o: $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
+
+./memcpy.o: $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
+
+./memmove.o: $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
+
+./mempcpy.o: $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
+
+./memset.o: $(srcdir)/memset.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
+
+./mkstemps.o: $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
+
+./mpw.o: $(srcdir)/mpw.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/mpw.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/mpw.c $(OUTPUT_OPTION)
+
+./msdos.o: $(srcdir)/msdos.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
+
+./objalloc.o: $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/objalloc.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
+
+./obstack.o: $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
+
+./partition.o: $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/partition.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
+
+./pex-djgpp.o: $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
+
+./pex-mpw.o: $(srcdir)/pex-mpw.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-mpw.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-mpw.c $(OUTPUT_OPTION)
+
+./pex-msdos.o: $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
$(INCDIR)/safe-ctype.h
-lrealpath.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-make-relative-prefix.o: config.h $(INCDIR)/ansidecl.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
+
+./pex-os2.o: $(srcdir)/pex-os2.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-os2.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-os2.c $(OUTPUT_OPTION)
+
+./pex-unix.o: $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
+
+./pex-win32.o: $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
+
+./physmem.o: $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/libiberty.h
-make-temp-file.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-md5.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
-memchr.o: $(INCDIR)/ansidecl.h
-memcmp.o: $(INCDIR)/ansidecl.h
-memcpy.o: $(INCDIR)/ansidecl.h
-memmove.o: $(INCDIR)/ansidecl.h
-mempcpy.o: $(INCDIR)/ansidecl.h
-memset.o: $(INCDIR)/ansidecl.h
-mkstemps.o: config.h $(INCDIR)/ansidecl.h
-objalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/objalloc.h
-obstack.o: config.h $(INCDIR)/obstack.h
-partition.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/partition.h
-pex-djgpp.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h
-pex-mpw.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h
-pex-msdos.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h $(INCDIR)/safe-ctype.h
-pex-os2.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h
-pex-unix.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h
-pex-win32.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/pex-common.h
-physmem.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-putenv.o: config.h $(INCDIR)/ansidecl.h
-random.o: $(INCDIR)/ansidecl.h
-regex.o: config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
-rename.o: config.h $(INCDIR)/ansidecl.h
-safe-ctype.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-setenv.o: config.h $(INCDIR)/ansidecl.h
-sigsetmask.o: $(INCDIR)/ansidecl.h
-snprintf.o: $(INCDIR)/ansidecl.h
-sort.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
+
+./putenv.o: $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
+
+./random.o: $(srcdir)/random.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
+
+./regex.o: $(srcdir)/regex.c config.h $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
+
+./rename.o: $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
+
+./rindex.o: $(srcdir)/rindex.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
+
+./safe-ctype.o: $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
+
+./setenv.o: $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
+
+./sigsetmask.o: $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
+
+./snprintf.o: $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
+
+./sort.o: $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
$(INCDIR)/sort.h
-spaces.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-splay-tree.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/splay-tree.h
-stpcpy.o: $(INCDIR)/ansidecl.h
-stpncpy.o: $(INCDIR)/ansidecl.h
-strcasecmp.o: $(INCDIR)/ansidecl.h
-strchr.o: $(INCDIR)/ansidecl.h
-strdup.o: $(INCDIR)/ansidecl.h
-strerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-strncasecmp.o: $(INCDIR)/ansidecl.h
-strncmp.o: $(INCDIR)/ansidecl.h
-strrchr.o: $(INCDIR)/ansidecl.h
-strsignal.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-strtod.o: $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-strtol.o: config.h $(INCDIR)/safe-ctype.h
-strtoul.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
-ternary.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(INCDIR)/ternary.h
-vasprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-vfork.o: $(INCDIR)/ansidecl.h
-vfprintf.o: $(INCDIR)/ansidecl.h
-vprintf.o: $(INCDIR)/ansidecl.h
-vsnprintf.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-vsprintf.o: $(INCDIR)/ansidecl.h
-waitpid.o: config.h
-xatexit.o: $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-xexit.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-xmalloc.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-xmemdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-xstrdup.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-xstrerror.o: config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
+
+./spaces.o: $(srcdir)/spaces.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
+
+./splay-tree.o: $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
+
+./stpcpy.o: $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
+
+./stpncpy.o: $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
+
+./strcasecmp.o: $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
+
+./strchr.o: $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
+
+./strdup.o: $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
+
+./strerror.o: $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
+
+./strncasecmp.o: $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
+
+./strncmp.o: $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
+
+./strrchr.o: $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
+
+./strsignal.o: $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
+
+./strstr.o: $(srcdir)/strstr.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
+
+./strtod.o: $(srcdir)/strtod.c $(INCDIR)/ansidecl.h $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
+
+./strtol.o: $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
+
+./strtoul.o: $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/safe-ctype.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
+
+./ternary.o: $(srcdir)/ternary.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h $(INCDIR)/ternary.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/ternary.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/ternary.c $(OUTPUT_OPTION)
+
+./tmpnam.o: $(srcdir)/tmpnam.c
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
+
+./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
+
+./vfork.o: $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
+
+./vfprintf.o: $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
+
+./vprintf.o: $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
+
+./vsnprintf.o: $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
+
+./vsprintf.o: $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
+
+./waitpid.o: $(srcdir)/waitpid.c config.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
+
+./xatexit.o: $(srcdir)/xatexit.c $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
+
+./xexit.o: $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
+
+./xmalloc.o: $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
+
+./xmemdup.o: $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
+
+./xstrdup.o: $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
+
+./xstrerror.o: $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
+ $(INCDIR)/libiberty.h
+ if [ x"$(PICFLAG)" != x ]; then \
+ $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
+ else true; fi
+ $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
+
diff --git a/libiberty/README b/libiberty/README
index e8e9b338350..886bd67bc9d 100644
--- a/libiberty/README
+++ b/libiberty/README
@@ -34,7 +34,7 @@ name of the function must be the same as the name of the file.
* Add the source file name to CFILES.
* Add the function to name to the funcs shell variable in
- configure.in.
+ configure.ac.
* Add the function to the AC_CHECK_FUNCS lists just after the
setting of the funcs shell variable. These AC_CHECK_FUNCS calls
diff --git a/libiberty/config.in b/libiberty/config.in
index 50ed3266852..8e5071aec7b 100644
--- a/libiberty/config.in
+++ b/libiberty/config.in
@@ -1,339 +1,376 @@
-/* config.in. Generated automatically from configure.in by autoheader. */
-
-/* Define to empty if the keyword does not work. */
-#undef const
-
-/* Define if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define if you have <vfork.h>. */
-#undef HAVE_VFORK_H
-
-/* Define as __inline if that's what the C compiler calls it. */
-#undef inline
-
-/* Define if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Define to `int' if <sys/types.h> doesn't define. */
-#undef pid_t
-
-/* Define if you need to in order for stat and other things to work. */
-#undef _POSIX_SOURCE
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
+/* config.in. Generated from configure.ac by autoheader. */
+/* Define to `unsigned long' if <sys/types.h> doesn't define. */
+#undef uintptr_t
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-/* Define vfork as fork if vfork does not work. */
-#undef vfork
+/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
+#undef BYTEORDER
-/* Define to `unsigned long' if <sys/types.h> doesn't define. */
-#undef uintptr_t
+/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
+ This function is required for alloca.c support on those systems. */
+#undef CRAY_STACKSEG_END
-/* Define if you have the _doprnt function. */
-#undef HAVE__DOPRNT
+/* Define to 1 if you have the <alloca.h> header file. */
+#undef HAVE_ALLOCA_H
-/* Define if you have the asprintf function. */
+/* Define to 1 if you have the `asprintf' function. */
#undef HAVE_ASPRINTF
-/* Define if you have the atexit function. */
+/* Define to 1 if you have the `atexit' function. */
#undef HAVE_ATEXIT
-/* Define if you have the basename function. */
+/* Define to 1 if you have the `basename' function. */
#undef HAVE_BASENAME
-/* Define if you have the bcmp function. */
+/* Define to 1 if you have the `bcmp' function. */
#undef HAVE_BCMP
-/* Define if you have the bcopy function. */
+/* Define to 1 if you have the `bcopy' function. */
#undef HAVE_BCOPY
-/* Define if you have the bsearch function. */
+/* Define to 1 if you have the `bsearch' function. */
#undef HAVE_BSEARCH
-/* Define if you have the bzero function. */
+/* Define to 1 if you have the `bzero' function. */
#undef HAVE_BZERO
-/* Define if you have the calloc function. */
+/* Define to 1 if you have the `calloc' function. */
#undef HAVE_CALLOC
-/* Define if you have the canonicalize_file_name function. */
+/* Define to 1 if you have the `canonicalize_file_name' function. */
#undef HAVE_CANONICALIZE_FILE_NAME
-/* Define if you have the clock function. */
+/* Define to 1 if you have the `clock' function. */
#undef HAVE_CLOCK
-/* Define if you have the ffs function. */
+/* Define to 1 if you have the <fcntl.h> header file. */
+#undef HAVE_FCNTL_H
+
+/* Define to 1 if you have the `ffs' function. */
#undef HAVE_FFS
-/* Define if you have the getcwd function. */
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `getcwd' function. */
#undef HAVE_GETCWD
-/* Define if you have the getpagesize function. */
+/* Define to 1 if you have the `getpagesize' function. */
#undef HAVE_GETPAGESIZE
-/* Define if you have the getrusage function. */
+/* Define to 1 if you have the `getrusage' function. */
#undef HAVE_GETRUSAGE
-/* Define if you have the getsysinfo function. */
+/* Define to 1 if you have the `getsysinfo' function. */
#undef HAVE_GETSYSINFO
-/* Define if you have the gettimeofday function. */
+/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY
-/* Define if you have the index function. */
+/* Define to 1 if you have the `index' function. */
#undef HAVE_INDEX
-/* Define if you have the insque function. */
+/* Define to 1 if you have the `insque' function. */
#undef HAVE_INSQUE
-/* Define if you have the memchr function. */
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */
+#undef HAVE_MACHINE_HAL_SYSINFO_H
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* Define to 1 if you have the `memchr' function. */
#undef HAVE_MEMCHR
-/* Define if you have the memcmp function. */
+/* Define to 1 if you have the `memcmp' function. */
#undef HAVE_MEMCMP
-/* Define if you have the memcpy function. */
+/* Define to 1 if you have the `memcpy' function. */
#undef HAVE_MEMCPY
-/* Define if you have the memmove function. */
+/* Define to 1 if you have the `memmove' function. */
#undef HAVE_MEMMOVE
-/* Define if you have the mempcpy function. */
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
#undef HAVE_MEMPCPY
-/* Define if you have the memset function. */
+/* Define to 1 if you have the `memset' function. */
#undef HAVE_MEMSET
-/* Define if you have the mkstemps function. */
+/* Define to 1 if you have the `mkstemps' function. */
#undef HAVE_MKSTEMPS
-/* Define if you have the on_exit function. */
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `on_exit' function. */
#undef HAVE_ON_EXIT
-/* Define if you have the psignal function. */
+/* Define to 1 if you have the `psignal' function. */
#undef HAVE_PSIGNAL
-/* Define if you have the pstat_getdynamic function. */
+/* Define to 1 if you have the `pstat_getdynamic' function. */
#undef HAVE_PSTAT_GETDYNAMIC
-/* Define if you have the pstat_getstatic function. */
+/* Define to 1 if you have the `pstat_getstatic' function. */
#undef HAVE_PSTAT_GETSTATIC
-/* Define if you have the putenv function. */
+/* Define to 1 if you have the `putenv' function. */
#undef HAVE_PUTENV
-/* Define if you have the random function. */
+/* Define to 1 if you have the `random' function. */
#undef HAVE_RANDOM
-/* Define if you have the realpath function. */
+/* Define to 1 if you have the `realpath' function. */
#undef HAVE_REALPATH
-/* Define if you have the rename function. */
+/* Define to 1 if you have the `rename' function. */
#undef HAVE_RENAME
-/* Define if you have the rindex function. */
+/* Define to 1 if you have the `rindex' function. */
#undef HAVE_RINDEX
-/* Define if you have the sbrk function. */
+/* Define to 1 if you have the `sbrk' function. */
#undef HAVE_SBRK
-/* Define if you have the setenv function. */
+/* Define to 1 if you have the `setenv' function. */
#undef HAVE_SETENV
-/* Define if you have the sigsetmask function. */
+/* Define to 1 if you have the `sigsetmask' function. */
#undef HAVE_SIGSETMASK
-/* Define if you have the snprintf function. */
+/* Define to 1 if you have the `snprintf' function. */
#undef HAVE_SNPRINTF
-/* Define if you have the stpcpy function. */
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
#undef HAVE_STPCPY
-/* Define if you have the stpncpy function. */
+/* Define to 1 if you have the `stpncpy' function. */
#undef HAVE_STPNCPY
-/* Define if you have the strcasecmp function. */
+/* Define to 1 if you have the `strcasecmp' function. */
#undef HAVE_STRCASECMP
-/* Define if you have the strchr function. */
+/* Define to 1 if you have the `strchr' function. */
#undef HAVE_STRCHR
-/* Define if you have the strdup function. */
+/* Define to 1 if you have the `strdup' function. */
#undef HAVE_STRDUP
-/* Define if you have the strerror function. */
+/* Define to 1 if you have the `strerror' function. */
#undef HAVE_STRERROR
-/* Define if you have the strncasecmp function. */
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
#undef HAVE_STRNCASECMP
-/* Define if you have the strrchr function. */
+/* Define to 1 if you have the `strrchr' function. */
#undef HAVE_STRRCHR
-/* Define if you have the strsignal function. */
+/* Define to 1 if you have the `strsignal' function. */
#undef HAVE_STRSIGNAL
-/* Define if you have the strstr function. */
+/* Define to 1 if you have the `strstr' function. */
#undef HAVE_STRSTR
-/* Define if you have the strtod function. */
+/* Define to 1 if you have the `strtod' function. */
#undef HAVE_STRTOD
-/* Define if you have the strtol function. */
+/* Define to 1 if you have the `strtol' function. */
#undef HAVE_STRTOL
-/* Define if you have the strtoul function. */
+/* Define to 1 if you have the `strtoul' function. */
#undef HAVE_STRTOUL
-/* Define if you have the sysconf function. */
+/* Define to 1 if you have the `sysconf' function. */
#undef HAVE_SYSCONF
-/* Define if you have the sysctl function. */
+/* Define to 1 if you have the `sysctl' function. */
#undef HAVE_SYSCTL
-/* Define if you have the sysmp function. */
+/* Define to 1 if you have the `sysmp' function. */
#undef HAVE_SYSMP
-/* Define if you have the table function. */
-#undef HAVE_TABLE
+/* Define if you have the sys_errlist variable. */
+#undef HAVE_SYS_ERRLIST
-/* Define if you have the times function. */
-#undef HAVE_TIMES
+/* Define to 1 if you have the <sys/file.h> header file. */
+#undef HAVE_SYS_FILE_H
-/* Define if you have the tmpnam function. */
-#undef HAVE_TMPNAM
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
-/* Define if you have the vasprintf function. */
-#undef HAVE_VASPRINTF
+/* Define if you have the sys_nerr variable. */
+#undef HAVE_SYS_NERR
-/* Define if you have the vfprintf function. */
-#undef HAVE_VFPRINTF
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
-/* Define if you have the vprintf function. */
-#undef HAVE_VPRINTF
+/* Define to 1 if you have the <sys/pstat.h> header file. */
+#undef HAVE_SYS_PSTAT_H
-/* Define if you have the vsnprintf function. */
-#undef HAVE_VSNPRINTF
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
-/* Define if you have the vsprintf function. */
-#undef HAVE_VSPRINTF
+/* Define if you have the sys_siglist variable. */
+#undef HAVE_SYS_SIGLIST
-/* Define if you have the waitpid function. */
-#undef HAVE_WAITPID
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
-/* Define if you have the <alloca.h> header file. */
-#undef HAVE_ALLOCA_H
+/* Define to 1 if you have the <sys/sysctl.h> header file. */
+#undef HAVE_SYS_SYSCTL_H
-/* Define if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+#undef HAVE_SYS_SYSINFO_H
-/* Define if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
+/* Define to 1 if you have the <sys/sysmp.h> header file. */
+#undef HAVE_SYS_SYSMP_H
-/* Define if you have the <machine/hal_sysinfo.h> header file. */
-#undef HAVE_MACHINE_HAL_SYSINFO_H
+/* Define to 1 if you have the <sys/systemcfg.h> header file. */
+#undef HAVE_SYS_SYSTEMCFG_H
-/* Define if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
+/* Define to 1 if you have the <sys/table.h> header file. */
+#undef HAVE_SYS_TABLE_H
-/* Define if you have the <string.h> header file. */
-#undef HAVE_STRING_H
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
-/* Define if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
-/* Define if you have the <sys/file.h> header file. */
-#undef HAVE_SYS_FILE_H
+/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
+#undef HAVE_SYS_WAIT_H
-/* Define if you have the <sys/mman.h> header file. */
-#undef HAVE_SYS_MMAN_H
+/* Define to 1 if you have the `table' function. */
+#undef HAVE_TABLE
-/* Define if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
+/* Define to 1 if you have the `times' function. */
+#undef HAVE_TIMES
-/* Define if you have the <sys/pstat.h> header file. */
-#undef HAVE_SYS_PSTAT_H
+/* Define to 1 if you have the <time.h> header file. */
+#undef HAVE_TIME_H
-/* Define if you have the <sys/resource.h> header file. */
-#undef HAVE_SYS_RESOURCE_H
+/* Define to 1 if you have the `tmpnam' function. */
+#undef HAVE_TMPNAM
-/* Define if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
+/* Define if you have the \`uintptr_t' type. */
+#undef HAVE_UINTPTR_T
-/* Define if you have the <sys/sysctl.h> header file. */
-#undef HAVE_SYS_SYSCTL_H
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
-/* Define if you have the <sys/sysinfo.h> header file. */
-#undef HAVE_SYS_SYSINFO_H
+/* Define to 1 if you have the `vasprintf' function. */
+#undef HAVE_VASPRINTF
-/* Define if you have the <sys/sysmp.h> header file. */
-#undef HAVE_SYS_SYSMP_H
+/* Define to 1 if you have the `vfork' function. */
+#undef HAVE_VFORK
-/* Define if you have the <sys/systemcfg.h> header file. */
-#undef HAVE_SYS_SYSTEMCFG_H
+/* Define to 1 if you have the <vfork.h> header file. */
+#undef HAVE_VFORK_H
-/* Define if you have the <sys/table.h> header file. */
-#undef HAVE_SYS_TABLE_H
+/* Define to 1 if you have the `vfprintf' function. */
+#undef HAVE_VFPRINTF
-/* Define if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
-/* Define if you have the <time.h> header file. */
-#undef HAVE_TIME_H
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
-/* Define if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `vsprintf' function. */
+#undef HAVE_VSPRINTF
-/* Define if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
-/* whether byteorder is bigendian */
-#undef WORDS_BIGENDIAN
+/* Define to 1 if `fork' works. */
+#undef HAVE_WORKING_FORK
+
+/* Define to 1 if `vfork' works. */
+#undef HAVE_WORKING_VFORK
+
+/* Define to 1 if you have the `_doprnt' function. */
+#undef HAVE__DOPRNT
+
+/* Define if you have the _system_configuration variable. */
+#undef HAVE__SYSTEM_CONFIGURATION
/* Define if the host machine stores words of multi-word integers in
big-endian order. */
#undef HOST_WORDS_BIG_ENDIAN
-/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */
-#undef BYTEORDER
+/* Define if canonicalize_file_name is not declared in system header files. */
+#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME
/* Define if errno must be declared even when <errno.h> is included. */
#undef NEED_DECLARATION_ERRNO
-/* Define if you have the `uintptr_t' type. */
-#undef HAVE_UINTPTR_T
+/* Define to 1 if your C compiler doesn't accept -c and -o together. */
+#undef NO_MINUS_C_MINUS_O
-/* Define if you have the sys_errlist variable. */
-#undef HAVE_SYS_ERRLIST
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
-/* Define if you have the sys_nerr variable. */
-#undef HAVE_SYS_NERR
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
-/* Define if you have the sys_siglist variable. */
-#undef HAVE_SYS_SIGLIST
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP
- systems. This function is required for alloca.c support on those
- systems. */
-#undef CRAY_STACKSEG_END
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
-/* Define if you know the direction of stack growth for your system;
- otherwise it will be automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
+/* Define if you know the direction of stack growth for your system; otherwise
+ it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows
+ toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses
+ STACK_DIRECTION = 0 => direction of growth unknown */
#undef STACK_DIRECTION
-/* Define if you have the _system_configuration variable. */
-#undef HAVE__SYSTEM_CONFIGURATION
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
-/* Define if canonicalize_file_name is not declared in system header files. */
-#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* whether byteorder is bigendian */
+#undef WORDS_BIGENDIAN
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define as `__inline' if that's what the C compiler calls it, or to nothing
+ if it is not supported. */
+#undef inline
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define to `unsigned long' if <sys/types.h> does not define. */
+#undef uintptr_t
+
+/* Define as `fork' if `vfork' does not work. */
+#undef vfork
diff --git a/libiberty/configure b/libiberty/configure
index 71f14e8a93c..2f65976692d 100755
--- a/libiberty/configure
+++ b/libiberty/configure
@@ -5679,11 +5679,11 @@ fi
# Figure out which version of pexecute to use.
case "${host}" in
- *-*-mingw* | *-*-winnt*) pexecute=pex-win32.o ;;
- *-*-msdosdjgpp*) pexecute=pex-djgpp.o ;;
- *-*-msdos*) pexecute=pex-msdos.o ;;
- *-*-os2-emx*) pexecute=pex-os2.o ;;
- *) pexecute=pex-unix.o ;;
+ *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;;
+ *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;;
+ *-*-msdos*) pexecute=./pex-msdos.o ;;
+ *-*-os2-emx*) pexecute=./pex-os2.o ;;
+ *) pexecute=./pex-unix.o ;;
esac
@@ -6134,6 +6134,16 @@ else
fi
+
+L=""
+for l in x $LIBOBJS; do
+ case $l in
+ x) ;;
+ *) L="$L ./$l" ;;
+ esac
+done
+LIBOBJS="$L"
+
# We need multilib support, but only if configuring for the target.
ac_config_files="$ac_config_files Makefile testsuite/Makefile"
ac_config_commands="$ac_config_commands default"
diff --git a/libiberty/configure.in b/libiberty/configure.ac
index eb8a99daa08..e8907e708c8 100644
--- a/libiberty/configure.in
+++ b/libiberty/configure.ac
@@ -477,11 +477,11 @@ fi
# Figure out which version of pexecute to use.
case "${host}" in
- *-*-mingw* | *-*-winnt*) pexecute=pex-win32.o ;;
- *-*-msdosdjgpp*) pexecute=pex-djgpp.o ;;
- *-*-msdos*) pexecute=pex-msdos.o ;;
- *-*-os2-emx*) pexecute=pex-os2.o ;;
- *) pexecute=pex-unix.o ;;
+ *-*-mingw* | *-*-winnt*) pexecute=./pex-win32.o ;;
+ *-*-msdosdjgpp*) pexecute=./pex-djgpp.o ;;
+ *-*-msdos*) pexecute=./pex-msdos.o ;;
+ *-*-os2-emx*) pexecute=./pex-os2.o ;;
+ *) pexecute=./pex-unix.o ;;
esac
AC_SUBST(pexecute)
@@ -496,6 +496,16 @@ else
fi
AC_SUBST(INSTALL_DEST)
+m4_pattern_allow(LIBOBJS)
+L=""
+for l in x $LIBOBJS; do
+ case $l in
+ x) ;;
+ *) L="$L ./$l" ;;
+ esac
+done
+LIBOBJS="$L"
+
# We need multilib support, but only if configuring for the target.
AC_OUTPUT(Makefile testsuite/Makefile,
[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 7a806dc44b2..19f191ed8b8 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1,5 +1,5 @@
/* Demangler for g++ V3 ABI.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@wasabisystems.com>.
This file is part of the libiberty library, which is part of GCC.
@@ -45,6 +45,22 @@
enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
+ Also, the interface to the component list is public, and defined in
+ demangle.h. The interface consists of these types, which are
+ defined in demangle.h:
+ enum demangle_component_type
+ struct demangle_component
+ and these functions defined in this file:
+ cplus_demangle_fill_name
+ cplus_demangle_fill_extended_operator
+ cplus_demangle_fill_ctor
+ cplus_demangle_fill_dtor
+ cplus_demangle_print
+ and other functions defined in the file cp-demint.c.
+
+ This file also defines some other functions and variables which are
+ only to be used by the file cp-demint.c.
+
Preprocessor macros you can define while compiling this file:
IN_LIBGCC2
@@ -54,7 +70,8 @@
instead of cplus_demangle_v3() and java_demangle_v3().
IN_GLIBCPP_V3
- If defined, this file defines only __cxa_demangle().
+ If defined, this file defines only __cxa_demangle(), and no other
+ publically visible functions or variables.
STANDALONE_DEMANGLER
If defined, this file defines a main() function which demangles
@@ -81,6 +98,68 @@
#include "ansidecl.h"
#include "libiberty.h"
#include "demangle.h"
+#include "cp-demangle.h"
+
+/* If IN_GLIBCPP_V3 is defined, some functions are made static. We
+ also rename them via #define to avoid compiler errors when the
+ static definition conflicts with the extern declaration in a header
+ file. */
+#ifdef IN_GLIBCPP_V3
+
+#define CP_STATIC_IF_GLIBCPP_V3 static
+
+#define cplus_demangle_fill_name d_fill_name
+static int
+d_fill_name PARAMS ((struct demangle_component *, const char *, int));
+
+#define cplus_demangle_fill_extended_operator d_fill_extended_operator
+static int
+d_fill_extended_operator PARAMS ((struct demangle_component *, int,
+ struct demangle_component *));
+
+#define cplus_demangle_fill_ctor d_fill_ctor
+static int
+d_fill_ctor PARAMS ((struct demangle_component *, enum gnu_v3_ctor_kinds,
+ struct demangle_component *));
+
+#define cplus_demangle_fill_dtor d_fill_dtor
+static int
+d_fill_dtor PARAMS ((struct demangle_component *, enum gnu_v3_dtor_kinds,
+ struct demangle_component *));
+
+#define cplus_demangle_mangled_name d_mangled_name
+static struct demangle_component *
+d_mangled_name PARAMS ((struct d_info *, int));
+
+#define cplus_demangle_type d_type
+static struct demangle_component *
+d_type PARAMS ((struct d_info *));
+
+#define cplus_demangle_print d_print
+static char *
+d_print PARAMS ((int, const struct demangle_component *, int, size_t *));
+
+#define cplus_demangle_init_info d_init_info
+static void
+d_init_info PARAMS ((const char *, int, size_t, struct d_info *));
+
+#else /* ! defined(IN_GLIBCPP_V3) */
+#define CP_STATIC_IF_GLIBCPP_V3
+#endif /* ! defined(IN_GLIBCPP_V3) */
+
+/* See if the compiler supports dynamic arrays. */
+
+#ifdef __GNUC__
+#define CP_DYNAMIC_ARRAYS
+#else
+#ifdef __STDC__
+#ifdef __STDC_VERSION__
+#if __STDC_VERSION__ >= 199901L
+#define CP_DYNAMIC_ARRAYS
+#endif /* __STDC__VERSION >= 199901L */
+#endif /* defined (__STDC_VERSION__) */
+#endif /* defined (__STDC__) */
+#endif /* ! defined (__GNUC__) */
/* We avoid pulling in the ctype tables, to prevent pulling in
additional unresolved symbols when this code is used in a library.
@@ -101,46 +180,6 @@
#define ANONYMOUS_NAMESPACE_PREFIX_LEN \
(sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
-/* Information we keep for operators. */
-
-struct d_operator_info
-{
- /* Mangled name. */
- const char *code;
- /* Real name. */
- const char *name;
- /* Number of arguments. */
- int args;
-};
-
-/* How to print the value of a builtin type. */
-
-enum d_builtin_type_print
-{
- /* Print as (type)val. */
- D_PRINT_DEFAULT,
- /* Print as integer. */
- D_PRINT_INT,
- /* Print as long, with trailing `l'. */
- D_PRINT_LONG,
- /* Print as bool. */
- D_PRINT_BOOL,
- /* Print in usual way, but here to detect void. */
- D_PRINT_VOID
-};
-
-/* Information we keep for a builtin type. */
-
-struct d_builtin_type_info
-{
- /* Type name. */
- const char *name;
- /* Type name when using Java. */
- const char *java_name;
- /* How to print a value of this type. */
- enum d_builtin_type_print print;
-};
-
/* Information we keep for the standard substitutions. */
struct d_standard_sub_info
@@ -149,228 +188,26 @@ struct d_standard_sub_info
char code;
/* The simple string it expands to. */
const char *simple_expansion;
+ /* The length of the simple expansion. */
+ int simple_len;
/* The results of a full, verbose, expansion. This is used when
qualifying a constructor/destructor, or when in verbose mode. */
const char *full_expansion;
+ /* The length of the full expansion. */
+ int full_len;
/* What to set the last_name field of d_info to; NULL if we should
not set it. This is only relevant when qualifying a
constructor/destructor. */
const char *set_last_name;
+ /* The length of set_last_name. */
+ int set_last_name_len;
};
-/* Component types found in mangled names. */
-
-enum d_comp_type
-{
- /* A name. */
- D_COMP_NAME,
- /* A qualified name. */
- D_COMP_QUAL_NAME,
- /* A typed name. */
- D_COMP_TYPED_NAME,
- /* A template. */
- D_COMP_TEMPLATE,
- /* A template parameter. */
- D_COMP_TEMPLATE_PARAM,
- /* A constructor. */
- D_COMP_CTOR,
- /* A destructor. */
- D_COMP_DTOR,
- /* A vtable. */
- D_COMP_VTABLE,
- /* A VTT structure. */
- D_COMP_VTT,
- /* A construction vtable. */
- D_COMP_CONSTRUCTION_VTABLE,
- /* A typeinfo structure. */
- D_COMP_TYPEINFO,
- /* A typeinfo name. */
- D_COMP_TYPEINFO_NAME,
- /* A typeinfo function. */
- D_COMP_TYPEINFO_FN,
- /* A thunk. */
- D_COMP_THUNK,
- /* A virtual thunk. */
- D_COMP_VIRTUAL_THUNK,
- /* A covariant thunk. */
- D_COMP_COVARIANT_THUNK,
- /* A Java class. */
- D_COMP_JAVA_CLASS,
- /* A guard variable. */
- D_COMP_GUARD,
- /* A reference temporary. */
- D_COMP_REFTEMP,
- /* A standard substitution. */
- D_COMP_SUB_STD,
- /* The restrict qualifier. */
- D_COMP_RESTRICT,
- /* The volatile qualifier. */
- D_COMP_VOLATILE,
- /* The const qualifier. */
- D_COMP_CONST,
- /* The restrict qualifier modifying a member function. */
- D_COMP_RESTRICT_THIS,
- /* The volatile qualifier modifying a member function. */
- D_COMP_VOLATILE_THIS,
- /* The const qualifier modifying a member function. */
- D_COMP_CONST_THIS,
- /* A vendor qualifier. */
- D_COMP_VENDOR_TYPE_QUAL,
- /* A pointer. */
- D_COMP_POINTER,
- /* A reference. */
- D_COMP_REFERENCE,
- /* A complex type. */
- D_COMP_COMPLEX,
- /* An imaginary type. */
- D_COMP_IMAGINARY,
- /* A builtin type. */
- D_COMP_BUILTIN_TYPE,
- /* A vendor's builtin type. */
- D_COMP_VENDOR_TYPE,
- /* A function type. */
- D_COMP_FUNCTION_TYPE,
- /* An array type. */
- D_COMP_ARRAY_TYPE,
- /* A pointer to member type. */
- D_COMP_PTRMEM_TYPE,
- /* An argument list. */
- D_COMP_ARGLIST,
- /* A template argument list. */
- D_COMP_TEMPLATE_ARGLIST,
- /* An operator. */
- D_COMP_OPERATOR,
- /* An extended operator. */
- D_COMP_EXTENDED_OPERATOR,
- /* A typecast. */
- D_COMP_CAST,
- /* A unary expression. */
- D_COMP_UNARY,
- /* A binary expression. */
- D_COMP_BINARY,
- /* Arguments to a binary expression. */
- D_COMP_BINARY_ARGS,
- /* A trinary expression. */
- D_COMP_TRINARY,
- /* Arguments to a trinary expression. */
- D_COMP_TRINARY_ARG1,
- D_COMP_TRINARY_ARG2,
- /* A literal. */
- D_COMP_LITERAL,
- /* A negative literal. */
- D_COMP_LITERAL_NEG
-};
-
-/* A component of the mangled name. */
-
-struct d_comp
-{
- /* The type of this component. */
- enum d_comp_type type;
- union
- {
- /* For D_COMP_NAME. */
- struct
- {
- /* A pointer to the name (not NULL terminated) and it's
- length. */
- const char *s;
- int len;
- } s_name;
-
- /* For D_COMP_OPERATOR. */
- struct
- {
- /* Operator. */
- const struct d_operator_info *op;
- } s_operator;
-
- /* For D_COMP_EXTENDED_OPERATOR. */
- struct
- {
- /* Number of arguments. */
- int args;
- /* Name. */
- struct d_comp *name;
- } s_extended_operator;
-
- /* For D_COMP_CTOR. */
- struct
- {
- enum gnu_v3_ctor_kinds kind;
- struct d_comp *name;
- } s_ctor;
-
- /* For D_COMP_DTOR. */
- struct
- {
- enum gnu_v3_dtor_kinds kind;
- struct d_comp *name;
- } s_dtor;
-
- /* For D_COMP_BUILTIN_TYPE. */
- struct
- {
- const struct d_builtin_type_info *type;
- } s_builtin;
-
- /* For D_COMP_SUB_STD. */
- struct
- {
- const char* string;
- } s_string;
-
- /* For D_COMP_TEMPLATE_PARAM. */
- struct
- {
- long number;
- } s_number;
-
- /* For other types. */
- struct
- {
- struct d_comp *left;
- struct d_comp *right;
- } s_binary;
-
- } u;
-};
+/* Accessors for subtrees of struct demangle_component. */
#define d_left(dc) ((dc)->u.s_binary.left)
#define d_right(dc) ((dc)->u.s_binary.right)
-/* The information structure we pass around. */
-
-struct d_info
-{
- /* The string we are demangling. */
- const char *s;
- /* The options passed to the demangler. */
- int options;
- /* The next character in the string to consider. */
- const char *n;
- /* The array of components. */
- struct d_comp *comps;
- /* The index of the next available component. */
- int next_comp;
- /* The number of available component structures. */
- int num_comps;
- /* The array of substitutions. */
- struct d_comp **subs;
- /* The index of the next substitution. */
- int next_sub;
- /* The number of available entries in the subs array. */
- int num_subs;
- /* The last name we saw, for constructors and destructors. */
- struct d_comp *last_name;
-};
-
-#define d_peek_char(di) (*((di)->n))
-#define d_peek_next_char(di) ((di)->n[1])
-#define d_advance(di, i) ((di)->n += (i))
-#define d_next_char(di) (*((di)->n++))
-#define d_str(di) ((di)->n)
-
/* A list of templates. This is used while printing. */
struct d_print_template
@@ -378,7 +215,7 @@ struct d_print_template
/* Next template on the list. */
struct d_print_template *next;
/* This template. */
- const struct d_comp *template;
+ const struct demangle_component *template;
};
/* A list of type modifiers. This is used while printing. */
@@ -389,7 +226,7 @@ struct d_print_mod
in which they appeared in the mangled string. */
struct d_print_mod *next;
/* The modifier. */
- const struct d_comp *mod;
+ const struct demangle_component *mod;
/* Whether this modifier was printed. */
int printed;
/* The list of templates which applies to this modifier. */
@@ -442,105 +279,193 @@ struct d_print_info
} \
while (0)
-#define d_append_string(dpi, s) \
- do \
- { \
- size_t d_append_string_len = strlen (s); \
- d_append_buffer ((dpi), (s), d_append_string_len); \
- } \
- while (0)
+#define d_append_string_constant(dpi, s) \
+ d_append_buffer (dpi, (s), sizeof (s) - 1)
#define d_last_char(dpi) \
((dpi)->buf == NULL || (dpi)->len == 0 ? '\0' : (dpi)->buf[(dpi)->len - 1])
#ifdef CP_DEMANGLE_DEBUG
-static void d_dump PARAMS ((struct d_comp *, int));
+static void
+d_dump PARAMS ((struct demangle_component *, int));
#endif
-static struct d_comp *d_make_empty PARAMS ((struct d_info *,
- enum d_comp_type));
-static struct d_comp *d_make_comp PARAMS ((struct d_info *, enum d_comp_type,
- struct d_comp *, struct d_comp *));
-static struct d_comp *d_make_name PARAMS ((struct d_info *, const char *,
- int));
-static struct d_comp *d_make_builtin_type PARAMS ((struct d_info *,
- const struct d_builtin_type_info *));
-static struct d_comp *d_make_operator PARAMS ((struct d_info *,
- const struct d_operator_info *));
-static struct d_comp *d_make_extended_operator PARAMS ((struct d_info *,
- int,
- struct d_comp *));
-static struct d_comp *d_make_ctor PARAMS ((struct d_info *,
- enum gnu_v3_ctor_kinds,
- struct d_comp *));
-static struct d_comp *d_make_dtor PARAMS ((struct d_info *,
- enum gnu_v3_dtor_kinds,
- struct d_comp *));
-static struct d_comp *d_make_template_param PARAMS ((struct d_info *, long));
-static struct d_comp *d_make_sub PARAMS ((struct d_info *, const char *));
-static struct d_comp *d_mangled_name PARAMS ((struct d_info *, int));
-static int has_return_type PARAMS ((struct d_comp *));
-static int is_ctor_dtor_or_conversion PARAMS ((struct d_comp *));
-static struct d_comp *d_encoding PARAMS ((struct d_info *, int));
-static struct d_comp *d_name PARAMS ((struct d_info *));
-static struct d_comp *d_nested_name PARAMS ((struct d_info *));
-static struct d_comp *d_prefix PARAMS ((struct d_info *));
-static struct d_comp *d_unqualified_name PARAMS ((struct d_info *));
-static struct d_comp *d_source_name PARAMS ((struct d_info *));
-static long d_number PARAMS ((struct d_info *));
-static struct d_comp *d_identifier PARAMS ((struct d_info *, int));
-static struct d_comp *d_operator_name PARAMS ((struct d_info *));
-static struct d_comp *d_special_name PARAMS ((struct d_info *));
-static int d_call_offset PARAMS ((struct d_info *, int));
-static struct d_comp *d_ctor_dtor_name PARAMS ((struct d_info *));
-static struct d_comp *d_type PARAMS ((struct d_info *));
-static struct d_comp **d_cv_qualifiers PARAMS ((struct d_info *,
- struct d_comp **, int));
-static struct d_comp *d_function_type PARAMS ((struct d_info *));
-static struct d_comp *d_bare_function_type PARAMS ((struct d_info *, int));
-static struct d_comp *d_class_enum_type PARAMS ((struct d_info *));
-static struct d_comp *d_array_type PARAMS ((struct d_info *));
-static struct d_comp *d_pointer_to_member_type PARAMS ((struct d_info *));
-static struct d_comp *d_template_param PARAMS ((struct d_info *));
-static struct d_comp *d_template_args PARAMS ((struct d_info *));
-static struct d_comp *d_template_arg PARAMS ((struct d_info *));
-static struct d_comp *d_expression PARAMS ((struct d_info *));
-static struct d_comp *d_expr_primary PARAMS ((struct d_info *));
-static struct d_comp *d_local_name PARAMS ((struct d_info *));
-static int d_discriminator PARAMS ((struct d_info *));
-static int d_add_substitution PARAMS ((struct d_info *, struct d_comp *));
-static struct d_comp *d_substitution PARAMS ((struct d_info *, int));
-static void d_print_resize PARAMS ((struct d_print_info *, size_t));
-static void d_print_append_char PARAMS ((struct d_print_info *, int));
-static void d_print_append_buffer PARAMS ((struct d_print_info *, const char *,
- size_t));
-static void d_print_error PARAMS ((struct d_print_info *));
-static char *d_print PARAMS ((int, const struct d_comp *, size_t *));
-static void d_print_comp PARAMS ((struct d_print_info *,
- const struct d_comp *));
-static void d_print_identifier PARAMS ((struct d_print_info *, const char *,
- int));
-static void d_print_mod_list PARAMS ((struct d_print_info *,
- struct d_print_mod *, int));
-static void d_print_mod PARAMS ((struct d_print_info *,
- const struct d_comp *));
-static void d_print_function_type PARAMS ((struct d_print_info *,
- const struct d_comp *,
- struct d_print_mod *));
-static void d_print_array_type PARAMS ((struct d_print_info *,
- const struct d_comp *,
- struct d_print_mod *));
-static void d_print_expr_op PARAMS ((struct d_print_info *,
- const struct d_comp *));
-static void d_print_cast PARAMS ((struct d_print_info *,
- const struct d_comp *));
-static int d_init_info PARAMS ((const char *, int, size_t, struct d_info *));
-static char *d_demangle PARAMS ((const char *, int, size_t *));
+
+static struct demangle_component *
+d_make_empty PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_make_comp PARAMS ((struct d_info *, enum demangle_component_type,
+ struct demangle_component *,
+ struct demangle_component *));
+
+static struct demangle_component *
+d_make_name PARAMS ((struct d_info *, const char *, int));
+
+static struct demangle_component *
+d_make_builtin_type PARAMS ((struct d_info *,
+ const struct demangle_builtin_type_info *));
+
+static struct demangle_component *
+d_make_operator PARAMS ((struct d_info *,
+ const struct demangle_operator_info *));
+
+static struct demangle_component *
+d_make_extended_operator PARAMS ((struct d_info *, int,
+ struct demangle_component *));
+
+static struct demangle_component *
+d_make_ctor PARAMS ((struct d_info *, enum gnu_v3_ctor_kinds,
+ struct demangle_component *));
+
+static struct demangle_component *
+d_make_dtor PARAMS ((struct d_info *, enum gnu_v3_dtor_kinds,
+ struct demangle_component *));
+
+static struct demangle_component *
+d_make_template_param PARAMS ((struct d_info *, long));
+
+static struct demangle_component *
+d_make_sub PARAMS ((struct d_info *, const char *, int));
+
+static int
+has_return_type PARAMS ((struct demangle_component *));
+
+static int
+is_ctor_dtor_or_conversion PARAMS ((struct demangle_component *));
+
+static struct demangle_component *
+d_encoding PARAMS ((struct d_info *, int));
+
+static struct demangle_component *
+d_name PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_nested_name PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_prefix PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_unqualified_name PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_source_name PARAMS ((struct d_info *));
+
+static long
+d_number PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_identifier PARAMS ((struct d_info *, int));
+
+static struct demangle_component *
+d_operator_name PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_special_name PARAMS ((struct d_info *));
+
+static int
+d_call_offset PARAMS ((struct d_info *, int));
+
+static struct demangle_component *
+d_ctor_dtor_name PARAMS ((struct d_info *));
+
+static struct demangle_component **
+d_cv_qualifiers PARAMS ((struct d_info *, struct demangle_component **, int));
+
+static struct demangle_component *
+d_function_type PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_bare_function_type PARAMS ((struct d_info *, int));
+
+static struct demangle_component *
+d_class_enum_type PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_array_type PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_pointer_to_member_type PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_template_param PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_template_args PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_template_arg PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_expression PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_expr_primary PARAMS ((struct d_info *));
+
+static struct demangle_component *
+d_local_name PARAMS ((struct d_info *));
+
+static int
+d_discriminator PARAMS ((struct d_info *));
+
+static int
+d_add_substitution PARAMS ((struct d_info *, struct demangle_component *));
+
+static struct demangle_component *
+d_substitution PARAMS ((struct d_info *, int));
+
+static void
+d_print_resize PARAMS ((struct d_print_info *, size_t));
+
+static void
+d_print_append_char PARAMS ((struct d_print_info *, int));
+
+static void
+d_print_append_buffer PARAMS ((struct d_print_info *, const char *, size_t));
+
+static void
+d_print_error PARAMS ((struct d_print_info *));
+
+static void
+d_print_comp PARAMS ((struct d_print_info *,
+ const struct demangle_component *));
+
+static void
+d_print_java_identifier PARAMS ((struct d_print_info *, const char *, int));
+
+static void
+d_print_mod_list PARAMS ((struct d_print_info *, struct d_print_mod *, int));
+
+static void
+d_print_mod PARAMS ((struct d_print_info *,
+ const struct demangle_component *));
+
+static void
+d_print_function_type PARAMS ((struct d_print_info *,
+ const struct demangle_component *,
+ struct d_print_mod *));
+
+static void
+d_print_array_type PARAMS ((struct d_print_info *,
+ const struct demangle_component *,
+ struct d_print_mod *));
+
+static void
+d_print_expr_op PARAMS ((struct d_print_info *,
+ const struct demangle_component *));
+
+static void
+d_print_cast PARAMS ((struct d_print_info *,
+ const struct demangle_component *));
+
+static char *
+d_demangle PARAMS ((const char *, int, size_t *));
#ifdef CP_DEMANGLE_DEBUG
static void
d_dump (dc, indent)
- struct d_comp *dc;
+ struct demangle_component *dc;
int indent;
{
int i;
@@ -553,156 +478,159 @@ d_dump (dc, indent)
switch (dc->type)
{
- case D_COMP_NAME:
+ case DEMANGLE_COMPONENT_NAME:
printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
return;
- case D_COMP_TEMPLATE_PARAM:
+ case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
printf ("template parameter %ld\n", dc->u.s_number.number);
return;
- case D_COMP_CTOR:
+ case DEMANGLE_COMPONENT_CTOR:
printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
d_dump (dc->u.s_ctor.name, indent + 2);
return;
- case D_COMP_DTOR:
+ case DEMANGLE_COMPONENT_DTOR:
printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
d_dump (dc->u.s_dtor.name, indent + 2);
return;
- case D_COMP_SUB_STD:
+ case DEMANGLE_COMPONENT_SUB_STD:
printf ("standard substitution %s\n", dc->u.s_string.string);
return;
- case D_COMP_BUILTIN_TYPE:
+ case DEMANGLE_COMPONENT_BUILTIN_TYPE:
printf ("builtin type %s\n", dc->u.s_builtin.type->name);
return;
- case D_COMP_OPERATOR:
+ case DEMANGLE_COMPONENT_OPERATOR:
printf ("operator %s\n", dc->u.s_operator.op->name);
return;
- case D_COMP_EXTENDED_OPERATOR:
+ case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
printf ("extended operator with %d args\n",
dc->u.s_extended_operator.args);
d_dump (dc->u.s_extended_operator.name, indent + 2);
return;
- case D_COMP_QUAL_NAME:
+ case DEMANGLE_COMPONENT_QUAL_NAME:
printf ("qualified name\n");
break;
- case D_COMP_TYPED_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
+ printf ("local name\n");
+ break;
+ case DEMANGLE_COMPONENT_TYPED_NAME:
printf ("typed name\n");
break;
- case D_COMP_TEMPLATE:
+ case DEMANGLE_COMPONENT_TEMPLATE:
printf ("template\n");
break;
- case D_COMP_VTABLE:
+ case DEMANGLE_COMPONENT_VTABLE:
printf ("vtable\n");
break;
- case D_COMP_VTT:
+ case DEMANGLE_COMPONENT_VTT:
printf ("VTT\n");
break;
- case D_COMP_CONSTRUCTION_VTABLE:
+ case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
printf ("construction vtable\n");
break;
- case D_COMP_TYPEINFO:
+ case DEMANGLE_COMPONENT_TYPEINFO:
printf ("typeinfo\n");
break;
- case D_COMP_TYPEINFO_NAME:
+ case DEMANGLE_COMPONENT_TYPEINFO_NAME:
printf ("typeinfo name\n");
break;
- case D_COMP_TYPEINFO_FN:
+ case DEMANGLE_COMPONENT_TYPEINFO_FN:
printf ("typeinfo function\n");
break;
- case D_COMP_THUNK:
+ case DEMANGLE_COMPONENT_THUNK:
printf ("thunk\n");
break;
- case D_COMP_VIRTUAL_THUNK:
+ case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
printf ("virtual thunk\n");
break;
- case D_COMP_COVARIANT_THUNK:
+ case DEMANGLE_COMPONENT_COVARIANT_THUNK:
printf ("covariant thunk\n");
break;
- case D_COMP_JAVA_CLASS:
+ case DEMANGLE_COMPONENT_JAVA_CLASS:
printf ("java class\n");
break;
- case D_COMP_GUARD:
+ case DEMANGLE_COMPONENT_GUARD:
printf ("guard\n");
break;
- case D_COMP_REFTEMP:
+ case DEMANGLE_COMPONENT_REFTEMP:
printf ("reference temporary\n");
break;
- case D_COMP_RESTRICT:
+ case DEMANGLE_COMPONENT_RESTRICT:
printf ("restrict\n");
break;
- case D_COMP_VOLATILE:
+ case DEMANGLE_COMPONENT_VOLATILE:
printf ("volatile\n");
break;
- case D_COMP_CONST:
+ case DEMANGLE_COMPONENT_CONST:
printf ("const\n");
break;
- case D_COMP_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
printf ("restrict this\n");
break;
- case D_COMP_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
printf ("volatile this\n");
break;
- case D_COMP_CONST_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
printf ("const this\n");
break;
- case D_COMP_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
printf ("vendor type qualifier\n");
break;
- case D_COMP_POINTER:
+ case DEMANGLE_COMPONENT_POINTER:
printf ("pointer\n");
break;
- case D_COMP_REFERENCE:
+ case DEMANGLE_COMPONENT_REFERENCE:
printf ("reference\n");
break;
- case D_COMP_COMPLEX:
+ case DEMANGLE_COMPONENT_COMPLEX:
printf ("complex\n");
break;
- case D_COMP_IMAGINARY:
+ case DEMANGLE_COMPONENT_IMAGINARY:
printf ("imaginary\n");
break;
- case D_COMP_VENDOR_TYPE:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE:
printf ("vendor type\n");
break;
- case D_COMP_FUNCTION_TYPE:
+ case DEMANGLE_COMPONENT_FUNCTION_TYPE:
printf ("function type\n");
break;
- case D_COMP_ARRAY_TYPE:
+ case DEMANGLE_COMPONENT_ARRAY_TYPE:
printf ("array type\n");
break;
- case D_COMP_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
printf ("pointer to member type\n");
break;
- case D_COMP_ARGLIST:
+ case DEMANGLE_COMPONENT_ARGLIST:
printf ("argument list\n");
break;
- case D_COMP_TEMPLATE_ARGLIST:
+ case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
printf ("template argument list\n");
break;
- case D_COMP_CAST:
+ case DEMANGLE_COMPONENT_CAST:
printf ("cast\n");
break;
- case D_COMP_UNARY:
+ case DEMANGLE_COMPONENT_UNARY:
printf ("unary operator\n");
break;
- case D_COMP_BINARY:
+ case DEMANGLE_COMPONENT_BINARY:
printf ("binary operator\n");
break;
- case D_COMP_BINARY_ARGS:
+ case DEMANGLE_COMPONENT_BINARY_ARGS:
printf ("binary operator arguments\n");
break;
- case D_COMP_TRINARY:
+ case DEMANGLE_COMPONENT_TRINARY:
printf ("trinary operator\n");
break;
- case D_COMP_TRINARY_ARG1:
+ case DEMANGLE_COMPONENT_TRINARY_ARG1:
printf ("trinary operator arguments 1\n");
break;
- case D_COMP_TRINARY_ARG2:
+ case DEMANGLE_COMPONENT_TRINARY_ARG2:
printf ("trinary operator arguments 1\n");
break;
- case D_COMP_LITERAL:
+ case DEMANGLE_COMPONENT_LITERAL:
printf ("literal\n");
break;
- case D_COMP_LITERAL_NEG:
+ case DEMANGLE_COMPONENT_LITERAL_NEG:
printf ("negative literal\n");
break;
}
@@ -713,33 +641,105 @@ d_dump (dc, indent)
#endif /* CP_DEMANGLE_DEBUG */
+/* Fill in a DEMANGLE_COMPONENT_NAME. */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_name (p, s, len)
+ struct demangle_component *p;
+ const char *s;
+ int len;
+{
+ if (p == NULL || s == NULL || len == 0)
+ return 0;
+ p->type = DEMANGLE_COMPONENT_NAME;
+ p->u.s_name.s = s;
+ p->u.s_name.len = len;
+ return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_extended_operator (p, args, name)
+ struct demangle_component *p;
+ int args;
+ struct demangle_component *name;
+{
+ if (p == NULL || args < 0 || name == NULL)
+ return 0;
+ p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
+ p->u.s_extended_operator.args = args;
+ p->u.s_extended_operator.name = name;
+ return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_CTOR. */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_ctor (p, kind, name)
+ struct demangle_component *p;
+ enum gnu_v3_ctor_kinds kind;
+ struct demangle_component *name;
+{
+ if (p == NULL
+ || name == NULL
+ || (kind < gnu_v3_complete_object_ctor
+ && kind > gnu_v3_complete_object_allocating_ctor))
+ return 0;
+ p->type = DEMANGLE_COMPONENT_CTOR;
+ p->u.s_ctor.kind = kind;
+ p->u.s_ctor.name = name;
+ return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_DTOR. */
+
+CP_STATIC_IF_GLIBCPP_V3
+int
+cplus_demangle_fill_dtor (p, kind, name)
+ struct demangle_component *p;
+ enum gnu_v3_dtor_kinds kind;
+ struct demangle_component *name;
+{
+ if (p == NULL
+ || name == NULL
+ || (kind < gnu_v3_deleting_dtor
+ && kind > gnu_v3_base_object_dtor))
+ return 0;
+ p->type = DEMANGLE_COMPONENT_DTOR;
+ p->u.s_dtor.kind = kind;
+ p->u.s_dtor.name = name;
+ return 1;
+}
+
/* Add a new component. */
-static struct d_comp *
-d_make_empty (di, type)
+static struct demangle_component *
+d_make_empty (di)
struct d_info *di;
- enum d_comp_type type;
{
- struct d_comp *p;
+ struct demangle_component *p;
if (di->next_comp >= di->num_comps)
return NULL;
p = &di->comps[di->next_comp];
- p->type = type;
++di->next_comp;
return p;
}
/* Add a new generic component. */
-static struct d_comp *
+static struct demangle_component *
d_make_comp (di, type, left, right)
struct d_info *di;
- enum d_comp_type type;
- struct d_comp *left;
- struct d_comp *right;
+ enum demangle_component_type type;
+ struct demangle_component *left;
+ struct demangle_component *right;
{
- struct d_comp *p;
+ struct demangle_component *p;
/* We check for errors here. A typical error would be a NULL return
from a subroutine. We catch those here, and return NULL
@@ -747,64 +747,65 @@ d_make_comp (di, type, left, right)
switch (type)
{
/* These types require two parameters. */
- case D_COMP_QUAL_NAME:
- case D_COMP_TYPED_NAME:
- case D_COMP_TEMPLATE:
- case D_COMP_VENDOR_TYPE_QUAL:
- case D_COMP_PTRMEM_TYPE:
- case D_COMP_UNARY:
- case D_COMP_BINARY:
- case D_COMP_BINARY_ARGS:
- case D_COMP_TRINARY:
- case D_COMP_TRINARY_ARG1:
- case D_COMP_TRINARY_ARG2:
- case D_COMP_LITERAL:
- case D_COMP_LITERAL_NEG:
+ case DEMANGLE_COMPONENT_QUAL_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
+ case DEMANGLE_COMPONENT_TYPED_NAME:
+ case DEMANGLE_COMPONENT_TEMPLATE:
+ case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_UNARY:
+ case DEMANGLE_COMPONENT_BINARY:
+ case DEMANGLE_COMPONENT_BINARY_ARGS:
+ case DEMANGLE_COMPONENT_TRINARY:
+ case DEMANGLE_COMPONENT_TRINARY_ARG1:
+ case DEMANGLE_COMPONENT_TRINARY_ARG2:
+ case DEMANGLE_COMPONENT_LITERAL:
+ case DEMANGLE_COMPONENT_LITERAL_NEG:
if (left == NULL || right == NULL)
return NULL;
break;
/* These types only require one parameter. */
- case D_COMP_VTABLE:
- case D_COMP_VTT:
- case D_COMP_CONSTRUCTION_VTABLE:
- case D_COMP_TYPEINFO:
- case D_COMP_TYPEINFO_NAME:
- case D_COMP_TYPEINFO_FN:
- case D_COMP_THUNK:
- case D_COMP_VIRTUAL_THUNK:
- case D_COMP_COVARIANT_THUNK:
- case D_COMP_JAVA_CLASS:
- case D_COMP_GUARD:
- case D_COMP_REFTEMP:
- case D_COMP_POINTER:
- case D_COMP_REFERENCE:
- case D_COMP_COMPLEX:
- case D_COMP_IMAGINARY:
- case D_COMP_VENDOR_TYPE:
- case D_COMP_ARGLIST:
- case D_COMP_TEMPLATE_ARGLIST:
- case D_COMP_CAST:
+ case DEMANGLE_COMPONENT_VTABLE:
+ case DEMANGLE_COMPONENT_VTT:
+ case DEMANGLE_COMPONENT_TYPEINFO:
+ case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+ case DEMANGLE_COMPONENT_TYPEINFO_FN:
+ case DEMANGLE_COMPONENT_THUNK:
+ case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+ case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+ case DEMANGLE_COMPONENT_JAVA_CLASS:
+ case DEMANGLE_COMPONENT_GUARD:
+ case DEMANGLE_COMPONENT_REFTEMP:
+ case DEMANGLE_COMPONENT_POINTER:
+ case DEMANGLE_COMPONENT_REFERENCE:
+ case DEMANGLE_COMPONENT_COMPLEX:
+ case DEMANGLE_COMPONENT_IMAGINARY:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE:
+ case DEMANGLE_COMPONENT_ARGLIST:
+ case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+ case DEMANGLE_COMPONENT_CAST:
if (left == NULL)
return NULL;
break;
/* This needs a right parameter, but the left parameter can be
empty. */
- case D_COMP_ARRAY_TYPE:
+ case DEMANGLE_COMPONENT_ARRAY_TYPE:
if (right == NULL)
return NULL;
break;
/* These are allowed to have no parameters--in some cases they
will be filled in later. */
- case D_COMP_FUNCTION_TYPE:
- case D_COMP_RESTRICT:
- case D_COMP_VOLATILE:
- case D_COMP_CONST:
- case D_COMP_RESTRICT_THIS:
- case D_COMP_VOLATILE_THIS:
- case D_COMP_CONST_THIS:
+ case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+ case DEMANGLE_COMPONENT_RESTRICT:
+ case DEMANGLE_COMPONENT_VOLATILE:
+ case DEMANGLE_COMPONENT_CONST:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
break;
/* Other types should not be seen here. */
@@ -812,9 +813,10 @@ d_make_comp (di, type, left, right)
return NULL;
}
- p = d_make_empty (di, type);
+ p = d_make_empty (di);
if (p != NULL)
{
+ p->type = type;
p->u.s_binary.left = left;
p->u.s_binary.right = right;
}
@@ -823,147 +825,141 @@ d_make_comp (di, type, left, right)
/* Add a new name component. */
-static struct d_comp *
+static struct demangle_component *
d_make_name (di, s, len)
struct d_info *di;
const char *s;
int len;
{
- struct d_comp *p;
+ struct demangle_component *p;
- if (s == NULL || len == 0)
+ p = d_make_empty (di);
+ if (! cplus_demangle_fill_name (p, s, len))
return NULL;
- p = d_make_empty (di, D_COMP_NAME);
- if (p != NULL)
- {
- p->u.s_name.s = s;
- p->u.s_name.len = len;
- }
return p;
}
/* Add a new builtin type component. */
-static struct d_comp *
+static struct demangle_component *
d_make_builtin_type (di, type)
struct d_info *di;
- const struct d_builtin_type_info *type;
+ const struct demangle_builtin_type_info *type;
{
- struct d_comp *p;
+ struct demangle_component *p;
if (type == NULL)
return NULL;
- p = d_make_empty (di, D_COMP_BUILTIN_TYPE);
+ p = d_make_empty (di);
if (p != NULL)
- p->u.s_builtin.type = type;
+ {
+ p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
+ p->u.s_builtin.type = type;
+ }
return p;
}
/* Add a new operator component. */
-static struct d_comp *
+static struct demangle_component *
d_make_operator (di, op)
struct d_info *di;
- const struct d_operator_info *op;
+ const struct demangle_operator_info *op;
{
- struct d_comp *p;
+ struct demangle_component *p;
- p = d_make_empty (di, D_COMP_OPERATOR);
+ p = d_make_empty (di);
if (p != NULL)
- p->u.s_operator.op = op;
+ {
+ p->type = DEMANGLE_COMPONENT_OPERATOR;
+ p->u.s_operator.op = op;
+ }
return p;
}
/* Add a new extended operator component. */
-static struct d_comp *
+static struct demangle_component *
d_make_extended_operator (di, args, name)
struct d_info *di;
int args;
- struct d_comp *name;
+ struct demangle_component *name;
{
- struct d_comp *p;
+ struct demangle_component *p;
- if (name == NULL)
+ p = d_make_empty (di);
+ if (! cplus_demangle_fill_extended_operator (p, args, name))
return NULL;
- p = d_make_empty (di, D_COMP_EXTENDED_OPERATOR);
- if (p != NULL)
- {
- p->u.s_extended_operator.args = args;
- p->u.s_extended_operator.name = name;
- }
return p;
}
/* Add a new constructor component. */
-static struct d_comp *
+static struct demangle_component *
d_make_ctor (di, kind, name)
struct d_info *di;
enum gnu_v3_ctor_kinds kind;
- struct d_comp *name;
+ struct demangle_component *name;
{
- struct d_comp *p;
+ struct demangle_component *p;
- if (name == NULL)
+ p = d_make_empty (di);
+ if (! cplus_demangle_fill_ctor (p, kind, name))
return NULL;
- p = d_make_empty (di, D_COMP_CTOR);
- if (p != NULL)
- {
- p->u.s_ctor.kind = kind;
- p->u.s_ctor.name = name;
- }
return p;
}
/* Add a new destructor component. */
-static struct d_comp *
+static struct demangle_component *
d_make_dtor (di, kind, name)
struct d_info *di;
enum gnu_v3_dtor_kinds kind;
- struct d_comp *name;
+ struct demangle_component *name;
{
- struct d_comp *p;
+ struct demangle_component *p;
- if (name == NULL)
+ p = d_make_empty (di);
+ if (! cplus_demangle_fill_dtor (p, kind, name))
return NULL;
- p = d_make_empty (di, D_COMP_DTOR);
- if (p != NULL)
- {
- p->u.s_dtor.kind = kind;
- p->u.s_dtor.name = name;
- }
return p;
}
/* Add a new template parameter. */
-static struct d_comp *
+static struct demangle_component *
d_make_template_param (di, i)
struct d_info *di;
long i;
{
- struct d_comp *p;
+ struct demangle_component *p;
- p = d_make_empty (di, D_COMP_TEMPLATE_PARAM);
+ p = d_make_empty (di);
if (p != NULL)
- p->u.s_number.number = i;
+ {
+ p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
+ p->u.s_number.number = i;
+ }
return p;
}
/* Add a new standard substitution component. */
-static struct d_comp *
-d_make_sub (di, name)
+static struct demangle_component *
+d_make_sub (di, name, len)
struct d_info *di;
const char *name;
+ int len;
{
- struct d_comp *p;
+ struct demangle_component *p;
- p = d_make_empty (di, D_COMP_SUB_STD);
+ p = d_make_empty (di);
if (p != NULL)
- p->u.s_string.string = name;
+ {
+ p->type = DEMANGLE_COMPONENT_SUB_STD;
+ p->u.s_string.string = name;
+ p->u.s_string.len = len;
+ }
return p;
}
@@ -971,8 +967,9 @@ d_make_sub (di, name)
TOP_LEVEL is non-zero when called at the top level. */
-static struct d_comp *
-d_mangled_name (di, top_level)
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_mangled_name (di, top_level)
struct d_info *di;
int top_level;
{
@@ -994,7 +991,7 @@ d_mangled_name (di, top_level)
static int
has_return_type (dc)
- struct d_comp *dc;
+ struct demangle_component *dc;
{
if (dc == NULL)
return 0;
@@ -1002,11 +999,11 @@ has_return_type (dc)
{
default:
return 0;
- case D_COMP_TEMPLATE:
+ case DEMANGLE_COMPONENT_TEMPLATE:
return ! is_ctor_dtor_or_conversion (d_left (dc));
- case D_COMP_RESTRICT_THIS:
- case D_COMP_VOLATILE_THIS:
- case D_COMP_CONST_THIS:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
return has_return_type (d_left (dc));
}
}
@@ -1016,7 +1013,7 @@ has_return_type (dc)
static int
is_ctor_dtor_or_conversion (dc)
- struct d_comp *dc;
+ struct demangle_component *dc;
{
if (dc == NULL)
return 0;
@@ -1024,11 +1021,12 @@ is_ctor_dtor_or_conversion (dc)
{
default:
return 0;
- case D_COMP_QUAL_NAME:
+ case DEMANGLE_COMPONENT_QUAL_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
return is_ctor_dtor_or_conversion (d_right (dc));
- case D_COMP_CTOR:
- case D_COMP_DTOR:
- case D_COMP_CAST:
+ case DEMANGLE_COMPONENT_CTOR:
+ case DEMANGLE_COMPONENT_DTOR:
+ case DEMANGLE_COMPONENT_CAST:
return 1;
}
}
@@ -1042,7 +1040,7 @@ is_ctor_dtor_or_conversion (dc)
parameters. We only set this at the top level, because otherwise
we would not correctly demangle names in local scopes. */
-static struct d_comp *
+static struct demangle_component *
d_encoding (di, top_level)
struct d_info *di;
int top_level;
@@ -1053,7 +1051,7 @@ d_encoding (di, top_level)
return d_special_name (di);
else
{
- struct d_comp *dc;
+ struct demangle_component *dc;
dc = d_name (di);
@@ -1062,17 +1060,34 @@ d_encoding (di, top_level)
/* Strip off any initial CV-qualifiers, as they really apply
to the `this' parameter, and they were not output by the
v2 demangler without DMGL_PARAMS. */
- while (dc->type == D_COMP_RESTRICT_THIS
- || dc->type == D_COMP_VOLATILE_THIS
- || dc->type == D_COMP_CONST_THIS)
+ while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+ || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+ || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
dc = d_left (dc);
+
+ /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
+ there may be CV-qualifiers on its right argument which
+ really apply here; this happens when parsing a class
+ which is local to a function. */
+ if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+ {
+ struct demangle_component *dcr;
+
+ dcr = d_right (dc);
+ while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+ || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+ || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
+ dcr = d_left (dcr);
+ dc->u.s_binary.right = dcr;
+ }
+
return dc;
}
peek = d_peek_char (di);
if (peek == '\0' || peek == 'E')
return dc;
- return d_make_comp (di, D_COMP_TYPED_NAME, dc,
+ return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
d_bare_function_type (di, has_return_type (dc)));
}
}
@@ -1089,12 +1104,12 @@ d_encoding (di, top_level)
::= <substitution>
*/
-static struct d_comp *
+static struct demangle_component *
d_name (di)
struct d_info *di;
{
char peek = d_peek_char (di);
- struct d_comp *dc;
+ struct demangle_component *dc;
switch (peek)
{
@@ -1116,8 +1131,10 @@ d_name (di)
else
{
d_advance (di, 2);
- dc = d_make_comp (di, D_COMP_QUAL_NAME, d_make_name (di, "std", 3),
+ dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
+ d_make_name (di, "std", 3),
d_unqualified_name (di));
+ di->expansion += 3;
subst = 0;
}
@@ -1138,7 +1155,8 @@ d_name (di)
if (! d_add_substitution (di, dc))
return NULL;
}
- dc = d_make_comp (di, D_COMP_TEMPLATE, dc, d_template_args (di));
+ dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
+ d_template_args (di));
}
return dc;
@@ -1153,7 +1171,8 @@ d_name (di)
candidate. */
if (! d_add_substitution (di, dc))
return NULL;
- dc = d_make_comp (di, D_COMP_TEMPLATE, dc, d_template_args (di));
+ dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
+ d_template_args (di));
}
return dc;
}
@@ -1163,12 +1182,12 @@ d_name (di)
::= N [<CV-qualifiers>] <template-prefix> <template-args> E
*/
-static struct d_comp *
+static struct demangle_component *
d_nested_name (di)
struct d_info *di;
{
- struct d_comp *ret;
- struct d_comp **pret;
+ struct demangle_component *ret;
+ struct demangle_component **pret;
if (d_next_char (di) != 'N')
return NULL;
@@ -1198,17 +1217,17 @@ d_nested_name (di)
::= <substitution>
*/
-static struct d_comp *
+static struct demangle_component *
d_prefix (di)
struct d_info *di;
{
- struct d_comp *ret = NULL;
+ struct demangle_component *ret = NULL;
while (1)
{
char peek;
- enum d_comp_type comb_type;
- struct d_comp *dc;
+ enum demangle_component_type comb_type;
+ struct demangle_component *dc;
peek = d_peek_char (di);
if (peek == '\0')
@@ -1218,7 +1237,7 @@ d_prefix (di)
that in the grammar. The older code does not accept a
<template-param> here. */
- comb_type = D_COMP_QUAL_NAME;
+ comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
if (IS_DIGIT (peek)
|| IS_LOWER (peek)
|| peek == 'C'
@@ -1230,7 +1249,7 @@ d_prefix (di)
{
if (ret == NULL)
return NULL;
- comb_type = D_COMP_TEMPLATE;
+ comb_type = DEMANGLE_COMPONENT_TEMPLATE;
dc = d_template_args (di);
}
else if (peek == 'T')
@@ -1258,7 +1277,7 @@ d_prefix (di)
::= <source-name>
*/
-static struct d_comp *
+static struct demangle_component *
d_unqualified_name (di)
struct d_info *di;
{
@@ -1268,7 +1287,14 @@ d_unqualified_name (di)
if (IS_DIGIT (peek))
return d_source_name (di);
else if (IS_LOWER (peek))
- return d_operator_name (di);
+ {
+ struct demangle_component *ret;
+
+ ret = d_operator_name (di);
+ if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
+ di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
+ return ret;
+ }
else if (peek == 'C' || peek == 'D')
return d_ctor_dtor_name (di);
else
@@ -1277,12 +1303,12 @@ d_unqualified_name (di)
/* <source-name> ::= <(positive length) number> <identifier> */
-static struct d_comp *
+static struct demangle_component *
d_source_name (di)
struct d_info *di;
{
long len;
- struct d_comp *ret;
+ struct demangle_component *ret;
len = d_number (di);
if (len <= 0)
@@ -1298,15 +1324,15 @@ static long
d_number (di)
struct d_info *di;
{
- int sign;
+ int negative;
char peek;
long ret;
- sign = 1;
+ negative = 0;
peek = d_peek_char (di);
if (peek == 'n')
{
- sign = -1;
+ negative = 1;
d_advance (di, 1);
peek = d_peek_char (di);
}
@@ -1315,7 +1341,11 @@ d_number (di)
while (1)
{
if (! IS_DIGIT (peek))
- return ret * sign;
+ {
+ if (negative)
+ ret = - ret;
+ return ret;
+ }
ret = ret * 10 + peek - '0';
d_advance (di, 1);
peek = d_peek_char (di);
@@ -1324,7 +1354,7 @@ d_number (di)
/* identifier ::= <(unqualified source code identifier)> */
-static struct d_comp *
+static struct demangle_component *
d_identifier (di, len)
struct d_info *di;
int len;
@@ -1332,8 +1362,19 @@ d_identifier (di, len)
const char *name;
name = d_str (di);
+
+ if (di->send - name < len)
+ return NULL;
+
d_advance (di, len);
+ /* A Java mangled name may have a trailing '$' if it is a C++
+ keyword. This '$' is not included in the length count. We just
+ ignore the '$'. */
+ if ((di->options & DMGL_JAVA) != 0
+ && d_peek_char (di) == '$')
+ d_advance (di, 1);
+
/* Look for something which looks like a gcc encoding of an
anonymous namespace, and replace it with a more user friendly
name. */
@@ -1346,8 +1387,11 @@ d_identifier (di, len)
s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
if ((*s == '.' || *s == '_' || *s == '$')
&& s[1] == 'N')
- return d_make_name (di, "(anonymous namespace)",
- sizeof "(anonymous namespace)" - 1);
+ {
+ di->expansion -= len - sizeof "(anonymous namespace)";
+ return d_make_name (di, "(anonymous namespace)",
+ sizeof "(anonymous namespace)" - 1);
+ }
}
return d_make_name (di, name, len);
@@ -1358,60 +1402,64 @@ d_identifier (di, len)
::= v <digit> <source-name>
*/
-static const struct d_operator_info d_operators[] =
-{
- { "aN", "&=", 2 },
- { "aS", "=", 2 },
- { "aa", "&&", 2 },
- { "ad", "&", 1 },
- { "an", "&", 2 },
- { "cl", "()", 0 },
- { "cm", ",", 2 },
- { "co", "~", 1 },
- { "dV", "/=", 2 },
- { "da", "delete[]", 1 },
- { "de", "*", 1 },
- { "dl", "delete", 1 },
- { "dv", "/", 2 },
- { "eO", "^=", 2 },
- { "eo", "^", 2 },
- { "eq", "==", 2 },
- { "ge", ">=", 2 },
- { "gt", ">", 2 },
- { "ix", "[]", 2 },
- { "lS", "<<=", 2 },
- { "le", "<=", 2 },
- { "ls", "<<", 2 },
- { "lt", "<", 2 },
- { "mI", "-=", 2 },
- { "mL", "*=", 2 },
- { "mi", "-", 2 },
- { "ml", "*", 2 },
- { "mm", "--", 1 },
- { "na", "new[]", 1 },
- { "ne", "!=", 2 },
- { "ng", "-", 1 },
- { "nt", "!", 1 },
- { "nw", "new", 1 },
- { "oR", "|=", 2 },
- { "oo", "||", 2 },
- { "or", "|", 2 },
- { "pL", "+=", 2 },
- { "pl", "+", 2 },
- { "pm", "->*", 2 },
- { "pp", "++", 1 },
- { "ps", "+", 1 },
- { "pt", "->", 2 },
- { "qu", "?", 3 },
- { "rM", "%=", 2 },
- { "rS", ">>=", 2 },
- { "rm", "%", 2 },
- { "rs", ">>", 2 },
- { "st", "sizeof ", 1 },
- { "sz", "sizeof ", 1 }
+#define NL(s) s, (sizeof s) - 1
+
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_operator_info cplus_demangle_operators[] =
+{
+ { "aN", NL ("&="), 2 },
+ { "aS", NL ("="), 2 },
+ { "aa", NL ("&&"), 2 },
+ { "ad", NL ("&"), 1 },
+ { "an", NL ("&"), 2 },
+ { "cl", NL ("()"), 0 },
+ { "cm", NL (","), 2 },
+ { "co", NL ("~"), 1 },
+ { "dV", NL ("/="), 2 },
+ { "da", NL ("delete[]"), 1 },
+ { "de", NL ("*"), 1 },
+ { "dl", NL ("delete"), 1 },
+ { "dv", NL ("/"), 2 },
+ { "eO", NL ("^="), 2 },
+ { "eo", NL ("^"), 2 },
+ { "eq", NL ("=="), 2 },
+ { "ge", NL (">="), 2 },
+ { "gt", NL (">"), 2 },
+ { "ix", NL ("[]"), 2 },
+ { "lS", NL ("<<="), 2 },
+ { "le", NL ("<="), 2 },
+ { "ls", NL ("<<"), 2 },
+ { "lt", NL ("<"), 2 },
+ { "mI", NL ("-="), 2 },
+ { "mL", NL ("*="), 2 },
+ { "mi", NL ("-"), 2 },
+ { "ml", NL ("*"), 2 },
+ { "mm", NL ("--"), 1 },
+ { "na", NL ("new[]"), 1 },
+ { "ne", NL ("!="), 2 },
+ { "ng", NL ("-"), 1 },
+ { "nt", NL ("!"), 1 },
+ { "nw", NL ("new"), 1 },
+ { "oR", NL ("|="), 2 },
+ { "oo", NL ("||"), 2 },
+ { "or", NL ("|"), 2 },
+ { "pL", NL ("+="), 2 },
+ { "pl", NL ("+"), 2 },
+ { "pm", NL ("->*"), 2 },
+ { "pp", NL ("++"), 1 },
+ { "ps", NL ("+"), 1 },
+ { "pt", NL ("->"), 2 },
+ { "qu", NL ("?"), 3 },
+ { "rM", NL ("%="), 2 },
+ { "rS", NL (">>="), 2 },
+ { "rm", NL ("%"), 2 },
+ { "rs", NL (">>"), 2 },
+ { "st", NL ("sizeof "), 1 },
+ { "sz", NL ("sizeof "), 1 },
+ { NULL, NULL, 0, 0 }
};
-static struct d_comp *
+static struct demangle_component *
d_operator_name (di)
struct d_info *di;
{
@@ -1423,19 +1471,25 @@ d_operator_name (di)
if (c1 == 'v' && IS_DIGIT (c2))
return d_make_extended_operator (di, c2 - '0', d_source_name (di));
else if (c1 == 'c' && c2 == 'v')
- return d_make_comp (di, D_COMP_CAST, d_type (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
+ cplus_demangle_type (di), NULL);
else
{
+ /* LOW is the inclusive lower bound. */
int low = 0;
- int high = sizeof (d_operators) / sizeof (d_operators[0]);
+ /* HIGH is the exclusive upper bound. We subtract one to ignore
+ the sentinel at the end of the array. */
+ int high = ((sizeof (cplus_demangle_operators)
+ / sizeof (cplus_demangle_operators[0]))
+ - 1);
while (1)
{
int i;
- const struct d_operator_info *p;
+ const struct demangle_operator_info *p;
i = low + (high - low) / 2;
- p = d_operators + i;
+ p = cplus_demangle_operators + i;
if (c1 == p->code[0] && c2 == p->code[1])
return d_make_operator (di, p);
@@ -1464,68 +1518,79 @@ d_operator_name (di)
::= GR <name>
*/
-static struct d_comp *
+static struct demangle_component *
d_special_name (di)
struct d_info *di;
{
char c;
+ di->expansion += 20;
c = d_next_char (di);
if (c == 'T')
{
switch (d_next_char (di))
{
case 'V':
- return d_make_comp (di, D_COMP_VTABLE, d_type (di), NULL);
+ di->expansion -= 5;
+ return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
+ cplus_demangle_type (di), NULL);
case 'T':
- return d_make_comp (di, D_COMP_VTT, d_type (di), NULL);
+ di->expansion -= 10;
+ return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
+ cplus_demangle_type (di), NULL);
case 'I':
- return d_make_comp (di, D_COMP_TYPEINFO, d_type (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
+ cplus_demangle_type (di), NULL);
case 'S':
- return d_make_comp (di, D_COMP_TYPEINFO_NAME, d_type (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
+ cplus_demangle_type (di), NULL);
case 'h':
if (! d_call_offset (di, 'h'))
return NULL;
- return d_make_comp (di, D_COMP_THUNK, d_encoding (di, 0), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
+ d_encoding (di, 0), NULL);
case 'v':
if (! d_call_offset (di, 'v'))
return NULL;
- return d_make_comp (di, D_COMP_VIRTUAL_THUNK, d_encoding (di, 0),
- NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
+ d_encoding (di, 0), NULL);
case 'c':
if (! d_call_offset (di, '\0'))
return NULL;
if (! d_call_offset (di, '\0'))
return NULL;
- return d_make_comp (di, D_COMP_COVARIANT_THUNK, d_encoding (di, 0),
- NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
+ d_encoding (di, 0), NULL);
case 'C':
{
- struct d_comp *derived_type;
+ struct demangle_component *derived_type;
long offset;
- struct d_comp *base_type;
+ struct demangle_component *base_type;
- derived_type = d_type (di);
+ derived_type = cplus_demangle_type (di);
offset = d_number (di);
if (offset < 0)
return NULL;
if (d_next_char (di) != '_')
return NULL;
- base_type = d_type (di);
+ base_type = cplus_demangle_type (di);
/* We don't display the offset. FIXME: We should display
it in verbose mode. */
- return d_make_comp (di, D_COMP_CONSTRUCTION_VTABLE, base_type,
- derived_type);
+ di->expansion += 5;
+ return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
+ base_type, derived_type);
}
case 'F':
- return d_make_comp (di, D_COMP_TYPEINFO_FN, d_type (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
+ cplus_demangle_type (di), NULL);
case 'J':
- return d_make_comp (di, D_COMP_JAVA_CLASS, d_type (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
+ cplus_demangle_type (di), NULL);
default:
return NULL;
@@ -1536,10 +1601,11 @@ d_special_name (di)
switch (d_next_char (di))
{
case 'V':
- return d_make_comp (di, D_COMP_GUARD, d_name (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
case 'R':
- return d_make_comp (di, D_COMP_REFTEMP, d_name (di), NULL);
+ return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, d_name (di),
+ NULL);
default:
return NULL;
@@ -1599,10 +1665,17 @@ d_call_offset (di, c)
::= D2
*/
-static struct d_comp *
+static struct demangle_component *
d_ctor_dtor_name (di)
struct d_info *di;
{
+ if (di->last_name != NULL)
+ {
+ if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
+ di->expansion += di->last_name->u.s_name.len;
+ else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
+ di->expansion += di->last_name->u.s_string.len;
+ }
switch (d_next_char (di))
{
case 'C':
@@ -1671,42 +1744,45 @@ d_ctor_dtor_name (di)
::= u <source-name>
*/
-static const struct d_builtin_type_info d_builtin_types[26] =
-{
- /* a */ { "signed char", "signed char", D_PRINT_INT },
- /* b */ { "bool", "boolean", D_PRINT_BOOL },
- /* c */ { "char", "byte", D_PRINT_INT },
- /* d */ { "double", "double", D_PRINT_DEFAULT },
- /* e */ { "long double", "long double", D_PRINT_DEFAULT },
- /* f */ { "float", "float", D_PRINT_DEFAULT },
- /* g */ { "__float128", "__float128", D_PRINT_DEFAULT },
- /* h */ { "unsigned char", "unsigned char", D_PRINT_INT },
- /* i */ { "int", "int", D_PRINT_INT },
- /* j */ { "unsigned int", "unsigned", D_PRINT_INT },
- /* k */ { NULL, NULL, D_PRINT_DEFAULT },
- /* l */ { "long", "long", D_PRINT_LONG },
- /* m */ { "unsigned long", "unsigned long", D_PRINT_LONG },
- /* n */ { "__int128", "__int128", D_PRINT_DEFAULT },
- /* o */ { "unsigned __int128", "unsigned __int128", D_PRINT_DEFAULT },
- /* p */ { NULL, NULL, D_PRINT_DEFAULT },
- /* q */ { NULL, NULL, D_PRINT_DEFAULT },
- /* r */ { NULL, NULL, D_PRINT_DEFAULT },
- /* s */ { "short", "short", D_PRINT_INT },
- /* t */ { "unsigned short", "unsigned short", D_PRINT_INT },
- /* u */ { NULL, NULL, D_PRINT_DEFAULT },
- /* v */ { "void", "void", D_PRINT_VOID },
- /* w */ { "wchar_t", "char", D_PRINT_INT },
- /* x */ { "long long", "long", D_PRINT_DEFAULT },
- /* y */ { "unsigned long long", "unsigned long long", D_PRINT_DEFAULT },
- /* z */ { "...", "...", D_PRINT_DEFAULT },
+CP_STATIC_IF_GLIBCPP_V3
+const struct demangle_builtin_type_info
+cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
+{
+ /* a */ { NL ("signed char"), NL ("signed char"), D_PRINT_INT },
+ /* b */ { NL ("bool"), NL ("boolean"), D_PRINT_BOOL },
+ /* c */ { NL ("char"), NL ("byte"), D_PRINT_INT },
+ /* d */ { NL ("double"), NL ("double"), D_PRINT_DEFAULT },
+ /* e */ { NL ("long double"), NL ("long double"), D_PRINT_DEFAULT },
+ /* f */ { NL ("float"), NL ("float"), D_PRINT_DEFAULT },
+ /* g */ { NL ("__float128"), NL ("__float128"), D_PRINT_DEFAULT },
+ /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_INT },
+ /* i */ { NL ("int"), NL ("int"), D_PRINT_INT },
+ /* j */ { NL ("unsigned int"), NL ("unsigned"), D_PRINT_INT },
+ /* k */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
+ /* l */ { NL ("long"), NL ("long"), D_PRINT_LONG },
+ /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_LONG },
+ /* n */ { NL ("__int128"), NL ("__int128"), D_PRINT_DEFAULT },
+ /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"), D_PRINT_DEFAULT },
+ /* p */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
+ /* q */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
+ /* r */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
+ /* s */ { NL ("short"), NL ("short"), D_PRINT_INT },
+ /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_INT },
+ /* u */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
+ /* v */ { NL ("void"), NL ("void"), D_PRINT_VOID },
+ /* w */ { NL ("wchar_t"), NL ("char"), D_PRINT_INT },
+ /* x */ { NL ("long long"), NL ("long"), D_PRINT_DEFAULT },
+ /* y */ { NL ("unsigned long long"), NL ("unsigned long long"), D_PRINT_DEFAULT },
+ /* z */ { NL ("..."), NL ("..."), D_PRINT_DEFAULT },
};
-static struct d_comp *
-d_type (di)
+CP_STATIC_IF_GLIBCPP_V3
+struct demangle_component *
+cplus_demangle_type (di)
struct d_info *di;
{
char peek;
- struct d_comp *ret;
+ struct demangle_component *ret;
int can_subst;
/* The ABI specifies that when CV-qualifiers are used, the base type
@@ -1727,12 +1803,12 @@ d_type (di)
peek = d_peek_char (di);
if (peek == 'r' || peek == 'V' || peek == 'K')
{
- struct d_comp **pret;
+ struct demangle_component **pret;
pret = d_cv_qualifiers (di, &ret, 0);
if (pret == NULL)
return NULL;
- *pret = d_type (di);
+ *pret = cplus_demangle_type (di);
if (! d_add_substitution (di, ret))
return NULL;
return ret;
@@ -1746,14 +1822,17 @@ d_type (di)
case 'h': case 'i': case 'j': case 'l': case 'm': case 'n':
case 'o': case 's': case 't':
case 'v': case 'w': case 'x': case 'y': case 'z':
- ret = d_make_builtin_type (di, &d_builtin_types[peek - 'a']);
+ ret = d_make_builtin_type (di,
+ &cplus_demangle_builtin_types[peek - 'a']);
+ di->expansion += ret->u.s_builtin.type->len;
can_subst = 0;
d_advance (di, 1);
break;
case 'u':
d_advance (di, 1);
- ret = d_make_comp (di, D_COMP_VENDOR_TYPE, d_source_name (di), NULL);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
+ d_source_name (di), NULL);
break;
case 'F':
@@ -1784,7 +1863,8 @@ d_type (di)
candidate. */
if (! d_add_substitution (di, ret))
return NULL;
- ret = d_make_comp (di, D_COMP_TEMPLATE, ret, d_template_args (di));
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
+ d_template_args (di));
}
break;
@@ -1803,7 +1883,7 @@ d_type (di)
/* The substituted name may have been a template name and
may be followed by tepmlate args. */
if (d_peek_char (di) == 'I')
- ret = d_make_comp (di, D_COMP_TEMPLATE, ret,
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
d_template_args (di));
else
can_subst = 0;
@@ -1815,7 +1895,7 @@ d_type (di)
a new substitution candidate. However, if the
substitution was followed by template arguments, then
the whole thing is a substitution candidate. */
- if (ret != NULL && ret->type == D_COMP_SUB_STD)
+ if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
can_subst = 0;
}
}
@@ -1823,28 +1903,33 @@ d_type (di)
case 'P':
d_advance (di, 1);
- ret = d_make_comp (di, D_COMP_POINTER, d_type (di), NULL);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
+ cplus_demangle_type (di), NULL);
break;
case 'R':
d_advance (di, 1);
- ret = d_make_comp (di, D_COMP_REFERENCE, d_type (di), NULL);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
+ cplus_demangle_type (di), NULL);
break;
case 'C':
d_advance (di, 1);
- ret = d_make_comp (di, D_COMP_COMPLEX, d_type (di), NULL);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
+ cplus_demangle_type (di), NULL);
break;
case 'G':
d_advance (di, 1);
- ret = d_make_comp (di, D_COMP_IMAGINARY, d_type (di), NULL);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
+ cplus_demangle_type (di), NULL);
break;
case 'U':
d_advance (di, 1);
ret = d_source_name (di);
- ret = d_make_comp (di, D_COMP_VENDOR_TYPE_QUAL, d_type (di), ret);
+ ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
+ cplus_demangle_type (di), ret);
break;
default:
@@ -1862,10 +1947,10 @@ d_type (di)
/* <CV-qualifiers> ::= [r] [V] [K] */
-static struct d_comp **
+static struct demangle_component **
d_cv_qualifiers (di, pret, member_fn)
struct d_info *di;
- struct d_comp **pret;
+ struct demangle_component **pret;
int member_fn;
{
char peek;
@@ -1873,15 +1958,30 @@ d_cv_qualifiers (di, pret, member_fn)
peek = d_peek_char (di);
while (peek == 'r' || peek == 'V' || peek == 'K')
{
- enum d_comp_type t;
+ enum demangle_component_type t;
d_advance (di, 1);
if (peek == 'r')
- t = member_fn ? D_COMP_RESTRICT_THIS: D_COMP_RESTRICT;
+ {
+ t = (member_fn
+ ? DEMANGLE_COMPONENT_RESTRICT_THIS
+ : DEMANGLE_COMPONENT_RESTRICT);
+ di->expansion += sizeof "restrict";
+ }
else if (peek == 'V')
- t = member_fn ? D_COMP_VOLATILE_THIS : D_COMP_VOLATILE;
+ {
+ t = (member_fn
+ ? DEMANGLE_COMPONENT_VOLATILE_THIS
+ : DEMANGLE_COMPONENT_VOLATILE);
+ di->expansion += sizeof "volatile";
+ }
else
- t = member_fn ? D_COMP_CONST_THIS: D_COMP_CONST;
+ {
+ t = (member_fn
+ ? DEMANGLE_COMPONENT_CONST_THIS
+ : DEMANGLE_COMPONENT_CONST);
+ di->expansion += sizeof "const";
+ }
*pret = d_make_comp (di, t, NULL, NULL);
if (*pret == NULL)
@@ -1896,11 +1996,11 @@ d_cv_qualifiers (di, pret, member_fn)
/* <function-type> ::= F [Y] <bare-function-type> E */
-static struct d_comp *
+static struct demangle_component *
d_function_type (di)
struct d_info *di;
{
- struct d_comp *ret;
+ struct demangle_component *ret;
if (d_next_char (di) != 'F')
return NULL;
@@ -1918,14 +2018,14 @@ d_function_type (di)
/* <bare-function-type> ::= <type>+ */
-static struct d_comp *
+static struct demangle_component *
d_bare_function_type (di, has_return_type)
struct d_info *di;
int has_return_type;
{
- struct d_comp *return_type;
- struct d_comp *tl;
- struct d_comp **ptl;
+ struct demangle_component *return_type;
+ struct demangle_component *tl;
+ struct demangle_component **ptl;
return_type = NULL;
tl = NULL;
@@ -1933,12 +2033,12 @@ d_bare_function_type (di, has_return_type)
while (1)
{
char peek;
- struct d_comp *type;
+ struct demangle_component *type;
peek = d_peek_char (di);
if (peek == '\0' || peek == 'E')
break;
- type = d_type (di);
+ type = cplus_demangle_type (di);
if (type == NULL)
return NULL;
if (has_return_type)
@@ -1948,7 +2048,7 @@ d_bare_function_type (di, has_return_type)
}
else
{
- *ptl = d_make_comp (di, D_COMP_ARGLIST, type, NULL);
+ *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
if (*ptl == NULL)
return NULL;
ptl = &d_right (*ptl);
@@ -1963,16 +2063,19 @@ d_bare_function_type (di, has_return_type)
/* If we have a single parameter type void, omit it. */
if (d_right (tl) == NULL
- && d_left (tl)->type == D_COMP_BUILTIN_TYPE
+ && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
&& d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
- tl = NULL;
+ {
+ di->expansion -= d_left (tl)->u.s_builtin.type->len;
+ tl = NULL;
+ }
- return d_make_comp (di, D_COMP_FUNCTION_TYPE, return_type, tl);
+ return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE, return_type, tl);
}
/* <class-enum-type> ::= <name> */
-static struct d_comp *
+static struct demangle_component *
d_class_enum_type (di)
struct d_info *di;
{
@@ -1983,12 +2086,12 @@ d_class_enum_type (di)
::= A [<(dimension) expression>] _ <(element) type>
*/
-static struct d_comp *
+static struct demangle_component *
d_array_type (di)
struct d_info *di;
{
char peek;
- struct d_comp *dim;
+ struct demangle_component *dim;
if (d_next_char (di) != 'A')
return NULL;
@@ -2021,23 +2124,24 @@ d_array_type (di)
if (d_next_char (di) != '_')
return NULL;
- return d_make_comp (di, D_COMP_ARRAY_TYPE, dim, d_type (di));
+ return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
+ cplus_demangle_type (di));
}
/* <pointer-to-member-type> ::= M <(class) type> <(member) type> */
-static struct d_comp *
+static struct demangle_component *
d_pointer_to_member_type (di)
struct d_info *di;
{
- struct d_comp *cl;
- struct d_comp *mem;
- struct d_comp **pmem;
+ struct demangle_component *cl;
+ struct demangle_component *mem;
+ struct demangle_component **pmem;
if (d_next_char (di) != 'M')
return NULL;
- cl = d_type (di);
+ cl = cplus_demangle_type (di);
/* The ABI specifies that any type can be a substitution source, and
that M is followed by two types, and that when a CV-qualified
@@ -2050,21 +2154,21 @@ d_pointer_to_member_type (di)
g++ does not work that way. g++ treats only the CV-qualified
member function as a substitution source. FIXME. So to work
with g++, we need to pull off the CV-qualifiers here, in order to
- avoid calling add_substitution() in d_type(). */
+ avoid calling add_substitution() in cplus_demangle_type(). */
pmem = d_cv_qualifiers (di, &mem, 1);
if (pmem == NULL)
return NULL;
- *pmem = d_type (di);
+ *pmem = cplus_demangle_type (di);
- return d_make_comp (di, D_COMP_PTRMEM_TYPE, cl, mem);
+ return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
}
/* <template-param> ::= T_
::= T <(parameter-2 non-negative) number> _
*/
-static struct d_comp *
+static struct demangle_component *
d_template_param (di)
struct d_info *di;
{
@@ -2086,18 +2190,20 @@ d_template_param (di)
if (d_next_char (di) != '_')
return NULL;
+ ++di->did_subs;
+
return d_make_template_param (di, param);
}
/* <template-args> ::= I <template-arg>+ E */
-static struct d_comp *
+static struct demangle_component *
d_template_args (di)
struct d_info *di;
{
- struct d_comp *hold_last_name;
- struct d_comp *al;
- struct d_comp **pal;
+ struct demangle_component *hold_last_name;
+ struct demangle_component *al;
+ struct demangle_component **pal;
/* Preserve the last name we saw--don't let the template arguments
clobber it, as that would give us the wrong name for a subsequent
@@ -2111,13 +2217,13 @@ d_template_args (di)
pal = &al;
while (1)
{
- struct d_comp *a;
+ struct demangle_component *a;
a = d_template_arg (di);
if (a == NULL)
return NULL;
- *pal = d_make_comp (di, D_COMP_TEMPLATE_ARGLIST, a, NULL);
+ *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
if (*pal == NULL)
return NULL;
pal = &d_right (*pal);
@@ -2139,11 +2245,11 @@ d_template_args (di)
::= <expr-primary>
*/
-static struct d_comp *
+static struct demangle_component *
d_template_arg (di)
struct d_info *di;
{
- struct d_comp *ret;
+ struct demangle_component *ret;
switch (d_peek_char (di))
{
@@ -2158,7 +2264,7 @@ d_template_arg (di)
return d_expr_primary (di);
default:
- return d_type (di);
+ return cplus_demangle_type (di);
}
}
@@ -2172,7 +2278,7 @@ d_template_arg (di)
::= <expr-primary>
*/
-static struct d_comp *
+static struct demangle_component *
d_expression (di)
struct d_info *di;
{
@@ -2185,43 +2291,47 @@ d_expression (di)
return d_template_param (di);
else if (peek == 's' && d_peek_next_char (di) == 'r')
{
- struct d_comp *type;
- struct d_comp *name;
+ struct demangle_component *type;
+ struct demangle_component *name;
d_advance (di, 2);
- type = d_type (di);
+ type = cplus_demangle_type (di);
name = d_unqualified_name (di);
if (d_peek_char (di) != 'I')
- return d_make_comp (di, D_COMP_QUAL_NAME, type, name);
+ return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
else
- return d_make_comp (di, D_COMP_QUAL_NAME, type,
- d_make_comp (di, D_COMP_TEMPLATE, name,
+ return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
+ d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
d_template_args (di)));
}
else
{
- struct d_comp *op;
+ struct demangle_component *op;
int args;
op = d_operator_name (di);
if (op == NULL)
return NULL;
- if (op->type == D_COMP_OPERATOR
+ if (op->type == DEMANGLE_COMPONENT_OPERATOR)
+ di->expansion += op->u.s_operator.op->len - 2;
+
+ if (op->type == DEMANGLE_COMPONENT_OPERATOR
&& strcmp (op->u.s_operator.op->code, "st") == 0)
- return d_make_comp (di, D_COMP_UNARY, op, d_type (di));
+ return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+ cplus_demangle_type (di));
switch (op->type)
{
default:
return NULL;
- case D_COMP_OPERATOR:
+ case DEMANGLE_COMPONENT_OPERATOR:
args = op->u.s_operator.op->args;
break;
- case D_COMP_EXTENDED_OPERATOR:
+ case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
args = op->u.s_extended_operator.args;
break;
- case D_COMP_CAST:
+ case DEMANGLE_COMPONENT_CAST:
args = 1;
break;
}
@@ -2229,27 +2339,32 @@ d_expression (di)
switch (args)
{
case 1:
- return d_make_comp (di, D_COMP_UNARY, op, d_expression (di));
+ return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
+ d_expression (di));
case 2:
{
- struct d_comp *left;
+ struct demangle_component *left;
left = d_expression (di);
- return d_make_comp (di, D_COMP_BINARY, op,
- d_make_comp (di, D_COMP_BINARY_ARGS, left,
+ return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
+ d_make_comp (di,
+ DEMANGLE_COMPONENT_BINARY_ARGS,
+ left,
d_expression (di)));
}
case 3:
{
- struct d_comp *first;
- struct d_comp *second;
+ struct demangle_component *first;
+ struct demangle_component *second;
first = d_expression (di);
second = d_expression (di);
- return d_make_comp (di, D_COMP_TRINARY, op,
- d_make_comp (di, D_COMP_TRINARY_ARG1, first,
+ return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
+ d_make_comp (di,
+ DEMANGLE_COMPONENT_TRINARY_ARG1,
+ first,
d_make_comp (di,
- D_COMP_TRINARY_ARG2,
+ DEMANGLE_COMPONENT_TRINARY_ARG2,
second,
d_expression (di))));
}
@@ -2264,23 +2379,29 @@ d_expression (di)
::= L <mangled-name> E
*/
-static struct d_comp *
+static struct demangle_component *
d_expr_primary (di)
struct d_info *di;
{
- struct d_comp *ret;
+ struct demangle_component *ret;
if (d_next_char (di) != 'L')
return NULL;
if (d_peek_char (di) == '_')
- ret = d_mangled_name (di, 0);
+ ret = cplus_demangle_mangled_name (di, 0);
else
{
- struct d_comp *type;
- enum d_comp_type t;
+ struct demangle_component *type;
+ enum demangle_component_type t;
const char *s;
- type = d_type (di);
+ type = cplus_demangle_type (di);
+
+ /* If we have a type we know how to print, we aren't going to
+ print the type name itself. */
+ if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
+ && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
+ di->expansion -= type->u.s_builtin.type->len;
/* Rather than try to interpret the literal value, we just
collect it as a string. Note that it's possible to have a
@@ -2293,10 +2414,10 @@ d_expr_primary (di)
constant in any readable form anyhow. We don't attempt to
handle these cases. */
- t = D_COMP_LITERAL;
+ t = DEMANGLE_COMPONENT_LITERAL;
if (d_peek_char (di) == 'n')
{
- t = D_COMP_LITERAL_NEG;
+ t = DEMANGLE_COMPONENT_LITERAL_NEG;
d_advance (di, 1);
}
s = d_str (di);
@@ -2313,11 +2434,11 @@ d_expr_primary (di)
::= Z <(function) encoding> E s [<discriminator>]
*/
-static struct d_comp *
+static struct demangle_component *
d_local_name (di)
struct d_info *di;
{
- struct d_comp *function;
+ struct demangle_component *function;
if (d_next_char (di) != 'Z')
return NULL;
@@ -2332,18 +2453,18 @@ d_local_name (di)
d_advance (di, 1);
if (! d_discriminator (di))
return NULL;
- return d_make_comp (di, D_COMP_QUAL_NAME, function,
+ return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
d_make_name (di, "string literal",
sizeof "string literal" - 1));
}
else
{
- struct d_comp *name;
+ struct demangle_component *name;
name = d_name (di);
if (! d_discriminator (di))
return NULL;
- return d_make_comp (di, D_COMP_QUAL_NAME, function, name);
+ return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
}
}
@@ -2372,7 +2493,7 @@ d_discriminator (di)
static int
d_add_substitution (di, dc)
struct d_info *di;
- struct d_comp *dc;
+ struct demangle_component *dc;
{
if (dc == NULL)
return 0;
@@ -2404,24 +2525,30 @@ d_add_substitution (di, dc)
static const struct d_standard_sub_info standard_subs[] =
{
- { 't', "std", "std", NULL },
- { 'a', "std::allocator", "std::allocator", "allocator" },
- { 'b', "std::basic_string", "std::basic_string", "basic_string" },
- { 's', "std::string",
- "std::basic_string<char, std::char_traits<char>, std::allocator<char> >",
- "basic_string" },
- { 'i', "std::istream",
- "std::basic_istream<char, std::char_traits<char> >",
- "basic_istream" },
- { 'o', "std::ostream",
- "std::basic_ostream<char, std::char_traits<char> >",
- "basic_ostream" },
- { 'd', "std::iostream",
- "std::basic_iostream<char, std::char_traits<char> >",
- "basic_iostream" }
+ { 't', NL ("std"),
+ NL ("std"),
+ NULL, 0 },
+ { 'a', NL ("std::allocator"),
+ NL ("std::allocator"),
+ NL ("allocator") },
+ { 'b', NL ("std::basic_string"),
+ NL ("std::basic_string"),
+ NL ("basic_string") },
+ { 's', NL ("std::string"),
+ NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
+ NL ("basic_string") },
+ { 'i', NL ("std::istream"),
+ NL ("std::basic_istream<char, std::char_traits<char> >"),
+ NL ("basic_istream") },
+ { 'o', NL ("std::ostream"),
+ NL ("std::basic_ostream<char, std::char_traits<char> >"),
+ NL ("basic_ostream") },
+ { 'd', NL ("std::iostream"),
+ NL ("std::basic_iostream<char, std::char_traits<char> >"),
+ NL ("basic_iostream") }
};
-static struct d_comp *
+static struct demangle_component *
d_substitution (di, prefix)
struct d_info *di;
int prefix;
@@ -2457,6 +2584,8 @@ d_substitution (di, prefix)
if (id >= di->next_sub)
return NULL;
+ ++di->did_subs;
+
return di->subs[id];
}
else
@@ -2481,12 +2610,24 @@ d_substitution (di, prefix)
{
if (c == p->code)
{
+ const char *s;
+ int len;
+
if (p->set_last_name != NULL)
- di->last_name = d_make_sub (di, p->set_last_name);
+ di->last_name = d_make_sub (di, p->set_last_name,
+ p->set_last_name_len);
if (verbose)
- return d_make_sub (di, p->full_expansion);
+ {
+ s = p->full_expansion;
+ len = p->full_len;
+ }
else
- return d_make_sub (di, p->simple_expansion);
+ {
+ s = p->simple_expansion;
+ len = p->simple_len;
+ }
+ di->expansion += len;
+ return d_make_sub (di, s, len);
}
}
@@ -2578,22 +2719,27 @@ d_print_error (dpi)
dpi->buf = NULL;
}
-/* Turn components into a human readable string. Returns a string
- allocated by malloc, or NULL on error. On success, this sets *PALC
- to the size of the allocated buffer. On failure, this sets *PALC
- to 0 for a bad parse, or to 1 for a memory allocation failure. */
+/* Turn components into a human readable string. OPTIONS is the
+ options bits passed to the demangler. DC is the tree to print.
+ ESTIMATE is a guess at the length of the result. This returns a
+ string allocated by malloc, or NULL on error. On success, this
+ sets *PALC to the size of the allocated buffer. On failure, this
+ sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
+ failure. */
-static char *
-d_print (options, dc, palc)
+CP_STATIC_IF_GLIBCPP_V3
+char *
+cplus_demangle_print (options, dc, estimate, palc)
int options;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
+ int estimate;
size_t *palc;
{
struct d_print_info dpi;
dpi.options = options;
- dpi.alc = 64;
+ dpi.alc = estimate + 1;
dpi.buf = malloc (dpi.alc);
if (dpi.buf == NULL)
{
@@ -2624,7 +2770,7 @@ d_print (options, dc, palc)
static void
d_print_comp (dpi, dc)
struct d_print_info *dpi;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
{
if (dc == NULL)
{
@@ -2636,20 +2782,27 @@ d_print_comp (dpi, dc)
switch (dc->type)
{
- case D_COMP_NAME:
- d_print_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
+ case DEMANGLE_COMPONENT_NAME:
+ if ((dpi->options & DMGL_JAVA) == 0)
+ d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
+ else
+ d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
return;
- case D_COMP_QUAL_NAME:
+ case DEMANGLE_COMPONENT_QUAL_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
d_print_comp (dpi, d_left (dc));
- d_append_string (dpi, (dpi->options & DMGL_JAVA) == 0 ? "::" : ".");
+ if ((dpi->options & DMGL_JAVA) == 0)
+ d_append_string_constant (dpi, "::");
+ else
+ d_append_char (dpi, '.');
d_print_comp (dpi, d_right (dc));
return;
- case D_COMP_TYPED_NAME:
+ case DEMANGLE_COMPONENT_TYPED_NAME:
{
struct d_print_mod *hold_modifiers;
- struct d_comp *typed_name;
+ struct demangle_component *typed_name;
struct d_print_mod adpm[4];
unsigned int i;
struct d_print_template dpt;
@@ -2675,9 +2828,9 @@ d_print_comp (dpi, dc)
adpm[i].templates = dpi->templates;
++i;
- if (typed_name->type != D_COMP_RESTRICT_THIS
- && typed_name->type != D_COMP_VOLATILE_THIS
- && typed_name->type != D_COMP_CONST_THIS)
+ if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
+ && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
+ && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
break;
typed_name = d_left (typed_name);
@@ -2685,16 +2838,48 @@ d_print_comp (dpi, dc)
/* If typed_name is a template, then it applies to the
function type as well. */
- if (typed_name->type == D_COMP_TEMPLATE)
+ if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
{
dpt.next = dpi->templates;
dpi->templates = &dpt;
dpt.template = typed_name;
}
+ /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
+ there may be CV-qualifiers on its right argument which
+ really apply here; this happens when parsing a class which
+ is local to a function. */
+ if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+ {
+ struct demangle_component *local_name;
+
+ local_name = d_right (typed_name);
+ while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+ || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+ || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
+ {
+ if (i >= sizeof adpm / sizeof adpm[0])
+ {
+ d_print_error (dpi);
+ return;
+ }
+
+ adpm[i] = adpm[i - 1];
+ adpm[i].next = &adpm[i - 1];
+ dpi->modifiers = &adpm[i];
+
+ adpm[i - 1].mod = local_name;
+ adpm[i - 1].printed = 0;
+ adpm[i - 1].templates = dpi->templates;
+ ++i;
+
+ local_name = d_left (local_name);
+ }
+ }
+
d_print_comp (dpi, d_right (dc));
- if (typed_name->type == D_COMP_TEMPLATE)
+ if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
dpi->templates = dpt.next;
/* If the modifiers didn't get printed by the type, print them
@@ -2714,7 +2899,7 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_TEMPLATE:
+ case DEMANGLE_COMPONENT_TEMPLATE:
{
struct d_print_mod *hold_dpm;
@@ -2741,10 +2926,10 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_TEMPLATE_PARAM:
+ case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
{
long i;
- struct d_comp *a;
+ struct demangle_component *a;
struct d_print_template *hold_dpt;
if (dpi->templates == NULL)
@@ -2757,7 +2942,7 @@ d_print_comp (dpi, dc)
a != NULL;
a = d_right (a))
{
- if (a->type != D_COMP_TEMPLATE_ARGLIST)
+ if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
{
d_print_error (dpi);
return;
@@ -2787,92 +2972,92 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_CTOR:
+ case DEMANGLE_COMPONENT_CTOR:
d_print_comp (dpi, dc->u.s_ctor.name);
return;
- case D_COMP_DTOR:
+ case DEMANGLE_COMPONENT_DTOR:
d_append_char (dpi, '~');
d_print_comp (dpi, dc->u.s_dtor.name);
return;
- case D_COMP_VTABLE:
- d_append_string (dpi, "vtable for ");
+ case DEMANGLE_COMPONENT_VTABLE:
+ d_append_string_constant (dpi, "vtable for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_VTT:
- d_append_string (dpi, "VTT for ");
+ case DEMANGLE_COMPONENT_VTT:
+ d_append_string_constant (dpi, "VTT for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_CONSTRUCTION_VTABLE:
- d_append_string (dpi, "construction vtable for ");
+ case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+ d_append_string_constant (dpi, "construction vtable for ");
d_print_comp (dpi, d_left (dc));
- d_append_string (dpi, "-in-");
+ d_append_string_constant (dpi, "-in-");
d_print_comp (dpi, d_right (dc));
return;
- case D_COMP_TYPEINFO:
- d_append_string (dpi, "typeinfo for ");
+ case DEMANGLE_COMPONENT_TYPEINFO:
+ d_append_string_constant (dpi, "typeinfo for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_TYPEINFO_NAME:
- d_append_string (dpi, "typeinfo name for ");
+ case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+ d_append_string_constant (dpi, "typeinfo name for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_TYPEINFO_FN:
- d_append_string (dpi, "typeinfo fn for ");
+ case DEMANGLE_COMPONENT_TYPEINFO_FN:
+ d_append_string_constant (dpi, "typeinfo fn for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_THUNK:
- d_append_string (dpi, "non-virtual thunk to ");
+ case DEMANGLE_COMPONENT_THUNK:
+ d_append_string_constant (dpi, "non-virtual thunk to ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_VIRTUAL_THUNK:
- d_append_string (dpi, "virtual thunk to ");
+ case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+ d_append_string_constant (dpi, "virtual thunk to ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_COVARIANT_THUNK:
- d_append_string (dpi, "covariant return thunk to ");
+ case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+ d_append_string_constant (dpi, "covariant return thunk to ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_JAVA_CLASS:
- d_append_string (dpi, "java Class for ");
+ case DEMANGLE_COMPONENT_JAVA_CLASS:
+ d_append_string_constant (dpi, "java Class for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_GUARD:
- d_append_string (dpi, "guard variable for ");
+ case DEMANGLE_COMPONENT_GUARD:
+ d_append_string_constant (dpi, "guard variable for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_REFTEMP:
- d_append_string (dpi, "reference temporary for ");
+ case DEMANGLE_COMPONENT_REFTEMP:
+ d_append_string_constant (dpi, "reference temporary for ");
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_SUB_STD:
- d_append_string (dpi, dc->u.s_string.string);
+ case DEMANGLE_COMPONENT_SUB_STD:
+ d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
return;
- case D_COMP_RESTRICT:
- case D_COMP_VOLATILE:
- case D_COMP_CONST:
- case D_COMP_RESTRICT_THIS:
- case D_COMP_VOLATILE_THIS:
- case D_COMP_CONST_THIS:
- case D_COMP_VENDOR_TYPE_QUAL:
- case D_COMP_POINTER:
- case D_COMP_REFERENCE:
- case D_COMP_COMPLEX:
- case D_COMP_IMAGINARY:
+ case DEMANGLE_COMPONENT_RESTRICT:
+ case DEMANGLE_COMPONENT_VOLATILE:
+ case DEMANGLE_COMPONENT_CONST:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_POINTER:
+ case DEMANGLE_COMPONENT_REFERENCE:
+ case DEMANGLE_COMPONENT_COMPLEX:
+ case DEMANGLE_COMPONENT_IMAGINARY:
{
/* We keep a list of modifiers on the stack. */
struct d_print_mod dpm;
@@ -2895,18 +3080,20 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_BUILTIN_TYPE:
+ case DEMANGLE_COMPONENT_BUILTIN_TYPE:
if ((dpi->options & DMGL_JAVA) == 0)
- d_append_string (dpi, dc->u.s_builtin.type->name);
+ d_append_buffer (dpi, dc->u.s_builtin.type->name,
+ dc->u.s_builtin.type->len);
else
- d_append_string (dpi, dc->u.s_builtin.type->java_name);
+ d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
+ dc->u.s_builtin.type->java_len);
return;
- case D_COMP_VENDOR_TYPE:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE:
d_print_comp (dpi, d_left (dc));
return;
- case D_COMP_FUNCTION_TYPE:
+ case DEMANGLE_COMPONENT_FUNCTION_TYPE:
{
if (d_left (dc) != NULL)
{
@@ -2936,7 +3123,7 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_ARRAY_TYPE:
+ case DEMANGLE_COMPONENT_ARRAY_TYPE:
{
struct d_print_mod dpm;
@@ -2961,7 +3148,7 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
{
struct d_print_mod dpm;
@@ -2979,7 +3166,7 @@ d_print_comp (dpi, dc)
{
d_append_char (dpi, ' ');
d_print_comp (dpi, d_left (dc));
- d_append_string (dpi, "::*");
+ d_append_string_constant (dpi, "::*");
}
dpi->modifiers = dpm.next;
@@ -2987,56 +3174,57 @@ d_print_comp (dpi, dc)
return;
}
- case D_COMP_ARGLIST:
- case D_COMP_TEMPLATE_ARGLIST:
+ case DEMANGLE_COMPONENT_ARGLIST:
+ case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
d_print_comp (dpi, d_left (dc));
if (d_right (dc) != NULL)
{
- d_append_string (dpi, ", ");
+ d_append_string_constant (dpi, ", ");
d_print_comp (dpi, d_right (dc));
}
return;
- case D_COMP_OPERATOR:
+ case DEMANGLE_COMPONENT_OPERATOR:
{
char c;
- d_append_string (dpi, "operator");
+ d_append_string_constant (dpi, "operator");
c = dc->u.s_operator.op->name[0];
if (IS_LOWER (c))
d_append_char (dpi, ' ');
- d_append_string (dpi, dc->u.s_operator.op->name);
+ d_append_buffer (dpi, dc->u.s_operator.op->name,
+ dc->u.s_operator.op->len);
return;
}
- case D_COMP_EXTENDED_OPERATOR:
- d_append_string (dpi, "operator ");
+ case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
+ d_append_string_constant (dpi, "operator ");
d_print_comp (dpi, dc->u.s_extended_operator.name);
return;
- case D_COMP_CAST:
- d_append_string (dpi, "operator ");
+ case DEMANGLE_COMPONENT_CAST:
+ d_append_string_constant (dpi, "operator ");
d_print_cast (dpi, dc);
return;
- case D_COMP_UNARY:
- if (d_left (dc)->type != D_COMP_CAST)
+ case DEMANGLE_COMPONENT_UNARY:
+ if (d_left (dc)->type != DEMANGLE_COMPONENT_CAST)
d_print_expr_op (dpi, d_left (dc));
else
{
- d_append_string (dpi, "((");
+ d_append_string_constant (dpi, "((");
d_print_cast (dpi, d_left (dc));
d_append_char (dpi, ')');
}
d_append_char (dpi, '(');
d_print_comp (dpi, d_right (dc));
d_append_char (dpi, ')');
- if (d_left (dc)->type == D_COMP_CAST)
+ if (d_left (dc)->type == DEMANGLE_COMPONENT_CAST)
d_append_char (dpi, ')');
return;
- case D_COMP_BINARY:
- if (d_right (dc)->type != D_COMP_BINARY_ARGS)
+ case DEMANGLE_COMPONENT_BINARY:
+ if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
{
d_print_error (dpi);
return;
@@ -3045,64 +3233,66 @@ d_print_comp (dpi, dc)
/* We wrap an expression which uses the greater-than operator in
an extra layer of parens so that it does not get confused
with the '>' which ends the template parameters. */
- if (d_left (dc)->type == D_COMP_OPERATOR
- && strcmp (d_left (dc)->u.s_operator.op->name, ">") == 0)
+ if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
+ && d_left (dc)->u.s_operator.op->len == 1
+ && d_left (dc)->u.s_operator.op->name[0] == '>')
d_append_char (dpi, '(');
d_append_char (dpi, '(');
d_print_comp (dpi, d_left (d_right (dc)));
- d_append_string (dpi, ") ");
+ d_append_string_constant (dpi, ") ");
d_print_expr_op (dpi, d_left (dc));
- d_append_string (dpi, " (");
+ d_append_string_constant (dpi, " (");
d_print_comp (dpi, d_right (d_right (dc)));
d_append_char (dpi, ')');
- if (d_left (dc)->type == D_COMP_OPERATOR
- && strcmp (d_left (dc)->u.s_operator.op->name, ">") == 0)
+ if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
+ && d_left (dc)->u.s_operator.op->len == 1
+ && d_left (dc)->u.s_operator.op->name[0] == '>')
d_append_char (dpi, ')');
return;
- case D_COMP_BINARY_ARGS:
- /* We should only see this as part of D_COMP_BINARY. */
+ case DEMANGLE_COMPONENT_BINARY_ARGS:
+ /* We should only see this as part of DEMANGLE_COMPONENT_BINARY. */
d_print_error (dpi);
return;
- case D_COMP_TRINARY:
- if (d_right (dc)->type != D_COMP_TRINARY_ARG1
- || d_right (d_right (dc))->type != D_COMP_TRINARY_ARG2)
+ case DEMANGLE_COMPONENT_TRINARY:
+ if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
+ || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
{
d_print_error (dpi);
return;
}
d_append_char (dpi, '(');
d_print_comp (dpi, d_left (d_right (dc)));
- d_append_string (dpi, ") ");
+ d_append_string_constant (dpi, ") ");
d_print_expr_op (dpi, d_left (dc));
- d_append_string (dpi, " (");
+ d_append_string_constant (dpi, " (");
d_print_comp (dpi, d_left (d_right (d_right (dc))));
- d_append_string (dpi, ") : (");
+ d_append_string_constant (dpi, ") : (");
d_print_comp (dpi, d_right (d_right (d_right (dc))));
d_append_char (dpi, ')');
return;
- case D_COMP_TRINARY_ARG1:
- case D_COMP_TRINARY_ARG2:
- /* We should only see these are part of D_COMP_TRINARY. */
+ case DEMANGLE_COMPONENT_TRINARY_ARG1:
+ case DEMANGLE_COMPONENT_TRINARY_ARG2:
+ /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY. */
d_print_error (dpi);
return;
- case D_COMP_LITERAL:
- case D_COMP_LITERAL_NEG:
+ case DEMANGLE_COMPONENT_LITERAL:
+ case DEMANGLE_COMPONENT_LITERAL_NEG:
/* For some builtin types, produce simpler output. */
- if (d_left (dc)->type == D_COMP_BUILTIN_TYPE)
+ if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
{
switch (d_left (dc)->u.s_builtin.type->print)
{
case D_PRINT_INT:
- if (d_right (dc)->type == D_COMP_NAME)
+ if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
{
- if (dc->type == D_COMP_LITERAL_NEG)
+ if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
d_append_char (dpi, '-');
d_print_comp (dpi, d_right (dc));
return;
@@ -3110,9 +3300,9 @@ d_print_comp (dpi, dc)
break;
case D_PRINT_LONG:
- if (d_right (dc)->type == D_COMP_NAME)
+ if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
{
- if (dc->type == D_COMP_LITERAL_NEG)
+ if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
d_append_char (dpi, '-');
d_print_comp (dpi, d_right (dc));
d_append_char (dpi, 'l');
@@ -3121,17 +3311,17 @@ d_print_comp (dpi, dc)
break;
case D_PRINT_BOOL:
- if (d_right (dc)->type == D_COMP_NAME
+ if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
&& d_right (dc)->u.s_name.len == 1
- && dc->type == D_COMP_LITERAL)
+ && dc->type == DEMANGLE_COMPONENT_LITERAL)
{
switch (d_right (dc)->u.s_name.s[0])
{
case '0':
- d_append_string (dpi, "false");
+ d_append_string_constant (dpi, "false");
return;
case '1':
- d_append_string (dpi, "true");
+ d_append_string_constant (dpi, "true");
return;
default:
break;
@@ -3147,7 +3337,7 @@ d_print_comp (dpi, dc)
d_append_char (dpi, '(');
d_print_comp (dpi, d_left (dc));
d_append_char (dpi, ')');
- if (dc->type == D_COMP_LITERAL_NEG)
+ if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
d_append_char (dpi, '-');
d_print_comp (dpi, d_right (dc));
return;
@@ -3158,64 +3348,58 @@ d_print_comp (dpi, dc)
}
}
-/* Print an identifier. */
+/* Print a Java dentifier. For Java we try to handle encoded extended
+ Unicode characters. The C++ ABI doesn't mention Unicode encoding,
+ so we don't it for C++. Characters are encoded as
+ __U<hex-char>+_. */
static void
-d_print_identifier (dpi, name, len)
+d_print_java_identifier (dpi, name, len)
struct d_print_info *dpi;
const char *name;
int len;
{
- if ((dpi->options & DMGL_JAVA) == 0)
- d_append_buffer (dpi, name, len);
- else
- {
- const char *p;
- const char *end;
+ const char *p;
+ const char *end;
- /* For Java we try to handle encoded extended Unicode
- characters. The C++ ABI doesn't mention Unicode encoding, so
- we don't it for C++. Characters are encoded as
- __U<hex-char>+_. */
- end = name + len;
- for (p = name; p < end; ++p)
+ end = name + len;
+ for (p = name; p < end; ++p)
+ {
+ if (end - p > 3
+ && p[0] == '_'
+ && p[1] == '_'
+ && p[2] == 'U')
{
- if (end - p > 3
- && p[0] == '_'
- && p[1] == '_'
- && p[2] == 'U')
+ unsigned long c;
+ const char *q;
+
+ c = 0;
+ for (q = p + 3; q < end; ++q)
{
- unsigned long c;
- const char *q;
+ int dig;
+
+ if (IS_DIGIT (*q))
+ dig = *q - '0';
+ else if (*q >= 'A' && *q <= 'F')
+ dig = *q - 'A' + 10;
+ else if (*q >= 'a' && *q <= 'f')
+ dig = *q - 'a' + 10;
+ else
+ break;
- c = 0;
- for (q = p + 3; q < end; ++q)
- {
- int dig;
-
- if (IS_DIGIT (*q))
- dig = *q - '0';
- else if (*q >= 'A' && *q <= 'F')
- dig = *q - 'A' + 10;
- else if (*q >= 'a' && *q <= 'f')
- dig = *q - 'a' + 10;
- else
- break;
-
- c = c * 16 + dig;
- }
- /* If the Unicode character is larger than 256, we don't
- try to deal with it here. FIXME. */
- if (q < end && *q == '_' && c < 256)
- {
- d_append_char (dpi, c);
- p = q;
- continue;
- }
+ c = c * 16 + dig;
+ }
+ /* If the Unicode character is larger than 256, we don't try
+ to deal with it here. FIXME. */
+ if (q < end && *q == '_' && c < 256)
+ {
+ d_append_char (dpi, c);
+ p = q;
+ continue;
}
-
- d_append_char (dpi, *p);
}
+
+ d_append_char (dpi, *p);
}
}
@@ -3235,9 +3419,9 @@ d_print_mod_list (dpi, mods, suffix)
if (mods->printed
|| (! suffix
- && (mods->mod->type == D_COMP_RESTRICT_THIS
- || mods->mod->type == D_COMP_VOLATILE_THIS
- || mods->mod->type == D_COMP_CONST_THIS)))
+ && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+ || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+ || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
{
d_print_mod_list (dpi, mods->next, suffix);
return;
@@ -3248,18 +3432,49 @@ d_print_mod_list (dpi, mods, suffix)
hold_dpt = dpi->templates;
dpi->templates = mods->templates;
- if (mods->mod->type == D_COMP_FUNCTION_TYPE)
+ if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
{
d_print_function_type (dpi, mods->mod, mods->next);
dpi->templates = hold_dpt;
return;
}
- else if (mods->mod->type == D_COMP_ARRAY_TYPE)
+ else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
{
d_print_array_type (dpi, mods->mod, mods->next);
dpi->templates = hold_dpt;
return;
}
+ else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
+ {
+ struct d_print_mod *hold_modifiers;
+ struct demangle_component *dc;
+
+ /* When this is on the modifier stack, we have pulled any
+ qualifiers off the right argument already. Otherwise, we
+ print it as usual, but don't let the left argument see any
+ modifiers. */
+
+ hold_modifiers = dpi->modifiers;
+ dpi->modifiers = NULL;
+ d_print_comp (dpi, d_left (mods->mod));
+ dpi->modifiers = hold_modifiers;
+
+ if ((dpi->options & DMGL_JAVA) == 0)
+ d_append_string_constant (dpi, "::");
+ else
+ d_append_char (dpi, '.');
+
+ dc = d_right (mods->mod);
+ while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
+ || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
+ || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
+ dc = d_left (dc);
+
+ d_print_comp (dpi, dc);
+
+ dpi->templates = hold_dpt;
+ return;
+ }
d_print_mod (dpi, mods->mod);
@@ -3273,47 +3488,47 @@ d_print_mod_list (dpi, mods, suffix)
static void
d_print_mod (dpi, mod)
struct d_print_info *dpi;
- const struct d_comp *mod;
+ const struct demangle_component *mod;
{
switch (mod->type)
{
- case D_COMP_RESTRICT:
- case D_COMP_RESTRICT_THIS:
- d_append_string (dpi, " restrict");
+ case DEMANGLE_COMPONENT_RESTRICT:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ d_append_string_constant (dpi, " restrict");
return;
- case D_COMP_VOLATILE:
- case D_COMP_VOLATILE_THIS:
- d_append_string (dpi, " volatile");
+ case DEMANGLE_COMPONENT_VOLATILE:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ d_append_string_constant (dpi, " volatile");
return;
- case D_COMP_CONST:
- case D_COMP_CONST_THIS:
- d_append_string (dpi, " const");
+ case DEMANGLE_COMPONENT_CONST:
+ case DEMANGLE_COMPONENT_CONST_THIS:
+ d_append_string_constant (dpi, " const");
return;
- case D_COMP_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
d_append_char (dpi, ' ');
d_print_comp (dpi, d_right (mod));
return;
- case D_COMP_POINTER:
+ case DEMANGLE_COMPONENT_POINTER:
/* There is no pointer symbol in Java. */
if ((dpi->options & DMGL_JAVA) == 0)
d_append_char (dpi, '*');
return;
- case D_COMP_REFERENCE:
+ case DEMANGLE_COMPONENT_REFERENCE:
d_append_char (dpi, '&');
return;
- case D_COMP_COMPLEX:
- d_append_string (dpi, "complex ");
+ case DEMANGLE_COMPONENT_COMPLEX:
+ d_append_string_constant (dpi, "complex ");
return;
- case D_COMP_IMAGINARY:
- d_append_string (dpi, "imaginary ");
+ case DEMANGLE_COMPONENT_IMAGINARY:
+ d_append_string_constant (dpi, "imaginary ");
return;
- case D_COMP_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
if (d_last_char (dpi) != '(')
d_append_char (dpi, ' ');
d_print_comp (dpi, d_left (mod));
- d_append_string (dpi, "::*");
+ d_append_string_constant (dpi, "::*");
return;
- case D_COMP_TYPED_NAME:
+ case DEMANGLE_COMPONENT_TYPED_NAME:
d_print_comp (dpi, d_left (mod));
return;
default:
@@ -3329,12 +3544,13 @@ d_print_mod (dpi, mod)
static void
d_print_function_type (dpi, dc, mods)
struct d_print_info *dpi;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
struct d_print_mod *mods;
{
int need_paren;
int saw_mod;
struct d_print_mod *p;
+ struct d_print_mod *hold_modifiers;
need_paren = 0;
saw_mod = 0;
@@ -3346,20 +3562,20 @@ d_print_function_type (dpi, dc, mods)
saw_mod = 1;
switch (p->mod->type)
{
- case D_COMP_RESTRICT:
- case D_COMP_VOLATILE:
- case D_COMP_CONST:
- case D_COMP_VENDOR_TYPE_QUAL:
- case D_COMP_POINTER:
- case D_COMP_REFERENCE:
- case D_COMP_COMPLEX:
- case D_COMP_IMAGINARY:
- case D_COMP_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_RESTRICT:
+ case DEMANGLE_COMPONENT_VOLATILE:
+ case DEMANGLE_COMPONENT_CONST:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_POINTER:
+ case DEMANGLE_COMPONENT_REFERENCE:
+ case DEMANGLE_COMPONENT_COMPLEX:
+ case DEMANGLE_COMPONENT_IMAGINARY:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
need_paren = 1;
break;
- case D_COMP_RESTRICT_THIS:
- case D_COMP_VOLATILE_THIS:
- case D_COMP_CONST_THIS:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
break;
default:
break;
@@ -3388,6 +3604,9 @@ d_print_function_type (dpi, dc, mods)
d_append_char (dpi, '(');
}
+ hold_modifiers = dpi->modifiers;
+ dpi->modifiers = NULL;
+
d_print_mod_list (dpi, mods, 0);
if (need_paren)
@@ -3401,6 +3620,8 @@ d_print_function_type (dpi, dc, mods)
d_append_char (dpi, ')');
d_print_mod_list (dpi, mods, 1);
+
+ dpi->modifiers = hold_modifiers;
}
/* Print an array type, except for the element type. */
@@ -3408,7 +3629,7 @@ d_print_function_type (dpi, dc, mods)
static void
d_print_array_type (dpi, dc, mods)
struct d_print_info *dpi;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
struct d_print_mod *mods;
{
int need_space;
@@ -3425,7 +3646,7 @@ d_print_array_type (dpi, dc, mods)
if (p->printed)
break;
- if (p->mod->type == D_COMP_ARRAY_TYPE)
+ if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
{
need_space = 0;
break;
@@ -3439,7 +3660,7 @@ d_print_array_type (dpi, dc, mods)
}
if (need_paren)
- d_append_string (dpi, " (");
+ d_append_string_constant (dpi, " (");
d_print_mod_list (dpi, mods, 0);
@@ -3463,10 +3684,11 @@ d_print_array_type (dpi, dc, mods)
static void
d_print_expr_op (dpi, dc)
struct d_print_info *dpi;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
{
- if (dc->type == D_COMP_OPERATOR)
- d_append_string (dpi, dc->u.s_operator.op->name);
+ if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
+ d_append_buffer (dpi, dc->u.s_operator.op->name,
+ dc->u.s_operator.op->len);
else
d_print_comp (dpi, dc);
}
@@ -3476,9 +3698,9 @@ d_print_expr_op (dpi, dc)
static void
d_print_cast (dpi, dc)
struct d_print_info *dpi;
- const struct d_comp *dc;
+ const struct demangle_component *dc;
{
- if (d_left (dc)->type != D_COMP_TEMPLATE)
+ if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
d_print_comp (dpi, d_left (dc));
else
{
@@ -3518,14 +3740,16 @@ d_print_cast (dpi, dc)
/* Initialize the information structure we use to pass around
information. */
-static int
-d_init_info (mangled, options, len, di)
+CP_STATIC_IF_GLIBCPP_V3
+void
+cplus_demangle_init_info (mangled, options, len, di)
const char *mangled;
int options;
size_t len;
struct d_info *di;
{
di->s = mangled;
+ di->send = mangled + len;
di->options = options;
di->n = mangled;
@@ -3534,29 +3758,17 @@ d_init_info (mangled, options, len, di)
the mangled string. Most components correspond directly to
chars, but the ARGLIST types are exceptions. */
di->num_comps = 2 * len;
- di->comps = (struct d_comp *) malloc (di->num_comps
- * sizeof (struct d_comp));
di->next_comp = 0;
/* Similarly, we can not need more substitutions than there are
chars in the mangled string. */
di->num_subs = len;
- di->subs = (struct d_comp **) malloc (di->num_subs
- * sizeof (struct d_comp *));
di->next_sub = 0;
+ di->did_subs = 0;
di->last_name = NULL;
- if (di->comps == NULL || di->subs == NULL)
- {
- if (di->comps != NULL)
- free (di->comps);
- if (di->subs != NULL)
- free (di->subs);
- return 0;
- }
-
- return 1;
+ di->expansion = 0;
}
/* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled
@@ -3575,7 +3787,8 @@ d_demangle (mangled, options, palc)
size_t len;
int type;
struct d_info di;
- struct d_comp *dc;
+ struct demangle_component *dc;
+ int estimate;
char *ret;
*palc = 0;
@@ -3611,39 +3824,82 @@ d_demangle (mangled, options, palc)
type = 1;
}
- if (! d_init_info (mangled, options, len, &di))
- {
- *palc = 1;
- return NULL;
- }
+ cplus_demangle_init_info (mangled, options, len, &di);
- if (! type)
- dc = d_mangled_name (&di, 1);
- else
- dc = d_type (&di);
+ {
+#ifdef CP_DYNAMIC_ARRAYS
+ __extension__ struct demangle_component comps[di.num_comps];
+ __extension__ struct demangle_component *subs[di.num_subs];
+
+ di.comps = &comps[0];
+ di.subs = &subs[0];
+#else
+ di.comps = ((struct demangle_component *)
+ malloc (di.num_comps * sizeof (struct demangle_component)));
+ di.subs = ((struct demangle_component **)
+ malloc (di.num_subs * sizeof (struct demangle_component *)));
+ if (di.comps == NULL || di.subs == NULL)
+ {
+ if (di.comps != NULL)
+ free (di.comps);
+ if (di.subs != NULL)
+ free (di.subs);
+ *palc = 1;
+ return NULL;
+ }
+#endif
+
+ if (! type)
+ dc = cplus_demangle_mangled_name (&di, 1);
+ else
+ dc = cplus_demangle_type (&di);
- /* If DMGL_PARAMS is set, then if we didn't consume the entire
- mangled string, then we didn't successfully demangle it. If
- DMGL_PARAMS is not set, we didn't look at the trailing
- parameters. */
- if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
- dc = NULL;
+ /* If DMGL_PARAMS is set, then if we didn't consume the entire
+ mangled string, then we didn't successfully demangle it. If
+ DMGL_PARAMS is not set, we didn't look at the trailing
+ parameters. */
+ if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
+ dc = NULL;
#ifdef CP_DEMANGLE_DEBUG
- if (dc == NULL)
- printf ("failed demangling\n");
- else
- d_dump (dc, 0);
+ if (dc == NULL)
+ printf ("failed demangling\n");
+ else
+ d_dump (dc, 0);
#endif
- free (di.subs);
- di.subs = NULL;
+ /* We try to guess the length of the demangled string, to minimize
+ calls to realloc during demangling. */
+ estimate = len + di.expansion + 10 * di.did_subs;
+ estimate += estimate / 8;
- ret = NULL;
- if (dc != NULL)
- ret = d_print (options, dc, palc);
+ ret = NULL;
+ if (dc != NULL)
+ ret = cplus_demangle_print (options, dc, estimate, palc);
- free (di.comps);
+#ifndef CP_DYNAMIC_ARRAYS
+ free (di.comps);
+ free (di.subs);
+#endif
+
+#ifdef CP_DEMANGLE_DEBUG
+ if (ret != NULL)
+ {
+ int rlen;
+
+ rlen = strlen (ret);
+ if (rlen > 2 * estimate)
+ printf ("*** Length %d much greater than estimate %d\n",
+ rlen, estimate);
+ else if (rlen > estimate)
+ printf ("*** Length %d greater than estimate %d\n",
+ rlen, estimate);
+ else if (rlen < estimate / 2)
+ printf ("*** Length %d much less than estimate %d\n",
+ rlen, estimate);
+ }
+#endif
+ }
return ret;
}
@@ -3820,53 +4076,78 @@ is_ctor_or_dtor (mangled, ctor_kind, dtor_kind)
enum gnu_v3_dtor_kinds *dtor_kind;
{
struct d_info di;
- struct d_comp *dc;
+ struct demangle_component *dc;
int ret;
*ctor_kind = (enum gnu_v3_ctor_kinds) 0;
*dtor_kind = (enum gnu_v3_dtor_kinds) 0;
- if (! d_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di))
- return 0;
+ cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
- dc = d_mangled_name (&di, 1);
+ {
+#ifdef CP_DYNAMIC_ARRAYS
+ __extension__ struct demangle_component comps[di.num_comps];
+ __extension__ struct demangle_component *subs[di.num_subs];
+
+ di.comps = &comps[0];
+ di.subs = &subs[0];
+#else
+ di.comps = ((struct demangle_component *)
+ malloc (di.num_comps * sizeof (struct demangle_component)));
+ di.subs = ((struct demangle_component **)
+ malloc (di.num_subs * sizeof (struct demangle_component *)));
+ if (di.comps == NULL || di.subs == NULL)
+ {
+ if (di.comps != NULL)
+ free (di.comps);
+ if (di.subs != NULL)
+ free (di.subs);
+ return 0;
+ }
+#endif
- /* Note that because we did not pass DMGL_PARAMS, we don't expect to
- demangle the entire string. */
+ dc = cplus_demangle_mangled_name (&di, 1);
- ret = 0;
- while (dc != NULL)
- {
- switch (dc->type)
- {
- default:
- dc = NULL;
- break;
- case D_COMP_TYPED_NAME:
- case D_COMP_TEMPLATE:
- case D_COMP_RESTRICT_THIS:
- case D_COMP_VOLATILE_THIS:
- case D_COMP_CONST_THIS:
- dc = d_left (dc);
- break;
- case D_COMP_QUAL_NAME:
- dc = d_right (dc);
- break;
- case D_COMP_CTOR:
- *ctor_kind = dc->u.s_ctor.kind;
- ret = 1;
- dc = NULL;
- break;
- case D_COMP_DTOR:
- *dtor_kind = dc->u.s_dtor.kind;
- ret = 1;
- dc = NULL;
- break;
- }
- }
+ /* Note that because we did not pass DMGL_PARAMS, we don't expect
+ to demangle the entire string. */
+
+ ret = 0;
+ while (dc != NULL)
+ {
+ switch (dc->type)
+ {
+ default:
+ dc = NULL;
+ break;
+ case DEMANGLE_COMPONENT_TYPED_NAME:
+ case DEMANGLE_COMPONENT_TEMPLATE:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
+ dc = d_left (dc);
+ break;
+ case DEMANGLE_COMPONENT_QUAL_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
+ dc = d_right (dc);
+ break;
+ case DEMANGLE_COMPONENT_CTOR:
+ *ctor_kind = dc->u.s_ctor.kind;
+ ret = 1;
+ dc = NULL;
+ break;
+ case DEMANGLE_COMPONENT_DTOR:
+ *dtor_kind = dc->u.s_dtor.kind;
+ ret = 1;
+ dc = NULL;
+ break;
+ }
+ }
- free (di.subs);
- free (di.comps);
+#ifndef CP_DYNAMIC_ARRAYS
+ free (di.subs);
+ free (di.comps);
+#endif
+ }
return ret;
}
diff --git a/libiberty/cp-demangle.h b/libiberty/cp-demangle.h
new file mode 100644
index 00000000000..d3c57ce3766
--- /dev/null
+++ b/libiberty/cp-demangle.h
@@ -0,0 +1,139 @@
+/* Internal demangler interface for g++ V3 ABI.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor <ian@wasabisystems.com>.
+
+ 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
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ In addition to the permissions in the GNU General Public License, the
+ Free Software Foundation gives you unlimited permission to link the
+ compiled version of this file into combinations with other programs,
+ and to distribute those combinations without any restriction coming
+ from the use of this file. (The General Public License restrictions
+ do apply in other respects; for example, they cover modification of
+ the file, and distribution when not linked into a combined
+ executable.)
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* This file provides some definitions shared by cp-demangle.c and
+ cp-demint.c. It should not be included by any other files. */
+
+/* Information we keep for operators. */
+
+struct demangle_operator_info
+{
+ /* Mangled name. */
+ const char *code;
+ /* Real name. */
+ const char *name;
+ /* Length of real name. */
+ int len;
+ /* Number of arguments. */
+ int args;
+};
+
+/* How to print the value of a builtin type. */
+
+enum d_builtin_type_print
+{
+ /* Print as (type)val. */
+ D_PRINT_DEFAULT,
+ /* Print as integer. */
+ D_PRINT_INT,
+ /* Print as long, with trailing `l'. */
+ D_PRINT_LONG,
+ /* Print as bool. */
+ D_PRINT_BOOL,
+ /* Print in usual way, but here to detect void. */
+ D_PRINT_VOID
+};
+
+/* Information we keep for a builtin type. */
+
+struct demangle_builtin_type_info
+{
+ /* Type name. */
+ const char *name;
+ /* Length of type name. */
+ int len;
+ /* Type name when using Java. */
+ const char *java_name;
+ /* Length of java name. */
+ int java_len;
+ /* How to print a value of this type. */
+ enum d_builtin_type_print print;
+};
+
+/* The information structure we pass around. */
+
+struct d_info
+{
+ /* The string we are demangling. */
+ const char *s;
+ /* The end of the string we are demangling. */
+ const char *send;
+ /* The options passed to the demangler. */
+ int options;
+ /* The next character in the string to consider. */
+ const char *n;
+ /* The array of components. */
+ struct demangle_component *comps;
+ /* The index of the next available component. */
+ int next_comp;
+ /* The number of available component structures. */
+ int num_comps;
+ /* The array of substitutions. */
+ struct demangle_component **subs;
+ /* The index of the next substitution. */
+ int next_sub;
+ /* The number of available entries in the subs array. */
+ int num_subs;
+ /* The number of substitutions which we actually made from the subs
+ array, plus the number of template parameter references we
+ saw. */
+ int did_subs;
+ /* The last name we saw, for constructors and destructors. */
+ struct demangle_component *last_name;
+ /* A running total of the length of large expansions from the
+ mangled name to the demangled name, such as standard
+ substitutions and builtin types. */
+ int expansion;
+};
+
+#define d_peek_char(di) (*((di)->n))
+#define d_peek_next_char(di) ((di)->n[1])
+#define d_advance(di, i) ((di)->n += (i))
+#define d_next_char(di) (*((di)->n++))
+#define d_str(di) ((di)->n)
+
+/* Functions and arrays in cp-demangle.c which are referenced by
+ functions in cp-demint.c. */
+
+extern const struct demangle_operator_info cplus_demangle_operators[];
+
+#define D_BUILTIN_TYPE_COUNT (26)
+
+extern const struct demangle_builtin_type_info
+cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
+
+extern struct demangle_component *
+cplus_demangle_mangled_name PARAMS ((struct d_info *, int));
+
+extern struct demangle_component *
+cplus_demangle_type PARAMS ((struct d_info *));
+
+extern void
+cplus_demangle_init_info PARAMS ((const char *, int, size_t, struct d_info *));
diff --git a/libiberty/cp-demint.c b/libiberty/cp-demint.c
new file mode 100644
index 00000000000..533202dd104
--- /dev/null
+++ b/libiberty/cp-demint.c
@@ -0,0 +1,241 @@
+/* Demangler component interface functions.
+ Copyright (C) 2004 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor <ian@wasabisystems.com>.
+
+ 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
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ In addition to the permissions in the GNU General Public License, the
+ Free Software Foundation gives you unlimited permission to link the
+ compiled version of this file into combinations with other programs,
+ and to distribute those combinations without any restriction coming
+ from the use of this file. (The General Public License restrictions
+ do apply in other respects; for example, they cover modification of
+ the file, and distribution when not linked into a combined
+ executable.)
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/* This file implements a few interface functions which are provided
+ for use with struct demangle_component trees. These functions are
+ declared in demangle.h. These functions are closely tied to the
+ demangler code in cp-demangle.c, and other interface functions can
+ be found in that file. We put these functions in a separate file
+ because they are not needed by the demangler, and so we avoid
+ having them pulled in by programs which only need the
+ demangler. */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
+#include "ansidecl.h"
+#include "libiberty.h"
+#include "demangle.h"
+#include "cp-demangle.h"
+
+/* Fill in most component types. */
+
+int
+cplus_demangle_fill_component (p, type, left, right)
+ struct demangle_component *p;
+ enum demangle_component_type type;
+ struct demangle_component *left;
+ struct demangle_component *right;
+{
+ if (p == NULL)
+ return 0;
+ switch (type)
+ {
+ case DEMANGLE_COMPONENT_QUAL_NAME:
+ case DEMANGLE_COMPONENT_LOCAL_NAME:
+ case DEMANGLE_COMPONENT_TYPED_NAME:
+ case DEMANGLE_COMPONENT_TEMPLATE:
+ case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
+ case DEMANGLE_COMPONENT_FUNCTION_TYPE:
+ case DEMANGLE_COMPONENT_ARRAY_TYPE:
+ case DEMANGLE_COMPONENT_PTRMEM_TYPE:
+ case DEMANGLE_COMPONENT_ARGLIST:
+ case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
+ case DEMANGLE_COMPONENT_UNARY:
+ case DEMANGLE_COMPONENT_BINARY:
+ case DEMANGLE_COMPONENT_BINARY_ARGS:
+ case DEMANGLE_COMPONENT_TRINARY:
+ case DEMANGLE_COMPONENT_TRINARY_ARG1:
+ case DEMANGLE_COMPONENT_TRINARY_ARG2:
+ case DEMANGLE_COMPONENT_LITERAL:
+ case DEMANGLE_COMPONENT_LITERAL_NEG:
+ break;
+
+ /* These component types only have one subtree. */
+ case DEMANGLE_COMPONENT_VTABLE:
+ case DEMANGLE_COMPONENT_VTT:
+ case DEMANGLE_COMPONENT_TYPEINFO:
+ case DEMANGLE_COMPONENT_TYPEINFO_NAME:
+ case DEMANGLE_COMPONENT_TYPEINFO_FN:
+ case DEMANGLE_COMPONENT_THUNK:
+ case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
+ case DEMANGLE_COMPONENT_COVARIANT_THUNK:
+ case DEMANGLE_COMPONENT_JAVA_CLASS:
+ case DEMANGLE_COMPONENT_GUARD:
+ case DEMANGLE_COMPONENT_REFTEMP:
+ case DEMANGLE_COMPONENT_RESTRICT:
+ case DEMANGLE_COMPONENT_VOLATILE:
+ case DEMANGLE_COMPONENT_CONST:
+ case DEMANGLE_COMPONENT_RESTRICT_THIS:
+ case DEMANGLE_COMPONENT_VOLATILE_THIS:
+ case DEMANGLE_COMPONENT_CONST_THIS:
+ case DEMANGLE_COMPONENT_POINTER:
+ case DEMANGLE_COMPONENT_REFERENCE:
+ case DEMANGLE_COMPONENT_COMPLEX:
+ case DEMANGLE_COMPONENT_IMAGINARY:
+ case DEMANGLE_COMPONENT_VENDOR_TYPE:
+ case DEMANGLE_COMPONENT_CAST:
+ if (right != NULL)
+ return 0;
+ break;
+
+ default:
+ /* Other types do not use subtrees. */
+ return 0;
+ }
+
+ p->type = type;
+ p->u.s_binary.left = left;
+ p->u.s_binary.right = right;
+
+ return 1;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE. */
+
+int
+cplus_demangle_fill_builtin_type (p, typename)
+ struct demangle_component *p;
+ const char *typename;
+{
+ int len;
+ unsigned int i;
+
+ if (p == NULL || typename == NULL)
+ return 0;
+ len = strlen (typename);
+ for (i = 0; i < D_BUILTIN_TYPE_COUNT; ++i)
+ {
+ if (len == cplus_demangle_builtin_types[i].len
+ && strcmp (typename, cplus_demangle_builtin_types[i].name) == 0)
+ {
+ p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
+ p->u.s_builtin.type = &cplus_demangle_builtin_types[i];
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* Fill in a DEMANGLE_COMPONENT_OPERATOR. */
+
+int
+cplus_demangle_fill_operator (p, opname, args)
+ struct demangle_component *p;
+ const char *opname;
+ int args;
+{
+ int len;
+ unsigned int i;
+
+ if (p == NULL || opname == NULL)
+ return 0;
+ len = strlen (opname);
+ for (i = 0; cplus_demangle_operators[i].name != NULL; ++i)
+ {
+ if (len == cplus_demangle_operators[i].len
+ && args == cplus_demangle_operators[i].args
+ && strcmp (opname, cplus_demangle_operators[i].name) == 0)
+ {
+ p->type = DEMANGLE_COMPONENT_OPERATOR;
+ p->u.s_operator.op = &cplus_demangle_operators[i];
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/* Translate a mangled name into components. */
+
+struct demangle_component *
+cplus_demangle_v3_components (mangled, options, mem)
+ const char *mangled;
+ int options;
+ void **mem;
+{
+ size_t len;
+ int type;
+ struct d_info di;
+ struct demangle_component *dc;
+
+ len = strlen (mangled);
+
+ if (mangled[0] == '_' && mangled[1] == 'Z')
+ type = 0;
+ else
+ {
+ if ((options & DMGL_TYPES) == 0)
+ return NULL;
+ type = 1;
+ }
+
+ cplus_demangle_init_info (mangled, options, len, &di);
+
+ di.comps = ((struct demangle_component *)
+ malloc (di.num_comps * sizeof (struct demangle_component)));
+ di.subs = ((struct demangle_component **)
+ malloc (di.num_subs * sizeof (struct demangle_component *)));
+ if (di.comps == NULL || di.subs == NULL)
+ {
+ if (di.comps != NULL)
+ free (di.comps);
+ if (di.subs != NULL)
+ free (di.subs);
+ return NULL;
+ }
+
+ if (! type)
+ dc = cplus_demangle_mangled_name (&di, 1);
+ else
+ dc = cplus_demangle_type (&di);
+
+ /* If DMGL_PARAMS is set, then if we didn't consume the entire
+ mangled string, then we didn't successfully demangle it. */
+ if ((options & DMGL_PARAMS) != 0 && d_peek_char (&di) != '\0')
+ dc = NULL;
+
+ free (di.subs);
+
+ if (dc != NULL)
+ *mem = di.comps;
+ else
+ free (di.comps);
+
+ return dc;
+}
diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c
index 5e2e7a7126c..f3c4464f184 100644
--- a/libiberty/cplus-dem.c
+++ b/libiberty/cplus-dem.c
@@ -1,6 +1,6 @@
/* Demangler for GNU C++
Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001 Free Software Foundation, Inc.
+ 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Written by James Clark (jjc@jclark.uucp)
Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
@@ -2318,6 +2318,7 @@ demangle_arm_hp_template (work, mangled, n, declp)
if (HP_DEMANGLING && ((*mangled)[n] == 'X'))
{
char *start_spec_args = NULL;
+ int hold_options;
/* First check for and omit template specialization pseudo-arguments,
such as in "Spec<#1,#1.*>" */
@@ -2330,6 +2331,12 @@ demangle_arm_hp_template (work, mangled, n, declp)
string_init (&arg);
if (work->temp_start == -1) /* non-recursive call */
work->temp_start = declp->p - declp->b;
+
+ /* We want to unconditionally demangle parameter types in
+ template parameters. */
+ hold_options = work->options;
+ work->options |= DMGL_PARAMS;
+
string_append (declp, "<");
while (1)
{
@@ -2376,17 +2383,25 @@ demangle_arm_hp_template (work, mangled, n, declp)
string_delete (&arg);
if (**mangled == '_')
(*mangled)++;
+ work->options = hold_options;
return;
}
/* ARM template? (Also handles HP cfront extensions) */
else if (arm_pt (work, *mangled, n, &p, &args))
{
+ int hold_options;
string type_str;
string_init (&arg);
string_appendn (declp, *mangled, p - *mangled);
if (work->temp_start == -1) /* non-recursive call */
work->temp_start = declp->p - declp->b;
+
+ /* We want to unconditionally demangle parameter types in
+ template parameters. */
+ hold_options = work->options;
+ work->options |= DMGL_PARAMS;
+
string_append (declp, "<");
/* should do error checking here */
while (args < e) {
@@ -2430,7 +2445,10 @@ demangle_arm_hp_template (work, mangled, n, declp)
/* Fail if we didn't make any progress: prevent infinite loop. */
if (args == old_args)
- return;
+ {
+ work->options = hold_options;
+ return;
+ }
}
}
string_appends (declp, &arg);
@@ -2441,6 +2459,7 @@ demangle_arm_hp_template (work, mangled, n, declp)
if (args >= e)
--declp->p; /* remove extra comma */
string_append (declp, ">");
+ work->options = hold_options;
}
else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
&& (*mangled)[9] == 'N'
diff --git a/libiberty/getpwd.c b/libiberty/getpwd.c
index f508b1e21e5..31c7d20f307 100644
--- a/libiberty/getpwd.c
+++ b/libiberty/getpwd.c
@@ -35,6 +35,9 @@ extern int errno;
#if HAVE_SYS_STAT_H
#include <sys/stat.h>
#endif
+#if HAVE_LIMITS_H
+#include <limits.h>
+#endif
/* Prototype these in case the system headers don't provide them. */
extern char *getpwd ();
diff --git a/libiberty/lbasename.c b/libiberty/lbasename.c
index 43cb73f0a1d..200a87f2387 100644
--- a/libiberty/lbasename.c
+++ b/libiberty/lbasename.c
@@ -40,25 +40,7 @@ and a path ending in @code{/} returns the empty string after it.
#include "ansidecl.h"
#include "libiberty.h"
#include "safe-ctype.h"
-
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) \
- || defined (__DJGPP__) || defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif
+#include "filenames.h"
const char *
lbasename (name)
diff --git a/libiberty/maint-tool b/libiberty/maint-tool
index 6b9bf7f2cdb..bfc53042247 100644
--- a/libiberty/maint-tool
+++ b/libiberty/maint-tool
@@ -213,6 +213,12 @@ sub locals_first {
sub deps {
+ $crule = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
+ $crule .= "\t \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
+ $crule .= "\telse true; fi\n";
+ $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
+ $crule .= "\n";
+
$incdir = shift @ARGV;
opendir(INC, $incdir);
@@ -260,10 +266,10 @@ sub deps {
@deps = sort { &locals_first($a,$b) } keys %scanned;
$obj = $f;
$obj =~ s/\.c$/.o/;
- $obj = "$obj:";
+ $obj = "./$obj:";
if ($#deps >= 0) {
- print OUT $obj;
- $len = length($obj);
+ print OUT "$obj \$(srcdir)/$f";
+ $len = length("$obj $f");
for $dt (@deps) {
$d = $mine{$dt};
if ($len + length($d) > 70) {
@@ -275,7 +281,12 @@ sub deps {
}
}
print OUT "\n";
+ } else {
+ print OUT "$obj \$(srcdir)/$f\n";
}
+ $c = $crule;
+ $c =~ s@\$\<@\$\(srcdir\)\/$f@g;
+ print OUT $c;
}
}
closedir(S);
diff --git a/libiberty/strdup.c b/libiberty/strdup.c
index 071a4a401af..a3f17d3bcb1 100644
--- a/libiberty/strdup.c
+++ b/libiberty/strdup.c
@@ -22,7 +22,7 @@ extern PTR memcpy PARAMS ((PTR, const PTR, size_t));
char *
strdup(s)
- char *s;
+ const char *s;
{
size_t len = strlen (s) + 1;
char *result = (char*) malloc (len);
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index b39e2f4386b..25e88309b76 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -1,2571 +1,3223 @@
# This file holds test cases for the demangler.
-# Each test consists of three lines in succession.
-# The first line is arguments to pass to the test filter program.
-# The second line is the mangled string.
-# The third line is the expected output.
-# A line starting with `#' is ignore.
-# However blank lines in this file are NOT ignored.
-#
---format=gnu
+# Each test case looks like this:
+# options
+# input to be demangled
+# expected output
+#
+# Supported options:
+# --format=<name> Sets the demangling style.
+# --no-params There are two lines of expected output; the first
+# is with DMGL_PARAMS, the second is without it.
+# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected
+# output is an integer representing ctor_kind.
+# --is-v3-dtor Likewise, but for dtors.
+#
+# For compatibility, just in case it matters, the options line may be
+# empty, to mean --format=auto. If it doesn't start with --, then it
+# may contain only a format name.
+#
+# A line starting with `#' is ignored.
+# However, blank lines in this file are NOT ignored.
+#
+--format=gnu --no-params
AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)
+ivTSolver::AddAlignment
#
---format=gnu
+--format=gnu --no-params
ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)
+ArrowLine::ArrowheadIntersects
#
---format=gnu
+--format=gnu --no-params
AtEnd__13ivRubberGroup
ivRubberGroup::AtEnd(void)
+ivRubberGroup::AtEnd
#
---format=gnu
+--format=gnu --no-params
BgFilter__9ivTSolverP12ivInteractor
ivTSolver::BgFilter(ivInteractor *)
+ivTSolver::BgFilter
#
---format=gnu
+--format=gnu --no-params
Check__6UArrayi
UArray::Check(int)
+UArray::Check
#
---format=gnu
+--format=gnu --no-params
CoreConstDecls__8TextCodeR7ostream
TextCode::CoreConstDecls(ostream &)
+TextCode::CoreConstDecls
#
---format=gnu
+--format=gnu --no-params
Detach__8StateVarP12StateVarView
StateVar::Detach(StateVarView *)
+StateVar::Detach
#
---format=gnu
+--format=gnu --no-params
Done__9ComponentG8Iterator
Component::Done(Iterator)
+Component::Done
#
---format=gnu
+--format=gnu --no-params
Effect__11RelateManipR7ivEvent
RelateManip::Effect(ivEvent &)
+RelateManip::Effect
#
---format=gnu
+--format=gnu --no-params
FindFixed__FRP4CNetP4CNet
FindFixed(CNet *&, CNet *)
+FindFixed
#
---format=gnu
+--format=gnu --no-params
Fix48_abort__FR8twolongs
Fix48_abort(twolongs &)
+Fix48_abort
#
---format=gnu
+--format=gnu --no-params
GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)
+iv2_6_VScroller::GetBarInfo
#
---format=gnu
+--format=gnu --no-params
GetBgColor__C9ivPainter
ivPainter::GetBgColor(void) const
+ivPainter::GetBgColor
#
---format=gnu
+--format=gnu --no-params
InsertBody__15H_PullrightMenuii
H_PullrightMenu::InsertBody(int, int)
+H_PullrightMenu::InsertBody
#
---format=gnu
+--format=gnu --no-params
InsertCharacter__9TextManipc
TextManip::InsertCharacter(char)
+TextManip::InsertCharacter
#
---format=gnu
+--format=gnu --no-params
InsertToplevel__7ivWorldP12ivInteractorT1
ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)
+ivWorld::InsertToplevel
#
---format=gnu
+--format=gnu --no-params
InsertToplevel__7ivWorldP12ivInteractorT1iiUi
ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)
+ivWorld::InsertToplevel
#
---format=gnu
+--format=gnu --no-params
IsAGroup__FP11GraphicViewP11GraphicComp
IsAGroup(GraphicView *, GraphicComp *)
+IsAGroup
#
---format=gnu
+--format=gnu --no-params
IsA__10ButtonCodeUl
ButtonCode::IsA(unsigned long)
+ButtonCode::IsA
#
---format=gnu
+--format=gnu --no-params
ReadName__FR7istreamPc
ReadName(istream &, char *)
+ReadName
#
---format=gnu
+--format=gnu --no-params
Redraw__13StringBrowseriiii
StringBrowser::Redraw(int, int, int, int)
+StringBrowser::Redraw
#
---format=gnu
+--format=gnu --no-params
Rotate__13ivTransformerf
ivTransformer::Rotate(float)
+ivTransformer::Rotate
#
---format=gnu
+--format=gnu --no-params
Rotated__C13ivTransformerf
ivTransformer::Rotated(float) const
+ivTransformer::Rotated
#
---format=gnu
+--format=gnu --no-params
Round__Ff
Round(float)
+Round
#
---format=gnu
+--format=gnu --no-params
SetExport__16MemberSharedNameUi
MemberSharedName::SetExport(unsigned int)
+MemberSharedName::SetExport
#
---format=gnu
+--format=gnu --no-params
Set__14ivControlState13ControlStatusUi
ivControlState::Set(ControlStatus, unsigned int)
+ivControlState::Set
#
---format=gnu
+--format=gnu --no-params
Set__5DFacePcii
DFace::Set(char *, int, int)
+DFace::Set
#
---format=gnu
+--format=gnu --no-params
VConvert__9ivTSolverP12ivInteractorRP8TElementT2
ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)
+ivTSolver::VConvert
#
---format=gnu
+--format=gnu --no-params
VConvert__9ivTSolverP7ivTGlueRP8TElement
ivTSolver::VConvert(ivTGlue *, TElement *&)
+ivTSolver::VConvert
#
---format=gnu
+--format=gnu --no-params
VOrder__9ivTSolverUiRP12ivInteractorT2
ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)
+ivTSolver::VOrder
#
---format=gnu
+--format=gnu --no-params
_10PageButton$__both
PageButton::__both
+PageButton::__both
#
---format=gnu
+--format=gnu --no-params
_3RNG$singleMantissa
RNG::singleMantissa
+RNG::singleMantissa
#
---format=gnu
+--format=gnu --no-params
_5IComp$_release
IComp::_release
+IComp::_release
#
---format=gnu
+--format=gnu --no-params
_$_10BitmapComp
BitmapComp::~BitmapComp(void)
+BitmapComp::~BitmapComp
#
---format=gnu
+--format=gnu --no-params
_$_9__io_defs
__io_defs::~__io_defs(void)
+__io_defs::~__io_defs
#
---format=gnu
+--format=gnu --no-params
_$_Q23foo3bar
foo::bar::~bar(void)
+foo::bar::~bar
#
---format=gnu
+--format=gnu --no-params
_$_Q33foo3bar4bell
foo::bar::bell::~bell(void)
+foo::bar::bell::~bell
#
---format=gnu
+--format=gnu --no-params
__10ivTelltaleiP7ivGlyph
ivTelltale::ivTelltale(int, ivGlyph *)
+ivTelltale::ivTelltale
#
---format=gnu
+--format=gnu --no-params
__10ivViewportiP12ivInteractorUi
ivViewport::ivViewport(int, ivInteractor *, unsigned int)
+ivViewport::ivViewport
#
---format=gnu
+--format=gnu --no-params
__10ostrstream
ostrstream::ostrstream(void)
+ostrstream::ostrstream
#
---format=gnu
+--format=gnu --no-params
__10ostrstreamPcii
ostrstream::ostrstream(char *, int, int)
+ostrstream::ostrstream
#
---format=gnu
+--format=gnu --no-params
__11BitmapTablei
BitmapTable::BitmapTable(int)
+BitmapTable::BitmapTable
#
---format=gnu
+--format=gnu --no-params
__12ViewportCodeP12ViewportComp
ViewportCode::ViewportCode(ViewportComp *)
+ViewportCode::ViewportCode
#
---format=gnu
+--format=gnu --no-params
__12iv2_6_Borderii
iv2_6_Border::iv2_6_Border(int, int)
+iv2_6_Border::iv2_6_Border
#
---format=gnu
+--format=gnu --no-params
__12ivBreak_Listl
ivBreak_List::ivBreak_List(long)
+ivBreak_List::ivBreak_List
#
---format=gnu
+--format=gnu --no-params
__14iv2_6_MenuItemiP12ivInteractor
iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)
+iv2_6_MenuItem::iv2_6_MenuItem
#
---format=gnu
+--format=gnu --no-params
__20DisplayList_IteratorR11DisplayList
DisplayList_Iterator::DisplayList_Iterator(DisplayList &)
+DisplayList_Iterator::DisplayList_Iterator
#
---format=gnu
+--format=gnu --no-params
__3fooRT0
foo::foo(foo &)
+foo::foo
#
---format=gnu
+--format=gnu --no-params
__3fooiN31
foo::foo(int, int, int, int)
+foo::foo
#
---format=gnu
+--format=gnu --no-params
__3fooiRT0iT2iT2
foo::foo(int, foo &, int, foo &, int, foo &)
+foo::foo
#
---format=gnu
+--format=gnu --no-params
__6KeyMapPT0
KeyMap::KeyMap(KeyMap *)
+KeyMap::KeyMap
#
---format=gnu
+--format=gnu --no-params
__8ArrowCmdP6EditorUiUi
ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)
+ArrowCmd::ArrowCmd
#
---format=gnu
+--format=gnu --no-params
__9F_EllipseiiiiP7Graphic
F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)
+F_Ellipse::F_Ellipse
#
---format=gnu
+--format=gnu --no-params
__9FrameDataP9FrameCompi
FrameData::FrameData(FrameComp *, int)
+FrameData::FrameData
#
---format=gnu
+--format=gnu --no-params
__9HVGraphicP9CanvasVarP7Graphic
HVGraphic::HVGraphic(CanvasVar *, Graphic *)
+HVGraphic::HVGraphic
#
---format=gnu
+--format=gnu --no-params
__Q23foo3bar
foo::bar::bar(void)
+foo::bar::bar
#
---format=gnu
+--format=gnu --no-params
__Q33foo3bar4bell
foo::bar::bell::bell(void)
+foo::bar::bell::bell
#
---format=gnu
+--format=gnu --no-params
__aa__3fooRT0
foo::operator&&(foo &)
+foo::operator&&
#
---format=gnu
+--format=gnu --no-params
__aad__3fooRT0
foo::operator&=(foo &)
+foo::operator&=
#
---format=gnu
+--format=gnu --no-params
__ad__3fooRT0
foo::operator&(foo &)
+foo::operator&
#
---format=gnu
+--format=gnu --no-params
__adv__3fooRT0
foo::operator/=(foo &)
+foo::operator/=
#
---format=gnu
+--format=gnu --no-params
__aer__3fooRT0
foo::operator^=(foo &)
+foo::operator^=
#
---format=gnu
+--format=gnu --no-params
__als__3fooRT0
foo::operator<<=(foo &)
+foo::operator<<=
#
---format=gnu
+--format=gnu --no-params
__amd__3fooRT0
foo::operator%=(foo &)
+foo::operator%=
#
---format=gnu
+--format=gnu --no-params
__ami__3fooRT0
foo::operator-=(foo &)
+foo::operator-=
#
---format=gnu
+--format=gnu --no-params
__aml__3FixRT0
Fix::operator*=(Fix &)
+Fix::operator*=
#
---format=gnu
+--format=gnu --no-params
__aml__5Fix16i
Fix16::operator*=(int)
+Fix16::operator*=
#
---format=gnu
+--format=gnu --no-params
__aml__5Fix32RT0
Fix32::operator*=(Fix32 &)
+Fix32::operator*=
#
---format=gnu
+--format=gnu --no-params
__aor__3fooRT0
foo::operator|=(foo &)
+foo::operator|=
#
---format=gnu
+--format=gnu --no-params
__apl__3fooRT0
foo::operator+=(foo &)
+foo::operator+=
#
---format=gnu
+--format=gnu --no-params
__ars__3fooRT0
foo::operator>>=(foo &)
+foo::operator>>=
#
---format=gnu
+--format=gnu --no-params
__as__3fooRT0
foo::operator=(foo &)
+foo::operator=
#
---format=gnu
+--format=gnu --no-params
__cl__3fooRT0
foo::operator()(foo &)
+foo::operator()
#
---format=gnu
+--format=gnu --no-params
__cl__6Normal
Normal::operator()(void)
+Normal::operator()
#
---format=gnu
+--format=gnu --no-params
__cl__6Stringii
String::operator()(int, int)
+String::operator()
#
---format=gnu
+--format=gnu --no-params
__cm__3fooRT0
foo::operator, (foo &)
+foo::operator,
#
---format=gnu
+--format=gnu --no-params
__co__3foo
foo::operator~(void)
+foo::operator~
#
---format=gnu
+--format=gnu --no-params
__dl__3fooPv
foo::operator delete(void *)
+foo::operator delete
#
---format=gnu
+--format=gnu --no-params
__dv__3fooRT0
foo::operator/(foo &)
+foo::operator/
#
---format=gnu
+--format=gnu --no-params
__eq__3fooRT0
foo::operator==(foo &)
+foo::operator==
#
---format=gnu
+--format=gnu --no-params
__er__3fooRT0
foo::operator^(foo &)
+foo::operator^
#
---format=gnu
+--format=gnu --no-params
__ge__3fooRT0
foo::operator>=(foo &)
+foo::operator>=
#
---format=gnu
+--format=gnu --no-params
__gt__3fooRT0
foo::operator>(foo &)
+foo::operator>
#
---format=gnu
+--format=gnu --no-params
__le__3fooRT0
foo::operator<=(foo &)
+foo::operator<=
#
---format=gnu
+--format=gnu --no-params
__ls__3fooRT0
foo::operator<<(foo &)
+foo::operator<<
#
---format=gnu
+--format=gnu --no-params
__ls__FR7ostreamPFR3ios_R3ios
operator<<(ostream &, ios &(*)(ios &))
+operator<<
#
---format=gnu
+--format=gnu --no-params
__ls__FR7ostreamR3Fix
operator<<(ostream &, Fix &)
+operator<<
#
---format=gnu
+--format=gnu --no-params
__lt__3fooRT0
foo::operator<(foo &)
+foo::operator<
#
---format=gnu
+--format=gnu --no-params
__md__3fooRT0
foo::operator%(foo &)
+foo::operator%
#
---format=gnu
+--format=gnu --no-params
__mi__3fooRT0
foo::operator-(foo &)
+foo::operator-
#
---format=gnu
+--format=gnu --no-params
__ml__3fooRT0
foo::operator*(foo &)
+foo::operator*
#
---format=gnu
+--format=gnu --no-params
__mm__3fooi
foo::operator--(int)
+foo::operator--
#
---format=gnu
+--format=gnu --no-params
__ne__3fooRT0
foo::operator!=(foo &)
+foo::operator!=
#
---format=gnu
+--format=gnu --no-params
__nt__3foo
foo::operator!(void)
+foo::operator!
#
---format=gnu
+--format=gnu --no-params
__nw__3fooi
foo::operator new(int)
+foo::operator new
#
---format=gnu
+--format=gnu --no-params
__oo__3fooRT0
foo::operator||(foo &)
+foo::operator||
#
---format=gnu
+--format=gnu --no-params
__opPc__3foo
foo::operator char *(void)
+foo::operator char *
#
---format=gnu
+--format=gnu --no-params
__opi__3foo
foo::operator int(void)
+foo::operator int
#
---format=gnu
+--format=gnu --no-params
__or__3fooRT0
foo::operator|(foo &)
+foo::operator|
#
---format=gnu
+--format=gnu --no-params
__pl__3fooRT0
foo::operator+(foo &)
+foo::operator+
#
---format=gnu
+--format=gnu --no-params
__pp__3fooi
foo::operator++(int)
+foo::operator++
#
---format=gnu
+--format=gnu --no-params
__rf__3foo
foo::operator->(void)
+foo::operator->
#
---format=gnu
+--format=gnu --no-params
__rm__3fooRT0
foo::operator->*(foo &)
+foo::operator->*
#
---format=gnu
+--format=gnu --no-params
__rs__3fooRT0
foo::operator>>(foo &)
+foo::operator>>
#
---format=gnu
+--format=gnu --no-params
_new_Fix__FUs
_new_Fix(unsigned short)
+_new_Fix
#
---format=gnu
+--format=gnu --no-params
_vt.foo
foo virtual table
+foo virtual table
#
---format=gnu
+--format=gnu --no-params
_vt.foo.bar
foo::bar virtual table
+foo::bar virtual table
#
---format=gnu
+--format=gnu --no-params
_vt$foo
foo virtual table
+foo virtual table
#
---format=gnu
+--format=gnu --no-params
_vt$foo$bar
foo::bar virtual table
+foo::bar virtual table
#
---format=gnu
+--format=gnu --no-params
append__7ivGlyphPT0
ivGlyph::append(ivGlyph *)
+ivGlyph::append
#
---format=gnu
+--format=gnu --no-params
clearok__FP7_win_sti
clearok(_win_st *, int)
+clearok
#
---format=gnu
+--format=gnu --no-params
complexfunc2__FPFPc_i
complexfunc2(int (*)(char *))
+complexfunc2
#
---format=gnu
+--format=gnu --no-params
complexfunc3__FPFPFPl_s_i
complexfunc3(int (*)(short (*)(long *)))
+complexfunc3
#
---format=gnu
+--format=gnu --no-params
complexfunc4__FPFPFPc_s_i
complexfunc4(int (*)(short (*)(char *)))
+complexfunc4
#
---format=gnu
+--format=gnu --no-params
complexfunc5__FPFPc_PFl_i
complexfunc5(int (*(*)(char *))(long))
+complexfunc5
#
---format=gnu
+--format=gnu --no-params
complexfunc6__FPFPi_PFl_i
complexfunc6(int (*(*)(int *))(long))
+complexfunc6
#
---format=gnu
+--format=gnu --no-params
complexfunc7__FPFPFPc_i_PFl_i
complexfunc7(int (*(*)(int (*)(char *)))(long))
+complexfunc7
#
---format=gnu
+--format=gnu --no-params
foo__FiN30
foo(int, int, int, int)
+foo
#
---format=gnu
+--format=gnu --no-params
foo__FiR3fooiT1iT1
foo(int, foo &, int, foo &, int, foo &)
+foo
#
---format=gnu
+--format=gnu --no-params
foo___3barl
bar::foo_(long)
+bar::foo_
#
---format=gnu
+--format=gnu --no-params
insert__15ivClippingStacklRP8_XRegion
ivClippingStack::insert(long, _XRegion *&)
+ivClippingStack::insert
#
---format=gnu
+--format=gnu --no-params
insert__16ChooserInfo_ListlR11ChooserInfo
ChooserInfo_List::insert(long, ChooserInfo &)
+ChooserInfo_List::insert
#
---format=gnu
+--format=gnu --no-params
insert__17FontFamilyRepListlRP15ivFontFamilyRep
FontFamilyRepList::insert(long, ivFontFamilyRep *&)
+FontFamilyRepList::insert
#
---format=gnu
+--format=gnu --no-params
leaveok__FP7_win_stc
leaveok(_win_st *, char)
+leaveok
#
---format=gnu
+--format=gnu --no-params
left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
ivMFKit::left_mover(ivAdjustable *, ivStyle *) const
+ivMFKit::left_mover
#
---format=gnu
+--format=gnu --no-params
overload1arg__FSc
overload1arg(signed char)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__FUc
overload1arg(unsigned char)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__FUi
overload1arg(unsigned int)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__FUl
overload1arg(unsigned long)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__FUs
overload1arg(unsigned short)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fc
overload1arg(char)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fd
overload1arg(double)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Ff
overload1arg(float)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fi
overload1arg(int)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fl
overload1arg(long)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fs
overload1arg(short)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overload1arg__Fv
overload1arg(void)
+overload1arg
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fi
overloadargs(int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fii
overloadargs(int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiii
overloadargs(int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiii
overloadargs(int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiii
overloadargs(int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiii
overloadargs(int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiiii
overloadargs(int, int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiiiii
overloadargs(int, int, int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiiiiii
overloadargs(int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiiiiiii
overloadargs(int, int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
overloadargs__Fiiiiiiiiiii
overloadargs(int, int, int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=gnu
+--format=gnu --no-params
poke__8ivRasterUlUlffff
ivRaster::poke(unsigned long, unsigned long, float, float, float, float)
+ivRaster::poke
#
---format=gnu
+--format=gnu --no-params
polar__Fdd
polar(double, double)
+polar
#
---format=gnu
+--format=gnu --no-params
scale__13ivTransformerff
ivTransformer::scale(float, float)
+ivTransformer::scale
#
---format=gnu
+--format=gnu --no-params
sgetn__7filebufPci
filebuf::sgetn(char *, int)
+filebuf::sgetn
#
---format=gnu
+--format=gnu --no-params
shift__FP5_FrepiT0
shift(_Frep *, int, _Frep *)
+shift
#
---format=gnu
+--format=gnu --no-params
test__C6BitSeti
BitSet::test(int) const
+BitSet::test
#
---format=gnu
+--format=gnu --no-params
test__C6BitSetii
BitSet::test(int, int) const
+BitSet::test
#
---format=gnu
+--format=gnu --no-params
text_source__8Documentl
Document::text_source(long)
+Document::text_source
#
---format=gnu
+--format=gnu --no-params
variance__6Erlangd
Erlang::variance(double)
+Erlang::variance
#
---format=gnu
+--format=gnu --no-params
view__14DocumentViewerP8ItemViewP11TabularItem
DocumentViewer::view(ItemView *, TabularItem *)
+DocumentViewer::view
#
---format=gnu
+--format=gnu --no-params
xy_extents__11ivExtensionffff
ivExtension::xy_extents(float, float, float, float)
+ivExtension::xy_extents
#
---format=gnu
+--format=gnu --no-params
zero__8osMemoryPvUi
osMemory::zero(void *, unsigned int)
+osMemory::zero
#
---format=gnu
+--format=gnu --no-params
_2T4$N
T4::N
+T4::N
#
---format=gnu
+--format=gnu --no-params
_Q22T42t1$N
T4::t1::N
+T4::t1::N
#
---format=gnu
+--format=gnu --no-params
get__2T1
T1::get(void)
+T1::get
#
---format=gnu
+--format=gnu --no-params
get__Q22T11a
T1::a::get(void)
+T1::a::get
#
---format=gnu
+--format=gnu --no-params
get__Q32T11a1b
T1::a::b::get(void)
+T1::a::b::get
#
---format=gnu
+--format=gnu --no-params
get__Q42T11a1b1c
T1::a::b::c::get(void)
+T1::a::b::c::get
#
---format=gnu
+--format=gnu --no-params
get__Q52T11a1b1c1d
T1::a::b::c::d::get(void)
+T1::a::b::c::d::get
#
---format=gnu
+--format=gnu --no-params
put__2T1i
T1::put(int)
+T1::put
#
---format=gnu
+--format=gnu --no-params
put__Q22T11ai
T1::a::put(int)
+T1::a::put
#
---format=gnu
+--format=gnu --no-params
put__Q32T11a1bi
T1::a::b::put(int)
+T1::a::b::put
#
---format=gnu
+--format=gnu --no-params
put__Q42T11a1b1ci
T1::a::b::c::put(int)
+T1::a::b::c::put
#
---format=gnu
+--format=gnu --no-params
put__Q52T11a1b1c1di
T1::a::b::c::d::put(int)
+T1::a::b::c::d::put
#
---format=gnu
+--format=gnu --no-params
bar__3fooPv
foo::bar(void *)
+foo::bar
#
---format=gnu
+--format=gnu --no-params
bar__C3fooPv
foo::bar(void *) const
+foo::bar
#
---format=gnu
+--format=gnu --no-params
__eq__3fooRT0
foo::operator==(foo &)
+foo::operator==
#
---format=gnu
+--format=gnu --no-params
__eq__C3fooR3foo
foo::operator==(foo &) const
+foo::operator==
#
---format=gnu
+--format=gnu --no-params
elem__t6vector1Zdi
vector<double>::elem(int)
+vector<double>::elem
#
---format=gnu
+--format=gnu --no-params
elem__t6vector1Zii
vector<int>::elem(int)
+vector<int>::elem
#
---format=gnu
+--format=gnu --no-params
__t6vector1Zdi
vector<double>::vector(int)
+vector<double>::vector
#
---format=gnu
+--format=gnu --no-params
__t6vector1Zii
vector<int>::vector(int)
+vector<int>::vector
#
---format=gnu
+--format=gnu --no-params
_$_t6vector1Zdi
vector<double>::~vector(int)
+vector<double>::~vector
#
---format=gnu
+--format=gnu --no-params
_$_t6vector1Zii
vector<int>::~vector(int)
+vector<int>::~vector
#
---format=gnu
+--format=gnu --no-params
__nw__t2T11ZcUi
T1<char>::operator new(unsigned int)
+T1<char>::operator new
#
---format=gnu
+--format=gnu --no-params
__nw__t2T11Z1tUi
T1<t>::operator new(unsigned int)
+T1<t>::operator new
#
---format=gnu
+--format=gnu --no-params
__dl__t2T11ZcPv
T1<char>::operator delete(void *)
+T1<char>::operator delete
#
---format=gnu
+--format=gnu --no-params
__dl__t2T11Z1tPv
T1<t>::operator delete(void *)
+T1<t>::operator delete
#
---format=gnu
+--format=gnu --no-params
__t2T11Zci
T1<char>::T1(int)
+T1<char>::T1
#
---format=gnu
+--format=gnu --no-params
__t2T11Zc
T1<char>::T1(void)
+T1<char>::T1
#
---format=gnu
+--format=gnu --no-params
__t2T11Z1ti
T1<t>::T1(int)
+T1<t>::T1
#
---format=gnu
+--format=gnu --no-params
__t2T11Z1t
T1<t>::T1(void)
+T1<t>::T1
#
---format=gnu
+--format=gnu --no-params
__Q2t4List1Z10VHDLEntity3Pix
List<VHDLEntity>::Pix::Pix(void)
+List<VHDLEntity>::Pix::Pix
#
---format=gnu
+--format=gnu --no-params
__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *)
+List<VHDLEntity>::Pix::Pix
#
---format=gnu
+--format=gnu --no-params
__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &)
+List<VHDLEntity>::Pix::Pix
#
---format=gnu
+--format=gnu --no-params
__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *)
+List<VHDLEntity>::element::element
#
---format=gnu
+--format=gnu --no-params
__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
List<VHDLEntity>::element::element(List<VHDLEntity>::element const &)
+List<VHDLEntity>::element::element
#
---format=gnu
+--format=gnu --no-params
__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const
+VHDLLibrary::operator()
#
---format=gnu
+--format=gnu --no-params
__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const
+List<VHDLEntity>::operator()
#
---format=gnu
+--format=gnu --no-params
__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
operator!=(void *, List<VHDLEntity>::Pix const &)
+operator!=
#
---format=gnu
+--format=gnu --no-params
__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
+operator!=
#
---format=gnu
+--format=gnu --no-params
__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
List<VHDLEntity>::List(List<VHDLEntity> const &)
+List<VHDLEntity>::List
#
---format=gnu
+--format=gnu --no-params
__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void)
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
#
---format=gnu
+--format=gnu --no-params
__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix)
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
#
---format=gnu
+--format=gnu --no-params
__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
+PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
#
---format=gnu
+--format=gnu --no-params
nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const
+VHDLLibrary::nextE
#
---format=gnu
+--format=gnu --no-params
next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const
+List<VHDLEntity>::next
#
---format=gnu
+--format=gnu --no-params
_GLOBAL_$D$set
global destructors keyed to set
+global destructors keyed to set
#
---format=gnu
+--format=gnu --no-params
_GLOBAL_$I$set
global constructors keyed to set
+global constructors keyed to set
#
---format=gnu
+--format=gnu --no-params
__as__t5ListS1ZUiRCt5ListS1ZUi
ListS<unsigned int>::operator=(ListS<unsigned int> const &)
+ListS<unsigned int>::operator=
#
---format=gnu
+--format=gnu --no-params
__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const
+ListS<unsigned int>::operator()
#
---format=gnu
+--format=gnu --no-params
__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const
+SetLS<unsigned int>::operator()
#
---format=gnu
+--format=gnu --no-params
__t10ListS_link1ZUiRCUiPT0
ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *)
+ListS_link<unsigned int>::ListS_link
#
---format=gnu
+--format=gnu --no-params
__t10ListS_link1ZUiRCt10ListS_link1ZUi
ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &)
+ListS_link<unsigned int>::ListS_link
#
---format=gnu
+--format=gnu --no-params
__t5ListS1ZUiRCt5ListS1ZUi
ListS<unsigned int>::ListS(ListS<unsigned int> const &)
+ListS<unsigned int>::ListS
#
---format=gnu
+--format=gnu --no-params
next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const
+ListS<unsigned int>::next
#
---format=gnu
+--format=gnu --no-params
__ne__FPvRCQ2t5SetLS1ZUi3Vix
operator!=(void *, SetLS<unsigned int>::Vix const &)
+operator!=
#
---format=gnu
+--format=gnu --no-params
__t8ListElem1Z5LabelRt4List1Z5Label
ListElem<Label>::ListElem(List<Label> &)
+ListElem<Label>::ListElem
#
---format=gnu
+--format=gnu --no-params
__t8BDDHookV1ZPcRCPc
BDDHookV<char *>::BDDHookV(char *const &)
+BDDHookV<char *>::BDDHookV
#
---format=gnu
+--format=gnu --no-params
_vt$t8BDDHookV1ZPc
BDDHookV<char *> virtual table
+BDDHookV<char *> virtual table
#
---format=gnu
+--format=gnu --no-params
__ne__FPvRCQ211BDDFunction4VixB
operator!=(void *, BDDFunction::VixB const &)
+operator!=
#
---format=gnu
+--format=gnu --no-params
__eq__FPvRCQ211BDDFunction4VixB
operator==(void *, BDDFunction::VixB const &)
+operator==
#
---format=gnu
+--format=gnu --no-params
relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const
+T_phi2::T_preserve::FPC_next::relativeId
#
---format=lucid
+--format=lucid --no-params
WS__FR7istream
WS(istream &)
+WS
#
---format=lucid
+--format=lucid --no-params
__aa__3fooFR3foo
foo::operator&&(foo &)
+foo::operator&&
#
---format=lucid
+--format=lucid --no-params
__aad__3fooFR3foo
foo::operator&=(foo &)
+foo::operator&=
#
---format=lucid
+--format=lucid --no-params
__ad__3fooFR3foo
foo::operator&(foo &)
+foo::operator&
#
---format=lucid
+--format=lucid --no-params
__adv__3fooFR3foo
foo::operator/=(foo &)
+foo::operator/=
#
---format=lucid
+--format=lucid --no-params
__adv__7complexF7complex
complex::operator/=(complex)
+complex::operator/=
#
---format=lucid
+--format=lucid --no-params
__aer__3fooFR3foo
foo::operator^=(foo &)
+foo::operator^=
#
---format=lucid
+--format=lucid --no-params
__als__3fooFR3foo
foo::operator<<=(foo &)
+foo::operator<<=
#
---format=lucid
+--format=lucid --no-params
__amd__3fooFR3foo
foo::operator%=(foo &)
+foo::operator%=
#
---format=lucid
+--format=lucid --no-params
__ami__3fooFR3foo
foo::operator-=(foo &)
+foo::operator-=
#
---format=lucid
+--format=lucid --no-params
__amu__3fooFR3foo
foo::operator*=(foo &)
+foo::operator*=
#
---format=lucid
+--format=lucid --no-params
__amu__7complexF7complex
complex::operator*=(complex)
+complex::operator*=
#
---format=lucid
+--format=lucid --no-params
__aor__3fooFR3foo
foo::operator|=(foo &)
+foo::operator|=
#
---format=lucid
+--format=lucid --no-params
__apl__3fooFR3foo
foo::operator+=(foo &)
+foo::operator+=
#
---format=lucid
+--format=lucid --no-params
__ars__3fooFR3foo
foo::operator>>=(foo &)
+foo::operator>>=
#
---format=lucid
+--format=lucid --no-params
__as__18istream_withassignFP9streambuf
istream_withassign::operator=(streambuf *)
+istream_withassign::operator=
#
---format=lucid
+--format=lucid --no-params
__as__18istream_withassignFR7istream
istream_withassign::operator=(istream &)
+istream_withassign::operator=
#
---format=lucid
+--format=lucid --no-params
__as__3fooFR3foo
foo::operator=(foo &)
+foo::operator=
#
---format=lucid
+--format=lucid --no-params
__as__3iosFR3ios
ios::operator=(ios &)
+ios::operator=
#
---format=lucid
+--format=lucid --no-params
__cl__3fooFR3foo
foo::operator()(foo &)
+foo::operator()
#
---format=lucid
+--format=lucid --no-params
__cm__3fooFR3foo
foo::operator, (foo &)
+foo::operator,
#
---format=lucid
+--format=lucid --no-params
__co__3fooFv
foo::operator~(void)
+foo::operator~
#
---format=lucid
+--format=lucid --no-params
__ct__10istrstreamFPc
istrstream::istrstream(char *)
+istrstream::istrstream
#
---format=lucid
+--format=lucid --no-params
__ct__10istrstreamFPci
istrstream::istrstream(char *, int)
+istrstream::istrstream
#
---format=lucid
+--format=lucid --no-params
__ct__10ostrstreamFPciT2
ostrstream::ostrstream(char *, int, int)
+ostrstream::ostrstream
#
---format=lucid
+--format=lucid --no-params
__ct__10ostrstreamFv
ostrstream::ostrstream(void)
+ostrstream::ostrstream
#
---format=lucid
+--format=lucid --no-params
__ct__10smanip_intFPFR3iosi_R3iosi
smanip_int::smanip_int(ios &(*)(ios &, int), int)
+smanip_int::smanip_int
#
---format=lucid
+--format=lucid --no-params
__ct__11fstreambaseFi
fstreambase::fstreambase(int)
+fstreambase::fstreambase
#
---format=lucid
+--format=lucid --no-params
__ct__11fstreambaseFiPcT1
fstreambase::fstreambase(int, char *, int)
+fstreambase::fstreambase
#
---format=lucid
+--format=lucid --no-params
__ct__11fstreambaseFv
fstreambase::fstreambase(void)
+fstreambase::fstreambase
#
---format=lucid
+--format=lucid --no-params
__ct__11smanip_longFPFR3iosl_R3iosl
smanip_long::smanip_long(ios &(*)(ios &, long), long)
+smanip_long::smanip_long
#
---format=lucid
+--format=lucid --no-params
__ct__11stdiostreamFP4FILE
stdiostream::stdiostream(FILE *)
+stdiostream::stdiostream
#
---format=lucid
+--format=lucid --no-params
__ct__12strstreambufFPFl_PvPFPv_v
strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))
+strstreambuf::strstreambuf
#
---format=lucid
+--format=lucid --no-params
__ct__12strstreambufFPUciT1
strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)
+strstreambuf::strstreambuf
#
---format=lucid
+--format=lucid --no-params
__ct__12strstreambufFPciT1
strstreambuf::strstreambuf(char *, int, char *)
+strstreambuf::strstreambuf
#
---format=lucid
+--format=lucid --no-params
__ct__12strstreambufFi
strstreambuf::strstreambuf(int)
+strstreambuf::strstreambuf
#
---format=lucid
+--format=lucid --no-params
__ct__12strstreambufFv
strstreambuf::strstreambuf(void)
+strstreambuf::strstreambuf
#
---format=lucid
+--format=lucid --no-params
__ct__13strstreambaseFPciT1
strstreambase::strstreambase(char *, int, char *)
+strstreambase::strstreambase
#
---format=lucid
+--format=lucid --no-params
__ct__3fooFR3foo
foo::foo(foo &)
+foo::foo
#
---format=lucid
+--format=lucid --no-params
__ct__3fooFi
foo::foo(int)
+foo::foo
#
---format=lucid
+--format=lucid --no-params
__ct__3fooFiN31
foo::foo(int, int, int, int)
+foo::foo
#
---format=lucid
+--format=lucid --no-params
__ct__3fooFiR3fooT1T2T1T2
foo::foo(int, foo &, int, foo &, int, foo &)
+foo::foo
#
---format=lucid
+--format=lucid --no-params
__ct__3iosFP9streambuf
ios::ios(streambuf *)
+ios::ios
#
---format=lucid
+--format=lucid --no-params
__ct__7filebufFiPcT1
filebuf::filebuf(int, char *, int)
+filebuf::filebuf
#
---format=lucid
+--format=lucid --no-params
__ct__7fstreamFiPcT1
fstream::fstream(int, char *, int)
+fstream::fstream
#
---format=lucid
+--format=lucid --no-params
__ct__7istreamFP9streambuf
istream::istream(streambuf *)
+istream::istream
#
---format=lucid
+--format=lucid --no-params
__ct__7istreamFP9streambufiP7ostream
istream::istream(streambuf *, int, ostream *)
+istream::istream
#
---format=lucid
+--format=lucid --no-params
__ct__7istreamFiPcT1
istream::istream(int, char *, int)
+istream::istream
#
---format=lucid
+--format=lucid --no-params
__ct__7istreamFiT1P7ostream
istream::istream(int, int, ostream *)
+istream::istream
#
---format=lucid
+--format=lucid --no-params
__ct__7ostreamFP9streambuf
ostream::ostream(streambuf *)
+ostream::ostream
#
---format=lucid
+--format=lucid --no-params
__ct__7ostreamFiPc
ostream::ostream(int, char *)
+ostream::ostream
#
---format=lucid
+--format=lucid --no-params
__ct__8ifstreamFiPcT1
ifstream::ifstream(int, char *, int)
+ifstream::ifstream
#
---format=lucid
+--format=lucid --no-params
__ct__Q23foo3barFv
foo::bar::bar(void)
+foo::bar::bar
#
---format=lucid
+--format=lucid --no-params
__ct__Q33foo3bar4bellFv
foo::bar::bell::bell(void)
+foo::bar::bell::bell
#
---format=lucid
+--format=lucid --no-params
__dl__3fooSFPv
foo::operator delete(void *) static
+foo::operator delete
#
---format=lucid
+--format=lucid --no-params
__dl__FPv
operator delete(void *)
+operator delete
#
---format=lucid
+--format=lucid --no-params
__dt__10istrstreamFv
istrstream::~istrstream(void)
+istrstream::~istrstream
#
---format=lucid
+--format=lucid --no-params
__dt__Q23foo3barFv
foo::bar::~bar(void)
+foo::bar::~bar
#
---format=lucid
+--format=lucid --no-params
__dt__Q33foo3bar4bellFv
foo::bar::bell::~bell(void)
+foo::bar::bell::~bell
#
---format=lucid
+--format=lucid --no-params
__dv__3fooFR3foo
foo::operator/(foo &)
+foo::operator/
#
---format=lucid
+--format=lucid --no-params
__dv__F7complexT1
operator/(complex, complex)
+operator/
#
---format=lucid
+--format=lucid --no-params
__eq__3fooFR3foo
foo::operator==(foo &)
+foo::operator==
#
---format=lucid
+--format=lucid --no-params
__er__3fooFR3foo
foo::operator^(foo &)
+foo::operator^
#
---format=lucid
+--format=lucid --no-params
__ge__3fooFR3foo
foo::operator>=(foo &)
+foo::operator>=
#
---format=lucid
+--format=lucid --no-params
__gt__3fooFR3foo
foo::operator>(foo &)
+foo::operator>
#
---format=lucid
+--format=lucid --no-params
__le__3fooFR3foo
foo::operator<=(foo &)
+foo::operator<=
#
---format=lucid
+--format=lucid --no-params
__ls__3fooFR3foo
foo::operator<<(foo &)
+foo::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFP9streambuf
ostream::operator<<(streambuf *)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFPFR3ios_R3ios
ostream::operator<<(ios &(*)(ios &))
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFPv
ostream::operator<<(void *)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFUi
ostream::operator<<(unsigned int)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFUl
ostream::operator<<(unsigned long)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFd
ostream::operator<<(double)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFf
ostream::operator<<(float)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFi
ostream::operator<<(int)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__7ostreamFl
ostream::operator<<(long)
+ostream::operator<<
#
---format=lucid
+--format=lucid --no-params
__ls__FR7ostream7complex
operator<<(ostream &, complex)
+operator<<
#
---format=lucid
+--format=lucid --no-params
__lt__3fooFR3foo
foo::operator<(foo &)
+foo::operator<
#
---format=lucid
+--format=lucid --no-params
__md__3fooFR3foo
foo::operator%(foo &)
+foo::operator%
#
---format=lucid
+--format=lucid --no-params
__mi__3fooFR3foo
foo::operator-(foo &)
+foo::operator-
#
---format=lucid
+--format=lucid --no-params
__ml__3fooFR3foo
foo::operator*(foo &)
+foo::operator*
#
---format=lucid
+--format=lucid --no-params
__ml__F7complexT1
operator*(complex, complex)
+operator*
#
---format=lucid
+--format=lucid --no-params
__mm__3fooFi
foo::operator--(int)
+foo::operator--
#
---format=lucid
+--format=lucid --no-params
__ne__3fooFR3foo
foo::operator!=(foo &)
+foo::operator!=
#
---format=lucid
+--format=lucid --no-params
__nt__3fooFv
foo::operator!(void)
+foo::operator!
#
---format=lucid
+--format=lucid --no-params
__nw__3fooSFi
foo::operator new(int) static
+foo::operator new
#
---format=lucid
+--format=lucid --no-params
__nw__FUi
operator new(unsigned int)
+operator new
#
---format=lucid
+--format=lucid --no-params
__nw__FUiPv
operator new(unsigned int, void *)
+operator new
#
---format=lucid
+--format=lucid --no-params
__oo__3fooFR3foo
foo::operator||(foo &)
+foo::operator||
#
---format=lucid
+--format=lucid --no-params
__opPc__3fooFv
foo::operator char *(void)
+foo::operator char *
#
---format=lucid
+--format=lucid --no-params
__opi__3fooFv
foo::operator int(void)
+foo::operator int
#
---format=lucid
+--format=lucid --no-params
__or__3fooFR3foo
foo::operator|(foo &)
+foo::operator|
#
---format=lucid
+--format=lucid --no-params
__pl__3fooFR3foo
foo::operator+(foo &)
+foo::operator+
#
---format=lucid
+--format=lucid --no-params
__pp__3fooFi
foo::operator++(int)
+foo::operator++
#
---format=lucid
+--format=lucid --no-params
__pt__3fooFv
foo::operator->(void)
+foo::operator->
#
---format=lucid
+--format=lucid --no-params
__rm__3fooFR3foo
foo::operator->*(foo &)
+foo::operator->*
#
---format=lucid
+--format=lucid --no-params
__rs__3fooFR3foo
foo::operator>>(foo &)
+foo::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFP9streambuf
istream::operator>>(streambuf *)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFPFR3ios_R3ios
istream::operator>>(ios &(*)(ios &))
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFPFR7istream_R7istream
istream::operator>>(istream &(*)(istream &))
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFPUc
istream::operator>>(unsigned char *)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFPc
istream::operator>>(char *)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRUi
istream::operator>>(unsigned int &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRUl
istream::operator>>(unsigned long &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRUs
istream::operator>>(unsigned short &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRd
istream::operator>>(double &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRf
istream::operator>>(float &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRi
istream::operator>>(int &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRl
istream::operator>>(long &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__7istreamFRs
istream::operator>>(short &)
+istream::operator>>
#
---format=lucid
+--format=lucid --no-params
__rs__FR7istreamR7complex
operator>>(istream &, complex &)
+operator>>
#
---format=lucid
+--format=lucid --no-params
__vtbl__10istrstream
istrstream virtual table
+istrstream virtual table
#
---format=lucid
+--format=lucid --no-params
__vtbl__17ostream__iostream__19iostream_withassign
iostream_withassign::ostream__iostream virtual table
+iostream_withassign::ostream__iostream virtual table
#
---format=lucid
+--format=lucid --no-params
__vtbl__3ios
ios virtual table
+ios virtual table
#
---format=lucid
+--format=lucid --no-params
__vtbl__3ios__13strstreambase
strstreambase::ios virtual table
+strstreambase::ios virtual table
#
---format=lucid
+--format=lucid --no-params
abs__F7complex
abs(complex)
+abs
#
---format=lucid
+--format=lucid --no-params
allocate__9streambufFv
streambuf::allocate(void)
+streambuf::allocate
#
---format=lucid
+--format=lucid --no-params
attach__11fstreambaseFi
fstreambase::attach(int)
+fstreambase::attach
#
---format=lucid
+--format=lucid --no-params
bitalloc__3iosSFv
ios::bitalloc(void) static
+ios::bitalloc
#
---format=lucid
+--format=lucid --no-params
chr__FiT1
chr(int, int)
+chr
#
---format=lucid
+--format=lucid --no-params
complex_error__FR11c_exception
complex_error(c_exception &)
+complex_error
#
---format=lucid
+--format=lucid --no-params
complexfunc2__FPFPc_i
complexfunc2(int (*)(char *))
+complexfunc2
#
---format=lucid
+--format=lucid --no-params
complexfunc3__FPFPFPl_s_i
complexfunc3(int (*)(short (*)(long *)))
+complexfunc3
#
---format=lucid
+--format=lucid --no-params
complexfunc4__FPFPFPc_s_i
complexfunc4(int (*)(short (*)(char *)))
+complexfunc4
#
---format=lucid
+--format=lucid --no-params
complexfunc5__FPFPc_PFl_i
complexfunc5(int (*(*)(char *))(long))
+complexfunc5
#
---format=lucid
+--format=lucid --no-params
complexfunc6__FPFPi_PFl_i
complexfunc6(int (*(*)(int *))(long))
+complexfunc6
#
---format=lucid
+--format=lucid --no-params
complexfunc7__FPFPFPc_i_PFl_i
complexfunc7(int (*(*)(int (*)(char *)))(long))
+complexfunc7
#
---format=lucid
+--format=lucid --no-params
complicated_put__7ostreamFc
ostream::complicated_put(char)
+ostream::complicated_put
#
---format=lucid
+--format=lucid --no-params
conv10__FlPc
conv10(long, char *)
+conv10
#
---format=lucid
+--format=lucid --no-params
conv16__FUlPc
conv16(unsigned long, char *)
+conv16
#
---format=lucid
+--format=lucid --no-params
dec__FR3ios
dec(ios &)
+dec
#
---format=lucid
+--format=lucid --no-params
dec__Fli
dec(long, int)
+dec
#
---format=lucid
+--format=lucid --no-params
dofield__FP7ostreamPciT2T3
dofield(ostream *, char *, int, char *, int)
+dofield
#
---format=lucid
+--format=lucid --no-params
flags__3iosFl
ios::flags(long)
+ios::flags
#
---format=lucid
+--format=lucid --no-params
flags__3iosFv
ios::flags(void)
+ios::flags
#
---format=lucid
+--format=lucid --no-params
foo__FiN31
foo(int, int, int, int)
+foo
#
---format=lucid
+--format=lucid --no-params
foo__FiR3fooT1T2T1T2
foo(int, foo &, int, foo &, int, foo &)
+foo
#
---format=lucid
+--format=lucid --no-params
foo___3barFl
bar::foo_(long)
+bar::foo_
#
---format=lucid
+--format=lucid --no-params
get__7istreamFPcic
istream::get(char *, int, char)
+istream::get
#
---format=lucid
+--format=lucid --no-params
get__7istreamFR9streambufc
istream::get(streambuf &, char)
+istream::get
#
---format=lucid
+--format=lucid --no-params
get_complicated__7istreamFRUc
istream::get_complicated(unsigned char &)
+istream::get_complicated
#
---format=lucid
+--format=lucid --no-params
get_complicated__7istreamFRc
istream::get_complicated(char &)
+istream::get_complicated
#
---format=lucid
+--format=lucid --no-params
getline__7istreamFPUcic
istream::getline(unsigned char *, int, char)
+istream::getline
#
---format=lucid
+--format=lucid --no-params
getline__7istreamFPcic
istream::getline(char *, int, char)
+istream::getline
#
---format=lucid
+--format=lucid --no-params
ignore__7istreamFiT1
istream::ignore(int, int)
+istream::ignore
#
---format=lucid
+--format=lucid --no-params
init__12strstreambufFPciT1
strstreambuf::init(char *, int, char *)
+strstreambuf::init
#
---format=lucid
+--format=lucid --no-params
init__3iosFP9streambuf
ios::init(streambuf *)
+ios::init
#
---format=lucid
+--format=lucid --no-params
initcount__13Iostream_init
Iostream_init::initcount
+Iostream_init::initcount
#
---format=lucid
+--format=lucid --no-params
ipfx__7istreamFi
istream::ipfx(int)
+istream::ipfx
#
---format=lucid
+--format=lucid --no-params
ls_complicated__7ostreamFUc
ostream::ls_complicated(unsigned char)
+ostream::ls_complicated
#
---format=lucid
+--format=lucid --no-params
ls_complicated__7ostreamFc
ostream::ls_complicated(char)
+ostream::ls_complicated
#
---format=lucid
+--format=lucid --no-params
overload1arg__FSc
overload1arg(signed char)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__FUc
overload1arg(unsigned char)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__FUi
overload1arg(unsigned int)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__FUl
overload1arg(unsigned long)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__FUs
overload1arg(unsigned short)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fc
overload1arg(char)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fd
overload1arg(double)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Ff
overload1arg(float)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fi
overload1arg(int)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fl
overload1arg(long)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fs
overload1arg(short)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overload1arg__Fv
overload1arg(void)
+overload1arg
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN21
overloadargs(int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN31
overloadargs(int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN41
overloadargs(int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN51
overloadargs(int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN61
overloadargs(int, int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN71
overloadargs(int, int, int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN81
overloadargs(int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN91
overloadargs(int, int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiN91N11
overloadargs(int, int, int, int, int, int, int, int, int, int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
overloadargs__FiT1
overloadargs(int, int)
+overloadargs
#
---format=lucid
+--format=lucid --no-params
polar__FdT1
polar(double, double)
+polar
#
---format=lucid
+--format=lucid --no-params
pow__F7complexT1
pow(complex, complex)
+pow
#
---format=lucid
+--format=lucid --no-params
pow__F7complexd
pow(complex, double)
+pow
#
---format=lucid
+--format=lucid --no-params
pow__F7complexi
pow(complex, int)
+pow
#
---format=lucid
+--format=lucid --no-params
pow__Fd7complex
pow(double, complex)
+pow
#
---format=lucid
+--format=lucid --no-params
pstart__FPciT2
pstart(char *, int, int)
+pstart
#
---format=lucid
+--format=lucid --no-params
put__7ostreamFc
ostream::put(char)
+ostream::put
#
---format=lucid
+--format=lucid --no-params
read__7istreamFPci
istream::read(char *, int)
+istream::read
#
---format=lucid
+--format=lucid --no-params
resetiosflags__FR3iosl
resetiosflags(ios &, long)
+resetiosflags
#
---format=lucid
+--format=lucid --no-params
restore_errno__FRi
restore_errno(int &)
+restore_errno
#
---format=lucid
+--format=lucid --no-params
rs_complicated__7istreamFRUc
istream::rs_complicated(unsigned char &)
+istream::rs_complicated
#
---format=lucid
+--format=lucid --no-params
rs_complicated__7istreamFRc
istream::rs_complicated(char &)
+istream::rs_complicated
#
---format=lucid
+--format=lucid --no-params
seekg__7istreamFl8seek_dir
istream::seekg(long, seek_dir)
+istream::seekg
#
---format=lucid
+--format=lucid --no-params
seekoff__12strstreambufFl8seek_diri
strstreambuf::seekoff(long, seek_dir, int)
+strstreambuf::seekoff
#
---format=lucid
+--format=lucid --no-params
seekoff__9streambufFlQ2_3ios12ios_seek_diri
streambuf::seekoff(long, ios::ios_seek_dir, int)
+streambuf::seekoff
#
---format=lucid
+--format=lucid --no-params
seekpos__9streambufFli
streambuf::seekpos(long, int)
+streambuf::seekpos
#
---format=lucid
+--format=lucid --no-params
set_new_handler__FPFv_v
set_new_handler(void (*)(void))
+set_new_handler
#
---format=lucid
+--format=lucid --no-params
setb__9streambufFPcT1i
streambuf::setb(char *, char *, int)
+streambuf::setb
#
---format=lucid
+--format=lucid --no-params
setb__FR3iosi
setb(ios &, int)
+setb
#
---format=lucid
+--format=lucid --no-params
setbuf__11fstreambaseFPci
fstreambase::setbuf(char *, int)
+fstreambase::setbuf
#
---format=lucid
+--format=lucid --no-params
setbuf__9streambufFPUci
streambuf::setbuf(unsigned char *, int)
+streambuf::setbuf
#
---format=lucid
+--format=lucid --no-params
setbuf__9streambufFPciT2
streambuf::setbuf(char *, int, int)
+streambuf::setbuf
#
---format=lucid
+--format=lucid --no-params
setf__3iosFlT1
ios::setf(long, long)
+ios::setf
#
---format=lucid
+--format=lucid --no-params
setfill__FR3iosi
setfill(ios &, int)
+setfill
#
---format=lucid
+--format=lucid --no-params
setg__9streambufFPcN21
streambuf::setg(char *, char *, char *)
+streambuf::setg
#
---format=lucid
+--format=lucid --no-params
setp__9streambufFPcT1
streambuf::setp(char *, char *)
+streambuf::setp
#
---format=lucid
+--format=lucid --no-params
tie__3iosFP7ostream
ios::tie(ostream *)
+ios::tie
#
---format=lucid
+--format=lucid --no-params
uconv10__FUlPc
uconv10(unsigned long, char *)
+uconv10
#
---format=lucid
+--format=lucid --no-params
xget__7istreamFPc
istream::xget(char *)
+istream::xget
#
---format=lucid
+--format=lucid --no-params
xsgetn__9streambufFPci
streambuf::xsgetn(char *, int)
+streambuf::xsgetn
#
---format=arm
+--format=arm --no-params
__dt__21T5__pt__11_PFiPPdPv_iFv
T5<int (*)(int, double **, void *)>::~T5(void)
+T5<int (*)(int, double **, void *)>::~T5
#
---format=arm
+--format=arm --no-params
__ct__1cFi
c::c(int)
+c::c
#
---format=arm
+--format=arm --no-params
__dt__11T5__pt__2_iFv
T5<int>::~T5(void)
+T5<int>::~T5
#
---format=arm
+--format=arm --no-params
__dt__11T5__pt__2_cFv
T5<char>::~T5(void)
+T5<char>::~T5
#
---format=arm
+--format=arm --no-params
__ct__2T2Fi
T2::T2(int)
+T2::T2
#
---format=arm
+--format=arm --no-params
__dt__2T1Fv
T1::~T1(void)
+T1::~T1
#
---format=arm
+--format=arm --no-params
__dt__12T5__pt__3_1xFv
T5<x>::~T5(void)
+T5<x>::~T5
#
---format=arm
+--format=arm --no-params
__dt__17T5__pt__8_PFcPv_iFv
T5<int (*)(char, void *)>::~T5(void)
+T5<int (*)(char, void *)>::~T5
#
---format=arm
+--format=arm --no-params
__ct__21T5__pt__11_PFiPPdPv_iFi
T5<int (*)(int, double **, void *)>::T5(int)
+T5<int (*)(int, double **, void *)>::T5
#
---format=arm
+--format=arm --no-params
__amd__FR2T2i
operator%=(T2 &, int)
+operator%=
#
---format=arm
+--format=arm --no-params
__adv__FR2T2i
operator/=(T2 &, int)
+operator/=
#
---format=arm
+--format=arm --no-params
__amu__FR2T2i
operator*=(T2 &, int)
+operator*=
#
---format=arm
+--format=arm --no-params
__ami__FR2T2i
operator-=(T2 &, int)
+operator-=
#
---format=arm
+--format=arm --no-params
__apl__FR2T2i
operator+=(T2 &, int)
+operator+=
#
---format=arm
+--format=arm --no-params
__nw__2T1SFUi
T1::operator new(unsigned int) static
+T1::operator new
#
---format=arm
+--format=arm --no-params
__dl__2T1SFPv
T1::operator delete(void *) static
+T1::operator delete
#
---format=arm
+--format=arm --no-params
put__2T7SFi
T7::put(int) static
+T7::put
#
---format=arm
+--format=arm --no-params
__dl__12T5__pt__3_1xSFPv
T5<x>::operator delete(void *) static
+T5<x>::operator delete
#
---format=arm
+--format=arm --no-params
h__FUc
h(unsigned char)
+h
#
---format=arm
+--format=arm --no-params
f__Fic
f(int, char)
+f
#
---format=arm
+--format=arm --no-params
h__FUi
h(unsigned int)
+h
#
---format=arm
+--format=arm --no-params
h__Fci
h(char, int)
+h
#
---format=arm
+--format=arm --no-params
h__FUl
h(unsigned long)
+h
#
---format=arm
+--format=arm --no-params
h__Fcl
h(char, long)
+h
#
---format=arm
+--format=arm --no-params
h__FUs
h(unsigned short)
+h
#
---format=arm
+--format=arm --no-params
h__Fcs
h(char, short)
+h
#
---format=arm
+--format=arm --no-params
X__12T5__pt__3_1x
T5<x>::X
+T5<x>::X
#
---format=arm
+--format=arm --no-params
__ct__11T5__pt__2_iFi
T5<int>::T5(int)
+T5<int>::T5
#
---format=arm
+--format=arm --no-params
__ct__11T5__pt__2_cFi
T5<char>::T5(int)
+T5<char>::T5
#
---format=arm
+--format=arm --no-params
h__FcT1
h(char, char)
+h
#
---format=arm
+--format=arm --no-params
f__Ficd
f(int, char, double)
+f
#
---format=arm
+--format=arm --no-params
__dl__17T5__pt__8_PFcPv_iSFPv
T5<int (*)(char, void *)>::operator delete(void *) static
+T5<int (*)(char, void *)>::operator delete
#
---format=arm
+--format=arm --no-params
X__17T5__pt__8_PFcPv_i
T5<int (*)(char, void *)>::X
+T5<int (*)(char, void *)>::X
#
---format=arm
+--format=arm --no-params
__ct__12T5__pt__3_1xFi
T5<x>::T5(int)
+T5<x>::T5
#
---format=arm
+--format=arm --no-params
__dl__21T5__pt__11_PFiPPdPv_iSFPv
T5<int (*)(int, double **, void *)>::operator delete(void *) static
+T5<int (*)(int, double **, void *)>::operator delete
#
---format=arm
+--format=arm --no-params
__std__foo
global destructors keyed to foo
+global destructors keyed to foo
#
---format=arm
+--format=arm --no-params
__sti__bar
global constructors keyed to bar
+global constructors keyed to bar
#
---format=arm
+--format=arm --no-params
f__FicdPcPFci_v
f(int, char, double, char *, void (*)(char, int))
+f
#
---format=arm
+--format=arm --no-params
f__FicdPcPFic_v
f(int, char, double, char *, void (*)(int, char))
+f
#
---format=arm
+--format=arm --no-params
get__2T7SFv
T7::get(void) static
+T7::get
#
---format=arm
+--format=arm --no-params
X__21T5__pt__11_PFiPPdPv_i
T5<int (*)(int, double **, void *)>::X
+T5<int (*)(int, double **, void *)>::X
#
---format=arm
+--format=arm --no-params
__dl__11T5__pt__2_iSFPv
T5<int>::operator delete(void *) static
+T5<int>::operator delete
#
---format=arm
+--format=arm --no-params
__dl__11T5__pt__2_cSFPv
T5<char>::operator delete(void *) static
+T5<char>::operator delete
#
---format=arm
+--format=arm --no-params
h__Fc
h(char)
+h
#
---format=arm
+--format=arm --no-params
h__Fd
h(double)
+h
#
---format=arm
+--format=arm --no-params
h__Ff
h(float)
+h
#
---format=arm
+--format=arm --no-params
h__Fi
h(int)
+h
#
---format=arm
+--format=arm --no-params
f__Fi
f(int)
+f
#
---format=arm
+--format=arm --no-params
h__Fl
h(long)
+h
#
---format=arm
+--format=arm --no-params
h__Fs
h(short)
+h
#
---format=arm
+--format=arm --no-params
X__11T5__pt__2_c
T5<char>::X
+T5<char>::X
#
---format=arm
+--format=arm --no-params
X__11T5__pt__2_i
T5<int>::X
+T5<int>::X
#
---format=arm
+--format=arm --no-params
__ct__17T5__pt__8_PFcPv_iFi
T5<int (*)(char, void *)>::T5(int)
+T5<int (*)(char, void *)>::T5
#
---format=arm
+--format=arm --no-params
f__FicdPc
f(int, char, double, char *)
+f
#
---format=arm
+--format=arm --no-params
__nw__FUi
operator new(unsigned int)
+operator new
#
---format=arm
+--format=arm --no-params
__ct__Q3_2T11a1bSFi
T1::a::b::b(int) static
+T1::a::b::b
#
---format=arm
+--format=arm --no-params
__dt__Q3_2T11a1bSFi
T1::a::b::~b(int) static
+T1::a::b::~b
#
---format=arm
+--format=arm --no-params
put__Q3_2T11a1bSFi
T1::a::b::put(int) static
+T1::a::b::put
#
---format=arm
+--format=arm --no-params
get__Q2_2T11aSFv
T1::a::get(void) static
+T1::a::get
#
---format=arm
+--format=arm --no-params
put__2T1SFi
T1::put(int) static
+T1::put
#
---format=arm
+--format=arm --no-params
put__Q5_2T11a1b1c1dSFi
T1::a::b::c::d::put(int) static
+T1::a::b::c::d::put
#
---format=arm
+--format=arm --no-params
get__Q4_2T11a1b1cSFv
T1::a::b::c::get(void) static
+T1::a::b::c::get
#
---format=arm
+--format=arm --no-params
put__Q2_2T11aSFi
T1::a::put(int) static
+T1::a::put
#
---format=arm
+--format=arm --no-params
put__Q4_2T11a1b1cSFi
T1::a::b::c::put(int) static
+T1::a::b::c::put
#
---format=arm
+--format=arm --no-params
get__Q3_2T11a1bSFv
T1::a::b::get(void) static
+T1::a::b::get
#
---format=arm
+--format=arm --no-params
get__2T1SFv
T1::get(void) static
+T1::get
#
---format=arm
+--format=arm --no-params
get__Q5_2T11a1b1c1dSFv
T1::a::b::c::d::get(void) static
+T1::a::b::c::d::get
#
---format=arm
+--format=arm --no-params
__dt__11T1__pt__2_cFv
T1<char>::~T1(void)
+T1<char>::~T1
#
---format=arm
+--format=arm --no-params
__dt__12T1__pt__3_1tFv
T1<t>::~T1(void)
+T1<t>::~T1
#
---format=arm
+--format=arm --no-params
__dl__12T1__pt__3_1tSFPv
T1<t>::operator delete(void *) static
+T1<t>::operator delete
#
---format=arm
+--format=arm --no-params
__ct__11T1__pt__2_cFi
T1<char>::T1(int)
+T1<char>::T1
#
---format=arm
+--format=arm --no-params
__ct__11T1__pt__2_cFv
T1<char>::T1(void)
+T1<char>::T1
#
---format=arm
+--format=arm --no-params
__ct__12T1__pt__3_1tFi
T1<t>::T1(int)
+T1<t>::T1
#
---format=arm
+--format=arm --no-params
__ct__12T1__pt__3_1tFv
T1<t>::T1(void)
+T1<t>::T1
#
---format=arm
+--format=arm --no-params
__dl__11T1__pt__2_cSFPv
T1<char>::operator delete(void *) static
+T1<char>::operator delete
#
---format=arm
+--format=arm --no-params
bar__3fooFPv
foo::bar(void *)
+foo::bar
#
---format=arm
+--format=arm --no-params
bar__3fooCFPv
foo::bar(void *) const
+foo::bar
#
---format=arm
+--format=arm --no-params
__eq__3fooFR3foo
foo::operator==(foo &)
+foo::operator==
#
---format=arm
+--format=arm --no-params
__eq__3fooCFR3foo
foo::operator==(foo &) const
+foo::operator==
#
---format=arm
+--format=arm --no-params
elem__15vector__pt__2_dFi
vector<double>::elem(int)
+vector<double>::elem
#
---format=arm
+--format=arm --no-params
elem__15vector__pt__2_iFi
vector<int>::elem(int)
+vector<int>::elem
#
---format=arm
+--format=arm --no-params
__ct__15vector__pt__2_dFi
vector<double>::vector(int)
+vector<double>::vector
#
---format=arm
+--format=arm --no-params
__ct__15vector__pt__2_iFi
vector<int>::vector(int)
+vector<int>::vector
#
---format=arm
+--format=arm --no-params
__ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
+DListNode<RLabel &>::DListNode
#
---format=arm
+--format=arm --no-params
bar__3fooFiT16FooBar
foo::bar(int, int, FooBar)
+foo::bar
#
---format=arm
+--format=arm --no-params
bar__3fooFPiN51PdN37PcN211T1iN215
foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
+foo::bar
#
---format=hp
+--format=hp --no-params
__amd__FR2T2i
operator%=(T2 &, int)
+operator%=
#
---format=hp
+--format=hp --no-params
__adv__FR2T2i
operator/=(T2 &, int)
+operator/=
#
---format=hp
+--format=hp --no-params
__amu__FR2T2i
operator*=(T2 &, int)
+operator*=
#
---format=hp
+--format=hp --no-params
__ami__FR2T2i
operator-=(T2 &, int)
+operator-=
#
---format=hp
+--format=hp --no-params
__apl__FR2T2i
operator+=(T2 &, int)
+operator+=
#
---format=hp
+--format=hp --no-params
__nw__2T1SFUi
T1::operator new(unsigned int) static
+T1::operator new
#
---format=hp
+--format=hp --no-params
__dl__2T1SFPv
T1::operator delete(void *) static
+T1::operator delete
#
---format=hp
+--format=hp --no-params
put__2T7SFi
T7::put(int) static
+T7::put
#
---format=hp
+--format=hp --no-params
h__FUc
h(unsigned char)
+h
#
---format=hp
+--format=hp --no-params
f__Fic
f(int, char)
+f
#
---format=hp
+--format=hp --no-params
h__FUi
h(unsigned int)
+h
#
---format=hp
+--format=hp --no-params
h__Fci
h(char, int)
+h
#
---format=hp
+--format=hp --no-params
h__FUl
h(unsigned long)
+h
#
---format=hp
+--format=hp --no-params
h__Fcl
h(char, long)
+h
#
---format=hp
+--format=hp --no-params
h__FUs
h(unsigned short)
+h
#
---format=hp
+--format=hp --no-params
h__Fcs
h(char, short)
+h
#
---format=hp
+--format=hp --no-params
h__FcT1
h(char, char)
+h
#
---format=hp
+--format=hp --no-params
f__Ficd
f(int, char, double)
+f
#
---format=hp
+--format=hp --no-params
f__FicdPcPFci_v
f(int, char, double, char *, void (*)(char, int))
+f
#
---format=hp
+--format=hp --no-params
f__FicdPcPFic_v
f(int, char, double, char *, void (*)(int, char))
+f
#
---format=hp
+--format=hp --no-params
get__2T7SFv
T7::get(void) static
+T7::get
#
---format=hp
+--format=hp --no-params
h__Fc
h(char)
+h
#
---format=hp
+--format=hp --no-params
h__Fd
h(double)
+h
#
---format=hp
+--format=hp --no-params
h__Ff
h(float)
+h
#
---format=hp
+--format=hp --no-params
h__Fi
h(int)
+h
#
---format=hp
+--format=hp --no-params
f__Fi
f(int)
+f
#
---format=hp
+--format=hp --no-params
h__Fl
h(long)
+h
#
---format=hp
+--format=hp --no-params
h__Fs
h(short)
+h
#
---format=hp
+--format=hp --no-params
f__FicdPc
f(int, char, double, char *)
+f
#
---format=hp
+--format=hp --no-params
__nw__FUi
operator new(unsigned int)
+operator new
#
---format=hp
+--format=hp --no-params
__ct__Q3_2T11a1bSFi
T1::a::b::b(int) static
+T1::a::b::b
#
---format=hp
+--format=hp --no-params
__dt__Q3_2T11a1bSFi
T1::a::b::~b(int) static
+T1::a::b::~b
#
---format=hp
+--format=hp --no-params
put__Q3_2T11a1bSFi
T1::a::b::put(int) static
+T1::a::b::put
#
---format=hp
+--format=hp --no-params
get__Q2_2T11aSFv
T1::a::get(void) static
+T1::a::get
#
---format=hp
+--format=hp --no-params
put__2T1SFi
T1::put(int) static
+T1::put
#
---format=hp
+--format=hp --no-params
put__Q5_2T11a1b1c1dSFi
T1::a::b::c::d::put(int) static
+T1::a::b::c::d::put
#
---format=hp
+--format=hp --no-params
get__Q4_2T11a1b1cSFv
T1::a::b::c::get(void) static
+T1::a::b::c::get
#
---format=hp
+--format=hp --no-params
put__Q2_2T11aSFi
T1::a::put(int) static
+T1::a::put
#
---format=hp
+--format=hp --no-params
put__Q4_2T11a1b1cSFi
T1::a::b::c::put(int) static
+T1::a::b::c::put
#
---format=hp
+--format=hp --no-params
get__Q3_2T11a1bSFv
T1::a::b::get(void) static
+T1::a::b::get
#
---format=hp
+--format=hp --no-params
get__2T1SFv
T1::get(void) static
+T1::get
#
---format=hp
+--format=hp --no-params
get__Q5_2T11a1b1c1dSFv
T1::a::b::c::d::get(void) static
+T1::a::b::c::d::get
#
---format=hp
+--format=hp --no-params
bar__3fooFPv
foo::bar(void *)
+foo::bar
#
---format=hp
+--format=hp --no-params
bar__3fooCFPv
foo::bar(void *) const
+foo::bar
#
---format=hp
+--format=hp --no-params
__eq__3fooFR3foo
foo::operator==(foo &)
+foo::operator==
#
---format=hp
+--format=hp --no-params
__eq__3fooCFR3foo
foo::operator==(foo &) const
+foo::operator==
#
---format=hp
+--format=hp --no-params
bar__3fooFiT16FooBar
foo::bar(int, int, FooBar)
+foo::bar
#
---format=hp
+--format=hp --no-params
bar__3fooFPiN51PdN37PcN211T1iN215
foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
+foo::bar
#
---format=hp
+--format=hp --no-params
__dt__2T5XTPFiPPdPv_i__Fv
T5<int (*)(int, double **, void *)>::~T5(void)
+T5<int (*)(int, double **, void *)>::~T5
#
---format=hp
+--format=hp --no-params
__ct__1cFi
c::c(int)
+c::c
#
---format=hp
+--format=hp --no-params
__dt__2T5XTi__Fv
T5<int>::~T5(void)
+T5<int>::~T5
#
---format=hp
+--format=hp --no-params
__dt__2T5XTc__Fv
T5<char>::~T5(void)
+T5<char>::~T5
#
---format=hp
+--format=hp --no-params
__ct__2T2Fi
T2::T2(int)
+T2::T2
#
---format=hp
+--format=hp --no-params
__dt__2T1Fv
T1::~T1(void)
+T1::~T1
#
---format=hp
+--format=hp --no-params
__dt__2T5XT1x__Fv
T5<x>::~T5(void)
+T5<x>::~T5
#
---format=hp
+--format=hp --no-params
__dt__2T5XTPFcPv_i__Fv
T5<int (*)(char, void *)>::~T5(void)
+T5<int (*)(char, void *)>::~T5
#
---format=hp
+--format=hp --no-params
__ct__2T5XTPFiPPdPv_i__Fi
T5<int (*)(int, double **, void *)>::T5(int)
+T5<int (*)(int, double **, void *)>::T5
#
---format=hp
+--format=hp --no-params
__dl__2T5XT1x__SFPv
T5<x>::operator delete(void *) static
+T5<x>::operator delete
#
---format=hp
+--format=hp --no-params
X__2T5XT1x
T5<x>::X
+T5<x>::X
#
---format=hp
+--format=hp --no-params
__ct__2T5XTi__Fi
T5<int>::T5(int)
+T5<int>::T5
#
---format=hp
+--format=hp --no-params
__ct__2T5XTc__Fi
T5<char>::T5(int)
+T5<char>::T5
#
---format=hp
+--format=hp --no-params
__dl__2T5XTPFcPv_i__SFPv
T5<int (*)(char, void *)>::operator delete(void *) static
+T5<int (*)(char, void *)>::operator delete
#
---format=hp
+--format=hp --no-params
X__2T5XTPFcPv_i
T5<int (*)(char, void *)>::X
+T5<int (*)(char, void *)>::X
#
---format=hp
+--format=hp --no-params
__ct__2T5XT1x__Fi
T5<x>::T5(int)
+T5<x>::T5
#
---format=hp
+--format=hp --no-params
__dl__2T5XTPFiPPdPv_i__SFPv
T5<int (*)(int, double **, void *)>::operator delete(void *) static
+T5<int (*)(int, double **, void *)>::operator delete
#
---format=hp
+--format=hp --no-params
X__2T5XTPFiPPdPv_i
T5<int (*)(int, double **, void *)>::X
+T5<int (*)(int, double **, void *)>::X
#
---format=hp
+--format=hp --no-params
__dl__2T5XTi__SFPv
T5<int>::operator delete(void *) static
+T5<int>::operator delete
#
---format=hp
+--format=hp --no-params
__dl__2T5XTc__SFPv
T5<char>::operator delete(void *) static
+T5<char>::operator delete
#
---format=hp
+--format=hp --no-params
X__2T5XTc
T5<char>::X
+T5<char>::X
#
---format=hp
+--format=hp --no-params
X__2T5XTi
T5<int>::X
+T5<int>::X
#
---format=hp
+--format=hp --no-params
__ct__2T5XTPFcPv_i__Fi
T5<int (*)(char, void *)>::T5(int)
+T5<int (*)(char, void *)>::T5
#
---format=hp
+--format=hp --no-params
__dt__2T1XTc__Fv
T1<char>::~T1(void)
+T1<char>::~T1
#
---format=hp
+--format=hp --no-params
__dt__2T1XT1t__Fv
T1<t>::~T1(void)
+T1<t>::~T1
#
---format=hp
+--format=hp --no-params
__dl__2T1XT1t__SFPv
T1<t>::operator delete(void *) static
+T1<t>::operator delete
#
---format=hp
+--format=hp --no-params
__ct__2T1XTc__Fi
T1<char>::T1(int)
+T1<char>::T1
#
---format=hp
+--format=hp --no-params
__ct__2T1XTc__Fv
T1<char>::T1(void)
+T1<char>::T1
#
---format=hp
+--format=hp --no-params
__ct__2T1XT1t__Fi
T1<t>::T1(int)
+T1<t>::T1
#
---format=hp
+--format=hp --no-params
__ct__2T1XT1t__Fv
T1<t>::T1(void)
+T1<t>::T1
#
---format=hp
+--format=hp --no-params
__dl__2T1XTc__SFPv
T1<char>::operator delete(void *) static
+T1<char>::operator delete
#
---format=hp
+--format=hp --no-params
elem__6vectorXTd__Fi
vector<double>::elem(int)
+vector<double>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTi__Fi
vector<int>::elem(int)
+vector<int>::elem
#
---format=hp
+--format=hp --no-params
__ct__6vectorXTd__Fi
vector<double>::vector(int)
+vector<double>::vector
#
---format=hp
+--format=hp --no-params
__ct__6vectorXTi__Fi
vector<int>::vector(int)
+vector<int>::vector
#
---format=hp
+--format=hp --no-params
__ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
+DListNode<RLabel &>::DListNode
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiUP34__Fi
vector<int,34U>::elem(int)
+vector<int,34U>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXUP2701Td__Fi
vector<2701U,double>::elem(int)
+vector<2701U,double>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSP334__Fi
vector<int,334>::elem(int)
+vector<int,334>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSN67__Fi
vector<int,-67>::elem(int)
+vector<int,-67>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSM__SCFPPd
vector<int,-2147483648>::elem(double **) static const
+vector<int,-2147483648>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSN67UP4000TRs__Fi
vector<int,-67,4000U,short &>::elem(int)
+vector<int,-67,4000U,short &>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSN67TRdTFPv_i__Fi
vector<int,-67,double &,int (void *)>::elem(int)
+vector<int,-67,double &,int (void *)>::elem
#
---format=hp
+--format=hp --no-params
X__6vectorXTiSN67TdTPvUP5TRs
vector<int,-67,double,void *,5U,short &>::X
+vector<int,-67,double,void *,5U,short &>::X
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiA3foo__Fi
vector<int,&foo>::elem(int)
+vector<int,&foo>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
vector<int,&foo,void *,&Label>::elem(int, void **, void **)
+vector<int,&foo,void *,&Label>::elem
#
---format=hp
+--format=hp --no-params
elem__6vectorXTiSN42A3foo__Fi
vector<int,-42,&foo>::elem(int)
+vector<int,-42,&foo>::elem
#
---format=hp
+--format=hp --no-params
__ct__2T5XTPFcPv_i__Fi_2
T5<int (*)(char, void *)>::T5(int)
+T5<int (*)(char, void *)>::T5
#
---format=hp
+--format=hp --no-params
__ct__2T5XTPFcPv_i__Fi_19
T5<int (*)(char, void *)>::T5(int)
+T5<int (*)(char, void *)>::T5
#
---format=hp
+--format=hp --no-params
f__FicdPcPFci_v_34
f(int, char, double, char *, void (*)(char, int))
+f
#
---format=hp
+--format=hp --no-params
spec__13Spec<#1,#1.*>XTiTPi_FPi
Spec<int,int *>::spec(int *)
+Spec<int,int *>::spec
#
---format=hp
+--format=hp --no-params
spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi
Spec<int,int &,int>::spec(int *)
+Spec<int,int &,int>::spec
#
---format=hp
+--format=hp --no-params
add__XTc_FcT1
add<char>(char, char)
+add<char>
#
---format=hp
+--format=hp --no-params
add__XTcSP9A5label_FcPPlT1
add<char,9,&label>(char, long **, char)
+add<char,9,&label>
#
---format=hp
+--format=hp --no-params
add__XTPfTFPd_f_FcT1
add<float *,float (double *)>(char, char)
+add<float *,float (double *)>
#
---format=hp
+--format=hp --no-params
unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
basic_string<char,string_char_traits<char>,allocator>::unLink(void)
+basic_string<char,string_char_traits<char>,allocator>::unLink
#
# A regression test with no args. This used to cause a segv.
_Utf390_1__1_9223372036854775807__9223372036854775
_Utf390_1__1_9223372036854775807__9223372036854775
#
---format=gnu
+--format=gnu --no-params
call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output
C<Test, Test::output> call<Test>(Test &)
+C<Test, Test::output> call<Test>
#
---format=gnu
+--format=gnu --no-params
fn__FPQ21n1cPMQ21n1cFPQ21n1c_i
fn(n::c *, int (n::c::*)(n::c *))
+fn
#
---format=gnu
+--format=gnu --no-params
f__FGt3Bar1i2G1i
f(Bar<2>, i)
+f
#
---format=gnu
+--format=gnu --no-params
f__FGt3Bar1i21i
f(Bar<21>, int)
+f
#
---format=gnu
+--format=gnu --no-params
f__FGt3Bar1i2G4XY_t
f(Bar<2>, XY_t)
+f
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZRCiZt2NA1Ui9_X01_i
int foo<TA<int const &, NA<9> > >(TA<int const &, NA<9> >)
+int foo<TA<int const &, NA<9> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZcZt2NA1Ui20_X01_i
int foo<TA<char, NA<20> > >(TA<char, NA<20> >)
+int foo<TA<char, NA<20> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZiZt8N___A___1Ui99_X01_i
int foo<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
+int foo<TA<int, N___A___<99> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZRCiZt2NA1im1_X01_i
int foo<TA<int const &, NA<-1> > >(TA<int const &, NA<-1> >)
+int foo<TA<int const &, NA<-1> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZRCiZt2NA1im9_X01_i
int foo<TA<int const &, NA<-9> > >(TA<int const &, NA<-9> >)
+int foo<TA<int const &, NA<-9> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZcZt2NA1i_m20__X01_i
int foo<TA<char, NA<-20> > >(TA<char, NA<-20> >)
+int foo<TA<char, NA<-20> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZcZt2NA1im1_X01_i
int foo<TA<char, NA<-1> > >(TA<char, NA<-1> >)
+int foo<TA<char, NA<-1> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZiZt4N__A1im9_X01_i
int foo<TA<int, N__A<-9> > >(TA<int, N__A<-9> >)
+int foo<TA<int, N__A<-9> > >
#
---format=gnu
+--format=gnu --no-params
foo__H1Zt2TA2ZiZt4N__A1i_m99__X01_i
int foo<TA<int, N__A<-99> > >(TA<int, N__A<-99> >)
+int foo<TA<int, N__A<-99> > >
#
---format=gnu
+--format=gnu --no-params
__opi__t2TA2ZiZt4N__A1i9
TA<int, N__A<9> >::operator int(void)
+TA<int, N__A<9> >::operator int
#
---format=gnu
+--format=gnu --no-params
__opi__t2TA2ZiZt8N___A___1i_m99_
TA<int, N___A___<-99> >::operator int(void)
+TA<int, N___A___<-99> >::operator int
#
---format=gnu
+--format=gnu --no-params
foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i99_X01_i
int foo___bar__baz___<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
+int foo___bar__baz___<TA<int, N___A___<99> > >
#
---format=gnu
+--format=gnu --no-params
foo__bar___foobar_____t2TA2ZiZt8N___A___1i_m99_
TA<int, N___A___<-99> >::foo__bar___foobar___(void)
+TA<int, N___A___<-99> >::foo__bar___foobar___
#
---format=gnu
+--format=gnu --no-params
foo__bar___foobar_____t2TA2ZiZt4N__A1i9
TA<int, N__A<9> >::foo__bar___foobar___(void)
+TA<int, N__A<9> >::foo__bar___foobar___
#
---format=gnu
+--format=gnu --no-params
__tfP8sockaddr
sockaddr * type_info function
+sockaddr * type_info function
#
---format=gnu
+--format=gnu --no-params
__tfPQ25libcwt16option_event_tct1Z12burst_app_ct
libcw::option_event_tct<burst_app_ct> * type_info function
+libcw::option_event_tct<burst_app_ct> * type_info function
#
---format=gnu
+--format=gnu --no-params
__tiP8sockaddr
sockaddr * type_info node
+sockaddr * type_info node
#
---format=gnu
+--format=gnu --no-params
__tiPQ25libcwt16option_event_tct1Z12burst_app_ct
libcw::option_event_tct<burst_app_ct> * type_info node
+libcw::option_event_tct<burst_app_ct> * type_info node
#
---format=gnu
+--format=gnu --no-params
_27_GLOBAL_.N.__12burst_app_ct.app_instance
{anonymous}::app_instance
+{anonymous}::app_instance
#
---format=gnu
+--format=gnu --no-params
_26_GLOBAL_$N$_tmp_n.iilg4Gya$app_instance
{anonymous}::app_instance
+{anonymous}::app_instance
#
--format=java
_ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi
@@ -2591,330 +3243,486 @@ Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long)
_ZN4java4util14Map__U24_Entry11class__U24_E
java.util.Map$Entry.class$
#
---format=hp
+--format=java
+_ZN3org7eclipse3cdt5debug8internal4core5model9CVariable6sizeof$Ev
+org.eclipse.cdt.debug.internal.core.model.CVariable.sizeof()
+#
+--format=hp --no-params
+_Utf58_0_1__1_2147483647__2147483648
_Utf58_0_1__1_2147483647__2147483648
_Utf58_0_1__1_2147483647__2147483648
#
---format=gnu-v3
+--format=gnu-v3 --no-params
St9bad_alloc
std::bad_alloc
+std::bad_alloc
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN1f1fE
f::f
+f::f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fv
f()
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fi
f(int)
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3foo3bar
foo(bar)
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Zrm1XS_
operator%(X, X)
+operator%
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZplR1XS0_
operator+(X&, X&)
+operator+
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZlsRK1XS1_
operator<<(X const&, X const&)
+operator<<
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN3FooIA4_iE3barE
Foo<int [4]>::bar
+Foo<int [4]>::bar
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fIiEvi
void f<int>(int)
+f<int>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z5firstI3DuoEvS0_
void first<Duo>(Duo)
+first<Duo>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z5firstI3DuoEvT_
void first<Duo>(Duo)
+first<Duo>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooIiFvdEiEvv
void foo<int, void ()(double), int>()
+foo<int, void ()(double), int>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN1N1fE
N::f
+N::f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN6System5Sound4beepEv
System::Sound::beep()
+System::Sound::beep
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN5Arena5levelE
Arena::level
+Arena::level
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN5StackIiiE5levelE
Stack<int, int>::level
+Stack<int, int>::level
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fI1XEvPVN1AIT_E1TE
void f<X>(A<X>::T volatile*)
+f<X>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZngILi42EEvN1AIXplT_Li2EEE1TE
void operator-<42>(A<(42) + (2)>::T)
+operator-<42>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z4makeI7FactoryiET_IT0_Ev
Factory<int> make<Factory, int>()
+make<Factory, int>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z4makeI7FactoryiET_IT0_Ev
Factory<int> make<Factory, int>()
+make<Factory, int>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3foo5Hello5WorldS0_S_
foo(Hello, World, World, Hello)
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooPM2ABi
foo(int AB::**)
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZlsRSoRKSs
operator<<(std::ostream&, std::string const&)
+operator<<
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZTI7a_class
typeinfo for a_class
+typeinfo for a_class
#
---format=gnu-v3
+--format=gnu-v3 --no-params
U4_farrVKPi
int* const volatile restrict _far
+int* const volatile restrict _far
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooILi2EEvRAplT_Li1E_i
void foo<2>(int (&) [(2) + (1)])
+foo<2>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fM1AKFvvE
f(void (A::*)() const)
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooc
foo(char)
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
2CBIL_Z3foocEE
CB<foo(char)>
+CB<foo(char)>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
2CBIL_Z7IsEmptyEE
CB<IsEmpty>
+CB<IsEmpty>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZZN1N1fEiE1p
N::f(int)::p
+N::f(int)::p
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZZN1N1fEiEs
N::f(int)::string literal
+N::f(int)::string literal
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fPFvvEM1SFvvE
f(void (*)(), void (S::*)())
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN1N1TIiiE2mfES0_IddE
N::T<int, int>::mf(N::T<double, double>)
+N::T<int, int>::mf
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZSt5state
std::state
+std::state
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNSt3_In4wardE
std::_In::ward
+std::_In::ward
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fKPFiiE
f(int (* const)(int))
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i
f(int [sizeof (N::A::f() const::foo)])
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fA37_iPS_
f(int [37], int (*) [37])
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fM1AFivEPS0_
f(int (A::*)(), int (*)())
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fPFPA1_ivE
f(int (*(*)()) [1])
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fPKM1AFivE
f(int (A::* const*)())
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1jM1AFivEPS1_
j(int (A::*)(), int (A::**)())
+j
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1sPA37_iPS0_
s(int (*) [37], int (**) [37])
+s
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooA30_A_i
foo(int [30][])
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3kooPA28_A30_i
koo(int (*) [28][30])
+koo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZlsRKU3fooU4bart1XS0_
operator<<(X bart foo const&, X bart)
+operator<<
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZlsRKU3fooU4bart1XS2_
operator<<(X bart foo const&, X bart foo const)
+operator<<
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fM1AKFivE
f(int (A::*)() const)
+f
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3absILi11EEvv
void abs<11>()
+abs<11>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN1AIfEcvT_IiEEv
A<float>::operator int<int>()
+A<float>::operator int<int>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_
void libcw_app_ct::add_option<libcw_app_ct>(void (libcw_app_ct::*)(char const*), char const*, char, char const*, char const*)
+libcw_app_ct::add_option<libcw_app_ct>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE
guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
+guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE
libcw::debug::cwprint_using_tct<libcw::_private_::GlobalObject> libcw::debug::cwprint_using<libcw::_private_::GlobalObject>(libcw::_private_::GlobalObject const&, void (libcw::_private_::GlobalObject::*)(std::ostream&) const)
+libcw::debug::cwprint_using<libcw::_private_::GlobalObject>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv
std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top() const
+std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_
std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==(std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*> const&) const
+std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_
std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-(std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > > const&) const
+std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_
char* std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>(char*, char*, libcw::debug::no_alloc_checking_allocator const&)
+std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_
void f<A, A*, A const*>(A, A*, A const*, A const* (*) [4], A const* (* C::*) [4])
+f<A, A*, A const*>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_
foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************)
+foo
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_
std::D<A*, A*&, A**> std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>(std::D<A*, A* const&, A* const*>, std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A**)
+std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>
#
---format=gnu-v3
+--format=gnu-v3 --no-params
+_X11TransParseAddress
_X11TransParseAddress
_X11TransParseAddress
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE
std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
+std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_GLOBAL__I__Z2fnv
global constructors keyed to _Z2fnv
+global constructors keyed to _Z2fnv
#
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_
r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const)
+r
#
# This is from the gdb testsuite gdb.cp/cplusfuncs.exp.
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z10hairyfunc5PFPFilEPcE
hairyfunc5(int (*(*)(char*))(long))
+hairyfunc5
#
# This is from gcc PR 8861
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE
void f<1, 120>(A<(1) + (((int)((double)810000000000000000703DAD7A370C5)))>)
+f<1, 120>
#
# This is also from gcc PR 8861
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fILi1EEv1AIXplT_cvingLf3f800000EEE
void f<1>(A<(1) + (((int)(-((float)3f800000))))>)
+f<1>
#
# This is from a libstdc++ debug mode patch.
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNK11__gnu_debug16_Error_formatter14_M_format_wordImEEvPciPKcT_
void __gnu_debug::_Error_formatter::_M_format_word<unsigned long>(char*, int, char const*, unsigned long) const
+__gnu_debug::_Error_formatter::_M_format_word<unsigned long>
#
# The new demangler used to core dump on this.
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairISsPFbP6sqlitePPcEESt6vectorIS9_SaIS9_EEEESE_ET0_T_SG_SF_
__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >)
+std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >
#
# The new demangler used to fail on this.
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fP1cIPFiiEE
f(c<int (*)(int)>*)
+f
#
# Wrap expressions using '>' in an extra layer of parens to avoid
# confusion with the '>' which ends the template parameters.
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z4dep9ILi3EEvP3fooIXgtT_Li2EEE
void dep9<3>(foo<((3) > (2))>*)
+dep9<3>
#
# Watch out for templated version of `operator<'--it needs an extra
# space.
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZStltI9file_pathSsEbRKSt4pairIT_T0_ES6_
bool std::operator< <file_path, std::string>(std::pair<file_path, std::string> const&, std::pair<file_path, std::string> const&)
+std::operator< <file_path, std::string>
#
# More hairy qualifier handling.
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE
hairyfunc(int (* const (X::** (* restrict (* volatile*(Y::*)(int) const)(char*)) [2])(long) const) [3])
+hairyfunc
#
# Check that negative numbers are handled correctly.
---format=gnu-v3
+--format=gnu-v3 --no-params
_Z1fILin1EEvv
void f<-1>()
+f<-1>
#
# Check a destructor of a standard substitution.
---format=gnu-v3
+--format=gnu-v3 --no-params
_ZNSdD0Ev
std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
+std::basic_iostream<char, std::char_traits<char> >::~basic_iostream
+#
+# Another case where we got member function qualifiers wrong.
+--format=gnu-v3 --no-params
+_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_
+nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const
+nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead
+#
+# Another member function qualifier test case, when the member function
+# returns a pointer to function.
+--format=gnu-v3 --no-params
+_ZNK1C1fIiEEPFivEv
+int (*C::f<int>() const)()
+C::f<int>
+#
+# Another case where we got member function qualifiers wrong.
+--format=gnu-v3 --no-params
+_ZZ3BBdI3FooEvvENK3Fob3FabEv
+void BBd<Foo>()::Fob::Fab() const
+void BBd<Foo>()::Fob::Fab
+#
+# The same idea one level deeper.
+--format=gnu-v3 --no-params
+_ZZZ3BBdI3FooEvvENK3Fob3FabEvENK3Gob3GabEv
+void BBd<Foo>()::Fob::Fab() const::Gob::Gab() const
+void BBd<Foo>()::Fob::Fab() const::Gob::Gab
+#
+# Yet another member function qualifier problem.
+--format=gnu-v3 --no-params
+_ZNK5boost6spirit5matchI13rcs_deltatextEcvMNS0_4impl5dummyEFvvEEv
+boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()() const
+boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()
+#
+# Test GNU V3 constructor and destructor identification.
+# 0 means it is not a constructor/destructor.
+# Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.
+--is-v3-ctor
+_GLOBAL__I__Z2fnv
+0
+#
+--is-v3-dtor
+_GLOBAL__I__Z2fnv
+0
+#
+--is-v3-ctor
+_ZNSdC1Ev
+1
+#
+--is-v3-dtor
+_ZNSdC1Ev
+0
+#
+--is-v3-ctor
+_ZNSdD0Ev
+0
+#
+--is-v3-dtor
+_ZNSdD0Ev
+1
+#
+--is-v3-ctor
+_ZNSdC2Ev
+2
+#
+--is-v3-dtor
+_ZNSdC2Ev
+0
+#
+--is-v3-ctor
+_ZNSdD1Ev
+0
+#
+--is-v3-dtor
+_ZNSdD1Ev
+2
#
# This caused an infinite loop.
#
@@ -2929,12 +3737,14 @@ std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
# mode. Of course the result is more or less nonsense, but an older
# version of g++ would indeed generate this mangled name given the
# appropriate input, so the demangling is correct.
---format=auto
+--format=auto --no-params
__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator)
+_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm
#
# This used to cause a crash. It doesn't follow the C++ encoding so
# the demangled name should be identical to the original symbol name.
---format=auto
+--format=auto --no-params
+_test_array__L_1__B23b___clean.6
_test_array__L_1__B23b___clean.6
_test_array__L_1__B23b___clean.6
diff --git a/libiberty/testsuite/test-demangle.c b/libiberty/testsuite/test-demangle.c
index ed28229ca34..6e00d1416d7 100644
--- a/libiberty/testsuite/test-demangle.c
+++ b/libiberty/testsuite/test-demangle.c
@@ -1,5 +1,5 @@
/* Demangler test program,
- Copyright (C) 2002 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
Written by Zack Weinberg <zack@codesourcery.com
This file is part of GNU libiberty.
@@ -80,16 +80,39 @@ getline(buf)
buf->alloced = alloc;
}
-/* The tester operates on a data file consisting of triples of lines:
- format switch
+static void
+fail (lineno, opts, in, out, exp)
+ int lineno;
+ const char *opts;
+ const char *in;
+ const char *out;
+ const char *exp;
+{
+ printf ("\
+FAIL at line %d, options %s:\n\
+in: %s\n\
+out: %s\n\
+exp: %s\n",
+ lineno, opts, in, out != NULL ? out : "(null)", exp);
+}
+
+/* The tester operates on a data file consisting of groups of lines:
+ options
input to be demangled
expected output
- The format switch is expected to be either the empty string, a
- line of the form --format=<name>, or just <name> by itself. */
+ Supported options:
+ --format=<name> Sets the demangling style.
+ --no-params There are two lines of expected output; the first
+ is with DMGL_PARAMS, the second is without it.
+ --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected
+ output is an integer representing ctor_kind.
+ --is-v3-dtor Likewise, but for dtors.
-#define FORMATS "--format="
-#define FORMATL (sizeof FORMATS - 1)
+ For compatibility, just in case it matters, the options line may be
+ empty, to mean --format=auto. If it doesn't start with --, then it
+ may contain only a format name.
+*/
int
main(argc, argv)
@@ -97,10 +120,12 @@ main(argc, argv)
char **argv;
{
enum demangling_styles style;
+ int no_params;
+ int is_v3_ctor;
+ int is_v3_dtor;
struct line format;
struct line input;
struct line expect;
- char *fstyle;
char *result;
int failures = 0;
int tests = 0;
@@ -126,20 +151,98 @@ main(argc, argv)
tests++;
- fstyle = format.data;
- if (!strncmp (fstyle, FORMATS, FORMATL))
- fstyle += FORMATL;
-
- if (fstyle[0] == '\0')
+ no_params = 0;
+ is_v3_ctor = 0;
+ is_v3_dtor = 0;
+ if (format.data[0] == '\0')
style = auto_demangling;
+ else if (format.data[0] != '-')
+ {
+ style = cplus_demangle_name_to_style (format.data);
+ if (style == unknown_demangling)
+ {
+ printf ("FAIL at line %d: unknown demangling style %s\n",
+ lineno, format.data);
+ failures++;
+ continue;
+ }
+ }
else
- style = cplus_demangle_name_to_style (fstyle);
+ {
+ char *p;
+ char *opt;
- if (style == unknown_demangling)
+ p = format.data;
+ while (*p != '\0')
+ {
+ char c;
+
+ opt = p;
+ p += strcspn (p, " \t=");
+ c = *p;
+ *p = '\0';
+ if (strcmp (opt, "--format") == 0 && c == '=')
+ {
+ char *fstyle;
+
+ *p = c;
+ ++p;
+ fstyle = p;
+ p += strcspn (p, " \t");
+ c = *p;
+ *p = '\0';
+ style = cplus_demangle_name_to_style (fstyle);
+ if (style == unknown_demangling)
+ {
+ printf ("FAIL at line %d: unknown demangling style %s\n",
+ lineno, fstyle);
+ failures++;
+ continue;
+ }
+ }
+ else if (strcmp (opt, "--no-params") == 0)
+ no_params = 1;
+ else if (strcmp (opt, "--is-v3-ctor") == 0)
+ is_v3_ctor = 1;
+ else if (strcmp (opt, "--is-v3-dtor") == 0)
+ is_v3_dtor = 1;
+ else
+ {
+ printf ("FAIL at line %d: unrecognized option %s\n",
+ lineno, opt);
+ failures++;
+ continue;
+ }
+ *p = c;
+ p += strspn (p, " \t");
+ }
+ }
+
+ if (is_v3_ctor || is_v3_dtor)
{
- printf ("FAIL at line %d: unknown demangling style %s\n",
- lineno, fstyle);
- failures++;
+ char buf[20];
+
+ if (is_v3_ctor)
+ {
+ enum gnu_v3_ctor_kinds kc;
+
+ kc = is_gnu_v3_mangled_ctor (input.data);
+ sprintf (buf, "%d", (int) kc);
+ }
+ else
+ {
+ enum gnu_v3_dtor_kinds kd;
+
+ kd = is_gnu_v3_mangled_dtor (input.data);
+ sprintf (buf, "%d", (int) kd);
+ }
+
+ if (strcmp (buf, expect.data) != 0)
+ {
+ fail (lineno, format.data, input.data, buf, expect.data);
+ failures++;
+ }
+
continue;
}
@@ -152,18 +255,25 @@ main(argc, argv)
? strcmp (result, expect.data)
: strcmp (input.data, expect.data))
{
- printf ("\
-FAIL at line %d, style %s:\n\
-in: %s\n\
-out: %s\n\
-exp: %s\n",
- lineno, fstyle,
- input.data,
- result,
- expect.data);
+ fail (lineno, format.data, input.data, result, expect.data);
failures++;
}
free (result);
+
+ if (no_params)
+ {
+ getline (&expect);
+ result = cplus_demangle (input.data, DMGL_ANSI|DMGL_TYPES);
+
+ if (result
+ ? strcmp (result, expect.data)
+ : strcmp (input.data, expect.data))
+ {
+ fail (lineno, format.data, input.data, result, expect.data);
+ failures++;
+ }
+ free (result);
+ }
}
free (format.data);