Module Name:    src
Committed By:   rillig
Date:           Thu Jan 11 23:26:40 UTC 2024

Modified Files:
        src/usr.bin/xlint/lint1: cgram.y init.c lint1.h tree.c

Log Message:
lint: clean up enum constants for designators

In intializers and offsetof, both struct and union members are handled
in the same way, thus there is no need to distinguish them.


To generate a diff of this commit:
cvs rdiff -u -r1.479 -r1.480 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.254 -r1.255 src/usr.bin/xlint/lint1/init.c
cvs rdiff -u -r1.207 -r1.208 src/usr.bin/xlint/lint1/lint1.h
cvs rdiff -u -r1.594 -r1.595 src/usr.bin/xlint/lint1/tree.c

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.479 src/usr.bin/xlint/lint1/cgram.y:1.480
--- src/usr.bin/xlint/lint1/cgram.y:1.479	Thu Jan 11 23:06:19 2024
+++ src/usr.bin/xlint/lint1/cgram.y	Thu Jan 11 23:26:39 2024
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.479 2024/01/11 23:06:19 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.480 2024/01/11 23:26:39 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.479 2024/01/11 23:06:19 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.480 2024/01/11 23:26:39 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -512,17 +512,17 @@ primary_expression:
 member_designator:
 	identifier {
 		$$ = (designation) { .dn_len = 0 };
-		designation_push(&$$, DK_STRUCT /* or union */, getsym($1), 0);
+		designation_push(&$$, DK_MEMBER, getsym($1), 0);
 	}
 |	member_designator T_LBRACK range T_RBRACK {
 		$$ = $1;
-		designation_push(&$$, DK_ARRAY, NULL, $3.lo);
+		designation_push(&$$, DK_SUBSCRIPT, NULL, $3.lo);
 	}
 |	member_designator T_POINT {
 		set_symtyp(FMEMBER);
 	} identifier {
 		$$ = $1;
-		designation_push(&$$, DK_STRUCT /* or union */, getsym($4), 0);
+		designation_push(&$$, DK_MEMBER, getsym($4), 0);
 	}
 ;
 

Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.254 src/usr.bin/xlint/lint1/init.c:1.255
--- src/usr.bin/xlint/lint1/init.c:1.254	Tue Jan  9 23:46:54 2024
+++ src/usr.bin/xlint/lint1/init.c	Thu Jan 11 23:26:39 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: init.c,v 1.254 2024/01/09 23:46:54 rillig Exp $	*/
+/*	$NetBSD: init.c,v 1.255 2024/01/11 23:26:39 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: init.c,v 1.254 2024/01/09 23:46:54 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.255 2024/01/11 23:26:39 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -311,7 +311,7 @@ designator_type(const designator *dr, co
 	switch (tp->t_tspec) {
 	case STRUCT:
 	case UNION:
-		if (dr->dr_kind != DK_STRUCT && dr->dr_kind != DK_UNION) {
+		if (dr->dr_kind != DK_MEMBER) {
 			const sym_t *fmem = first_named_member(tp);
 			/* syntax error '%s' */
 			error(249, "designator '[...]' is only for arrays");
