+
+returnvals: TOKEN retcode {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_return_value($<id>1, $<id>2)) {
+ g_free($<id>1);
+ g_free($<id>2);
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free($<id>1);
+ }
+ | TOKEN retcode TOKEN retcode {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ if(!set_return_value($<id>1, $<id>2)) {
+ g_free($<id>1); g_free($<id>2);
+ g_free($<id>3); g_free($<id>4);
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ if(!set_return_value($<id>3, $<id>4)) {
+ onerror = defreturn = NULL;
+ g_free($<id>1); g_free($<id>2);
+ g_free($<id>3); g_free($<id>4);
+ yyerror(_("parse error"));
+ YYERROR;
+ }
+ g_free($<id>1);
+ g_free($<id>3);
+ }
+ | {
+ g_free(onerror); onerror = NULL;
+ g_free(defreturn); defreturn = NULL;
+ }
+ ;
+
+retcode: numtok { $<id>$ = $<id>1; }
+ | '{' CCODE {