aboutsummaryrefslogtreecommitdiff
path: root/libiberty/cp-demangle.c
AgeCommit message (Collapse)AuthorFilesLines
2009-03-23pt.c (make_fnparm_pack): Split out from...Jason Merrill1-3/+21
* gcc/cp/pt.c (make_fnparm_pack): Split out from... (instantiate_decl): ...here. (tsubst_pack_expansion): Handle being called in a late-specified return type. * libiberty/cp-demangle.c (d_expression): Handle pack expansion. (d_find_pack): Handle DEMANGLE_COMPONENT_FUNCTION_PARAM. (d_print_subexpr): Don't wrap function parms in (). (d_print_comp) [DEMANGLE_COMPONENT_PACK_EXPANSION]: Handle not finding a pack. From-SVN: r145013
2009-03-17decl.c (grokfndecl): Set DECL_CONTEXT on parms.Jason Merrill1-8/+63
cp/: * decl.c (grokfndecl): Set DECL_CONTEXT on parms. (duplicate_decls): Adjust DECL_CONTEXT of newdecl's parms. * pt.c (check_explicit_specialization): Likewise. (tsubst_copy) [PARM_DECL]: Return a dummy parm if we don't have a local specialization. * tree.c (cp_tree_equal) [PARM_DECL]: Check type and index, not name. * decl2.c (parm_index): New fn. * semantics.c (finish_decltype_type): Don't use describable_type. * mangle.c (write_expression): Likewise. Mangle ALIGNOF_EXPR. Give a sorry for unsupported codes rather than crash. Mangle conversions with other than 1 operand. New mangling for PARM_DECL. * operators.def (ALIGNOF_EXPR): Mangle as az. * include/demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_FUNCTION_PARAM. * libiberty/cp-demangle.c (d_make_function_param): new fn. (cplus_demangle_mangled_name): Work around abi v2 bug. (d_expr_primary): Likewise. (cplus_demangle_operators): Add alignof ops. (d_expression): Handle function parameters and conversions with other than 1 operand. (d_print_comp): Handle function parameters. Fix bug with function used in type of function. From-SVN: r144924
2009-01-07* cp-demangle.c (d_expression): Remove mangling for zero-op casts.Jason Merrill1-12/+2
From-SVN: r143161
2009-01-06cp-demangle.c (cplus_demangle_type): Return NULL if the character following ↵Ben Elliston1-0/+3
a 'D' cannot be recognised. * cp-demangle.c (cplus_demangle_type): Return NULL if the character following a 'D' cannot be recognised. From-SVN: r143098
2008-12-18re PR c++/38561 (Revision 142799 may cause C++ demangle failures)Jason Merrill1-11/+14
PR c++/38561 * cp-demangle.c (d_expression, d_print_comp): Revert cast changes. From-SVN: r142814
2008-12-17semantics.c (describable_type): New function.Jason Merrill1-15/+19
gcc/cp: * semantics.c (describable_type): New function. (finish_decltype_type): Use it for dependent exprs. * cp-tree.h: Declare it. * mangle.c (write_type) [DECLTYPE_TYPE]: Set skip_evaluation. (write_expression): If skip_evaluation, use type stubs. * tree.c (cp_tree_equal): Handle PARM_DECLs from different declarations of a function. * init.c (build_new): Do auto deduction if type is describable. * decl.c (cp_finish_decl): Likewise. * parser.c (cp_parser_omp_for_loop): Likewise. gcc/testsuite: * g++.dg/cpp0x/auto6.C: Test more stuff. * g++.dg/cpp0x/auto12.C: New test. libiberty: * cp-demangle.c (d_expression): Handle rvalue stubs too. [DEMANGLE_COMPONENT_CAST]: Update mangling. (d_print_comp): Avoid extra ", " with empty template argument packs. Remove handling for obsolete T() mangling. From-SVN: r142799
2008-12-10re PR c++/35319 (ICE throwing fixed-point types)Jason Merrill1-0/+32
PR c++/35319 * mangle.c (write_builtin_type): Add mangling for decimal floating point and fixed point types. (write_type): Pass FIXED_POINT_TYPE along. * cp-demangle.c (cplus_demangle_type): Support fixed-point types. (d_print_comp, d_dump): Likewise. From-SVN: r142661
2008-10-06PR c++/37376, other mangling issuesJason Merrill1-73/+225
gcc/cp/: PR c++/37376, other mangling issues * mangle.c (write_type): Update TYPE_PACK_EXPANSION mangling. (write_member_name): Break out from... (write_expression): ...here. Handle dependent COMPONENT_REF. (write_template_arg): Wrap an argument pack in 'I'/'E'. (write_builtin_type): Update char16/32_t mangling. (write_nested_name, write_prefix): Don't forget template args for typename types. * operators.def: Add ARROW_EXPR, update COMPONENT_REF and EXPR_PACK_EXPANSION. libstdc++-v3/: * config/abi/pre/gnu.ver: Update char16/32_t manglings. include/: * demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_PACK_EXPANSION. libiberty/: * cp-demangle.c (struct d_print_info): Add pack_index. (d_dump): Add DEMANGLE_COMPONENT_PACK_EXPANSION. (d_make_comp): Likewise. DEMANGLE_COMPONENT_ARGLIST and DEMANGLE_COMPONENT_TEMPLATE_ARGLIST can have two null args. (cplus_demangle_builtin_types): Add char16/32_t. (cplus_demangle_type): Recognize them. (d_template_args): Handle empty argument packs. (d_template_arg): Handle argument packs. (d_expression): Handle dependent name. (d_index_template_argument): New fn. (d_lookup_template_argument): New fn. (d_find_pack, d_pack_length): New fn. (d_print_subexpr): Split out... (d_print_comp): ...from here. Use d_*_template_argument. Handle empty arg lists. Support pack expansions. * cp-demangle.h (D_BUILTIN_TYPE_COUNT): Increase to 32. From-SVN: r140916
2008-09-09demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_DECLTYPE.Jason Merrill1-9/+125
* include/demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_DECLTYPE. * libiberty/cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_DECLTYPE. (d_make_comp): Likewise. (cplus_demangle_type): Handle decltype and DFP types. (cplus_demangle_operators): Call operator takes 2 args. (cplus_demangle_builtin_types): Add DFP types. (d_exprlist): New fn. (d_expression): Handle parm placeholders, T() and calls. (d_print_comp): Handle decltype, T() and calls. * libiberty/testsuite/demangle-expected: Test the above. From-SVN: r140162
2008-03-31Update copyright date.Ian Lance Taylor1-1/+2
From-SVN: r133762
2008-03-31cp-demangle.c (d_substitution): Correct overflow check to avoid ↵Ian Lance Taylor1-5/+8
-fstrict-overflow optimizations. * cp-demangle.c (d_substitution): Correct overflow check to avoid -fstrict-overflow optimizations. From-SVN: r133761
2008-01-27demangle.h (demangle_component_type): Add DEMANGLE_COMPONENT_JAVA_RESOURCE...David Daney1-0/+125
include/ 2008-01-26 David Daney <ddaney@avtrex.com> * demangle.h (demangle_component_type): Add DEMANGLE_COMPONENT_JAVA_RESOURCE, DEMANGLE_COMPONENT_COMPOUND_NAME, and DEMANGLE_COMPONENT_CHARACTER as new enum values. (demangle_component): Add struct s_character to union u. libiberty/ 2008-01-26 David Daney <ddaney@avtrex.com> * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE, DEMANGLE_COMPONENT_COMPOUND_NAME, and DEMANGLE_COMPONENT_CHARACTER cases. (d_make_comp): Handle DEMANGLE_COMPONENT_COMPOUND_NAME and DEMANGLE_COMPONENT_JAVA_RESOURCE cases. (d_make_character): New function. (d_java_resource): Same. (d_special_name): Handle "Gr" case. (d_print_comp): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE, DEMANGLE_COMPONENT_COMPOUND_NAME, and DEMANGLE_COMPONENT_CHARACTER cases. * testsuite/demangle-expected: Add test for java resource name mangling. From-SVN: r131883
2007-08-31mangle.c (write_type): Change mangling of rvalue reference from `RR' to `O'.Doug Gregor1-1/+17
2007-08-31 Douglas Gregor <doug.gregor@gmail.com> * mangle.c (write_type): Change mangling of rvalue reference from `RR' to `O'. 2007-08-31 Douglas Gregor <doug.gregor@gmail.com> * demangle.h (enum demangle_component_type): Add DEMANGLE_COMPONENT_RVALUE_REFERENCE. 2007-08-31 Douglas Gregor <doug.gregor@gmail.com> * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_RVALUE_REFERENCE. (d_make_comp): Ditto. (cplus_demangle_type): Ditto. (d_print_comp): Ditto. (d_print_mod): Ditto. (d_print_function_type): Ditto. 2007-08-31 Douglas Gregor <doug.gregor@gmail.com> * testsuite/abi/demangle/cxx0x/rref.cc: New. From-SVN: r127999
2007-08-01* cp-demangle.c (d_print_comp): Guard against null.Michael Snyder1-0/+6
From-SVN: r127139
2007-05-06Index: libiberty/ChangeLogGeoffrey Keating1-1/+21
2007-05-04 Geoffrey Keating <geoffk@apple.com> * cp-demangle.c (d_name): Detect local-source-name. (d_prefix): Likewise. (d_unqualified_name): Implement local-source-name. Index: gcc/cp/ChangeLog 2007-05-04 Geoffrey Keating <geoffk@apple.com> PR 31775 * mangle.c (write_mangled_name): Mangle static variable names. (write_unqualified_name): Use local-source-name for namespace-scope static variables. Index: gcc/testsuite/ChangeLog 2007-05-04 Geoffrey Keating <geoffk@apple.com> PR 31775 * g++.dg/other/nested-extern.cc: New. * g++.dg/other/nested-extern-1.C: New. * g++.dg/other/nested-extern-2.C: New. From-SVN: r124467
2007-03-16cp-demangle.c (d_encoding): Exit early on error.Geoffrey Keating1-2/+4
* cp-demangle.c (d_encoding): Exit early on error. (d_pointer_to_member_type): Exit early if cplus_demangle_type returns NULL. (cplus_demangle_type): Likewise. * testsuite/demangle-expected: New testcase. From-SVN: r122972
2007-01-29demangle.h: New cplus_demangle_print_callback...Simon Baldwin1-312/+444
include/: * demangle.h: New cplus_demangle_print_callback, cplus_demangle_v3_callback, and java_demangle_v3_callback function prototypes, and demangle_callbackref type definition. libiberty/: * cp-demangle.h (cplus_demangle_operators): External definition suppressed if not building for libstdc++. * cp-demangle.c (__gcclibcxx_demangle_callback): Augmented interface to demangling, provides a malloc-less version of __cxa_demangle. (cplus_demangle_print_callback): Public callback version of cplus_demangle_print. (struct d_growable_string): New growable string structure. (d_growable_string_init): New function, provides support for growable strings separate from print info. (d_growable_string_resize): Likewise. (d_growable_string_append_buffer): Likewise. (d_growable_string_callback_adapter):): Likewise. (d_print_init): New print info initialization function. (d_print_error): Macro replace by inline function. (d_print_saw_error): Likewise. (d_append_char): Likewise. (d_append_buffer): Likewise. (d_append_string): New inline function, replaces the d_append_string_constant macro. (d_flush_buffer): New function, flushes buffer to callback. (d_demangle_callback, is_ctor_or_dtor): Malloc-based fallback for unsupported dynamic arrays replaced by alloca(). (d_demangle): Return string length estimating removed. (d_dump): Moved error case handling from call site into function. (d_print_resize): Function removed. (d_print_append_char): Likewise. (d_print_append_buffer): Likewise. (d_print_error): Likewise. (d_print_comp): Added special case handling for Java arrays. (java_demangle_v3): Removed string post-processing for Java arrays, now replaced by special case handling in d_print_comp. (cplus_demangle_v3_callback): Augmented interface to demangling, provides a malloc-less version of cplus_demangle_v3. (java_demangle_v3_callback): Augmented interface to demangling, provides a malloc-less version of java_demangle_v3. From-SVN: r121305
2006-12-21cp-demangle.h: Add comment explaining what to do to avoid overrunning string.Geoffrey Keating1-29/+28
* cp-demangle.h: Add comment explaining what to do to avoid overrunning string. (d_check_char): New. (d_next_char): Don't advance past trailing '\0'. * cp-demangle.c (cplus_demangle_mangled_name): Use d_check_char. (d_nested_name): Likewise. (d_special_name): Likewise. (d_call_offset): Likewise. (d_function_type): Likewise. (d_array_type): Likewise. (d_pointer_to_member_type): Likewise. (d_template_param): Likewise. (d_template_args): Likewise. (d_template_arg): Likewise. (d_expr_primary): Likewise. (d_local_name): Likewise. (d_substitution): Likewise. (d_ctor_dtor_name): Use d_advance rather than d_next_char. * testsuite/test-demangle.c: Include sys/mman.h. (MAP_ANONYMOUS): Define. (protect_end): New. (main): Use protect_end. * testsuite/demangle-expected: Add testcases for overrunning the end of the string. From-SVN: r120097
2006-09-22re PR other/29176 (Seg fault in demangler)Ian Lance Taylor1-0/+2
PR other/29176 * cp-demangle.c (d_substitution): Check for overflow when computing substitution index. From-SVN: r117144
2006-08-27re PR other/28797 (Problems with demangling (__cxa_demangle()))Ian Lance Taylor1-1/+10
PR other/28797 * cp-demangle.c (d_pointer_to_member_type): Do add a substitution for a qualified member which is not a function. * testsuite/demangle-expected: Add test case. From-SVN: r116493
2005-12-11Fixes java/PR9861Terry Laurenzo1-6/+23
From-SVN: r108374
2005-07-01re PR other/22268 (libiberty demanger crashes on (invalid) mangled name)Ian Lance Taylor1-1/+5
PR other/22268 * cp-demangle.c (d_expr_primary): Don't run off the end of the string while looking for the end of a literal value. * testsuite/demangle-expected: Add test case. From-SVN: r101506
2005-05-25demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New.Richard Henderson1-0/+14
include/ * demangle.h (DEMANGLE_COMPONENT_HIDDEN_ALIAS): New. libiberty/ * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_HIDDEN_ALIAS. (d_make_comp, d_print_comp): Likewise. (d_special_name): Generate one. * testsuite/demangle-expected: Add a hidden alias test. From-SVN: r100174
2005-05-24libiberty.h (ACONCAT): Properly cast value of alloca().Gabriel Dos Reis1-7/+7
include/ 2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net> * libiberty.h (ACONCAT): Properly cast value of alloca(). * ansidecl.h (ATTRIBUTE_UNUSED_LABEL): Don't define if __cplusplus. libiberty/ 2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net> * configure.ac: Check declarations for calloc(), getenv(), malloc(), realloc() and sbrk(). * config.in: Regenerate. * configure: Likewise. * alloca.c (C_alloca): Change "new" to "new_storage". Use XNEWVEC instead of xmalloc. * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc. * concat.c (liiberty_concat_ptr): Surround definition with an extern "C" block, if __cplusplus. (concat): Use XNEWVEC instead of xmalloc. (reconcat): Likewise. * cp-demangle.c (struct d_print_template): Rename member "template" to "template_decl". Adjust use throughout the file. (d_print_resize): Properly cast return value of realloc(). (cplus_demangle_print): Same for malloc(). (d_demangle): Likewise. * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter "typename" to "type_name". * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc(). (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc(). (demangle_template_value_parm): Likewise. (demangle_template): Likewise. (recursively_demangle): Likewise. (do_hpacc_template_literal): Likewise. (do_arg): Likewise. (remember_type): Likewise. (remember_Ktype): Likewise. (register_Btype): Likewise. (string_need): Use XRESIZEVEC instead of xrealloc(). * dyn-string.c (dyn_string_init): Use XNEWVEC. (dyn_string_new): Use XNEW. (dyn_string_resize): Use XRESIZEVEC. * fnmatch.c (fnmatch): Rename local variable "not" to "negate". * getopt.c (getenv): Declare only if !__cplusplus and !getenv. Otherwise include <stdlib.h>. (exchange): Cast return value of malloc(). * hashtab.c (htab_size): Define as both macro and non-inline function. (htab_elements): Likewise. * getpwd.c (getpwd): Use XNEWVEC. (htab_create_alloc_ex): Use C90 prototype-style. * lrealpath.c (lrealpath): Appropriately cast return value of malloc(). * make-relative-prefix.c (save_string): Likewise. * make-temp-file.c (try_dir): Rename from "try". Adjust use in the file. (choose_tmpdir): Use XNEWVEC. * mkstemps.c (mkstemps): Rename parameter "template" to "pattern". * pex-common.c (pex_init_common): Use XNEW. (pex_add_remove): Use XRESIZEVEC. (pex_run): Likewise. (pex_get_status_and_time): Likewise. * pex-djgpp.c (pex_djgpp_exec_child): Likewise. * pex-msdos.c (pex_init): Use XNEW. (pex_msdos_exec_child): Likewise. (pex_msdos_exec_child): Use XRESIZEVEC. * pex-unix.c (pex_wait): Use XNEW. * pex-win32.c (fix_argv): Use XNEWVEC. * pexecute.c (pwait): Likewise. * setenv.c (setenv): Properly cast return value of malloc(). * sigsetmask.c (sigsetmask): Rename local variables "old" and "new" to "old_sig" and "new_sig". * sort.c (main): Use XNEWVEC. * spaces.c (spaces): Cast return value of malloc(). * strndup.c (strndup): Likewise. * ternary.c (ternary_insert): Use XNEW. * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration with an extern "C" block if __cplusplus. * xstrdup.c (xstrdup): Cast return value of memcpy(). * xstrerror.c (strerror): Enclose declaration in an extern "C" block if __cplusplus. * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy(). From-SVN: r100115
2005-05-10Update the address and phone number of the FSF organization.Nick Clifton1-1/+1
From-SVN: r99519
2005-04-02* cp-demangle.c: Update copyright.Ian Lance Taylor1-1/+1
From-SVN: r97452
2005-03-28xregex2.h (_RE_ARGS): Remove definition and uses.Gabriel Dos Reis1-1/+1
include/ 2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net> * xregex2.h (_RE_ARGS): Remove definition and uses. libiberty/ 2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net> Convert libiberty to use ISO C prototype style 7/n. * regex.c (PARAMS): Remove definition. (PREFIX): Unconditionaly define using ISO C ## operator. (init_syntax_once, extract_number, extract_number_and_incr, print_fastmap, print_partial_compiled_pattern, print_compiled_pattern, print_double_string, printchar, convert_mbs_to_wcs, re_set_syntax, regex_grow_registers, regex_compile, store_op1, store_op2, insert_op1, insert_op2, at_begline_loc_p, at_endline_p, group_in_compile_stack, insert_space, wcs_compile_range, byte_compile_range, truncate_wchar, re_compile_fastmap, re_compile_fastmap, re_set_registers, re_search, re_search_2, re_search_3, re_match, re_match_2, count_mbs_length, wcs_re_match_2_internal, byte_re_match_2_internal, group_match_null_string_p, alt_match_null_string_p, common_op_match_null_string_p, bcmp_translate, re_compile_pattern, re_comp, re_exec, regcomp, regexec, regerror, regfree): Use ISO C prototype style. * partition.c: (elem_compare): Likewise. * cp-demangle.c (print_usage): Likewise. From-SVN: r97129
2005-03-26demangle.h: Remove uses of PARAMS.Gabriel Dos Reis1-313/+171
include/ 2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net> * demangle.h: Remove uses of PARAMS. * libiberty.h (ANSI_PROTOTYPES): Remove guard since ANSI_PROTOTYPES is always assumed. Remove uses of PARAMS throughout. libiberty/ 2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net> Convert libiberty to use ISO C prototype style 2/n. * cp-demangle.h: Remove uses of PARAMS. * cp-demangle.c: Likewise. (d_dump, cplus_demangle_fill_name, cplus_demangle_fill_extended_operator, cplus_demangle_fill_ctor, cplus_demangle_fill_dtor, d_make_empty, d_make_comp, d_make_name, d_make_builtin_type, d_make_operator, d_make_extended_operator, d_make_ctor, d_make_dtor, d_make_template_param, d_make_sub, cplus_demangle_mangled_name, has_return_type, is_ctor_dtor_or_conversion, d_encoding, d_name, d_nested_name, d_prefix, d_unqualified_name, d_source_name, d_number, d_identifier, d_operator_name, d_special_name, d_call_offset, d_ctor_dtor_name, cplus_demangle_type, d_cv_qualifiers, d_function_type, d_bare_function_type, d_class_enum_type, d_array_type, d_pointer_to_member_type, d_template_param, d_template_args, d_template_arg, d_expression, d_expr_primary, d_local_name, d_discriminator, d_add_substitution, d_substitution, d_print_resize, d_print_append_char, d_print_append_buffer, d_print_error, cplus_demangle_print, d_print_comp, d_print_java_identifier, d_print_mod_list, d_print_mod, d_print_function_type, d_print_array_type, d_print_expr_op, d_print_cast, cplus_demangle_init_info, d_demangle, __cxa_demangle, cplus_demangle_v3, java_demangle_v3, is_ctor_or_dtor, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor, print_usage, main): 2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net> Convert libiberty to ISO C prototype style 1/n. * _doprnt.c: Remove conditional #include <varargs.h> on ANSI_PROTOTYPES as the latter is always assumed. (_doprnt, checkit, main): Use ISO C prototype. * alloca.c (find_stack_direction, C_alloca): Use ISO C prototype. * argv.c: Remove conditional #includes on ANSI_PROTOTYPES. (dupargv, freeargv, buildargv, main): Use ISO C prototype. * atexit.c (atexit): Likewise * asprintf.c: Remove conditional include on ANSI_PROTOTYPES. (asprintf): Use ISO C prototype. * basename.c (basename): Likewise * bcmp.c (bcmp): Likewise. * bcopy.c (bcopy): Likewise. * bzero.c (bzero): Likewise. * bsearch.c (bsearch): Likewise. Improve const-correctness. * choose-temp.c (choose_temp_base): Likewise. * calloc.c: Remove conditional #include on ANSI_PROTOTYPES. (calloc): Use ISO C prototype. * clock.c (clock): Likewise. * concat.c: Remove conditional #include on ANSI_PROTOTYPES. (vconcat_length, vconcat_copy, concat_length, concat_copy, concat_copy2, concat, reconcat, main): Use ISO C prototype. * copysign.c (copysign): Likewise. From-SVN: r97085
2005-02-13cp-demangle.c (__cxa_demangle): Change resolution of ambiguous arguments.Jason Merrill1-15/+0
* cp-demangle.c (__cxa_demangle): Change resolution of ambiguous arguments. From-SVN: r94980
2004-11-24re PR other/18623 (4 * libiberty local variables set but never used)Ian Lance Taylor1-6/+3
PR other/18623 * cp-demangle.c (d_call_offset): Remove useless local variables offset and virtual_offset. * cplus-dem.c (ada_demangle): Remove useless local variable at_start_name. (demangle_template): Remove useless local variable start. From-SVN: r91133
2004-06-28re PR c++/16240 (g++ generates incorrect mangled name)Ian Lance Taylor1-0/+2
PR other/16240 * cp-demangle.c (d_expr_primary): Check for a failure return from cplus_demangle_type. From-SVN: r83791
2004-02-25cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED...Ian Lance Taylor1-79/+106
* cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED, D_PRINT_UNSIGNED_LONG, D_PRINT_LONG_LONG, D_PRINT_UNSIGNED_LONG_LONG, D_PRINT_FLOAT. * cp-demangle.c (cplus_demangle_builtin_types): Change char and short types to D_PRINT_DEFAULT. Change other integer types to use new D_PRINT_* values where appropriate. Change float types to D_PRINT_FLOAT. (d_print_comp) [LITERAL, LITERAL_NEG]: Handle new D_PRINT_* values. * testsuite/demangle-expected: Adjust two test cases. * cp-demangle.c (d_print_function_type): Print a space before the parenthesis around the function type in more cases. * testsuite/demangle-expected: Adjust one test case. From-SVN: r78421
2004-02-25cp-demangle.c (d_print_comp): Don't emit extra parentheses around a cast.Ian Lance Taylor1-3/+1
* cp-demangle.c (d_print_comp) [UNARY]: Don't emit extra parentheses around a cast. * testsuite/demangle-expected: Adjust two test cases to match new output. From-SVN: r78416
2004-02-24* cp-demangle.c (__cxa_demangle): Pass DMGL_PARAMS to d_demangle.Ian Lance Taylor1-1/+1
From-SVN: r78355
2004-02-24cp-demangle.c (d_print_comp): Don't push more than one of the same ↵Ian Lance Taylor1-21/+86
CV-qualifier on the top of the stack. * cp-demangle.c (d_print_comp) [RESTRICT, VOLATILE, CONST]: Don't push more than one of the same CV-qualifier on the top of the stack. (d_print_comp) [ARRAY_TYPE]: If the array itself is CV-qualified, move the CV-qualifiers to apply to the element type instead. (d_print_array_type): When checking the modifiers, keep looking past ones which have been printed already. * testsuite/demangle-expected: Add three test cases. From-SVN: r78354
2004-02-24cp-demangle.c (__cxa_demangle): Adjust last patch to handle empty string ↵Ian Lance Taylor1-2/+2
correctly. * cp-demangle.c (__cxa_demangle): Adjust last patch to handle empty string correctly. From-SVN: r78353
2004-02-24cp-demangle.c (__cxa_demangle): It is not an error if status is not NULL.Ian Lance Taylor1-11/+46
2004-02-23 Ian Lance Taylor <ian@wasabisystems.com> * cp-demangle.c (__cxa_demangle): It is not an error if status is not NULL. It is an error if the mangled name is the same as a built-in type name. (main): If IN_GLIBCPP_V3 is defined, test __cxa_demangle rather than cplus_demangle_v3. From-SVN: r78348
2004-01-13cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE takes ↵Daniel Jacobowitz1-1/+1
two parameters. * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE takes two parameters. * cp-demint.c (cplus_demangle_fill_component): Likewise. From-SVN: r75819
2004-01-12demangle.h (enum demangle_component_type): Define.Ian Lance Taylor1-845/+845
* demangle.h (enum demangle_component_type): Define. (struct demangle_operator_info): Declare. (struct demangle_builtin_type_info): Declare. (struct demangle_component): Define. (cplus_demangle_fill_component): Declare. (cplus_demangle_fill_name): Declare. (cplus_demangle_fill_builtin_type): Declare. (cplus_demangle_fill_operator): Declare. (cplus_demangle_fill_extended_operator): Declare. (cplus_demangle_fill_ctor, cplus_demangle_fill_dtor): Declare. (cplus_demangle_v3_components): Declare. (cplus_demangle_print): Declare. * 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. From-SVN: r75748
2004-01-02cp-demangle.c (d_encoding): When DMGL_PARAMS is not set...Ian Lance Taylor1-1/+18
* 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. From-SVN: r75336
2003-12-26* cp-demangle.c (is_ctor_or_dtor): Fix error in last change.Kaveh R. Ghazi1-2/+1
From-SVN: r75030
2003-12-22cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports dynamic arrays.Ian Lance Taylor1-291/+474
* 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. From-SVN: r74933
2003-12-20cp-demangle.c (d_identifier): In Java mode, skip an optional '$' after the ↵Ian Lance Taylor1-0/+7
identifier. * cp-demangle.c (d_identifier): In Java mode, skip an optional '$' after the identifier. * testsuite/demangle-expected: Add test case. From-SVN: r74885
2003-12-19re PR c++/13447 (Another demangler problem with method cv-qualifiers)Ian Lance Taylor1-10/+78
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. From-SVN: r74850
2003-12-15cp-demangle.c (d_print_function_type): Print the function parameters with no ↵Ian Lance Taylor1-1/+8
modifiers. * cp-demangle.c (d_print_function_type): Print the function parameters with no modifiers. * testsuite/demangle-expected: Add test case. From-SVN: r74652
2003-12-15cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't expect that ↵Ian Lance Taylor1-31/+33
we've read the entire string. * 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. From-SVN: r74651
2003-12-15Fix handling of constructor/destructor of standard substitution:Ian Lance Taylor1-32/+102
* cp-demangle.c (struct d_standard_sub_info): Define. (d_substitution): Add prefix argument. Change all callers. Rework handling of standard substitutions to print full name when qualifying a constructor/destructor, or when DMGL_VERBOSE is set. * testsuite/demangle-expected: Add test case. Fix handling of negative literal constants: * cp-demangle.c (enum d_comp_type): Add D_COMP_LITERAL_NEG. (d_dump, d_make_comp): Handle D_COMP_LITERAL_NEG. (d_expr_primary): Use D_COMP_LITERAL_NEG for a negative number. (d_print_comp): Handle D_COMP_LITERAL_NEG. * testsuite/demangle-expected: Add test case. From-SVN: r74632
2003-12-04re PR other/13304 (demangler bad output, "operator<<" insteads of "operator< <")Ian Lance Taylor1-125/+230
* cp-demangle.c (IS_UPPER, IS_LOWER): Define. (d_last_char): Define new macro. (d_make_name): Reject an empty name. (d_prefix, d_unqualified_name, d_type): Use new IS_* macros. (d_substitution, d_print_identifier): Likewise. (d_print_comp) [D_COMP_OPERATOR]: Likewise. (d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro. (d_print_mod) Use new d_last_char macro. (d_print_cast): Use new d_last_char macro. (is_ctor_or_dtor): Don't leak memory. Fix handling of member function modifiers: * cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS, D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS. (d_dump): Dump new d_comp_type values. (d_make_comp): Accept new d_comp_type values. (has_return_type): Only accept _THIS variants of qualifiers. (d_encoding): Without DMGL_PARAMS, only remove _THIS variants of qualifiers. (d_cv_qualifiers): Add member_fn parameter. Change all callers. (d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing qualifiers and printing them at the end, add _THIS qualifiers to the modifier list. (d_print_comp) [D_COMP_*_THIS]: New cases. (d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of qualifiers. (d_print_mod_list): Add suffix parameter. Change all callers. Keep walking the list even if the current modifier has been printed. (d_print_mod): Handle new _THIS qualifiers. (d_print_function_type): Handle new _THIS qualifiers when deciding whether to print a parenthesis. Put a space before the parenthesis in some cases. Call d_print_mod_list again at the end, passing suffix as 1. (is_ctor_or_dtor): Look for new _THIS qualifiers. * testsuite/demangle-expected: Add test case. Fix for PR gcc/13304: * cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character before the '<' is itself a '<', insert a space. (d_print_cast): Likewise. * testsuite/demangle-expected: Add test case. Fix for PR gcc/13244: * cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression which uses the '>' operator in an extra layer of parens. * testsuite/demangle-expected: Add test case. From-SVN: r74290
2003-12-01cp-demangle.c (d_demangle): Only return success if we consumed the entire ↵Ian Lance Taylor1-2/+7
demangled string. * cp-demangle.c (d_demangle): Only return success if we consumed the entire demangled string. (is_ctor_or_dtor): Likewise. From-SVN: r74129
2003-11-26cp-demangle.c (struct d_print_mod): Add templates field.Ian Lance Taylor1-71/+142
* cp-demangle.c (struct d_print_mod): Add templates field. (d_make_builtin_type): Check for NULL type. (d_make_extended_operator): Check for NULL name. (d_make_ctor, d_make_dtor): Likewise. (d_mangled_name): Add top_level parameter. Change all callers. (d_encoding): If DMGL_PARAMS is not set, strip off initial CV-qualifiers. (d_type): Check some return values we rely on. (d_bare_function_type, d_array_type): Likewise. (d_pointer_to_member_type, d_template_args): Likewise. (d_add_substitution): Fail if argument is NULL. (d_print_resize): Check whether buf is NULL. (d_print_comp): Save current templates list with each modifier. Don't pass the modifier list down when printing a template. (d_print_cast): Don't pass the modifier list down when printing a template. (d_print_mod_list): Temporarily set templates list while printing a modifier. (d_print_mod): Check that buf is not NULL before using it. (d_print_function_type): Print parens if there is no modifier. (d_init_info): Permit as many substitutions as there are characters in the mangled name. * testsuite/demangle-expected: Add two new test cases. From-SVN: r73970