Mercurial > hg > CbC > CbC_gcc
annotate libiberty/cp-demangle.h @ 74:f26ecf70364b
modify c-decl.c, c-parser.c, c-tree.h and tree.h
author | Nobuyasu Oshiro <dimolto@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 22 Aug 2011 03:31:39 +0900 |
parents | f6334be47118 |
children | 04ced10e8804 |
rev | line source |
---|---|
0 | 1 /* Internal demangler interface for g++ V3 ABI. |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
2 Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010 |
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
3 Free Software Foundation, Inc. |
0 | 4 Written by Ian Lance Taylor <ian@wasabisystems.com>. |
5 | |
6 This file is part of the libiberty library, which is part of GCC. | |
7 | |
8 This file is free software; you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
10 the Free Software Foundation; either version 2 of the License, or | |
11 (at your option) any later version. | |
12 | |
13 In addition to the permissions in the GNU General Public License, the | |
14 Free Software Foundation gives you unlimited permission to link the | |
15 compiled version of this file into combinations with other programs, | |
16 and to distribute those combinations without any restriction coming | |
17 from the use of this file. (The General Public License restrictions | |
18 do apply in other respects; for example, they cover modification of | |
19 the file, and distribution when not linked into a combined | |
20 executable.) | |
21 | |
22 This program is distributed in the hope that it will be useful, | |
23 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
25 GNU General Public License for more details. | |
26 | |
27 You should have received a copy of the GNU General Public License | |
28 along with this program; if not, write to the Free Software | |
29 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. | |
30 */ | |
31 | |
32 /* This file provides some definitions shared by cp-demangle.c and | |
33 cp-demint.c. It should not be included by any other files. */ | |
34 | |
35 /* Information we keep for operators. */ | |
36 | |
37 struct demangle_operator_info | |
38 { | |
39 /* Mangled name. */ | |
40 const char *code; | |
41 /* Real name. */ | |
42 const char *name; | |
43 /* Length of real name. */ | |
44 int len; | |
45 /* Number of arguments. */ | |
46 int args; | |
47 }; | |
48 | |
49 /* How to print the value of a builtin type. */ | |
50 | |
51 enum d_builtin_type_print | |
52 { | |
53 /* Print as (type)val. */ | |
54 D_PRINT_DEFAULT, | |
55 /* Print as integer. */ | |
56 D_PRINT_INT, | |
57 /* Print as unsigned integer, with trailing "u". */ | |
58 D_PRINT_UNSIGNED, | |
59 /* Print as long, with trailing "l". */ | |
60 D_PRINT_LONG, | |
61 /* Print as unsigned long, with trailing "ul". */ | |
62 D_PRINT_UNSIGNED_LONG, | |
63 /* Print as long long, with trailing "ll". */ | |
64 D_PRINT_LONG_LONG, | |
65 /* Print as unsigned long long, with trailing "ull". */ | |
66 D_PRINT_UNSIGNED_LONG_LONG, | |
67 /* Print as bool. */ | |
68 D_PRINT_BOOL, | |
69 /* Print as float--put value in square brackets. */ | |
70 D_PRINT_FLOAT, | |
71 /* Print in usual way, but here to detect void. */ | |
72 D_PRINT_VOID | |
73 }; | |
74 | |
75 /* Information we keep for a builtin type. */ | |
76 | |
77 struct demangle_builtin_type_info | |
78 { | |
79 /* Type name. */ | |
80 const char *name; | |
81 /* Length of type name. */ | |
82 int len; | |
83 /* Type name when using Java. */ | |
84 const char *java_name; | |
85 /* Length of java name. */ | |
86 int java_len; | |
87 /* How to print a value of this type. */ | |
88 enum d_builtin_type_print print; | |
89 }; | |
90 | |
91 /* The information structure we pass around. */ | |
92 | |
93 struct d_info | |
94 { | |
95 /* The string we are demangling. */ | |
96 const char *s; | |
97 /* The end of the string we are demangling. */ | |
98 const char *send; | |
99 /* The options passed to the demangler. */ | |
100 int options; | |
101 /* The next character in the string to consider. */ | |
102 const char *n; | |
103 /* The array of components. */ | |
104 struct demangle_component *comps; | |
105 /* The index of the next available component. */ | |
106 int next_comp; | |
107 /* The number of available component structures. */ | |
108 int num_comps; | |
109 /* The array of substitutions. */ | |
110 struct demangle_component **subs; | |
111 /* The index of the next substitution. */ | |
112 int next_sub; | |
113 /* The number of available entries in the subs array. */ | |
114 int num_subs; | |
115 /* The number of substitutions which we actually made from the subs | |
116 array, plus the number of template parameter references we | |
117 saw. */ | |
118 int did_subs; | |
119 /* The last name we saw, for constructors and destructors. */ | |
120 struct demangle_component *last_name; | |
121 /* A running total of the length of large expansions from the | |
122 mangled name to the demangled name, such as standard | |
123 substitutions and builtin types. */ | |
124 int expansion; | |
125 }; | |
126 | |
127 /* To avoid running past the ending '\0', don't: | |
128 - call d_peek_next_char if d_peek_char returned '\0' | |
129 - call d_advance with an 'i' that is too large | |
130 - call d_check_char(di, '\0') | |
131 Everything else is safe. */ | |
132 #define d_peek_char(di) (*((di)->n)) | |
133 #define d_peek_next_char(di) ((di)->n[1]) | |
134 #define d_advance(di, i) ((di)->n += (i)) | |
135 #define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0) | |
136 #define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++)) | |
137 #define d_str(di) ((di)->n) | |
138 | |
139 /* Functions and arrays in cp-demangle.c which are referenced by | |
140 functions in cp-demint.c. */ | |
141 #ifdef IN_GLIBCPP_V3 | |
142 #define CP_STATIC_IF_GLIBCPP_V3 static | |
143 #else | |
144 #define CP_STATIC_IF_GLIBCPP_V3 extern | |
145 #endif | |
146 | |
147 #ifndef IN_GLIBCPP_V3 | |
148 extern const struct demangle_operator_info cplus_demangle_operators[]; | |
149 #endif | |
150 | |
63
b7f97abdc517
update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
151 #define D_BUILTIN_TYPE_COUNT (33) |
0 | 152 |
153 CP_STATIC_IF_GLIBCPP_V3 | |
154 const struct demangle_builtin_type_info | |
155 cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT]; | |
156 | |
157 CP_STATIC_IF_GLIBCPP_V3 | |
158 struct demangle_component * | |
159 cplus_demangle_mangled_name (struct d_info *, int); | |
160 | |
161 CP_STATIC_IF_GLIBCPP_V3 | |
162 struct demangle_component * | |
163 cplus_demangle_type (struct d_info *); | |
164 | |
165 extern void | |
166 cplus_demangle_init_info (const char *, int, size_t, struct d_info *); | |
167 | |
168 /* cp-demangle.c needs to define this a little differently */ | |
169 #undef CP_STATIC_IF_GLIBCPP_V3 |