diff --git a/src/language.yacc b/src/language.yacc
index 964394c46436a8122b03cf7f3c2c13c7627ff2d5..69c3138a5a917fbe81e6639aa18f12c6f95e9a14 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -188,7 +188,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.171 2000/03/30 08:43:07 hubbe Exp $");
+RCSID("$Id: language.yacc,v 1.172 2000/03/30 18:59:32 grubba Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -308,7 +308,10 @@ int yylex(YYSTYPE *yylval);
 %type <number> modifier
 %type <number> modifier_list
 %type <number> modifiers
+%type <number> function_type_list
+%type <number> function_type_list2
 %type <number> optional_dot_dot_dot
+%type <number> optional_comma
 %type <number> optional_stars
 
 %type <str> magic_identifiers
@@ -1236,6 +1239,10 @@ opt_function_type: '('
   {
     if ($4)
     {
+      if (!$3) {
+	/* FIXME: Should this be a syntax error or not? */
+	push_type(T_MIXED);
+      }
       push_type(T_MANY);
       type_stack_reverse();
     }else{
@@ -1264,11 +1271,11 @@ opt_function_type: '('
   }
   ;
 
-function_type_list: /* Empty */ optional_comma
-  | function_type_list2 optional_comma
+function_type_list: /* Empty */ optional_comma { $$=0; }
+  | function_type_list2 optional_comma { $$=!$2; }
   ;
 
-function_type_list2: type7 
+function_type_list2: type7 { $$=1; }
   | function_type_list2 ','
   {
     type_stack_reverse();
@@ -2146,7 +2153,7 @@ assign: F_AND_EQ { $$=F_AND_EQ; }
   | F_DIV_EQ { $$=F_DIV_EQ; }
   ;
 
-optional_comma: | ',' ;
+optional_comma: { $$=0; } | ',' { $$=1; };
 
 expr_list: { $$=0; }
   | expr_list2 optional_comma