diff --git a/src/language.yacc b/src/language.yacc
index d252b2d7c1cd19a22bd1c2cad993cc026d4a46e6..ad9135cd90a025468db15210a76d0ed6d4d170f6 100644
--- a/src/language.yacc
+++ b/src/language.yacc
@@ -156,7 +156,7 @@
 /* This is the grammar definition of Pike. */
 
 #include "global.h"
-RCSID("$Id: language.yacc,v 1.40 1997/04/23 04:14:30 grubba Exp $");
+RCSID("$Id: language.yacc,v 1.41 1997/04/23 20:11:49 hubbe Exp $");
 #ifdef HAVE_MEMORY_H
 #include <memory.h>
 #endif
@@ -285,6 +285,7 @@ int yylex(YYSTYPE *yylval);
 
 %type <n> assoc_pair
 %type <n> block
+%type <n> failsafe_block
 %type <n> block_or_semi
 %type <n> break
 %type <n> case
@@ -592,6 +593,7 @@ new_arg_name: type optional_dot_dot_dot optional_identifier
 
 func_args: '(' arguments ')' { $$=$2; }
          | '(' error ')' { $$=0; yyerrok; }
+         | error { $$=0; yyerrok; }
          ;
 
 arguments: /* empty */ optional_comma { $$=0; }
@@ -803,6 +805,11 @@ block:'{'
   }
   ;
 
+failsafe_block: block
+              | error { $$=0; }
+              ;
+  
+
 local_name_list: new_local_name
   | local_name_list ',' new_local_name { $$=mknode(F_ARG_LIST,$1,$3); }
   ;
@@ -845,7 +852,7 @@ lambda: F_LAMBDA
       free_string(local_variables->current_return_type);
     copy_shared_string(local_variables->current_return_type,any_type_string);
   }
-  func_args block
+  func_args failsafe_block
   {
     struct pike_string *type;
     char buf[40];