This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[cplus] Functions which return ptr-to-function
- From: Daniel Jacobowitz <drow at mvista dot com>
- To: gdb-patches at sources dot redhat dot com
- Date: Tue, 16 Dec 2003 09:05:41 -0500
- Subject: [cplus] Functions which return ptr-to-function
Minimal fix for return function types. I have a handle on how to do this
_properly_ now after spending some time staring at the ISO C++ grammar, so
that'll be next - I believe my downfall was in trying to reject function
types.
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
2003-12-16 Daniel Jacobowitz <drow@mvista.com>
* cp-names.y (function_arglist): Call d_qualify.
(ptr_operator_seq): Reverse the list.
(decl1b): Add the declarator-id.
Index: cp-names.y
===================================================================
RCS file: /cvs/src/src/gdb/Attic/cp-names.y,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 cp-names.y
--- cp-names.y 16 Dec 2003 13:32:14 -0000 1.1.2.1
+++ cp-names.y 16 Dec 2003 14:03:14 -0000
@@ -434,11 +434,12 @@ function_args : type
}
;
-/*FIXME d_qualify */
function_arglist: '(' function_args ')' qualifiers_opt
- { $$ = d_make_comp (di, D_COMP_FUNCTION_TYPE, NULL, $2.comp); }
+ { $$ = d_make_comp (di, D_COMP_FUNCTION_TYPE, NULL, $2.comp);
+ $$ = d_qualify ($$, $4, 1); }
| '(' ')' qualifiers_opt
- { $$ = d_make_comp (di, D_COMP_FUNCTION_TYPE, NULL, NULL); }
+ { $$ = d_make_comp (di, D_COMP_FUNCTION_TYPE, NULL, NULL);
+ $$ = d_qualify ($$, $3, 1); }
;
/*
@@ -457,6 +458,7 @@ typed_function : type base_function
;
*/
+/* FIXME actions all wrong */
qualified : ext_name function_arglist
{}
| type1a ext_name function_arglist
@@ -601,10 +603,10 @@ ptr_operator : ptr_operator_1
;
ptr_operator_seq: ptr_operator
- | ptr_operator ptr_operator_seq
- { $$.comp = $2.comp;
- $$.last = $1.last;
- *$2.last = $1.comp; }
+ | ptr_operator_seq ptr_operator
+ { $$.comp = $1.comp;
+ $$.last = $2.last;
+ *$1.last = $2.comp; }
;
/* "type1" are the type productions which can legally be followed by a ::
@@ -657,13 +659,12 @@ type1b : ext_name '(' ptr_operator_seq
*$3.last = funtype; }
;
-/* FIXME ACTION */
-/* FIXME when I add the name here I get a conflict on ptr-to-members that I don't see a soln for */
-decl1b : ext_name '(' ptr_operator_seq ')' '(' function_args ')'
+/* FIXME ACTION is quite wrong; need a new type for identifiers? */
+decl1b : ext_name '(' ptr_operator_seq ext_name '(' function_args ')' ')'
{ struct d_comp *funtype;
funtype = d_make_comp (di, D_COMP_FUNCTION_TYPE, $1, $6.comp);
- $$ = $3.comp;
- *$3.last = funtype; }
+ *$3.last = funtype;
+ $$ = d_make_comp (di, D_COMP_TYPED_NAME, $4, $3.comp); }
/*
| COLONCOLON ext_name '(' ptr_operator_seq ')' '(' function_args ')'