@@ -321,7 +321,7 @@ designator_type(const designator *dr, co
 		lint_assert(dr->dr_member != NULL);
 		return dr->dr_member->s_type;
 	case ARRAY:
-		if (dr->dr_kind != DK_ARRAY) {
+		if (dr->dr_kind != DK_SUBSCRIPT) {
 			/* syntax error '%s' */
 			error(249,
 			    "designator '.member' is only for struct/union");
@@ -344,13 +344,13 @@ static void
 designator_debug(const designator *dr)
 {
 
-	if (dr->dr_kind == DK_STRUCT || dr->dr_kind == DK_UNION) {
+	if (dr->dr_kind == DK_MEMBER) {
 		lint_assert(dr->dr_subscript == 0);
 		debug_printf(".%s",
 		    dr->dr_member != NULL
 			? dr->dr_member->s_name
 			: "<end>");
-	} else if (dr->dr_kind == DK_ARRAY) {
+	} else if (dr->dr_kind == DK_SUBSCRIPT) {
 		lint_assert(dr->dr_member == NULL);
 		debug_printf("[%zu]", dr->dr_subscript);
 	} else {
@@ -421,10 +421,9 @@ designation_descend(designation *dn, con
 		const sym_t *member = first_named_member(tp);
 		if (member == NULL)
 			return false;
-		designation_push(dn,
-		    tp->t_tspec == STRUCT ? DK_STRUCT : DK_UNION, member, 0);
+		designation_push(dn, DK_MEMBER, member, 0);
 	} else if (tp->t_tspec == ARRAY)
-		designation_push(dn, DK_ARRAY, NULL, 0);
+		designation_push(dn, DK_SUBSCRIPT, NULL, 0);
 	else
 		designation_push(dn, DK_SCALAR, NULL, 0);
 	return true;
@@ -550,10 +549,10 @@ static void
 warn_too_many_initializers(designator_kind kind, const type_t *tp)
 {
 
-	if (kind == DK_STRUCT || kind == DK_UNION) {
+	if (kind == DK_MEMBER) {
 		/* too many struct/union initializers */
 		error(172);
-	} else if (kind == DK_ARRAY) {
+	} else if (kind == DK_SUBSCRIPT) {
 		lint_assert(tp->t_tspec == ARRAY);
 		lint_assert(!tp->t_incomplete_array);
 		/* too many array initializers, expected %d */
@@ -816,8 +815,7 @@ proceed:;
 		return;
 	}
 
-	designation_push(&bl->bl_designation,
-	    tp->t_tspec == STRUCT ? DK_STRUCT : DK_UNION, member, 0);
+	designation_push(&bl->bl_designation, DK_MEMBER, member, 0);
 }
 
 static void
@@ -847,7 +845,7 @@ initialization_add_designator_subscript(
 	if (tp->t_incomplete_array && subscript > in->in_max_subscript)
 		in->in_max_subscript = subscript;
 
-	designation_push(&bl->bl_designation, DK_ARRAY, NULL, subscript);
+	designation_push(&bl->bl_designation, DK_SUBSCRIPT, NULL, subscript);
 }
 
 /*

Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.207 src/usr.bin/xlint/lint1/lint1.h:1.208
--- src/usr.bin/xlint/lint1/lint1.h:1.207	Tue Jan  9 23:46:54 2024
+++ src/usr.bin/xlint/lint1/lint1.h	Thu Jan 11 23:26:39 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.207 2024/01/09 23:46:54 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.208 2024/01/11 23:26:39 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -481,12 +481,11 @@ typedef struct {
 } range_t;
 
 typedef enum designator_kind {
-	DK_STRUCT,		/* .member */
-	DK_UNION,		/* .member */
-	DK_ARRAY,		/* [subscript] */
-	/* TODO: actually necessary? */
+	DK_MEMBER,		/* .member */
+	DK_SUBSCRIPT,		/* [subscript] */
 	DK_SCALAR		/* no textual representation, not generated by
-				 * the parser */
+				 * the parser; used for scalar initializer
+				 * expressions surrounded by braces */
 } designator_kind;
 
 /*
@@ -497,8 +496,8 @@ typedef enum designator_kind {
  */
 typedef struct designator {
 	designator_kind	dr_kind;
-	const sym_t	*dr_member;	/* for DK_STRUCT and DK_UNION */
-	size_t		dr_subscript;	/* for DK_ARRAY */
+	const sym_t	*dr_member;	/* for DK_MEMBER */
+	size_t		dr_subscript;	/* for DK_SUBSCRIPT */
 	bool		dr_done;
 } designator;
 

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.594 src/usr.bin/xlint/lint1/tree.c:1.595
--- src/usr.bin/xlint/lint1/tree.c:1.594	Thu Jan 11 23:06:19 2024
+++ src/usr.bin/xlint/lint1/tree.c	Thu Jan 11 23:26:39 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.594 2024/01/11 23:06:19 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.595 2024/01/11 23:26:39 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.594 2024/01/11 23:06:19 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.595 2024/01/11 23:26:39 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -3900,7 +3900,7 @@ build_offsetof(const type_t *tp, designa
 	}
 	for (size_t i = 0; i < dn.dn_len; i++) {
 		const designator *dr = dn.dn_items + i;
-		if (dr->dr_kind == DK_ARRAY) {
+		if (dr->dr_kind == DK_SUBSCRIPT) {
 			if (tp->t_tspec != ARRAY)
 				goto proceed;	/* silent error */
 			tp = tp->t_subt;

Reply via email to