This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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 ')'


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]