Преглед на файлове

more additions for lint

dick преди 33 години
родител
ревизия
4a7ef15df2

+ 3 - 0
lang/cem/cemcom.ansi/arith.c

@@ -254,6 +254,9 @@ any2arith(expp, oper)
 		break;
 	case ENUM:
 #ifndef	LINT
+		/*	we do not want this conversion for lint, since we
+			want to keep enums and ints separate
+		*/
 		int2int(expp, int_type);
 #endif	LINT
 		break;

+ 0 - 2
lang/cem/cemcom.ansi/code.c

@@ -342,7 +342,6 @@ end_proc(fbytes)
 	}
 	C_df_ilb(return_label);
 	prc_exit();
-#ifndef	LINT
 	if (return_expr_occurred) {
 		if (func_res_label != 0)	{
 			C_lae_dlb(func_res_label, (arith)0);
@@ -352,7 +351,6 @@ end_proc(fbytes)
 			C_ret(func_size);
 	}
 	else	C_ret((arith) 0);
-#endif	LINT
 
 	/* getting the number of "local" bytes is posponed until here,
 	   because copying the function result in "func_res_label" may

+ 0 - 4
lang/cem/cemcom.ansi/error.c

@@ -146,8 +146,6 @@ debug(va_alist)
 	va_start(ap);
 	{
 		_error(DO_DEBUG, dot.tk_file, dot.tk_line, ap);
-		/* _error(DO_DEBUG, NILEXPR, ap);
-		*/
 	}
 	va_end(ap);
 }
@@ -162,8 +160,6 @@ warning(va_alist)
 	va_start(ap);
 	{
 		_error(WARNING, dot.tk_file, dot.tk_line, ap);
-		/* _error(WARNING, NILEXPR, ap);
-		*/
 	}
 	va_end(ap);
 }

+ 1 - 0
lang/cem/cemcom.ansi/idf.c

@@ -35,6 +35,7 @@ int idfsize = IDFSIZE;
 extern char options[];
 extern arith NewLocal();
 extern char *symbol2str();
+extern char *sprint();
 
 char sp_occurred[SP_TOTAL+1];	/* indicate occurrence of special id	*/
 

+ 2 - 0
lang/cem/cemcom.ansi/init.c

@@ -15,6 +15,8 @@
 #include	"macro.h"
 #include	"idf.h"
 
+extern char *sprint();
+
 struct mkey	{
 	char *mk_reserved;
 	int mk_key;

+ 2 - 0
lang/cem/cemcom.ansi/l_em.h

@@ -28,6 +28,7 @@
 #define	C_lin(c)
 #define	C_loi(c)
 #define	C_lol(c)
+#define	C_ret(c)
 #define	C_sdl(c)
 #define	C_sti(c)
 #define	C_stl(c)
@@ -72,4 +73,5 @@
 #define	C_ms_gto()
 #define	C_ms_par(b)
 #define	C_ms_reg(o,s,t,c)
+#define	C_ms_err()
 

+ 12 - 7
lang/cem/cemcom.ansi/proto.c

@@ -56,10 +56,10 @@ add_proto(pl, ds, dc, lvl)
 	int lvl;
 {
 	/*	The full typed identifier or abstract type, described
-		by the structures decspecs and declarator are turned
+		by the structures decspecs and declarator is turned
 		a into parameter type list structure.
 		The parameters will be declared at level L_FORMAL2,
-		later on it's decided whether they were prototypes
+		later on it will decided whether they were prototypes
 		or actual declarations.
 	*/
 	register struct idf *idf = dc->dc_idf;
@@ -132,7 +132,7 @@ add_proto(pl, ds, dc, lvl)
 		newdef->df_file = idf->id_file;
 		newdef->df_line = idf->id_line;
 #ifdef LINT
-		newdef->df_set = (type->tp_fund == ARRAY);
+		newdef->df_set = 0;
 		/* newdef->df_firstbrace = 0; */
 #endif
 		/*	We can't put the idf onto the stack, since these kinds
@@ -168,8 +168,8 @@ add_proto(pl, ds, dc, lvl)
 
 struct tag *
 gettag(tp, idpp)
-struct type *tp;
-struct idf **idpp;
+	struct type *tp;
+	struct idf **idpp;
 {
 	struct tag *tg = (struct tag *)0;
 	register int fund = tp->tp_fund;
@@ -242,6 +242,11 @@ declare_protos(dc)
 				continue;
 			}
 
+			/*	Postponed storage class checking.
+			*/
+			if (def->df_sc == 0)
+				error("illegal storage class in parameter declaration");
+
 			def->df_level = L_FORMAL2;
 			stack_idf(pl->pl_idf, stl);
 			pl = pl->next;
@@ -312,7 +317,7 @@ update_proto(tp, otp)
  * remove them from the symbol-table
  */
 remove_proto_tag(tp)
-struct type *tp;
+	struct type *tp;
 {
 	register struct idf *ident;
 	register struct tag *tgp, **tgpp;
@@ -384,7 +389,7 @@ call_proto(expp)
 {
 	/*	If the function specified by (*expp)->OP_LEFT has a prototype,
 		the parameters are converted according the rules specified in
-		par. 3.3.2.2. E.i. the parameters are converted to the prototype
+		par. 3.3.2.2. I.e., the parameters are converted to the prototype
 		counter parts as if by assignment. For the parameters falling
 		under ellipsis clause the old parameters conversion stuff
 		applies.