Module Name: src
Committed By: rillig
Date: Tue Aug 31 23:10:53 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: emit1.c
Log Message:
lint: reduce verbose switch statement to table lookup
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.53 src/usr.bin/xlint/lint1/emit1.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/emit1.c
diff -u src/usr.bin/xlint/lint1/emit1.c:1.52 src/usr.bin/xlint/lint1/emit1.c:1.53
--- src/usr.bin/xlint/lint1/emit1.c:1.52 Mon Aug 30 19:48:21 2021
+++ src/usr.bin/xlint/lint1/emit1.c Tue Aug 31 23:10:52 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: emit1.c,v 1.52 2021/08/30 19:48:21 rillig Exp $ */
+/* $NetBSD: emit1.c,v 1.53 2021/08/31 23:10:52 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: emit1.c,v 1.52 2021/08/30 19:48:21 rillig Exp $");
+__RCSID("$NetBSD: emit1.c,v 1.53 2021/08/31 23:10:52 rillig Exp $");
#endif
#include "lint1.h"
@@ -92,52 +92,30 @@ static void outfstrg(strg_t *);
void
outtype(const type_t *tp)
{
- int t, s, na;
+ /* Available letters: ------GH--K-MNO--R--U-W-YZ */
+#ifdef INT128_SIZE
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQJJDDDVTTTPAF?XXX";
+ static const char ss[NTSPEC] = "??? su u u u u us l sue ?s l";
+#else
+ static const char tt[NTSPEC] = "???BCCCSSIILLQQDDDVTTTPAF?XXX";
+ static const char ss[NTSPEC] = "??? su u u u us l sue ?s l";
+#endif
+ char t, s;
+ int na;
sym_t *arg;
tspec_t ts;
while (tp != NULL) {
if ((ts = tp->t_tspec) == INT && tp->t_is_enum)
ts = ENUM;
- /* Available letters: ------GH--K-MNO--R--U-W-YZ */
- switch (ts) {
- case BOOL: t = 'B'; s = '\0'; break;
- case CHAR: t = 'C'; s = '\0'; break;
- case SCHAR: t = 'C'; s = 's'; break;
- case UCHAR: t = 'C'; s = 'u'; break;
- case SHORT: t = 'S'; s = '\0'; break;
- case USHORT: t = 'S'; s = 'u'; break;
- case INT: t = 'I'; s = '\0'; break;
- case UINT: t = 'I'; s = 'u'; break;
- case LONG: t = 'L'; s = '\0'; break;
- case ULONG: t = 'L'; s = 'u'; break;
- case QUAD: t = 'Q'; s = '\0'; break;
- case UQUAD: t = 'Q'; s = 'u'; break;
-#ifdef INT128_SIZE
- case INT128: t = 'J'; s = '\0'; break;
- case UINT128: t = 'J'; s = 'u'; break;
-#endif
- case FLOAT: t = 'D'; s = 's'; break;
- case DOUBLE: t = 'D'; s = '\0'; break;
- case LDOUBLE: t = 'D'; s = 'l'; break;
- case VOID: t = 'V'; s = '\0'; break;
- case STRUCT: t = 'T'; s = 's'; break;
- case UNION: t = 'T'; s = 'u'; break;
- case ENUM: t = 'T'; s = 'e'; break;
- case PTR: t = 'P'; s = '\0'; break;
- case ARRAY: t = 'A'; s = '\0'; break;
- case FUNC: t = 'F'; s = '\0'; break;
- case FCOMPLEX: t = 'X'; s = 's'; break;
- case DCOMPLEX: t = 'X'; s = '\0'; break;
- case LCOMPLEX: t = 'X'; s = 'l'; break;
- default:
- lint_assert(/*CONSTCOND*/false);
- }
+ t = tt[ts];
+ s = ss[ts];
+ lint_assert(t != '?' && t != '?');
if (tp->t_const)
outchar('c');
if (tp->t_volatile)
outchar('v');
- if (s != '\0')
+ if (s != ' ')
outchar(s);
outchar(t);
if (ts == ARRAY) {