1 /* $NetBSD: inittyp.c,v 1.7 2004/09/12 08:58:52 yamt Exp $ */ 2 3 /* 4 * Copyright (c) 1994, 1995 Jochen Pohl 5 * All Rights Reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. All advertising materials mentioning features or use of this software 16 * must display the following acknowledgement: 17 * This product includes software developed by Jochen Pohl for 18 * The NetBSD Project. 19 * 4. The name of the author may not be used to endorse or promote products 20 * derived from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 #if HAVE_NBTOOL_CONFIG_H 35 #include "nbtool_config.h" 36 #endif 37 38 #include <sys/cdefs.h> 39 #if defined(__RCSID) && !defined(lint) 40 __RCSID("$NetBSD: inittyp.c,v 1.7 2004/09/12 08:58:52 yamt Exp $"); 41 #endif 42 43 #include <ctype.h> 44 #include <limits.h> 45 #include <stdlib.h> 46 47 #include "lint.h" 48 49 /* various type information */ 50 ttab_t ttab[NTSPEC]; 51 52 #if INTPTR_IS_LONG 53 #define INT_RSIZE 3 54 #else 55 #define INT_RSIZE 4 56 #endif 57 58 void 59 inittyp(void) 60 { 61 int i; 62 static const struct { 63 tspec_t it_tspec; 64 ttab_t it_ttab; 65 } ittab[NTSPEC] = { 66 { SIGNED, { 0, 0, 67 SIGNED, UNSIGN, 68 0, 0, 0, 0, 0, "signed" } }, 69 { UNSIGN, { 0, 0, 70 SIGNED, UNSIGN, 71 0, 0, 0, 0, 0, "unsigned" } }, 72 { BOOL, { CHAR_SIZE, 1, 73 BOOL, BOOL, 74 1, 1, 0, 1, 1, "_Bool" } }, 75 { CHAR, { CHAR_SIZE, CHAR_BIT, 76 SCHAR, UCHAR, 77 1, 0, 0, 1, 1, "char" } }, 78 { SCHAR, { CHAR_SIZE, CHAR_BIT, 79 SCHAR, UCHAR, 80 1, 0, 0, 1, 1, "signed char" } }, 81 { UCHAR, { CHAR_SIZE, CHAR_BIT, 82 SCHAR, UCHAR, 83 1, 1, 0, 1, 1, "unsigned char" } }, 84 { SHORT, { SHORT_SIZE, 2 * CHAR_BIT, 85 SHORT, USHORT, 86 1, 0, 0, 1, 1, "short" } }, 87 { USHORT, { SHORT_SIZE, 2 * CHAR_BIT, 88 SHORT, USHORT, 89 1, 1, 0, 1, 1, "unsigned short" } }, 90 { INT, { INT_SIZE, INT_RSIZE * CHAR_BIT, 91 INT, UINT, 92 1, 0, 0, 1, 1, "int" } }, 93 { UINT, { INT_SIZE, INT_RSIZE * CHAR_BIT, 94 INT, UINT, 95 1, 1, 0, 1, 1, "unsigned int" } }, 96 { LONG, { LONG_SIZE, 4 * CHAR_BIT, 97 LONG, ULONG, 98 1, 0, 0, 1, 1, "long" } }, 99 { ULONG, { LONG_SIZE, 4 * CHAR_BIT, 100 LONG, ULONG, 101 1, 1, 0, 1, 1, "unsigned long" } }, 102 { QUAD, { QUAD_SIZE, 8 * CHAR_BIT, 103 QUAD, UQUAD, 104 1, 0, 0, 1, 1, "long long" } }, 105 { UQUAD, { QUAD_SIZE, 8 * CHAR_BIT, 106 QUAD, UQUAD, 107 1, 1, 0, 1, 1, "unsigned long long" } }, 108 { FLOAT, { FLOAT_SIZE, 4 * CHAR_BIT, 109 FLOAT, FLOAT, 110 0, 0, 1, 1, 1, "float" } }, 111 { DOUBLE, { DOUBLE_SIZE, 8 * CHAR_BIT, 112 DOUBLE, DOUBLE, 113 0, 0, 1, 1, 1, "double" } }, 114 { LDOUBLE, { LDOUBLE_SIZE, 10 * CHAR_BIT, 115 LDOUBLE, LDOUBLE, 116 0, 0, 1, 1, 1, "long double" } }, 117 { VOID, { -1, -1, 118 VOID, VOID, 119 0, 0, 0, 0, 0, "void" } }, 120 { STRUCT, { -1, -1, 121 STRUCT, STRUCT, 122 0, 0, 0, 0, 0, "struct" } }, 123 { UNION, { -1, -1, 124 UNION, UNION, 125 0, 0, 0, 0, 0, "union" } }, 126 { ENUM, { ENUM_SIZE, 3 * CHAR_BIT, 127 ENUM, ENUM, 128 1, 0, 0, 1, 1, "enum" } }, 129 { PTR, { PTR_SIZE, 4 * CHAR_BIT, 130 PTR, PTR, 131 0, 1, 0, 0, 1, "pointer" } }, 132 { ARRAY, { -1, -1, 133 ARRAY, ARRAY, 134 0, 0, 0, 0, 0, "array" } }, 135 { FUNC, { -1, -1, 136 FUNC, FUNC, 137 0, 0, 0, 0, 0, "function" } }, 138 }; 139 140 for (i = 0; i < sizeof (ittab) / sizeof (ittab[0]); i++) 141 STRUCT_ASSIGN(ttab[ittab[i].it_tspec], ittab[i].it_ttab); 142 if (!pflag) { 143 for (i = 0; i < NTSPEC; i++) 144 ttab[i].tt_psz = ttab[i].tt_sz; 145 } 146 } 147