Module Name:    src
Committed By:   rillig
Date:           Sun Mar 31 20:28:45 UTC 2024

Modified Files:
        src/usr.bin/xlint/lint1: README.md debug.c lint1.h op.h oper.c tree.c

Log Message:
lint: merge function call operators 'CALL' and 'ICALL'


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/usr.bin/xlint/lint1/README.md
cvs rdiff -u -r1.74 -r1.75 src/usr.bin/xlint/lint1/debug.c
cvs rdiff -u -r1.221 -r1.222 src/usr.bin/xlint/lint1/lint1.h
cvs rdiff -u -r1.27 -r1.28 src/usr.bin/xlint/lint1/op.h
cvs rdiff -u -r1.15 -r1.16 src/usr.bin/xlint/lint1/oper.c
cvs rdiff -u -r1.633 -r1.634 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/README.md
diff -u src/usr.bin/xlint/lint1/README.md:1.17 src/usr.bin/xlint/lint1/README.md:1.18
--- src/usr.bin/xlint/lint1/README.md:1.17	Thu Mar 28 21:04:48 2024
+++ src/usr.bin/xlint/lint1/README.md	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-[//]: # ($NetBSD: README.md,v 1.17 2024/03/28 21:04:48 rillig Exp $)
+[//]: # ($NetBSD: README.md,v 1.18 2024/03/31 20:28:45 rillig Exp $)
 
 # Introduction
 
@@ -115,8 +115,7 @@ Some examples for operators:
 | NAME     | references the identifier in `u.sym`           |
 | UPLUS    | the unary operator `+u.ops.left`               |
 | PLUS     | the binary operator `u.ops.left + u.ops.right` |
-| CALL     | a direct function call                         |
-| ICALL    | an indirect function call                      |
+| CALL     | a function call                                |
 | CVT      | an implicit conversion or an explicit cast     |
 
 As an example, the expression `strcmp(names[i], "name")` has this internal

Index: src/usr.bin/xlint/lint1/debug.c
diff -u src/usr.bin/xlint/lint1/debug.c:1.74 src/usr.bin/xlint/lint1/debug.c:1.75
--- src/usr.bin/xlint/lint1/debug.c:1.74	Tue Mar 19 23:19:03 2024
+++ src/usr.bin/xlint/lint1/debug.c	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.74 2024/03/19 23:19:03 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.75 2024/03/31 20:28:45 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.74 2024/03/19 23:19:03 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.75 2024/03/31 20:28:45 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -241,7 +241,6 @@ debug_node(const tnode_t *tn) // NOLINT(
 			debug_printf(", length %zu\n", tn->u.str_literals->len);
 		break;
 	case CALL:
-	case ICALL:
 		debug_printf("\n");
 
 		debug_indent_inc();
@@ -259,8 +258,7 @@ debug_node(const tnode_t *tn) // NOLINT(
 		lint_assert(tn->u.ops.left != NULL);
 		debug_node(tn->u.ops.left);
 		if (op != INCBEF && op != INCAFT
-		    && op != DECBEF && op != DECAFT
-		    && op != CALL && op != ICALL)
+		    && op != DECBEF && op != DECAFT)
 			lint_assert(is_binary(tn) == (tn->u.ops.right != NULL));
 		if (tn->u.ops.right != NULL)
 			debug_node(tn->u.ops.right);

Index: src/usr.bin/xlint/lint1/lint1.h
diff -u src/usr.bin/xlint/lint1/lint1.h:1.221 src/usr.bin/xlint/lint1/lint1.h:1.222
--- src/usr.bin/xlint/lint1/lint1.h:1.221	Sat Mar  9 13:54:47 2024
+++ src/usr.bin/xlint/lint1/lint1.h	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.221 2024/03/09 13:54:47 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.222 2024/03/31 20:28:45 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -290,7 +290,7 @@ struct tnode {
 					 * wide strings, 'data' is NULL and
 					 * 'len' is the number of resulting
 					 * characters */
-		function_call *call;	/* if CALL or ICALL */
+		function_call *call;	/* if CALL */
 	} u;
 };
 

