annotate generator/parser/rpp/pp-main.cpp @ 414:b2a803c73b89 default tip

Declare tabArray const.
author David Nadlinger <code@klickverbot.at>
date Fri, 06 May 2011 13:39:49 +0200
parents 09a0f1d048f2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
3 ** Copyright (C) 1992-2009 Nokia. All rights reserved.
1
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Copyright 2005 Roberto Raggi <roberto@kdevelop.org>
e78566595089 initial import
mandel
parents:
diff changeset
5 **
e78566595089 initial import
mandel
parents:
diff changeset
6 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
7 **
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
8 ** Commercial Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
9 Licensees holding valid Qt Commercial licenses may use this file in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
10 accordance with the Qt Commercial License Agreement provided with the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
11 Software or, alternatively, in accordance with the terms contained in
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
12 a written agreement between you and Nokia.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
13
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
14 GNU Lesser General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
15 Alternatively, this file may be used under the terms of the GNU Lesser
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
16 General Public License version 2.1 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
17 Foundation and appearing in the file LICENSE.LGPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
18 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
19 ensure the GNU Lesser General Public License version 2.1 requirements
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
20 will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
21
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
22 In addition, as a special exception, Nokia gives you certain
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
23 additional rights. These rights are described in the Nokia Qt LGPL
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
24 Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
25 package.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
26
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
27 GNU General Public License Usage
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
28 Alternatively, this file may be used under the terms of the GNU
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
29 General Public License version 3.0 as published by the Free Software
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
30 Foundation and appearing in the file LICENSE.GPL included in the
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
31 packaging of this file. Please review the following information to
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
32 ensure the GNU General Public License version 3.0 requirements will be
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
33 met: http://www.gnu.org/copyleft/gpl.html.
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
34
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
35 If you are unsure which license is appropriate for your use, please
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
36 contact the sales department at qt-sales@nokia.com.
1
e78566595089 initial import
mandel
parents:
diff changeset
37
e78566595089 initial import
mandel
parents:
diff changeset
38 **
e78566595089 initial import
mandel
parents:
diff changeset
39 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
40 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
41 **
e78566595089 initial import
mandel
parents:
diff changeset
42 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44 #include <fstream>
e78566595089 initial import
mandel
parents:
diff changeset
45 #include "pp.h"
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 using namespace rpp;
e78566595089 initial import
mandel
parents:
diff changeset
48
e78566595089 initial import
mandel
parents:
diff changeset
49 #ifndef GCC_MACHINE
e78566595089 initial import
mandel
parents:
diff changeset
50 # define GCC_MACHINE "i386-redhat-linux"
e78566595089 initial import
mandel
parents:
diff changeset
51 #endif
e78566595089 initial import
mandel
parents:
diff changeset
52
e78566595089 initial import
mandel
parents:
diff changeset
53 #ifndef GCC_VERSION
e78566595089 initial import
mandel
parents:
diff changeset
54 # define GCC_VERSION "4.1.1"
e78566595089 initial import
mandel
parents:
diff changeset
55 #endif
e78566595089 initial import
mandel
parents:
diff changeset
56
e78566595089 initial import
mandel
parents:
diff changeset
57 void usage ()
e78566595089 initial import
mandel
parents:
diff changeset
58 {
e78566595089 initial import
mandel
parents:
diff changeset
59 std::cerr << "usage: rpp file.cpp" << std::endl;
e78566595089 initial import
mandel
parents:
diff changeset
60 ::exit (EXIT_FAILURE);
e78566595089 initial import
mandel
parents:
diff changeset
61 }
e78566595089 initial import
mandel
parents:
diff changeset
62
e78566595089 initial import
mandel
parents:
diff changeset
63 void dump_macros (pp_environment &env, pp &, std::ostream &__out)
e78566595089 initial import
mandel
parents:
diff changeset
64 {
e78566595089 initial import
mandel
parents:
diff changeset
65 for (pp_environment::const_iterator it = env.first_macro (); it != env.last_macro (); ++it)
e78566595089 initial import
mandel
parents:
diff changeset
66 {
e78566595089 initial import
mandel
parents:
diff changeset
67 pp_macro const *m = *it;
e78566595089 initial import
mandel
parents:
diff changeset
68
e78566595089 initial import
mandel
parents:
diff changeset
69 if (m->hidden)
e78566595089 initial import
mandel
parents:
diff changeset
70 continue;
e78566595089 initial import
mandel
parents:
diff changeset
71
e78566595089 initial import
mandel
parents:
diff changeset
72 std::string id (m->name->begin (), m->name->end ());
e78566595089 initial import
mandel
parents:
diff changeset
73 __out << "#define " << id;
e78566595089 initial import
mandel
parents:
diff changeset
74
e78566595089 initial import
mandel
parents:
diff changeset
75 if (m->function_like)
e78566595089 initial import
mandel
parents:
diff changeset
76 {
e78566595089 initial import
mandel
parents:
diff changeset
77 __out << "(";
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79 for (std::size_t i = 0; i < m->formals.size (); ++i)
e78566595089 initial import
mandel
parents:
diff changeset
80 {
e78566595089 initial import
mandel
parents:
diff changeset
81 if (i != 0)
e78566595089 initial import
mandel
parents:
diff changeset
82 __out << ", ";
e78566595089 initial import
mandel
parents:
diff changeset
83
e78566595089 initial import
mandel
parents:
diff changeset
84 pp_fast_string const *f = m->formals [i];
e78566595089 initial import
mandel
parents:
diff changeset
85 std::string name (f->begin (), f->end ());
e78566595089 initial import
mandel
parents:
diff changeset
86 __out << name;
e78566595089 initial import
mandel
parents:
diff changeset
87 }
e78566595089 initial import
mandel
parents:
diff changeset
88
e78566595089 initial import
mandel
parents:
diff changeset
89 if (m->variadics)
e78566595089 initial import
mandel
parents:
diff changeset
90 __out << "...";
e78566595089 initial import
mandel
parents:
diff changeset
91
e78566595089 initial import
mandel
parents:
diff changeset
92 __out << ")";
e78566595089 initial import
mandel
parents:
diff changeset
93 }
e78566595089 initial import
mandel
parents:
diff changeset
94
e78566595089 initial import
mandel
parents:
diff changeset
95 __out << "\t";
e78566595089 initial import
mandel
parents:
diff changeset
96 if (m->definition)
e78566595089 initial import
mandel
parents:
diff changeset
97 {
e78566595089 initial import
mandel
parents:
diff changeset
98 std::string def (m->definition->begin (), m->definition->end ());
e78566595089 initial import
mandel
parents:
diff changeset
99 __out << def;
e78566595089 initial import
mandel
parents:
diff changeset
100 }
e78566595089 initial import
mandel
parents:
diff changeset
101
e78566595089 initial import
mandel
parents:
diff changeset
102 __out << std::endl;
e78566595089 initial import
mandel
parents:
diff changeset
103 }
e78566595089 initial import
mandel
parents:
diff changeset
104 }
e78566595089 initial import
mandel
parents:
diff changeset
105
e78566595089 initial import
mandel
parents:
diff changeset
106 int main (int, char *argv [])
e78566595089 initial import
mandel
parents:
diff changeset
107 {
e78566595089 initial import
mandel
parents:
diff changeset
108 char const *input_file = 0;
e78566595089 initial import
mandel
parents:
diff changeset
109 char const *output_file = 0;
e78566595089 initial import
mandel
parents:
diff changeset
110 char const *include_pch_file = 0;
e78566595089 initial import
mandel
parents:
diff changeset
111 bool opt_help = false;
e78566595089 initial import
mandel
parents:
diff changeset
112 bool opt_dump_macros = false;
e78566595089 initial import
mandel
parents:
diff changeset
113 bool opt_pch = false;
e78566595089 initial import
mandel
parents:
diff changeset
114
e78566595089 initial import
mandel
parents:
diff changeset
115 pp_environment env;
e78566595089 initial import
mandel
parents:
diff changeset
116 pp preprocess(env);
e78566595089 initial import
mandel
parents:
diff changeset
117
e78566595089 initial import
mandel
parents:
diff changeset
118 std::string result;
e78566595089 initial import
mandel
parents:
diff changeset
119 result.reserve (20 * 1024); // 20K
e78566595089 initial import
mandel
parents:
diff changeset
120
e78566595089 initial import
mandel
parents:
diff changeset
121 pp_output_iterator<std::string> out (result);
e78566595089 initial import
mandel
parents:
diff changeset
122 pp_null_output_iterator null_out;
e78566595089 initial import
mandel
parents:
diff changeset
123
e78566595089 initial import
mandel
parents:
diff changeset
124 preprocess.push_include_path ("/usr/include");
e78566595089 initial import
mandel
parents:
diff changeset
125 preprocess.push_include_path ("/usr/lib/gcc/" GCC_MACHINE "/" GCC_VERSION "/include");
e78566595089 initial import
mandel
parents:
diff changeset
126
e78566595089 initial import
mandel
parents:
diff changeset
127 preprocess.push_include_path ("/usr/include/c++/" GCC_VERSION);
e78566595089 initial import
mandel
parents:
diff changeset
128 preprocess.push_include_path ("/usr/include/c++/" GCC_VERSION "/" GCC_MACHINE);
e78566595089 initial import
mandel
parents:
diff changeset
129
e78566595089 initial import
mandel
parents:
diff changeset
130 std::string extra_args;
e78566595089 initial import
mandel
parents:
diff changeset
131
e78566595089 initial import
mandel
parents:
diff changeset
132 while (const char *arg = *++argv)
e78566595089 initial import
mandel
parents:
diff changeset
133 {
e78566595089 initial import
mandel
parents:
diff changeset
134 if (arg [0] != '-')
e78566595089 initial import
mandel
parents:
diff changeset
135 input_file = arg;
e78566595089 initial import
mandel
parents:
diff changeset
136
e78566595089 initial import
mandel
parents:
diff changeset
137 else if (! strcmp (arg, "-help"))
e78566595089 initial import
mandel
parents:
diff changeset
138 opt_help = true;
e78566595089 initial import
mandel
parents:
diff changeset
139
e78566595089 initial import
mandel
parents:
diff changeset
140 else if (! strcmp (arg, "-dM"))
e78566595089 initial import
mandel
parents:
diff changeset
141 opt_dump_macros = true;
e78566595089 initial import
mandel
parents:
diff changeset
142
e78566595089 initial import
mandel
parents:
diff changeset
143 else if (! strcmp (arg, "-pch"))
e78566595089 initial import
mandel
parents:
diff changeset
144 opt_pch = true;
e78566595089 initial import
mandel
parents:
diff changeset
145
e78566595089 initial import
mandel
parents:
diff changeset
146 else if (! strcmp (arg, "-msse"))
e78566595089 initial import
mandel
parents:
diff changeset
147 {
e78566595089 initial import
mandel
parents:
diff changeset
148 pp_macro __macro;
e78566595089 initial import
mandel
parents:
diff changeset
149 __macro.name = pp_symbol::get ("__SSE__", 7);
e78566595089 initial import
mandel
parents:
diff changeset
150 env.bind (__macro.name, __macro);
e78566595089 initial import
mandel
parents:
diff changeset
151
e78566595089 initial import
mandel
parents:
diff changeset
152 __macro.name = pp_symbol::get ("__MMX__", 7);
e78566595089 initial import
mandel
parents:
diff changeset
153 env.bind (__macro.name, __macro);
e78566595089 initial import
mandel
parents:
diff changeset
154 }
e78566595089 initial import
mandel
parents:
diff changeset
155
e78566595089 initial import
mandel
parents:
diff changeset
156 else if (! strcmp (arg, "-include"))
e78566595089 initial import
mandel
parents:
diff changeset
157 {
e78566595089 initial import
mandel
parents:
diff changeset
158 if (argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
159 include_pch_file = *++argv;
e78566595089 initial import
mandel
parents:
diff changeset
160 }
e78566595089 initial import
mandel
parents:
diff changeset
161
e78566595089 initial import
mandel
parents:
diff changeset
162 else if (! strncmp (arg, "-o", 2))
e78566595089 initial import
mandel
parents:
diff changeset
163 {
e78566595089 initial import
mandel
parents:
diff changeset
164 arg += 2;
e78566595089 initial import
mandel
parents:
diff changeset
165
e78566595089 initial import
mandel
parents:
diff changeset
166 if (! arg [0] && argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
167 arg = *++argv;
e78566595089 initial import
mandel
parents:
diff changeset
168
e78566595089 initial import
mandel
parents:
diff changeset
169 if (arg)
e78566595089 initial import
mandel
parents:
diff changeset
170 output_file = arg;
e78566595089 initial import
mandel
parents:
diff changeset
171 }
e78566595089 initial import
mandel
parents:
diff changeset
172
e78566595089 initial import
mandel
parents:
diff changeset
173 else if (! strncmp (arg, "-conf", 8))
e78566595089 initial import
mandel
parents:
diff changeset
174 {
e78566595089 initial import
mandel
parents:
diff changeset
175 if (argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
176 preprocess.file (*++argv, null_out);
e78566595089 initial import
mandel
parents:
diff changeset
177 }
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 else if (! strncmp (arg, "-I", 2))
e78566595089 initial import
mandel
parents:
diff changeset
180 {
e78566595089 initial import
mandel
parents:
diff changeset
181 arg += 2;
e78566595089 initial import
mandel
parents:
diff changeset
182
e78566595089 initial import
mandel
parents:
diff changeset
183 if (! arg [0] && argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
184 arg = *++argv;
e78566595089 initial import
mandel
parents:
diff changeset
185
e78566595089 initial import
mandel
parents:
diff changeset
186 if (arg)
e78566595089 initial import
mandel
parents:
diff changeset
187 preprocess.push_include_path (arg);
e78566595089 initial import
mandel
parents:
diff changeset
188 }
e78566595089 initial import
mandel
parents:
diff changeset
189
e78566595089 initial import
mandel
parents:
diff changeset
190 else if (! strncmp (arg, "-U", 2))
e78566595089 initial import
mandel
parents:
diff changeset
191 {
e78566595089 initial import
mandel
parents:
diff changeset
192 arg += 2;
e78566595089 initial import
mandel
parents:
diff changeset
193
e78566595089 initial import
mandel
parents:
diff changeset
194 if (! arg [0] && argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
195 arg = *++argv;
e78566595089 initial import
mandel
parents:
diff changeset
196
e78566595089 initial import
mandel
parents:
diff changeset
197 if (arg)
e78566595089 initial import
mandel
parents:
diff changeset
198 {
e78566595089 initial import
mandel
parents:
diff changeset
199 env.unbind (arg, strlen (arg));
e78566595089 initial import
mandel
parents:
diff changeset
200 }
e78566595089 initial import
mandel
parents:
diff changeset
201 }
e78566595089 initial import
mandel
parents:
diff changeset
202
e78566595089 initial import
mandel
parents:
diff changeset
203 else if (! strncmp (arg, "-D", 2))
e78566595089 initial import
mandel
parents:
diff changeset
204 {
e78566595089 initial import
mandel
parents:
diff changeset
205 arg += 2;
e78566595089 initial import
mandel
parents:
diff changeset
206
e78566595089 initial import
mandel
parents:
diff changeset
207 if (! arg [0] && argv [1])
e78566595089 initial import
mandel
parents:
diff changeset
208 arg = *++argv;
e78566595089 initial import
mandel
parents:
diff changeset
209
e78566595089 initial import
mandel
parents:
diff changeset
210 if (arg)
e78566595089 initial import
mandel
parents:
diff changeset
211 {
e78566595089 initial import
mandel
parents:
diff changeset
212 pp_macro __macro;
e78566595089 initial import
mandel
parents:
diff changeset
213
e78566595089 initial import
mandel
parents:
diff changeset
214 char const *end = arg;
e78566595089 initial import
mandel
parents:
diff changeset
215 char const *eq = 0;
e78566595089 initial import
mandel
parents:
diff changeset
216
e78566595089 initial import
mandel
parents:
diff changeset
217 for (; *end; ++end)
e78566595089 initial import
mandel
parents:
diff changeset
218 {
e78566595089 initial import
mandel
parents:
diff changeset
219 if (*end == '=')
e78566595089 initial import
mandel
parents:
diff changeset
220 eq = end;
e78566595089 initial import
mandel
parents:
diff changeset
221 }
e78566595089 initial import
mandel
parents:
diff changeset
222
e78566595089 initial import
mandel
parents:
diff changeset
223 if (eq != 0)
e78566595089 initial import
mandel
parents:
diff changeset
224 {
e78566595089 initial import
mandel
parents:
diff changeset
225 __macro.name = pp_symbol::get (arg, eq - arg);
e78566595089 initial import
mandel
parents:
diff changeset
226 __macro.definition = pp_symbol::get (eq + 1, end - (eq + 1));
e78566595089 initial import
mandel
parents:
diff changeset
227 }
e78566595089 initial import
mandel
parents:
diff changeset
228
e78566595089 initial import
mandel
parents:
diff changeset
229 else
e78566595089 initial import
mandel
parents:
diff changeset
230 {
e78566595089 initial import
mandel
parents:
diff changeset
231 __macro.name = pp_symbol::get (arg, end - arg);
e78566595089 initial import
mandel
parents:
diff changeset
232 __macro.definition = 0;
e78566595089 initial import
mandel
parents:
diff changeset
233 }
e78566595089 initial import
mandel
parents:
diff changeset
234
e78566595089 initial import
mandel
parents:
diff changeset
235 env.bind (__macro.name, __macro);
e78566595089 initial import
mandel
parents:
diff changeset
236 }
e78566595089 initial import
mandel
parents:
diff changeset
237 }
e78566595089 initial import
mandel
parents:
diff changeset
238 else
e78566595089 initial import
mandel
parents:
diff changeset
239 {
e78566595089 initial import
mandel
parents:
diff changeset
240 extra_args += " ";
e78566595089 initial import
mandel
parents:
diff changeset
241 extra_args += arg;
e78566595089 initial import
mandel
parents:
diff changeset
242 }
e78566595089 initial import
mandel
parents:
diff changeset
243 }
e78566595089 initial import
mandel
parents:
diff changeset
244
e78566595089 initial import
mandel
parents:
diff changeset
245 if (! input_file || opt_help)
e78566595089 initial import
mandel
parents:
diff changeset
246 {
e78566595089 initial import
mandel
parents:
diff changeset
247 usage ();
e78566595089 initial import
mandel
parents:
diff changeset
248 return EXIT_FAILURE;
e78566595089 initial import
mandel
parents:
diff changeset
249 }
e78566595089 initial import
mandel
parents:
diff changeset
250
e78566595089 initial import
mandel
parents:
diff changeset
251 std::string __ifile (input_file);
e78566595089 initial import
mandel
parents:
diff changeset
252 bool is_c_file = false;
e78566595089 initial import
mandel
parents:
diff changeset
253 if (__ifile.size () > 2 && __ifile [__ifile.size () - 1] == 'c' && __ifile [__ifile.size () - 2] == '.')
e78566595089 initial import
mandel
parents:
diff changeset
254 {
e78566595089 initial import
mandel
parents:
diff changeset
255 is_c_file = true;
e78566595089 initial import
mandel
parents:
diff changeset
256 env.unbind ("__cplusplus", 11);
e78566595089 initial import
mandel
parents:
diff changeset
257
e78566595089 initial import
mandel
parents:
diff changeset
258 pp_macro __macro;
e78566595089 initial import
mandel
parents:
diff changeset
259 __macro.name = pp_symbol::get ("__null");
e78566595089 initial import
mandel
parents:
diff changeset
260 __macro.definition = pp_symbol::get ("((void*) 0)");
e78566595089 initial import
mandel
parents:
diff changeset
261 env.bind (__macro.name, __macro);
e78566595089 initial import
mandel
parents:
diff changeset
262
e78566595089 initial import
mandel
parents:
diff changeset
263 // turn off the pch
e78566595089 initial import
mandel
parents:
diff changeset
264 include_pch_file = 0;
e78566595089 initial import
mandel
parents:
diff changeset
265 }
e78566595089 initial import
mandel
parents:
diff changeset
266 else if (include_pch_file)
e78566595089 initial import
mandel
parents:
diff changeset
267 {
e78566595089 initial import
mandel
parents:
diff changeset
268 std::string __pch (include_pch_file);
e78566595089 initial import
mandel
parents:
diff changeset
269 __pch += ".gch/c++.conf";
e78566595089 initial import
mandel
parents:
diff changeset
270
e78566595089 initial import
mandel
parents:
diff changeset
271 //std::cerr << "*** pch file " << __pch << std::endl;
e78566595089 initial import
mandel
parents:
diff changeset
272 preprocess.file (__pch, null_out);
e78566595089 initial import
mandel
parents:
diff changeset
273 }
e78566595089 initial import
mandel
parents:
diff changeset
274
e78566595089 initial import
mandel
parents:
diff changeset
275 if (opt_dump_macros)
e78566595089 initial import
mandel
parents:
diff changeset
276 {
e78566595089 initial import
mandel
parents:
diff changeset
277 preprocess.file (input_file, null_out);
e78566595089 initial import
mandel
parents:
diff changeset
278 dump_macros (env, preprocess, std::cout);
e78566595089 initial import
mandel
parents:
diff changeset
279 return EXIT_SUCCESS;
e78566595089 initial import
mandel
parents:
diff changeset
280 }
e78566595089 initial import
mandel
parents:
diff changeset
281
e78566595089 initial import
mandel
parents:
diff changeset
282 preprocess.file (input_file, out);
e78566595089 initial import
mandel
parents:
diff changeset
283
e78566595089 initial import
mandel
parents:
diff changeset
284 if (opt_pch)
e78566595089 initial import
mandel
parents:
diff changeset
285 {
e78566595089 initial import
mandel
parents:
diff changeset
286 if (! output_file)
e78566595089 initial import
mandel
parents:
diff changeset
287 {
e78566595089 initial import
mandel
parents:
diff changeset
288 std::cerr << "*** WARNING expected a file name" << std::endl;
e78566595089 initial import
mandel
parents:
diff changeset
289 return EXIT_FAILURE;
e78566595089 initial import
mandel
parents:
diff changeset
290 }
e78566595089 initial import
mandel
parents:
diff changeset
291
e78566595089 initial import
mandel
parents:
diff changeset
292 std::string __conf_file (output_file);
e78566595089 initial import
mandel
parents:
diff changeset
293 __conf_file += ".conf";
e78566595089 initial import
mandel
parents:
diff changeset
294
e78566595089 initial import
mandel
parents:
diff changeset
295 std::ofstream __out;
e78566595089 initial import
mandel
parents:
diff changeset
296 __out.open (__conf_file.c_str ());
e78566595089 initial import
mandel
parents:
diff changeset
297 dump_macros (env, preprocess, __out);
e78566595089 initial import
mandel
parents:
diff changeset
298 __out.close ();
e78566595089 initial import
mandel
parents:
diff changeset
299
e78566595089 initial import
mandel
parents:
diff changeset
300 std::string __pp_file (output_file);
e78566595089 initial import
mandel
parents:
diff changeset
301 __pp_file += ".i";
e78566595089 initial import
mandel
parents:
diff changeset
302
e78566595089 initial import
mandel
parents:
diff changeset
303 __out.open (__pp_file.c_str ());
e78566595089 initial import
mandel
parents:
diff changeset
304 __out.write (result.c_str (), result.size ());
e78566595089 initial import
mandel
parents:
diff changeset
305 __out.close ();
e78566595089 initial import
mandel
parents:
diff changeset
306 return EXIT_SUCCESS;
e78566595089 initial import
mandel
parents:
diff changeset
307 }
e78566595089 initial import
mandel
parents:
diff changeset
308
e78566595089 initial import
mandel
parents:
diff changeset
309 std::ostream *__out = &std::cout;
e78566595089 initial import
mandel
parents:
diff changeset
310 std::ofstream __ofile;
e78566595089 initial import
mandel
parents:
diff changeset
311
e78566595089 initial import
mandel
parents:
diff changeset
312 if (output_file)
e78566595089 initial import
mandel
parents:
diff changeset
313 {
e78566595089 initial import
mandel
parents:
diff changeset
314 std::string __output_file_name (output_file);
e78566595089 initial import
mandel
parents:
diff changeset
315 __ofile.open (output_file);
e78566595089 initial import
mandel
parents:
diff changeset
316 __out = &__ofile;
e78566595089 initial import
mandel
parents:
diff changeset
317 }
e78566595089 initial import
mandel
parents:
diff changeset
318
e78566595089 initial import
mandel
parents:
diff changeset
319 if (include_pch_file)
e78566595089 initial import
mandel
parents:
diff changeset
320 {
e78566595089 initial import
mandel
parents:
diff changeset
321 std::string __pch (include_pch_file);
e78566595089 initial import
mandel
parents:
diff changeset
322 __pch += ".gch/c++.i";
e78566595089 initial import
mandel
parents:
diff changeset
323
e78566595089 initial import
mandel
parents:
diff changeset
324 std::ifstream __in (__pch.c_str ());
e78566595089 initial import
mandel
parents:
diff changeset
325
e78566595089 initial import
mandel
parents:
diff changeset
326 char buffer [1024];
e78566595089 initial import
mandel
parents:
diff changeset
327 while (__in.read (buffer, 1024))
e78566595089 initial import
mandel
parents:
diff changeset
328 __out->write (buffer, 1024);
e78566595089 initial import
mandel
parents:
diff changeset
329
e78566595089 initial import
mandel
parents:
diff changeset
330 __in.close ();
e78566595089 initial import
mandel
parents:
diff changeset
331 }
e78566595089 initial import
mandel
parents:
diff changeset
332
e78566595089 initial import
mandel
parents:
diff changeset
333 __out->write (result.c_str (), result.size ());
e78566595089 initial import
mandel
parents:
diff changeset
334
e78566595089 initial import
mandel
parents:
diff changeset
335 if (output_file)
e78566595089 initial import
mandel
parents:
diff changeset
336 __ofile.close ();
e78566595089 initial import
mandel
parents:
diff changeset
337
e78566595089 initial import
mandel
parents:
diff changeset
338 return EXIT_SUCCESS;
e78566595089 initial import
mandel
parents:
diff changeset
339 }
e78566595089 initial import
mandel
parents:
diff changeset
340
e78566595089 initial import
mandel
parents:
diff changeset
341 // kate: space-indent on; indent-width 2; replace-tabs on;
e78566595089 initial import
mandel
parents:
diff changeset
342