1 /* $NetBSD: tyname.c,v 1.9 2008/09/26 22:52:24 matt Exp $ */
4 * Copyright (c) 2005 The NetBSD Foundation, Inc.
7 * This code is derived from software contributed to The NetBSD Foundation
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 #if HAVE_NBTOOL_CONFIG_H
33 #include "nbtool_config.h"
36 #include <sys/cdefs.h>
37 #if defined(__RCSID) && !defined(lint)
38 __RCSID("$NetBSD: tyname.c,v 1.9 2008/09/26 22:52:24 matt Exp $");
49 #define LERROR(fmt, args...) do { \
50 (void)warnx("%s, %d: " fmt, __FILE__, __LINE__, ##args); \
52 } while (/*CONSTCOND*/0)
56 basictyname(tspec_t t
)
59 case BOOL
: return "_Bool";
60 case CHAR
: return "char";
61 case UCHAR
: return "unsigned char";
62 case SCHAR
: return "signed char";
63 case SHORT
: return "short";
64 case USHORT
: return "unsigned short";
65 case INT
: return "int";
66 case UINT
: return "unsigned int";
67 case LONG
: return "long";
68 case ULONG
: return "unsigned long";
69 case QUAD
: return "long long";
70 case UQUAD
: return "unsigned long long";
71 case FLOAT
: return "float";
72 case DOUBLE
: return "double";
73 case LDOUBLE
: return "long double";
74 case VOID
: return "void";
75 case PTR
: return "pointer";
76 case ENUM
: return "enum";
77 case STRUCT
: return "struct";
78 case UNION
: return "union";
79 case FUNC
: return "function";
80 case ARRAY
: return "array";
81 case FCOMPLEX
: return "float _Complex";
82 case DCOMPLEX
: return "double _Complex";
83 case LCOMPLEX
: return "long double _Complex";
84 case COMPLEX
: return "_Complex";
86 LERROR("basictyname(%d)", t
);
92 tyname(char *buf
, size_t bufsiz
, type_t
*tp
)
99 if ((t
= tp
->t_tspec
) == INT
&& tp
->t_isenum
)
106 (void)strcat(cv
, "const ");
108 (void)strcat(cv
, "volatile ");
132 (void)snprintf(buf
, bufsiz
, "%s%s", cv
, s
);
135 (void)snprintf(buf
, bufsiz
, "%s%s to %s", cv
, s
,
136 tyname(lbuf
, sizeof(lbuf
), tp
->t_subt
));
139 (void)snprintf(buf
, bufsiz
, "%s%s %s", cv
, s
,
141 tp
->t_enum
->etag
->s_name
143 tp
->t_isuniqpos
? "*anonymous*" : tp
->t_tag
->h_name
149 (void)snprintf(buf
, bufsiz
, "%s%s %s", cv
, s
,
151 tp
->t_str
->stag
->s_name
153 tp
->t_isuniqpos
? "*anonymous*" : tp
->t_tag
->h_name
158 (void)snprintf(buf
, bufsiz
, "%s%s of %s[%d]", cv
, s
,
159 tyname(lbuf
, sizeof(lbuf
), tp
->t_subt
), tp
->t_dim
);
162 LERROR("tyname(%d)", t
);