Index: src/usr.bin/xlint/lint1/op.h
diff -u src/usr.bin/xlint/lint1/op.h:1.27 src/usr.bin/xlint/lint1/op.h:1.28
--- src/usr.bin/xlint/lint1/op.h:1.27	Mon Feb  5 23:11:22 2024
+++ src/usr.bin/xlint/lint1/op.h	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: op.h,v 1.27 2024/02/05 23:11:22 rillig Exp $	*/
+/*	$NetBSD: op.h,v 1.28 2024/03/31 20:28:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -117,7 +117,6 @@ typedef enum {
 	CALL,
 	COMMA,
 	CVT,
-	ICALL,
 	LOAD,
 	RETURN,
 	REAL,

Index: src/usr.bin/xlint/lint1/oper.c
diff -u src/usr.bin/xlint/lint1/oper.c:1.15 src/usr.bin/xlint/lint1/oper.c:1.16
--- src/usr.bin/xlint/lint1/oper.c:1.15	Mon Feb  5 23:11:22 2024
+++ src/usr.bin/xlint/lint1/oper.c	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: oper.c,v 1.15 2024/02/05 23:11:22 rillig Exp $	*/
+/*	$NetBSD: oper.c,v 1.16 2024/03/31 20:28:45 rillig Exp $	*/
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -124,7 +124,6 @@ const mod_t modtab[NOPS] = {
 	{_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "call" },
 	{X,_,X,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X,X, "," },
 	{_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_,_,X, "convert" },
-	{_,_,_,_,_,_,_,_,_,_,_,X,_,_,_,_,_,_,_,_, "icall" },
 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "load" },
 	{X,_,X,_,_,_,_,_,_,_,_,X,_,_,_,_,X,_,_,X, "return" },
 	{_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,X, "real" },

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.633 src/usr.bin/xlint/lint1/tree.c:1.634
--- src/usr.bin/xlint/lint1/tree.c:1.633	Sat Mar 30 19:12:37 2024
+++ src/usr.bin/xlint/lint1/tree.c	Sun Mar 31 20:28:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.633 2024/03/30 19:12:37 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 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.633 2024/03/30 19:12:37 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -1717,8 +1717,7 @@ use(const tnode_t *tn)
 	case CON:
 	case STRING:
 		break;
-	case CALL:
-	case ICALL:;
+	case CALL:;
 		const function_call *call = tn->u.call;
 		for (size_t i = 0, n = call->args_len; i < n; i++)
 			use(call->args[i]);
@@ -4280,9 +4279,6 @@ build_function_call(tnode_t *func, bool 
 	if (func == NULL)
 		return NULL;
 
-	op_t op = func->tn_op == NAME && func->tn_type->t_tspec == FUNC
-	    ? CALL : ICALL;
-
 	call->func = func;
 	check_ctype_function_call(call);
 
@@ -4299,7 +4295,7 @@ build_function_call(tnode_t *func, bool 
 	check_function_arguments(call);
 
 	tnode_t *ntn = expr_alloc_tnode();
-	ntn->tn_op = op;
+	ntn->tn_op = CALL;
 	ntn->tn_type = func->tn_type->t_subt->t_subt;
 	ntn->tn_sys = sys;
 	ntn->u.call = call;
@@ -4579,13 +4575,16 @@ check_expr_misc(const tnode_t *tn, bool 
 	op_t op = tn->tn_op;
 	if (op == NAME || op == CON || op == STRING)
 		return;
-	if (op == CALL || op == ICALL) {
+	bool is_direct = op == CALL
+	    && tn->u.call->func->tn_op == ADDR
+	    && tn->u.call->func->u.ops.left->tn_op == NAME;
+	if (op == CALL) {
 		const function_call *call = tn->u.call;
-		if (op == CALL)
+		if (is_direct)
 			check_expr_call(tn, call->func,
 			    szof, vctx, cond, retval_discarded);
 		bool discard = op == CVT && tn->tn_type->t_tspec == VOID;
-		check_expr_misc(call->func, false, false, false, op == CALL,
+		check_expr_misc(call->func, false, false, false, is_direct,
 		    discard, szof);
 		for (size_t i = 0, n = call->args_len; i < n; i++)
 			check_expr_misc(call->args[i],
@@ -4615,7 +4614,7 @@ check_expr_misc(const tnode_t *tn, bool 
 	if (op == COLON && tn->tn_type->t_tspec == VOID)
 		cvctx = ccond = false;
 	bool discard = op == CVT && tn->tn_type->t_tspec == VOID;
-	check_expr_misc(ln, cvctx, ccond, eq, op == CALL, discard, szof);
+	check_expr_misc(ln, cvctx, ccond, eq, is_direct, discard, szof);
 
 	switch (op) {
 	case LOGAND:

Reply via email to