Module Name:    src
Committed By:   rillig
Date:           Tue Dec 29 17:29:31 UTC 2020

Modified Files:
        src/usr.bin/xlint/lint1: cgram.y decl.c externs1.h

Log Message:
lint: split complete_tag into separate functions


To generate a diff of this commit:
cvs rdiff -u -r1.115 -r1.116 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.77 -r1.78 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.39 -r1.40 src/usr.bin/xlint/lint1/externs1.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.115 src/usr.bin/xlint/lint1/cgram.y:1.116
--- src/usr.bin/xlint/lint1/cgram.y:1.115	Tue Dec 29 16:48:53 2020
+++ src/usr.bin/xlint/lint1/cgram.y	Tue Dec 29 17:29:31 2020
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.115 2020/12/29 16:48:53 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.116 2020/12/29 17:29:31 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: cgram.y,v 1.115 2020/12/29 16:48:53 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.116 2020/12/29 17:29:31 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -705,12 +705,12 @@ struct_spec:
 	| struct struct_tag {
 		dcs->d_tagtyp = mktag($2, $1, 1, 0);
 	  } struct_declaration {
-		$$ = complete_tag(dcs->d_tagtyp, $4);
+		$$ = complete_tag_struct_or_union(dcs->d_tagtyp, $4);
 	  }
 	| struct {
 		dcs->d_tagtyp = mktag(NULL, $1, 1, 0);
 	  } struct_declaration {
-		$$ = complete_tag(dcs->d_tagtyp, $3);
+		$$ = complete_tag_struct_or_union(dcs->d_tagtyp, $3);
 	  }
 	| struct error {
 		symtyp = FVFT;
@@ -901,12 +901,12 @@ enum_spec:
 	| enum enum_tag {
 		dcs->d_tagtyp = mktag($2, ENUM, 1, 0);
 	  } enum_declaration {
-		$$ = complete_tag(dcs->d_tagtyp, $4);
+		$$ = complete_tag_enum(dcs->d_tagtyp, $4);
 	  }
 	| enum {
 		dcs->d_tagtyp = mktag(NULL, ENUM, 1, 0);
 	  } enum_declaration {
-		$$ = complete_tag(dcs->d_tagtyp, $3);
+		$$ = complete_tag_enum(dcs->d_tagtyp, $3);
 	  }
 	| enum error {
 		symtyp = FVFT;

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.77 src/usr.bin/xlint/lint1/decl.c:1.78
--- src/usr.bin/xlint/lint1/decl.c:1.77	Tue Dec 29 13:33:03 2020
+++ src/usr.bin/xlint/lint1/decl.c	Tue Dec 29 17:29:31 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.77 2020/12/29 13:33:03 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.78 2020/12/29 17:29:31 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.77 2020/12/29 13:33:03 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.78 2020/12/29 17:29:31 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -1773,10 +1773,10 @@ storage_class_name(scl_t sc)
 }
 
 /*
- * tp points to the type of the tag, fmem to the list of members/enums.
+ * tp points to the type of the tag, fmem to the list of members.
  */
 type_t *
-complete_tag(type_t *tp, sym_t *fmem)
+complete_tag_struct_or_union(type_t *tp, sym_t *fmem)
 {
 	tspec_t	t;
 	str_t	*sp;
@@ -1785,47 +1785,53 @@ complete_tag(type_t *tp, sym_t *fmem)
 
 	setcomplete(tp, 1);
 
-	if ((t = tp->t_tspec) != ENUM) {
-		align(dcs->d_stralign, 0);
-		sp = tp->t_str;
-		sp->align = dcs->d_stralign;
-		sp->memb = fmem;
-		if (tp->t_ispacked)
-			setpackedsize(tp);
-		else
-			sp->size = dcs->d_offset;
-
-		if (sp->size == 0) {
-			/* zero sized %s */
-			(void)c99ism(47, ttab[t].tt_name);
-		}
+	t = tp->t_tspec;
+	align(dcs->d_stralign, 0);
+	sp = tp->t_str;
+	sp->align = dcs->d_stralign;
+	sp->memb = fmem;
+	if (tp->t_ispacked)
+		setpackedsize(tp);
+	else
+		sp->size = dcs->d_offset;
 
-		n = 0;
-		for (mem = fmem; mem != NULL; mem = mem->s_nxt) {
-			/* bind anonymous members to the structure */
-			if (mem->s_styp == NULL) {
-				mem->s_styp = sp;
-				if (mem->s_type->t_isfield) {
-					sp->size += bitfieldsize(&mem);
-					if (mem == NULL)
-						break;
-				}
-				sp->size += tsize(mem->s_type);
+	if (sp->size == 0) {
+		/* zero sized %s */
+		(void)c99ism(47, ttab[t].tt_name);
+	}
+
+	n = 0;
+	for (mem = fmem; mem != NULL; mem = mem->s_nxt) {
+		/* bind anonymous members to the structure */
+		if (mem->s_styp == NULL) {
+			mem->s_styp = sp;
+			if (mem->s_type->t_isfield) {
+				sp->size += bitfieldsize(&mem);
+				if (mem == NULL)
+					break;
 			}
-			if (mem->s_name != unnamed)
-				n++;
+			sp->size += tsize(mem->s_type);
 		}
+		if (mem->s_name != unnamed)
+			n++;
+	}
 
-		if (n == 0 && sp->size != 0) {
-			/* %s has no named members */
-			warning(65, t == STRUCT ? "structure" : "union");
-		}
-	} else {
-		tp->t_enum->elem = fmem;
+	if (n == 0 && sp->size != 0) {
+		/* %s has no named members */
+		warning(65, t == STRUCT ? "structure" : "union");
 	}
 	return tp;
 }
 
+type_t *
+complete_tag_enum(type_t *tp, sym_t *fmem)
+{
+
+	setcomplete(tp, 1);
+	tp->t_enum->elem = fmem;
+	return tp;
+}
+
 /*
  * Processes the name of an enumerator in an enum declaration.
  *

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.39 src/usr.bin/xlint/lint1/externs1.h:1.40
--- src/usr.bin/xlint/lint1/externs1.h:1.39	Tue Dec 29 16:48:53 2020
+++ src/usr.bin/xlint/lint1/externs1.h	Tue Dec 29 17:29:31 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.39 2020/12/29 16:48:53 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.40 2020/12/29 17:29:31 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -166,7 +166,8 @@ extern	sym_t	*declarator_name(sym_t *);
 extern	sym_t	*old_style_function_name(sym_t *);
 extern	type_t	*mktag(sym_t *, tspec_t, int, int);
 extern	const	char *storage_class_name(scl_t);
-extern	type_t	*complete_tag(type_t *, sym_t *);
+extern	type_t	*complete_tag_struct_or_union(type_t *, sym_t *);
+extern	type_t	*complete_tag_enum(type_t *, sym_t *);
 extern	sym_t	*ename(sym_t *, int, int);
 extern	void	decl1ext(sym_t *, int);
 extern	void	copy_usage_info(sym_t *, sym_t *);

Reply via email to