ソースを参照

squeezing for MINIX

eck 35 年 前
コミット
62424b9629

+ 0 - 1
lang/cem/cemcom.ansi/.distr

@@ -11,7 +11,6 @@ LintPars
 align.h
 arith.c
 arith.h
-asm.c
 assert.h
 atw.h
 blocks.c

+ 4 - 17
lang/cem/cemcom.ansi/LLlex.c

@@ -581,7 +581,7 @@ quoted(ch)
 
 			for (;;) {
 				ch = GetChar();
-				if (vch = val_in_base(ch, 16), vch == -1)
+				if (vch = hex_val(ch), vch == -1)
 					break;
 				hex = hex * 16 + vch;
 			}
@@ -605,22 +605,12 @@ quoted(ch)
 
 
 int
-val_in_base(ch, base)
+hex_val(ch)
 	register int ch;
 {
-	switch (base) {
-	case 8:
-		return (is_dig(ch) && ch < '9') ? ch - '0' : -1;
-	case 10:
-		return is_dig(ch) ? ch - '0' : -1;
-	case 16:
-		return is_dig(ch) ? ch - '0'
+	return is_dig(ch) ? ch - '0'
 			: is_hex(ch) ? (ch - 'a' + 10) & 017
 			: -1;
-	default:
-		fatal("(val_in_base) illegal base value %d", base);
-		/* NOTREACHED */
-	}
 }
 
 
@@ -763,10 +753,7 @@ struct token *ptok;
 	ubound = max_arith / (base / 2);
 
 	while (is_hex(*cp)) {
-		dig = is_dig(*cp) ? *cp - '0'
-				    : (( *cp >= 'A' && *cp <= 'F' ? *cp - 'A'
-								: *cp - 'a')
-					+ 10) ;
+		dig = hex_val(*cp);
 		if (dig >= base) {
 			malformed++;			/* ignore */
 		}

+ 0 - 1
lang/cem/cemcom.ansi/LLlex.h

@@ -50,7 +50,6 @@ extern int UnknownIdIsZero;	/* "LLlex.c"	*/
 #endif NOPP
 extern int EoiForNewline;	/* "LLlex.c"	*/
 extern int AccFileSpecifier;	/* "LLlex.c"	*/
-extern int SkipEscNewline;	/* "LLlex.c"	*/
 extern int File_Inserted;	/* "LLlex.c"	*/
 
 extern int NoUnstack;		/* buffer.c	*/

+ 5 - 8
lang/cem/cemcom.ansi/ch3.c

@@ -342,14 +342,11 @@ equal_type(tp, otp, check_qual)
 {
 	if (tp == otp)
 		return 1;
-	if (!tp || !otp)
-		return 0;
-
-	if (tp->tp_fund != otp->tp_fund)
-		return 0;
-	if (tp->tp_unsigned != otp->tp_unsigned)
-		return 0;
-	if (tp->tp_align != otp->tp_align)
+	if (!tp
+	    || !otp
+	    || (tp->tp_fund != otp->tp_fund)
+	    || (tp->tp_unsigned != otp->tp_unsigned)
+	    || (tp->tp_align != otp->tp_align))
 		return 0;
 	if (tp->tp_fund != ARRAY /* && tp->tp_fund != STRUCT */ ) {	/* UNION ??? */
 		if (tp->tp_size != otp->tp_size)

+ 1 - 2
lang/cem/cemcom.ansi/class.h

@@ -41,8 +41,7 @@
 #define	is_oct(ch)	(isoct[ch])
 #define	is_dig(ch)	(isdig[ch])
 #define	is_hex(ch)	(ishex[ch])
-#define	is_suf(ch)	(issuf[ch])
 #define	is_wsp(ch)	(iswsp[ch])
 
 extern char tkclass[];
-extern char inidf[], isoct[], isdig[], ishex[], issuf[], iswsp[];
+extern char inidf[], isoct[], isdig[], ishex[], iswsp[];

+ 26 - 31
lang/cem/cemcom.ansi/declar.g

@@ -110,19 +110,22 @@ other_specifier(register struct decspecs *ds;)
 	}
 |
 	/*	This qualifier applies to the top type.
-		E.g. const float * is a pointer to const float.
+		E.g. volatile float * is a pointer to volatile float.
 	*/
-	[ VOLATILE | CONST ]
-	{	if (DOT == VOLATILE) {
-			if (ds->ds_typequal & TQ_VOLATILE)
-				error("repeated type qualifier");
-			ds->ds_typequal |= TQ_VOLATILE;
-		}
-		if (DOT == CONST) {
-			if (ds->ds_typequal & TQ_CONST)
-				error("repeated type qualifier");
-			ds->ds_typequal |= TQ_CONST;
-		}
+	VOLATILE
+	{	if (ds->ds_typequal & TQ_VOLATILE)
+			error("repeated type qualifier");
+		ds->ds_typequal |= TQ_VOLATILE;
+	}
+|
+	/*	This qualifier applies to the top type.
+		E.g. volatile float * is a pointer to volatile float.
+	*/
+	CONST
+	{
+		if (ds->ds_typequal & TQ_CONST)
+			error("repeated type qualifier");
+		ds->ds_typequal |= TQ_CONST;
 	}
 ;
 
@@ -692,28 +695,20 @@ pointer(int *qual;)
 /* 3.5.4 */
 type_qualifier_list(int *qual;)
 :
-[
-	[ VOLATILE | CONST ]
-	{ *qual = (DOT == VOLATILE) ? TQ_VOLATILE : TQ_CONST; }
+	{ *qual = 0; }
 	[
-		[ VOLATILE | CONST ]
-		{	if (DOT == VOLATILE) {
-				if (*qual & TQ_VOLATILE)
-					error("repeated type qualifier");
-				*qual |= TQ_VOLATILE;
-			}
-			if (DOT == CONST) {
-				if (*qual & TQ_CONST)
-					error("repeated type qualifier");
-				*qual |= TQ_CONST;
-			}
+		VOLATILE
+		{	if (*qual & TQ_VOLATILE)
+				error("repeated type qualifier");
+			*qual |= TQ_VOLATILE;
+		}
+	|
+		CONST
+		{	if (*qual & TQ_CONST)
+				error("repeated type qualifier");
+			*qual |= TQ_CONST;
 		}
-					
 	]*
-|
-	empty
-	{ *qual = 0; }
-]
 ;
 
 empty:

+ 25 - 25
lang/cem/cemcom.ansi/domacro.c

@@ -52,7 +52,7 @@ GetIdentifier(skiponerr)
 	ReplaceMacros = 1;
 	UnknownIdIsZero = tmp;
 	if (tok != IDENTIFIER) {
-		if (skiponerr && tok != EOI) SkipToNewLine(0);
+		if (skiponerr && tok != EOI) SkipToNewLine();
 		return (struct idf *)0;
 	}
 	return tk.tk_idf;
@@ -108,7 +108,7 @@ domacro()
 			*/
 			if (GetToken(&tk) != INTEGER) {
 				error("bad #line syntax");
-				SkipToNewLine(0);
+				SkipToNewLine();
 			}
 			else
 				do_line((unsigned int)tk.tk_ival);
@@ -125,7 +125,7 @@ domacro()
 		default:
 			/* invalid word seen after the '#'	*/
 			lexerror("%s: unknown control", tk.tk_idf->id_text);
-			SkipToNewLine(0);
+			SkipToNewLine();
 		}
 		break;
 	case INTEGER:		/* # <integer> [<filespecifier>]?	*/
@@ -135,7 +135,7 @@ domacro()
 		break;
 	default:	/* invalid token following '#'		*/
 		lexerror("illegal # line");
-		SkipToNewLine(0);
+		SkipToNewLine();
 	}
 	EoiForNewline = 0;
 }
@@ -167,14 +167,14 @@ int to_endif;
 				return;
 			}
 			UnGetChar();
