Module Name: src
Committed By: rillig
Date: Sat Sep 4 19:16:38 UTC 2021
Modified Files:
src/usr.bin/xlint/lint2: read.c
Log Message:
lint: reduce complexity of reading a function call
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.63 -r1.64 src/usr.bin/xlint/lint2/read.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/lint2/read.c
diff -u src/usr.bin/xlint/lint2/read.c:1.63 src/usr.bin/xlint/lint2/read.c:1.64
--- src/usr.bin/xlint/lint2/read.c:1.63 Mon Aug 30 21:35:23 2021
+++ src/usr.bin/xlint/lint2/read.c Sat Sep 4 19:16:38 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: read.c,v 1.63 2021/08/30 21:35:23 rillig Exp $ */
+/* $NetBSD: read.c,v 1.64 2021/09/04 19:16:38 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: read.c,v 1.63 2021/08/30 21:35:23 rillig Exp $");
+__RCSID("$NetBSD: read.c,v 1.64 2021/09/04 19:16:38 rillig Exp $");
#endif
#include <ctype.h>
@@ -307,45 +307,47 @@ funccall(pos_t *posp, const char *cp)
/* read flags */
rused = rdisc = false;
lai = &fcall->f_args;
- while ((c = *cp) == 'u' || c == 'i' || c == 'd' ||
- c == 'z' || c == 'p' || c == 'n' || c == 's') {
- cp++;
- switch (c) {
- case 'u':
- if (rused || rdisc)
- inperr("used or discovered: %c", c);
- rused = true;
- break;
- case 'i':
- if (rused || rdisc)
- inperr("used or discovered: %c", c);
- break;
- case 'd':
- if (rused || rdisc)
- inperr("used or discovered: %c", c);
- rdisc = true;
- break;
- case 'z':
- case 'p':
- case 'n':
- case 's':
- ai = xalloc(sizeof(*ai));
- ai->a_num = parse_int(&cp);
- if (c == 'z') {
- ai->a_pcon = ai->a_zero = true;
- } else if (c == 'p') {
- ai->a_pcon = true;
- } else if (c == 'n') {
- ai->a_ncon = true;
- } else {
- ai->a_fmt = true;
- ai->a_fstrg = inpqstrg(cp, &cp);
- }
- *lai = ai;
- lai = &ai->a_next;
- break;
+
+again:
+ c = *cp++;
+ switch (c) {
+ case 'u':
+ if (rused || rdisc)
+ inperr("used or discovered: %c", c);
+ rused = true;
+ goto again;
+ case 'i':
+ if (rused || rdisc)
+ inperr("used or discovered: %c", c);
+ goto again;
+ case 'd':
+ if (rused || rdisc)
+ inperr("used or discovered: %c", c);
+ rdisc = true;
+ goto again;
+ case 'z':
+ case 'p':
+ case 'n':
+ case 's':
+ ai = xalloc(sizeof(*ai));
+ ai->a_num = parse_int(&cp);
+ if (c == 'z') {
+ ai->a_pcon = ai->a_zero = true;
+ } else if (c == 'p') {
+ ai->a_pcon = true;
+ } else if (c == 'n') {
+ ai->a_ncon = true;
+ } else {
+ ai->a_fmt = true;
+ ai->a_fstrg = inpqstrg(cp, &cp);
}
+ *lai = ai;
+ lai = &ai->a_next;
+ goto again;
+ default:
+ cp--;
}
+
fcall->f_rused = rused;
fcall->f_rdisc = rdisc;