From a01ea4d9302b71b96f4005459b32c0ba4c20f3eb Mon Sep 17 00:00:00 2001
From: ceriel <none@none>
Date: Wed, 7 Sep 1988 14:47:40 +0000
Subject: [PATCH] correct exit status

---
 util/ceg/EM_parser/common/pars.g | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/util/ceg/EM_parser/common/pars.g b/util/ceg/EM_parser/common/pars.g
index c0e485f9b..f76f4755e 100644
--- a/util/ceg/EM_parser/common/pars.g
+++ b/util/ceg/EM_parser/common/pars.g
@@ -164,14 +164,14 @@ c_table	: c_row*
 
 c_row	: %if ( strcmp( yytext, to_change) == 0)
 	  C_INSTR 		{ set_outfile( yytext); header( yytext);}
-	  [ special | simple]	{ out( "}\n\n"); exit(0);}
+	  [ special | simple]	{ out( "}\n\n"); }
 
 	| C_INSTR
 	  [ c_special | c_simple]
 
 	| %if ( strcmp( yytext, to_change) == 0)
 	  DEF_C_INSTR		{ init_defaults( yytext);}
-	  [ Dspecial | Dsimple] { handle_defaults();exit(0);}
+	  [ Dspecial | Dsimple] { handle_defaults();}
 
 	| DEF_C_INSTR
 	  [ c_special | c_simple]
@@ -210,11 +210,13 @@ c_action: CALL
 {
 
 int saved = 0, token;
+int nerrors = 0;
 
 
 LLmessage( inserted_token)
 int inserted_token;
 {
+	nerrors++;
 	if ( inserted_token == 0) {
 		fprint( STDERR, "EM_table : syntax error in line %d, >>",
 			yylineno);
@@ -222,9 +224,8 @@ int inserted_token;
 		fprint( STDERR, "<<  will be deleted!!\n");
 	}
 	else if ( inserted_token < 0) {
-		fprint(STDERR,"EM_table : stack overflow in line %d (fatal)!\n",
+		fprint(STDERR,"EM_table : syntax error in line %d, garbage at end of table\n",
 			 yylineno);
-		exit( 1);
 	}
 	else {
 		fprint( STDERR, "EM_table : syntax error in line %d, >>",
@@ -319,7 +320,7 @@ char **argv;
 			to_change = argv[2];
 			c_table();
 			fprint( STDERR, "No rule for %s\n", to_change);
-			return( 1);
+			exit( 1);
 		}
 	}
 	else {
@@ -327,7 +328,8 @@ char **argv;
 		file_header();
 	}
 	
-	return( table());
+	table();
+	exit(nerrors);
 }
 
 }