Module Name:    src
Committed By:   rillig
Date:           Fri Jul 28 21:50:03 UTC 2023

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

Log Message:
lint: extract 'vararg' and 'prototype' flags from global 'dcs'

These flags are only relevant for parameter lists, so add a separate
type for it.

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.465 -r1.466 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.55 -r1.56 src/usr.bin/xlint/lint1/debug.c
cvs rdiff -u -r1.362 -r1.363 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.198 -r1.199 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.195 -r1.196 src/usr.bin/xlint/lint1/lint1.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.465 src/usr.bin/xlint/lint1/cgram.y:1.466
--- src/usr.bin/xlint/lint1/cgram.y:1.465	Sat Jul 15 21:47:35 2023
+++ src/usr.bin/xlint/lint1/cgram.y	Fri Jul 28 21:50:03 2023
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.465 2023/07/15 21:47:35 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.466 2023/07/28 21:50:03 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.465 2023/07/15 21:47:35 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.466 2023/07/28 21:50:03 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -143,6 +143,7 @@ is_either(const char *s, const char *a, 
 	tspec_t	y_tspec;
 	type_qualifiers y_type_qualifiers;
 	function_specifier y_function_specifier;
+	struct parameter_list y_parameter_list;
 	type_t	*y_type;
 	tnode_t	*y_tnode;
 	range_t	y_range;
@@ -351,7 +352,7 @@ is_either(const char *s, const char *a, 
 %type	<y_sym>		notype_param_declarator
 %type	<y_sym>		direct_param_declarator
 %type	<y_sym>		direct_notype_param_declarator
-%type	<y_sym>		param_list
+%type	<y_parameter_list>	param_list
 /* No type for id_list_lparen. */
 /* No type for abstract_decl_lparen. */
 %type	<y_array_size>	array_size_opt
@@ -361,10 +362,10 @@ is_either(const char *s, const char *a, 
 %type	<y_sym>		abstract_declaration
 %type	<y_sym>		abstract_declarator
 %type	<y_sym>		direct_abstract_declarator
-%type	<y_sym>		abstract_decl_param_list
+%type	<y_parameter_list>	abstract_decl_param_list
 /* No type for abstract_decl_lparen. */
-%type	<y_sym>		vararg_parameter_type_list
-%type	<y_sym>		parameter_type_list
+%type	<y_parameter_list>	vararg_parameter_type_list
+%type	<y_parameter_list>	parameter_type_list
 %type	<y_sym>		parameter_declaration
 /* No type for braced_initializer. */
 /* No type for initializer. */
@@ -1411,7 +1412,7 @@ direct_notype_param_declarator:
 
 param_list:
 	id_list_lparen identifier_list T_RPAREN {
-		$$ = $2;
+		$$ = (struct parameter_list){ .first = $2 };
 	}
 |	abstract_decl_param_list
 ;
@@ -1539,15 +1540,15 @@ direct_abstract_declarator:
 
 abstract_decl_param_list:	/* specific to lint */
 	abstract_decl_lparen T_RPAREN type_attribute_opt {
-		$$ = NULL;
+		$$ = (struct parameter_list){ .first = NULL };
 	}
 |	abstract_decl_lparen vararg_parameter_type_list T_RPAREN
 	    type_attribute_opt {
-		dcs->d_prototype = true;
 		$$ = $2;
+		$$.prototype = true;
 	}
 |	abstract_decl_lparen error T_RPAREN type_attribute_opt {
-		$$ = NULL;
+		$$ = (struct parameter_list){ .first = NULL };
 	}
 ;
 
@@ -1561,8 +1562,8 @@ abstract_decl_lparen:		/* specific to li
 vararg_parameter_type_list:	/* specific to lint */
 	parameter_type_list
 |	parameter_type_list T_COMMA T_ELLIPSIS {
-		dcs->d_vararg = true;
 		$$ = $1;
+		$$.vararg = true;
 	}
 |	T_ELLIPSIS {
 		/* TODO: C99 6.7.5 makes this an error as well. */
@@ -1573,16 +1574,18 @@ vararg_parameter_type_list:	/* specific 
 			/* ANSI C requires formal parameter before '...' */
 			warning(84);
 		}
-		dcs->d_vararg = true;
-		$$ = NULL;
+		$$ = (struct parameter_list){ .vararg = true };
 	}
 ;
 
 /* XXX: C99 6.7.5 defines the same name, but it looks different. */
 parameter_type_list:
-	parameter_declaration
+	parameter_declaration {
+		$$ = (struct parameter_list){ .first = $1 };
+	}
 |	parameter_type_list T_COMMA parameter_declaration {
-		$$ = concat_symbols($1, $3);
+		$$ = $1;
+		$$.first = concat_symbols($1.first, $3);
 	}
 ;
 

Index: src/usr.bin/xlint/lint1/debug.c
diff -u src/usr.bin/xlint/lint1/debug.c:1.55 src/usr.bin/xlint/lint1/debug.c:1.56
--- src/usr.bin/xlint/lint1/debug.c:1.55	Thu Jul 13 23:27:20 2023
+++ src/usr.bin/xlint/lint1/debug.c	Fri Jul 28 21:50:03 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.55 2023/07/13 23:27:20 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.56 2023/07/28 21:50:03 rillig Exp $ */
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: debug.c,v 1.55 2023/07/13 23:27:20 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.56 2023/07/28 21:50:03 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -440,8 +440,6 @@ debug_decl_level(const decl_level *dl)
 	debug_word(dl->d_multiple_storage_classes, "multiple_storage_classes");
 	debug_word(dl->d_invalid_type_combination, "invalid_type_combination");
 	debug_word(dl->d_nonempty_decl, "nonempty_decl");
-	debug_word(dl->d_vararg, "vararg");
-	debug_word(dl->d_prototype, "prototype");
 	debug_word(dl->d_no_type_specifier, "no_type_specifier");
 	debug_word(dl->d_asm, "asm");
 	debug_word(dl->d_packed, "packed");

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.362 src/usr.bin/xlint/lint1/decl.c:1.363
--- src/usr.bin/xlint/lint1/decl.c:1.362	Tue Jul 25 16:56:35 2023
+++ src/usr.bin/xlint/lint1/decl.c	Fri Jul 28 21:50:03 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.362 2023/07/25 16:56:35 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.363 2023/07/28 21:50:03 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.362 2023/07/25 16:56:35 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.363 2023/07/28 21:50:03 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -1290,26 +1290,27 @@ block_derive_function(type_t *ret, bool 
 }
 
 sym_t *
-add_function(sym_t *decl, sym_t *args)
+add_function(sym_t *decl, struct parameter_list params)
 {
 
 	debug_enter();
 	debug_dcs(true);
 	debug_sym("decl: ", decl, "\n");
 #ifdef DEBUG
-	for (const sym_t *arg = args; arg != NULL; arg = arg->s_next)
+	for (const sym_t *arg = params.first; arg != NULL; arg = arg->s_next)
 		debug_sym("arg: ", arg, "\n");
 #endif
 
-	if (dcs->d_prototype) {
+	if (params.prototype) {
 		if (!allow_c90)
 			/* function prototypes are illegal in traditional C */
 			warning(270);
-		check_prototype_parameters(args);
-		if (args != NULL && args->s_type->t_tspec == VOID)
-			args = NULL;
+		check_prototype_parameters(params.first);
+		if (params.first != NULL
+		    && params.first->s_type->t_tspec == VOID)
+			params.first = NULL;
 	} else
-		old_style_function(decl, args);
+		old_style_function(decl, params.first);
 
 	/*
 	 * The symbols are removed from the symbol table by
@@ -1324,7 +1325,7 @@ add_function(sym_t *decl, sym_t *args)
 	if (dcs->d_enclosing->d_kind == DLK_EXTERN &&
 	    decl->s_type == dcs->d_enclosing->d_type) {
 		dcs->d_enclosing->d_func_proto_syms = dcs->d_first_dlsym;
-		dcs->d_enclosing->d_func_args = args;
+		dcs->d_enclosing->d_func_args = params.first;
 	}
 
 	/*
@@ -1348,7 +1349,7 @@ add_function(sym_t *decl, sym_t *args)
 	}
 
 	*tpp = block_derive_function(dcs->d_enclosing->d_type,
-	    dcs->d_prototype, args, dcs->d_vararg);
+	    params.prototype, params.first, params.vararg);
 
 	debug_step("add_function: '%s'", type_name(decl->s_type));
 	debug_dcs(true);
@@ -2779,7 +2780,6 @@ abstract_name(void)
 	 */
 	sym->s_type = dcs->d_type;
 	dcs->d_redeclared_symbol = NULL;
-	dcs->d_vararg = false;
 
 	return sym;
 }

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.198 src/usr.bin/xlint/lint1/externs1.h:1.199
--- src/usr.bin/xlint/lint1/externs1.h:1.198	Sat Jul 15 15:51:22 2023
+++ src/usr.bin/xlint/lint1/externs1.h	Fri Jul 28 21:50:03 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.198 2023/07/15 15:51:22 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.199 2023/07/28 21:50:03 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -227,7 +227,7 @@ void	add_type_qualifiers(type_qualifiers
 qual_ptr *append_qualified_pointer(qual_ptr *, qual_ptr *);
 sym_t	*add_pointer(sym_t *, qual_ptr *);
 sym_t	*add_array(sym_t *, bool, int);
-sym_t	*add_function(sym_t *, sym_t *);
+sym_t	*add_function(sym_t *, struct parameter_list);
 void	check_extern_declaration(const sym_t *);
 void	check_function_definition(sym_t *, bool);
 sym_t	*declarator_name(sym_t *);

Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.195 src/usr.bin/xlint/lint1/lint1.h:1.196
--- src/usr.bin/xlint/lint1/lint1.h:1.195	Wed Jul 19 22:24:28 2023
+++ src/usr.bin/xlint/lint1/lint1.h	Fri Jul 28 21:50:03 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.195 2023/07/19 22:24:28 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.196 2023/07/28 21:50:03 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -385,9 +385,6 @@ typedef	struct decl_level {
 	bool	d_invalid_type_combination:1;
 	bool	d_nonempty_decl:1; /* in a function declaration, whether at
 				 * least one tag was declared */
-	bool	d_vararg:1;
-	bool	d_prototype:1;	/* in a function declaration, whether the
-				 * function has a prototype */
 	bool	d_no_type_specifier:1;
 	bool	d_asm:1;	/* set if d_ctx == AUTO and asm() present */
 	bool	d_packed:1;
@@ -404,6 +401,12 @@ typedef	struct decl_level {
 	struct decl_level *d_enclosing; /* the enclosing declaration level */
 } decl_level;
 
+struct parameter_list {
+	sym_t	*first;
+	bool	vararg:1;
+	bool	prototype:1;
+};
+
 /*
  * A sequence of asterisks and qualifiers, from right to left.  For example,
  * 'const ***volatile **const volatile' results in [c-v-, ----, --v-, ----,

Reply via email to