-			SkipToNewLine(0);
+			SkipToNewLine();
 			continue;
 		}
 		ReplaceMacros = 0;
 		toknum = GetToken(&tk);
 		ReplaceMacros = 1;
 		if (toknum != IDENTIFIER) {
-			SkipToNewLine(0);
+			SkipToNewLine();
 			continue;
 		}
 		/*	an IDENTIFIER: look for #if, #ifdef and #ifndef
@@ -184,13 +184,13 @@ int to_endif;
 		*/
 		switch(tk.tk_idf->id_resmac) {
 		default:
-			SkipToNewLine(0);
+			SkipToNewLine();
 			break;
 		case K_IF:
 		case K_IFDEF:
 		case K_IFNDEF:
 			push_if();
-			SkipToNewLine(0);
+			SkipToNewLine();
 			break;
 		case K_ELIF:
 			if (ifstack[nestlevel])
@@ -203,30 +203,30 @@ int to_endif;
 					return;
 				}
 			}
-			else SkipToNewLine(0);	/* otherwise done in ifexpr() */
+			else SkipToNewLine();	/* otherwise done in ifexpr() */
 			break;
 		case K_ELSE:
 			if (ifstack[nestlevel])
 				lexerror("#else after #else");
 			++(ifstack[nestlevel]);
 			if (!to_endif && nestlevel == skiplevel) {
-				if (SkipToNewLine(1))
+				if (SkipToNewLine())
 					strict("garbage following #else");
 				NoUnstack--;
 				return;
 			}
-			else SkipToNewLine(0);
+			else SkipToNewLine();
 			break;
 		case K_ENDIF:
 			ASSERT(nestlevel > nestlow);
 			if (nestlevel == skiplevel) {
-				if (SkipToNewLine(1))
+				if (SkipToNewLine())
 					strict("garbage following #endif");
 				nestlevel--;
 				NoUnstack--;
 				return;
 			}
-			else SkipToNewLine(0);
+			else SkipToNewLine();
 			nestlevel--;
 			break;
 		}
@@ -273,7 +273,7 @@ do_include()
 		filenm = (char *)0;
 	}
 	AccFileSpecifier = 0;
