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: