+ }
+ | TOKEN PUBLIC sigtype {
+ if(strcmp($<id>1,"first")==0)
+ $<sigtype>$ = SIGNAL_FIRST_METHOD;
+ else if(strcmp($<id>1,"last")==0)
+ $<sigtype>$ = SIGNAL_LAST_METHOD;
+ else {
+ yyerror(_("signal must be 'first' or 'last'"));
+ g_free($<id>1);
+ YYERROR;
+ }
+ g_free($<id>1);
+ }
+ | PUBLIC sigtype {
+ $<sigtype>$ = SIGNAL_LAST_METHOD;
+ }
+ | sigtype {
+ $<sigtype>$ = SIGNAL_LAST_METHOD;
+ }
+ ;
+
+sigtype: TOKEN '(' tokenlist ')' {
+ gtktypes = g_list_prepend(gtktypes,$<id>1);
+ }
+ ;
+
+tokenlist: tokenlist ',' TOKEN {
+ gtktypes = g_list_append(gtktypes,$<id>3);
+ }
+ | TOKEN {
+ gtktypes = g_list_append(gtktypes,$<id>1);
+ }
+ ;
+
+codenocode: '{' CCODE { $<cbuf>$=$<cbuf>2; }
+ | ';' { $<cbuf>$ = NULL; }
+ ;
+
+/*here CCODE will include the ending '}' */
+method: SIGNAL fullsigtype type TOKEN '(' funcargs ')' onerror codenocode {
+ if(!has_self) {
+ yyerror(_("signal without 'self' as "