-	SkipToNewLine(0);
+	SkipToNewLine();
 	inctable[0] = WorkingDir;
 	if (filenm) {
 		if (!InsertFile(filenm, &inctable[tok==FILESPECIFIER],&result)){
@@ -313,7 +313,7 @@ do_define()
 	ch = GetChar();
 	if (ch == '(') {
 		if ((nformals = getparams(formals, parbuf)) == -1) {
-			SkipToNewLine(0);
+			SkipToNewLine();
 			return;	/* an error occurred	*/
 		}
 		ch = GetChar();
@@ -348,12 +348,12 @@ do_elif()
 {
 	if (nestlevel <= nestlow) {
 		lexerror("#elif without corresponding #if");
-		SkipToNewLine(0);
+		SkipToNewLine();
 	}
 	else {		/* restart at this level as if a #if is detected.  */
 		if (ifstack[nestlevel]) {
 			lexerror("#elif after #else");
-			SkipToNewLine(0);
+			SkipToNewLine();
 		}
 		nestlevel--;
 		push_if();
@@ -363,7 +363,7 @@ do_elif()
 
 do_else()
 {
-	if (SkipToNewLine(1))
+	if (SkipToNewLine())
 		strict("garbage following #else");
 	if (nestlevel <= nestlow)
 		lexerror("#else without corresponding #if");
@@ -378,7 +378,7 @@ do_else()
 
 do_endif()
 {
-	if (SkipToNewLine(1))
+	if (SkipToNewLine())
 		strict("garbage following #endif");
 	if (nestlevel <= nestlow)	{
 		lexerror("#endif without corresponding #if");
@@ -409,7 +409,7 @@ do_ifdef(how)
 	if (how ^ (id && id->id_macro != 0))
 		skip_block(0);
 	else if (id)
-		SkipToNewLine(0);
+		SkipToNewLine();
 }
 
 do_undef()
@@ -427,7 +427,7 @@ do_undef()
 				id->id_macro = (struct macro *) 0;
 			}
 		} /* else: don't complain */
-		SkipToNewLine(0);
+		SkipToNewLine();
 	}
 	else
 		lexerror("illegal #undef construction");
@@ -707,7 +707,7 @@ GetIdentifier(skiponerr)
 
 	tok = GetToken(&tk);
 	if (tok != IDENTIFIER) {
-		if (skiponerr && tok != EOI) SkipToNewLine(0);
+		if (skiponerr && tok != EOI) SkipToNewLine();
 		return (struct idf *)0;
 	}
 	return tk.tk_idf;
@@ -723,7 +723,7 @@ domacro()
 		if (strcmp(tk.tk_idf->id_text, "line")
 		    && strcmp(tk.tk_idf->id_text, "pragma")) {
 			error("illegal # line");
-			SkipToNewLine(0);
+			SkipToNewLine();
 			return;
 		}
 		else if ( !strcmp(tk.tk_idf->id_text, "pragma")) {
@@ -735,7 +735,7 @@ domacro()
 	}
 	if (tok != INTEGER) {
 		error("illegal # line");
-		SkipToNewLine(0);
+		SkipToNewLine();
 		return;
 	}
 	do_line((unsigned int) tk.tk_ival);
@@ -752,5 +752,5 @@ do_line(l)
 	LineNumber = l - 1;	/* the number of the next input line */
 	if (GetToken(&tk) == STRING)	/* is there a filespecifier? */
 		FileName = tk.tk_bts;
-	SkipToNewLine(0);
+	SkipToNewLine();
 }

+ 1 - 1
lang/cem/cemcom.ansi/ival.g

@@ -577,7 +577,7 @@ ch_array(tpp, ex)
 	}
 	/* throw out the characters of the already prepared string	*/
 	s = Malloc((unsigned) (length));
-	clear(s, length);
+	clear(s, (unsigned)length);
 	i = length <= ex->SG_LEN ? length : ex->SG_LEN;
 	to = s; from = ex->SG_VALUE;
 	while(--i >= 0) {

+ 1 - 1
lang/cem/cemcom.ansi/pragma.c

@@ -58,6 +58,6 @@ do_pragma()
 		default:
 			break;
 		}
-		SkipToNewLine(0);
+		SkipToNewLine();
 	}
 }

+ 5 - 6
lang/cem/cemcom.ansi/skip.c

@@ -59,11 +59,10 @@ skipspaces(ch, skipnl)
 }
 #endif NOPP
 
-SkipToNewLine(garbage)
-	int garbage;
+SkipToNewLine()
 {
 	register int ch;
-	register int pstrict = 0;
+	register int garbage = 0;
 
 	while ((ch = GetChar()) != '\n') {
 		if (ch == '/') {
@@ -76,9 +75,9 @@ SkipToNewLine(garbage)
 				continue;
 			}
 		}
-		if (garbage && !is_wsp(ch))
-			pstrict = 1;
+		if (!is_wsp(ch))
+			garbage = 1;
 	}
 	++LineNumber;
-	return pstrict;
+	return garbage;
 }