annotate generator/parser/rpp/pp-engine.h @ 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 #ifndef PP_ENGINE_H
e78566595089 initial import
mandel
parents:
diff changeset
45 #define PP_ENGINE_H
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 namespace rpp {
e78566595089 initial import
mandel
parents:
diff changeset
48
e78566595089 initial import
mandel
parents:
diff changeset
49 struct Value
e78566595089 initial import
mandel
parents:
diff changeset
50 {
e78566595089 initial import
mandel
parents:
diff changeset
51 enum Kind {
e78566595089 initial import
mandel
parents:
diff changeset
52 Kind_Long,
e78566595089 initial import
mandel
parents:
diff changeset
53 Kind_ULong,
e78566595089 initial import
mandel
parents:
diff changeset
54 };
e78566595089 initial import
mandel
parents:
diff changeset
55
e78566595089 initial import
mandel
parents:
diff changeset
56 Kind kind;
e78566595089 initial import
mandel
parents:
diff changeset
57
e78566595089 initial import
mandel
parents:
diff changeset
58 union {
e78566595089 initial import
mandel
parents:
diff changeset
59 long l;
e78566595089 initial import
mandel
parents:
diff changeset
60 unsigned long ul;
e78566595089 initial import
mandel
parents:
diff changeset
61 };
e78566595089 initial import
mandel
parents:
diff changeset
62
e78566595089 initial import
mandel
parents:
diff changeset
63 inline bool is_ulong () const { return kind == Kind_ULong; }
e78566595089 initial import
mandel
parents:
diff changeset
64
e78566595089 initial import
mandel
parents:
diff changeset
65 inline void set_ulong (unsigned long v)
e78566595089 initial import
mandel
parents:
diff changeset
66 {
e78566595089 initial import
mandel
parents:
diff changeset
67 ul = v;
e78566595089 initial import
mandel
parents:
diff changeset
68 kind = Kind_ULong;
e78566595089 initial import
mandel
parents:
diff changeset
69 }
e78566595089 initial import
mandel
parents:
diff changeset
70
e78566595089 initial import
mandel
parents:
diff changeset
71 inline void set_long (long v)
e78566595089 initial import
mandel
parents:
diff changeset
72 {
e78566595089 initial import
mandel
parents:
diff changeset
73 l = v;
e78566595089 initial import
mandel
parents:
diff changeset
74 kind = Kind_Long;
e78566595089 initial import
mandel
parents:
diff changeset
75 }
e78566595089 initial import
mandel
parents:
diff changeset
76
e78566595089 initial import
mandel
parents:
diff changeset
77 inline bool is_zero () const { return l == 0; }
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79 #define PP_DEFINE_BIN_OP(name, op) \
e78566595089 initial import
mandel
parents:
diff changeset
80 inline Value &name (const Value &other) \
e78566595089 initial import
mandel
parents:
diff changeset
81 { \
e78566595089 initial import
mandel
parents:
diff changeset
82 if (is_ulong () || other.is_ulong ()) \
e78566595089 initial import
mandel
parents:
diff changeset
83 set_ulong (ul op other.ul); \
e78566595089 initial import
mandel
parents:
diff changeset
84 else \
e78566595089 initial import
mandel
parents:
diff changeset
85 set_long (l op other.l); \
e78566595089 initial import
mandel
parents:
diff changeset
86 return *this; \
e78566595089 initial import
mandel
parents:
diff changeset
87 }
e78566595089 initial import
mandel
parents:
diff changeset
88
e78566595089 initial import
mandel
parents:
diff changeset
89 PP_DEFINE_BIN_OP(op_add, +)
e78566595089 initial import
mandel
parents:
diff changeset
90 PP_DEFINE_BIN_OP(op_sub, -)
e78566595089 initial import
mandel
parents:
diff changeset
91 PP_DEFINE_BIN_OP(op_mult, *)
e78566595089 initial import
mandel
parents:
diff changeset
92 PP_DEFINE_BIN_OP(op_div, /)
e78566595089 initial import
mandel
parents:
diff changeset
93 PP_DEFINE_BIN_OP(op_mod, %)
e78566595089 initial import
mandel
parents:
diff changeset
94 PP_DEFINE_BIN_OP(op_lhs, <<)
e78566595089 initial import
mandel
parents:
diff changeset
95 PP_DEFINE_BIN_OP(op_rhs, >>)
e78566595089 initial import
mandel
parents:
diff changeset
96 PP_DEFINE_BIN_OP(op_lt, <)
e78566595089 initial import
mandel
parents:
diff changeset
97 PP_DEFINE_BIN_OP(op_gt, >)
e78566595089 initial import
mandel
parents:
diff changeset
98 PP_DEFINE_BIN_OP(op_le, <=)
e78566595089 initial import
mandel
parents:
diff changeset
99 PP_DEFINE_BIN_OP(op_ge, >=)
e78566595089 initial import
mandel
parents:
diff changeset
100 PP_DEFINE_BIN_OP(op_eq, ==)
e78566595089 initial import
mandel
parents:
diff changeset
101 PP_DEFINE_BIN_OP(op_ne, !=)
e78566595089 initial import
mandel
parents:
diff changeset
102 PP_DEFINE_BIN_OP(op_bit_and, &)
e78566595089 initial import
mandel
parents:
diff changeset
103 PP_DEFINE_BIN_OP(op_bit_or, |)
e78566595089 initial import
mandel
parents:
diff changeset
104 PP_DEFINE_BIN_OP(op_bit_xor, ^)
e78566595089 initial import
mandel
parents:
diff changeset
105 PP_DEFINE_BIN_OP(op_and, &&)
e78566595089 initial import
mandel
parents:
diff changeset
106 PP_DEFINE_BIN_OP(op_or, ||)
e78566595089 initial import
mandel
parents:
diff changeset
107
e78566595089 initial import
mandel
parents:
diff changeset
108 #undef PP_DEFINE_BIN_OP
e78566595089 initial import
mandel
parents:
diff changeset
109 };
e78566595089 initial import
mandel
parents:
diff changeset
110
e78566595089 initial import
mandel
parents:
diff changeset
111 class pp
e78566595089 initial import
mandel
parents:
diff changeset
112 {
e78566595089 initial import
mandel
parents:
diff changeset
113 pp_environment &env;
e78566595089 initial import
mandel
parents:
diff changeset
114 pp_macro_expander expand;
e78566595089 initial import
mandel
parents:
diff changeset
115 pp_skip_identifier skip_identifier;
e78566595089 initial import
mandel
parents:
diff changeset
116 pp_skip_comment_or_divop skip_comment_or_divop;
e78566595089 initial import
mandel
parents:
diff changeset
117 pp_skip_blanks skip_blanks;
e78566595089 initial import
mandel
parents:
diff changeset
118 pp_skip_number skip_number;
e78566595089 initial import
mandel
parents:
diff changeset
119 std::vector<std::string> include_paths;
e78566595089 initial import
mandel
parents:
diff changeset
120 std::string _M_current_text;
e78566595089 initial import
mandel
parents:
diff changeset
121
e78566595089 initial import
mandel
parents:
diff changeset
122 enum { MAX_LEVEL = 512 };
e78566595089 initial import
mandel
parents:
diff changeset
123 int _M_skipping[MAX_LEVEL];
e78566595089 initial import
mandel
parents:
diff changeset
124 int _M_true_test[MAX_LEVEL];
e78566595089 initial import
mandel
parents:
diff changeset
125 int iflevel;
e78566595089 initial import
mandel
parents:
diff changeset
126
e78566595089 initial import
mandel
parents:
diff changeset
127 union
e78566595089 initial import
mandel
parents:
diff changeset
128 {
e78566595089 initial import
mandel
parents:
diff changeset
129 long token_value;
e78566595089 initial import
mandel
parents:
diff changeset
130 unsigned long token_uvalue;
e78566595089 initial import
mandel
parents:
diff changeset
131 std::string *token_text;
e78566595089 initial import
mandel
parents:
diff changeset
132 };
e78566595089 initial import
mandel
parents:
diff changeset
133
e78566595089 initial import
mandel
parents:
diff changeset
134 enum INCLUDE_POLICY
e78566595089 initial import
mandel
parents:
diff changeset
135 {
e78566595089 initial import
mandel
parents:
diff changeset
136 INCLUDE_GLOBAL,
e78566595089 initial import
mandel
parents:
diff changeset
137 INCLUDE_LOCAL
e78566595089 initial import
mandel
parents:
diff changeset
138 };
e78566595089 initial import
mandel
parents:
diff changeset
139
e78566595089 initial import
mandel
parents:
diff changeset
140 enum TOKEN_TYPE
e78566595089 initial import
mandel
parents:
diff changeset
141 {
e78566595089 initial import
mandel
parents:
diff changeset
142 TOKEN_NUMBER = 1000,
e78566595089 initial import
mandel
parents:
diff changeset
143 TOKEN_UNUMBER,
e78566595089 initial import
mandel
parents:
diff changeset
144 TOKEN_IDENTIFIER,
e78566595089 initial import
mandel
parents:
diff changeset
145 TOKEN_DEFINED,
e78566595089 initial import
mandel
parents:
diff changeset
146 TOKEN_LT_LT,
e78566595089 initial import
mandel
parents:
diff changeset
147 TOKEN_LT_EQ,
e78566595089 initial import
mandel
parents:
diff changeset
148 TOKEN_GT_GT,
e78566595089 initial import
mandel
parents:
diff changeset
149 TOKEN_GT_EQ,
e78566595089 initial import
mandel
parents:
diff changeset
150 TOKEN_EQ_EQ,
e78566595089 initial import
mandel
parents:
diff changeset
151 TOKEN_NOT_EQ,
e78566595089 initial import
mandel
parents:
diff changeset
152 TOKEN_OR_OR,
e78566595089 initial import
mandel
parents:
diff changeset
153 TOKEN_AND_AND,
e78566595089 initial import
mandel
parents:
diff changeset
154 };
e78566595089 initial import
mandel
parents:
diff changeset
155
e78566595089 initial import
mandel
parents:
diff changeset
156 enum PP_DIRECTIVE_TYPE
e78566595089 initial import
mandel
parents:
diff changeset
157 {
e78566595089 initial import
mandel
parents:
diff changeset
158 PP_UNKNOWN_DIRECTIVE,
e78566595089 initial import
mandel
parents:
diff changeset
159 PP_DEFINE,
e78566595089 initial import
mandel
parents:
diff changeset
160 PP_INCLUDE,
e78566595089 initial import
mandel
parents:
diff changeset
161 PP_INCLUDE_NEXT,
e78566595089 initial import
mandel
parents:
diff changeset
162 PP_ELIF,
e78566595089 initial import
mandel
parents:
diff changeset
163 PP_ELSE,
e78566595089 initial import
mandel
parents:
diff changeset
164 PP_ENDIF,
e78566595089 initial import
mandel
parents:
diff changeset
165 PP_IF,
e78566595089 initial import
mandel
parents:
diff changeset
166 PP_IFDEF,
e78566595089 initial import
mandel
parents:
diff changeset
167 PP_IFNDEF,
e78566595089 initial import
mandel
parents:
diff changeset
168 PP_UNDEF,
e78566595089 initial import
mandel
parents:
diff changeset
169 PP_PRAGMA,
52
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
170 PP_ERROR,
09a0f1d048f2 update parser to that from jambi 4.5, attemt to fix building with gcc 4.4
eldar
parents: 1
diff changeset
171 PP_WARNING
1
e78566595089 initial import
mandel
parents:
diff changeset
172 };
e78566595089 initial import
mandel
parents:
diff changeset
173
e78566595089 initial import
mandel
parents:
diff changeset
174 public:
e78566595089 initial import
mandel
parents:
diff changeset
175 pp (pp_environment &__env);
e78566595089 initial import
mandel
parents:
diff changeset
176
e78566595089 initial import
mandel
parents:
diff changeset
177 inline std::back_insert_iterator<std::vector<std::string> > include_paths_inserter ();
e78566595089 initial import
mandel
parents:
diff changeset
178
e78566595089 initial import
mandel
parents:
diff changeset
179 inline void push_include_path (std::string const &__path);
e78566595089 initial import
mandel
parents:
diff changeset
180
e78566595089 initial import
mandel
parents:
diff changeset
181 inline std::vector<std::string>::iterator include_paths_begin ();
e78566595089 initial import
mandel
parents:
diff changeset
182 inline std::vector<std::string>::iterator include_paths_end ();
e78566595089 initial import
mandel
parents:
diff changeset
183
e78566595089 initial import
mandel
parents:
diff changeset
184 inline std::vector<std::string>::const_iterator include_paths_begin () const;
e78566595089 initial import
mandel
parents:
diff changeset
185 inline std::vector<std::string>::const_iterator include_paths_end () const;
e78566595089 initial import
mandel
parents:
diff changeset
186
e78566595089 initial import
mandel
parents:
diff changeset
187 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
188 inline _InputIterator eval_expression (_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
189
e78566595089 initial import
mandel
parents:
diff changeset
190 template <typename _OutputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
191 void file (std::string const &filename, _OutputIterator __result);
e78566595089 initial import
mandel
parents:
diff changeset
192
e78566595089 initial import
mandel
parents:
diff changeset
193 template <typename _OutputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
194 void file (FILE *fp, _OutputIterator __result);
e78566595089 initial import
mandel
parents:
diff changeset
195
e78566595089 initial import
mandel
parents:
diff changeset
196 template <typename _InputIterator, typename _OutputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
197 void operator () (_InputIterator __first, _InputIterator __last, _OutputIterator __result);
e78566595089 initial import
mandel
parents:
diff changeset
198
e78566595089 initial import
mandel
parents:
diff changeset
199 private:
e78566595089 initial import
mandel
parents:
diff changeset
200 inline bool file_isdir (std::string const &__filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
201 inline bool file_exists (std::string const &__filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
202 FILE *find_include_file (std::string const &__filename, std::string *__filepath,
e78566595089 initial import
mandel
parents:
diff changeset
203 INCLUDE_POLICY __include_policy, bool __skip_current_path = false) const;
e78566595089 initial import
mandel
parents:
diff changeset
204
e78566595089 initial import
mandel
parents:
diff changeset
205 inline int skipping() const;
e78566595089 initial import
mandel
parents:
diff changeset
206 bool test_if_level();
e78566595089 initial import
mandel
parents:
diff changeset
207
e78566595089 initial import
mandel
parents:
diff changeset
208 inline std::string fix_file_path (std::string const &filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
209 inline bool is_absolute (std::string const &filename) const;
e78566595089 initial import
mandel
parents:
diff changeset
210
e78566595089 initial import
mandel
parents:
diff changeset
211 PP_DIRECTIVE_TYPE find_directive (char const *__directive, std::size_t __size) const;
e78566595089 initial import
mandel
parents:
diff changeset
212
e78566595089 initial import
mandel
parents:
diff changeset
213 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
214 bool find_header_protection (_InputIterator __first, _InputIterator __last, std::string *__prot);
e78566595089 initial import
mandel
parents:
diff changeset
215
e78566595089 initial import
mandel
parents:
diff changeset
216 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
217 _InputIterator skip (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
218
e78566595089 initial import
mandel
parents:
diff changeset
219 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
220 _InputIterator eval_primary(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
221
e78566595089 initial import
mandel
parents:
diff changeset
222 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
223 _InputIterator eval_multiplicative(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
224
e78566595089 initial import
mandel
parents:
diff changeset
225 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
226 _InputIterator eval_additive(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
227
e78566595089 initial import
mandel
parents:
diff changeset
228 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
229 _InputIterator eval_shift(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
230
e78566595089 initial import
mandel
parents:
diff changeset
231 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
232 _InputIterator eval_relational(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
233
e78566595089 initial import
mandel
parents:
diff changeset
234 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
235 _InputIterator eval_equality(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
236
e78566595089 initial import
mandel
parents:
diff changeset
237 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
238 _InputIterator eval_and(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
239
e78566595089 initial import
mandel
parents:
diff changeset
240 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
241 _InputIterator eval_xor(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
242
e78566595089 initial import
mandel
parents:
diff changeset
243 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
244 _InputIterator eval_or(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
245
e78566595089 initial import
mandel
parents:
diff changeset
246 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
247 _InputIterator eval_logical_and(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
248
e78566595089 initial import
mandel
parents:
diff changeset
249 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
250 _InputIterator eval_logical_or(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
251
e78566595089 initial import
mandel
parents:
diff changeset
252 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
253 _InputIterator eval_constant_expression(_InputIterator __first, _InputIterator __last, Value *result);
e78566595089 initial import
mandel
parents:
diff changeset
254
e78566595089 initial import
mandel
parents:
diff changeset
255 template <typename _InputIterator, typename _OutputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
256 _InputIterator handle_directive(char const *__directive, std::size_t __size,
e78566595089 initial import
mandel
parents:
diff changeset
257 _InputIterator __first, _InputIterator __last, _OutputIterator __result);
e78566595089 initial import
mandel
parents:
diff changeset
258
e78566595089 initial import
mandel
parents:
diff changeset
259 template <typename _InputIterator, typename _OutputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
260 _InputIterator handle_include(bool skip_current_path, _InputIterator __first, _InputIterator __last,
e78566595089 initial import
mandel
parents:
diff changeset
261 _OutputIterator __result);
e78566595089 initial import
mandel
parents:
diff changeset
262
e78566595089 initial import
mandel
parents:
diff changeset
263 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
264 _InputIterator handle_define (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
265
e78566595089 initial import
mandel
parents:
diff changeset
266 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
267 _InputIterator handle_if (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
268
e78566595089 initial import
mandel
parents:
diff changeset
269 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
270 _InputIterator handle_else (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
271
e78566595089 initial import
mandel
parents:
diff changeset
272 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
273 _InputIterator handle_elif (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
274
e78566595089 initial import
mandel
parents:
diff changeset
275 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
276 _InputIterator handle_endif (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
277
e78566595089 initial import
mandel
parents:
diff changeset
278 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
279 _InputIterator handle_ifdef (bool check_undefined, _InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
280
e78566595089 initial import
mandel
parents:
diff changeset
281 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
282 _InputIterator handle_undef(_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
283
e78566595089 initial import
mandel
parents:
diff changeset
284 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
285 inline char peek_char (_InputIterator __first, _InputIterator __last);
e78566595089 initial import
mandel
parents:
diff changeset
286
e78566595089 initial import
mandel
parents:
diff changeset
287 template <typename _InputIterator>
e78566595089 initial import
mandel
parents:
diff changeset
288 _InputIterator next_token (_InputIterator __first, _InputIterator __last, int *kind);
e78566595089 initial import
mandel
parents:
diff changeset
289 };
e78566595089 initial import
mandel
parents:
diff changeset
290
e78566595089 initial import
mandel
parents:
diff changeset
291 } // namespace rpp
e78566595089 initial import
mandel
parents:
diff changeset
292
e78566595089 initial import
mandel
parents:
diff changeset
293 #endif // PP_ENGINE_H
e78566595089 initial import
mandel
parents:
diff changeset
294
e78566595089 initial import
mandel
parents:
diff changeset
295 // kate: space-indent on; indent-width 2; replace-tabs on;