mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-12 20:58:48 +00:00
PR symtab/11462:
* c-exp.y (exp): Add new productions for destructors after '.' and '->'. (write_destructor_name): New function. gdb/testsuite * gdb.cp/m-static.exp: Add destructor-printing tests.
This commit is contained in:
parent
fce632b6dc
commit
24955f6344
@ -1,3 +1,10 @@
|
||||
2013-03-25 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR symtab/11462:
|
||||
* c-exp.y (exp): Add new productions for destructors after '.' and
|
||||
'->'.
|
||||
(write_destructor_name): New function.
|
||||
|
||||
2013-03-25 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR c++/9197:
|
||||
|
43
gdb/c-exp.y
43
gdb/c-exp.y
@ -167,6 +167,7 @@ void yyerror (char *);
|
||||
static int parse_number (char *, int, int, YYSTYPE *);
|
||||
static struct stoken operator_stoken (const char *);
|
||||
static void check_parameter_typelist (VEC (type_ptr) *);
|
||||
static void write_destructor_name (struct stoken);
|
||||
|
||||
static void c_print_token (FILE *file, int type, YYSTYPE value);
|
||||
#define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
|
||||
@ -372,6 +373,19 @@ exp : exp ARROW COMPLETE
|
||||
write_exp_elt_opcode (STRUCTOP_PTR); }
|
||||
;
|
||||
|
||||
exp : exp ARROW '~' name
|
||||
{ write_exp_elt_opcode (STRUCTOP_PTR);
|
||||
write_destructor_name ($4);
|
||||
write_exp_elt_opcode (STRUCTOP_PTR); }
|
||||
;
|
||||
|
||||
exp : exp ARROW '~' name COMPLETE
|
||||
{ mark_struct_expression ();
|
||||
write_exp_elt_opcode (STRUCTOP_PTR);
|
||||
write_destructor_name ($4);
|
||||
write_exp_elt_opcode (STRUCTOP_PTR); }
|
||||
;
|
||||
|
||||
exp : exp ARROW qualified_name
|
||||
{ /* exp->type::name becomes exp->*(&type::name) */
|
||||
/* Note: this doesn't work if name is a
|
||||
@ -407,6 +421,19 @@ exp : exp '.' COMPLETE
|
||||
write_exp_elt_opcode (STRUCTOP_STRUCT); }
|
||||
;
|
||||
|
||||
exp : exp '.' '~' name
|
||||
{ write_exp_elt_opcode (STRUCTOP_STRUCT);
|
||||
write_destructor_name ($4);
|
||||
write_exp_elt_opcode (STRUCTOP_STRUCT); }
|
||||
;
|
||||
|
||||
exp : exp '.' '~' name COMPLETE
|
||||
{ mark_struct_expression ();
|
||||
write_exp_elt_opcode (STRUCTOP_STRUCT);
|
||||
write_destructor_name ($4);
|
||||
write_exp_elt_opcode (STRUCTOP_STRUCT); }
|
||||
;
|
||||
|
||||
exp : exp '.' qualified_name
|
||||
{ /* exp.type::name becomes exp.*(&type::name) */
|
||||
/* Note: this doesn't work if name is a
|
||||
@ -1592,6 +1619,22 @@ name_not_typename : NAME
|
||||
|
||||
%%
|
||||
|
||||
/* Like write_exp_string, but prepends a '~'. */
|
||||
|
||||
static void
|
||||
write_destructor_name (struct stoken token)
|
||||
{
|
||||
char *copy = alloca (token.length + 1);
|
||||
|
||||
copy[0] = '~';
|
||||
memcpy (©[1], token.ptr, token.length);
|
||||
|
||||
token.ptr = copy;
|
||||
++token.length;
|
||||
|
||||
write_exp_string (token);
|
||||
}
|
||||
|
||||
/* Returns a stoken of the operator name given by OP (which does not
|
||||
include the string "operator"). */
|
||||
static struct stoken
|
||||
|
@ -1,3 +1,7 @@
|
||||
2013-03-25 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.cp/m-static.exp: Add destructor-printing tests.
|
||||
|
||||
2013-03-25 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.cp/m-static.exp: Add constructor ptype tests.
|
||||
|
@ -79,6 +79,13 @@ gdb_test "ptype single_constructor::single_constructor" \
|
||||
{type = void \(single_constructor \* const\)} \
|
||||
"simple object class, ptype constructor"
|
||||
|
||||
gdb_test "print test1.~gnu_obj_1" \
|
||||
{ = {void \(gnu_obj_1 \* const, int\)} 0x[0-9a-f]+ <gnu_obj_1::~gnu_obj_1\(\)>} \
|
||||
"simple object instance, print destructor"
|
||||
gdb_test "ptype test1.~gnu_obj_1" \
|
||||
{type = void \(gnu_obj_1 \* const, int\)} \
|
||||
"simple object instance, ptype destructor"
|
||||
|
||||
gdb_test "print test1.'~gnu_obj_1'" \
|
||||
{ = {void \(gnu_obj_1 \*( const)?, int\)} 0x[0-9a-f]+ <gnu_obj_1::~gnu_obj_1\(\)>} \
|
||||
"simple object instance, print quoted destructor"
|
||||
|
Loading…
x
Reference in New Issue
Block a user