annotate generator/typeparser.cpp @ 379:a795eeb3b21f

example minor change
author Eldar Insafutdinov
date Sat, 10 Jul 2010 22:16:33 +0100
parents e78566595089
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 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 1992-2008 Nokia. All rights reserved.
e78566595089 initial import
mandel
parents:
diff changeset
4 **
e78566595089 initial import
mandel
parents:
diff changeset
5 ** This file is part of Qt Jambi.
e78566595089 initial import
mandel
parents:
diff changeset
6 **
e78566595089 initial import
mandel
parents:
diff changeset
7 ** * Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
8 * Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
9 * accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
10 * Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
11 * a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
12 *
e78566595089 initial import
mandel
parents:
diff changeset
13 *
e78566595089 initial import
mandel
parents:
diff changeset
14 * GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
15 * Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
16 * General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
17 * Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
18 * the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
19 * to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
20 * http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
21 * http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
22 * exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
23 * are described in the Nokia Qt GPL Exception version 1.2, included in
e78566595089 initial import
mandel
parents:
diff changeset
24 * the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
25 *
e78566595089 initial import
mandel
parents:
diff changeset
26 * Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
27 * As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
28 * Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
29 * right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
30 * provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
31 *
e78566595089 initial import
mandel
parents:
diff changeset
32 *
e78566595089 initial import
mandel
parents:
diff changeset
33 * If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
34 * contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
35
e78566595089 initial import
mandel
parents:
diff changeset
36 **
e78566595089 initial import
mandel
parents:
diff changeset
37 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
e78566595089 initial import
mandel
parents:
diff changeset
38 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
e78566595089 initial import
mandel
parents:
diff changeset
39 **
e78566595089 initial import
mandel
parents:
diff changeset
40 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
41
e78566595089 initial import
mandel
parents:
diff changeset
42 #include "typeparser.h"
e78566595089 initial import
mandel
parents:
diff changeset
43
e78566595089 initial import
mandel
parents:
diff changeset
44 #include <qdebug.h>
e78566595089 initial import
mandel
parents:
diff changeset
45 #include <QStack>
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 class Scanner
e78566595089 initial import
mandel
parents:
diff changeset
48 {
e78566595089 initial import
mandel
parents:
diff changeset
49 public:
e78566595089 initial import
mandel
parents:
diff changeset
50 enum Token {
e78566595089 initial import
mandel
parents:
diff changeset
51 StarToken,
e78566595089 initial import
mandel
parents:
diff changeset
52 AmpersandToken,
e78566595089 initial import
mandel
parents:
diff changeset
53 LessThanToken,
e78566595089 initial import
mandel
parents:
diff changeset
54 ColonToken,
e78566595089 initial import
mandel
parents:
diff changeset
55 CommaToken,
e78566595089 initial import
mandel
parents:
diff changeset
56 OpenParenToken,
e78566595089 initial import
mandel
parents:
diff changeset
57 CloseParenToken,
e78566595089 initial import
mandel
parents:
diff changeset
58 SquareBegin,
e78566595089 initial import
mandel
parents:
diff changeset
59 SquareEnd,
e78566595089 initial import
mandel
parents:
diff changeset
60 GreaterThanToken,
e78566595089 initial import
mandel
parents:
diff changeset
61
e78566595089 initial import
mandel
parents:
diff changeset
62 ConstToken,
e78566595089 initial import
mandel
parents:
diff changeset
63 Identifier,
e78566595089 initial import
mandel
parents:
diff changeset
64 NoToken
e78566595089 initial import
mandel
parents:
diff changeset
65 };
e78566595089 initial import
mandel
parents:
diff changeset
66
e78566595089 initial import
mandel
parents:
diff changeset
67 Scanner(const QString &s)
e78566595089 initial import
mandel
parents:
diff changeset
68 : m_pos(0), m_length(s.length()), m_chars(s.constData())
e78566595089 initial import
mandel
parents:
diff changeset
69 {
e78566595089 initial import
mandel
parents:
diff changeset
70 }
e78566595089 initial import
mandel
parents:
diff changeset
71
e78566595089 initial import
mandel
parents:
diff changeset
72 Token nextToken();
e78566595089 initial import
mandel
parents:
diff changeset
73 QString identifier() const;
e78566595089 initial import
mandel
parents:
diff changeset
74
e78566595089 initial import
mandel
parents:
diff changeset
75 private:
e78566595089 initial import
mandel
parents:
diff changeset
76 int m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
77 int m_length;
e78566595089 initial import
mandel
parents:
diff changeset
78 int m_token_start;
e78566595089 initial import
mandel
parents:
diff changeset
79 const QChar *m_chars;
e78566595089 initial import
mandel
parents:
diff changeset
80 };
e78566595089 initial import
mandel
parents:
diff changeset
81
e78566595089 initial import
mandel
parents:
diff changeset
82 QString Scanner::identifier() const
e78566595089 initial import
mandel
parents:
diff changeset
83 {
e78566595089 initial import
mandel
parents:
diff changeset
84 return QString(m_chars + m_token_start, m_pos - m_token_start);
e78566595089 initial import
mandel
parents:
diff changeset
85 }
e78566595089 initial import
mandel
parents:
diff changeset
86
e78566595089 initial import
mandel
parents:
diff changeset
87 Scanner::Token Scanner::nextToken()
e78566595089 initial import
mandel
parents:
diff changeset
88 {
e78566595089 initial import
mandel
parents:
diff changeset
89 Token tok = NoToken;
e78566595089 initial import
mandel
parents:
diff changeset
90
e78566595089 initial import
mandel
parents:
diff changeset
91 // remove whitespace
e78566595089 initial import
mandel
parents:
diff changeset
92 while (m_pos < m_length && m_chars[m_pos] == ' ') {
e78566595089 initial import
mandel
parents:
diff changeset
93 ++m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
94 }
e78566595089 initial import
mandel
parents:
diff changeset
95
e78566595089 initial import
mandel
parents:
diff changeset
96 m_token_start = m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
97
e78566595089 initial import
mandel
parents:
diff changeset
98 while (m_pos < m_length) {
e78566595089 initial import
mandel
parents:
diff changeset
99
e78566595089 initial import
mandel
parents:
diff changeset
100 const QChar &c = m_chars[m_pos];
e78566595089 initial import
mandel
parents:
diff changeset
101
e78566595089 initial import
mandel
parents:
diff changeset
102 if (tok == NoToken) {
e78566595089 initial import
mandel
parents:
diff changeset
103 switch (c.toLatin1()) {
e78566595089 initial import
mandel
parents:
diff changeset
104 case '*': tok = StarToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
105 case '&': tok = AmpersandToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
106 case '<': tok = LessThanToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
107 case '>': tok = GreaterThanToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
108 case ',': tok = CommaToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
109 case '(': tok = OpenParenToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
110 case ')': tok = CloseParenToken; break;
e78566595089 initial import
mandel
parents:
diff changeset
111 case '[': tok = SquareBegin; break;
e78566595089 initial import
mandel
parents:
diff changeset
112 case ']' : tok = SquareEnd; break;
e78566595089 initial import
mandel
parents:
diff changeset
113 case ':':
e78566595089 initial import
mandel
parents:
diff changeset
114 tok = ColonToken;
e78566595089 initial import
mandel
parents:
diff changeset
115 Q_ASSERT(m_pos + 1 < m_length);
e78566595089 initial import
mandel
parents:
diff changeset
116 ++m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
117 break;
e78566595089 initial import
mandel
parents:
diff changeset
118 default:
e78566595089 initial import
mandel
parents:
diff changeset
119 if (c.isLetterOrNumber() || c == '_')
e78566595089 initial import
mandel
parents:
diff changeset
120 tok = Identifier;
e78566595089 initial import
mandel
parents:
diff changeset
121 else
e78566595089 initial import
mandel
parents:
diff changeset
122 qFatal("Unrecognized character in lexer: %c", c.toLatin1());
e78566595089 initial import
mandel
parents:
diff changeset
123 break;
e78566595089 initial import
mandel
parents:
diff changeset
124 }
e78566595089 initial import
mandel
parents:
diff changeset
125 }
e78566595089 initial import
mandel
parents:
diff changeset
126
e78566595089 initial import
mandel
parents:
diff changeset
127 if (tok <= GreaterThanToken) {
e78566595089 initial import
mandel
parents:
diff changeset
128 ++m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
129 break;
e78566595089 initial import
mandel
parents:
diff changeset
130 }
e78566595089 initial import
mandel
parents:
diff changeset
131
e78566595089 initial import
mandel
parents:
diff changeset
132 if (tok == Identifier) {
e78566595089 initial import
mandel
parents:
diff changeset
133 if (c.isLetterOrNumber() || c == '_')
e78566595089 initial import
mandel
parents:
diff changeset
134 ++m_pos;
e78566595089 initial import
mandel
parents:
diff changeset
135 else
e78566595089 initial import
mandel
parents:
diff changeset
136 break;
e78566595089 initial import
mandel
parents:
diff changeset
137 }
e78566595089 initial import
mandel
parents:
diff changeset
138 }
e78566595089 initial import
mandel
parents:
diff changeset
139
e78566595089 initial import
mandel
parents:
diff changeset
140 if (tok == Identifier && m_pos - m_token_start == 5) {
e78566595089 initial import
mandel
parents:
diff changeset
141 if (m_chars[m_token_start] == 'c'
e78566595089 initial import
mandel
parents:
diff changeset
142 && m_chars[m_token_start + 1] == 'o'
e78566595089 initial import
mandel
parents:
diff changeset
143 && m_chars[m_token_start + 2] == 'n'
e78566595089 initial import
mandel
parents:
diff changeset
144 && m_chars[m_token_start + 3] == 's'
e78566595089 initial import
mandel
parents:
diff changeset
145 && m_chars[m_token_start + 4] == 't')
e78566595089 initial import
mandel
parents:
diff changeset
146 tok = ConstToken;
e78566595089 initial import
mandel
parents:
diff changeset
147 }
e78566595089 initial import
mandel
parents:
diff changeset
148
e78566595089 initial import
mandel
parents:
diff changeset
149 return tok;
e78566595089 initial import
mandel
parents:
diff changeset
150
e78566595089 initial import
mandel
parents:
diff changeset
151 }
e78566595089 initial import
mandel
parents:
diff changeset
152
e78566595089 initial import
mandel
parents:
diff changeset
153 TypeParser::Info TypeParser::parse(const QString &str)
e78566595089 initial import
mandel
parents:
diff changeset
154 {
e78566595089 initial import
mandel
parents:
diff changeset
155 Scanner scanner(str);
e78566595089 initial import
mandel
parents:
diff changeset
156
e78566595089 initial import
mandel
parents:
diff changeset
157 Info info;
e78566595089 initial import
mandel
parents:
diff changeset
158 QStack<Info *> stack;
e78566595089 initial import
mandel
parents:
diff changeset
159 stack.push(&info);
e78566595089 initial import
mandel
parents:
diff changeset
160
e78566595089 initial import
mandel
parents:
diff changeset
161 bool colon_prefix = false;
e78566595089 initial import
mandel
parents:
diff changeset
162 bool in_array = false;
e78566595089 initial import
mandel
parents:
diff changeset
163 QString array;
e78566595089 initial import
mandel
parents:
diff changeset
164
e78566595089 initial import
mandel
parents:
diff changeset
165 Scanner::Token tok = scanner.nextToken();
e78566595089 initial import
mandel
parents:
diff changeset
166 while (tok != Scanner::NoToken) {
e78566595089 initial import
mandel
parents:
diff changeset
167
e78566595089 initial import
mandel
parents:
diff changeset
168 // switch (tok) {
e78566595089 initial import
mandel
parents:
diff changeset
169 // case Scanner::StarToken: printf(" - *\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
170 // case Scanner::AmpersandToken: printf(" - &\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
171 // case Scanner::LessThanToken: printf(" - <\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
172 // case Scanner::GreaterThanToken: printf(" - >\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
173 // case Scanner::ColonToken: printf(" - ::\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
174 // case Scanner::CommaToken: printf(" - ,\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
175 // case Scanner::ConstToken: printf(" - const\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
176 // case Scanner::SquareBegin: printf(" - [\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
177 // case Scanner::SquareEnd: printf(" - ]\n"); break;
e78566595089 initial import
mandel
parents:
diff changeset
178 // case Scanner::Identifier: printf(" - '%s'\n", qPrintable(scanner.identifier())); break;
e78566595089 initial import
mandel
parents:
diff changeset
179 // default:
e78566595089 initial import
mandel
parents:
diff changeset
180 // break;
e78566595089 initial import
mandel
parents:
diff changeset
181 // }
e78566595089 initial import
mandel
parents:
diff changeset
182
e78566595089 initial import
mandel
parents:
diff changeset
183 switch (tok) {
e78566595089 initial import
mandel
parents:
diff changeset
184
e78566595089 initial import
mandel
parents:
diff changeset
185 case Scanner::StarToken:
e78566595089 initial import
mandel
parents:
diff changeset
186 ++stack.top()->indirections;
e78566595089 initial import
mandel
parents:
diff changeset
187 break;
e78566595089 initial import
mandel
parents:
diff changeset
188
e78566595089 initial import
mandel
parents:
diff changeset
189 case Scanner::AmpersandToken:
e78566595089 initial import
mandel
parents:
diff changeset
190 stack.top()->is_reference = true;
e78566595089 initial import
mandel
parents:
diff changeset
191 break;
e78566595089 initial import
mandel
parents:
diff changeset
192
e78566595089 initial import
mandel
parents:
diff changeset
193 case Scanner::LessThanToken:
e78566595089 initial import
mandel
parents:
diff changeset
194 stack.top()->template_instantiations << Info();
e78566595089 initial import
mandel
parents:
diff changeset
195 stack.push(&stack.top()->template_instantiations.last());
e78566595089 initial import
mandel
parents:
diff changeset
196 break;
e78566595089 initial import
mandel
parents:
diff changeset
197
e78566595089 initial import
mandel
parents:
diff changeset
198 case Scanner::CommaToken:
e78566595089 initial import
mandel
parents:
diff changeset
199 stack.pop();
e78566595089 initial import
mandel
parents:
diff changeset
200 stack.top()->template_instantiations << Info();
e78566595089 initial import
mandel
parents:
diff changeset
201 stack.push(&stack.top()->template_instantiations.last());
e78566595089 initial import
mandel
parents:
diff changeset
202 break;
e78566595089 initial import
mandel
parents:
diff changeset
203
e78566595089 initial import
mandel
parents:
diff changeset
204 case Scanner::GreaterThanToken:
e78566595089 initial import
mandel
parents:
diff changeset
205 stack.pop();
e78566595089 initial import
mandel
parents:
diff changeset
206 break;
e78566595089 initial import
mandel
parents:
diff changeset
207
e78566595089 initial import
mandel
parents:
diff changeset
208 case Scanner::ColonToken:
e78566595089 initial import
mandel
parents:
diff changeset
209 colon_prefix = true;
e78566595089 initial import
mandel
parents:
diff changeset
210 break;
e78566595089 initial import
mandel
parents:
diff changeset
211
e78566595089 initial import
mandel
parents:
diff changeset
212 case Scanner::ConstToken:
e78566595089 initial import
mandel
parents:
diff changeset
213 stack.top()->is_constant = true;
e78566595089 initial import
mandel
parents:
diff changeset
214 break;
e78566595089 initial import
mandel
parents:
diff changeset
215
e78566595089 initial import
mandel
parents:
diff changeset
216 case Scanner::OpenParenToken: // function pointers not supported
e78566595089 initial import
mandel
parents:
diff changeset
217 case Scanner::CloseParenToken:
e78566595089 initial import
mandel
parents:
diff changeset
218 {
e78566595089 initial import
mandel
parents:
diff changeset
219 Info i;
e78566595089 initial import
mandel
parents:
diff changeset
220 i.is_busted = true;
e78566595089 initial import
mandel
parents:
diff changeset
221 return i;
e78566595089 initial import
mandel
parents:
diff changeset
222 }
e78566595089 initial import
mandel
parents:
diff changeset
223
e78566595089 initial import
mandel
parents:
diff changeset
224
e78566595089 initial import
mandel
parents:
diff changeset
225 case Scanner::Identifier:
e78566595089 initial import
mandel
parents:
diff changeset
226 if (in_array) {
e78566595089 initial import
mandel
parents:
diff changeset
227 array = scanner.identifier();
e78566595089 initial import
mandel
parents:
diff changeset
228 } else if (colon_prefix || stack.top()->qualified_name.isEmpty()) {
e78566595089 initial import
mandel
parents:
diff changeset
229 stack.top()->qualified_name << scanner.identifier();
e78566595089 initial import
mandel
parents:
diff changeset
230 colon_prefix = false;
e78566595089 initial import
mandel
parents:
diff changeset
231 } else {
e78566595089 initial import
mandel
parents:
diff changeset
232 stack.top()->qualified_name.last().append(" " + scanner.identifier());
e78566595089 initial import
mandel
parents:
diff changeset
233 }
e78566595089 initial import
mandel
parents:
diff changeset
234 break;
e78566595089 initial import
mandel
parents:
diff changeset
235
e78566595089 initial import
mandel
parents:
diff changeset
236 case Scanner::SquareBegin:
e78566595089 initial import
mandel
parents:
diff changeset
237 in_array = true;
e78566595089 initial import
mandel
parents:
diff changeset
238 break;
e78566595089 initial import
mandel
parents:
diff changeset
239
e78566595089 initial import
mandel
parents:
diff changeset
240 case Scanner::SquareEnd:
e78566595089 initial import
mandel
parents:
diff changeset
241 in_array = false;
e78566595089 initial import
mandel
parents:
diff changeset
242 stack.top()->arrays += array;
e78566595089 initial import
mandel
parents:
diff changeset
243 break;
e78566595089 initial import
mandel
parents:
diff changeset
244
e78566595089 initial import
mandel
parents:
diff changeset
245
e78566595089 initial import
mandel
parents:
diff changeset
246 default:
e78566595089 initial import
mandel
parents:
diff changeset
247 break;
e78566595089 initial import
mandel
parents:
diff changeset
248 }
e78566595089 initial import
mandel
parents:
diff changeset
249
e78566595089 initial import
mandel
parents:
diff changeset
250 tok = scanner.nextToken();
e78566595089 initial import
mandel
parents:
diff changeset
251 }
e78566595089 initial import
mandel
parents:
diff changeset
252
e78566595089 initial import
mandel
parents:
diff changeset
253 return info;
e78566595089 initial import
mandel
parents:
diff changeset
254 }
e78566595089 initial import
mandel
parents:
diff changeset
255
e78566595089 initial import
mandel
parents:
diff changeset
256 QString TypeParser::Info::instantiationName() const
e78566595089 initial import
mandel
parents:
diff changeset
257 {
e78566595089 initial import
mandel
parents:
diff changeset
258 QString s(qualified_name.join("::"));
e78566595089 initial import
mandel
parents:
diff changeset
259 if (!template_instantiations.isEmpty()) {
e78566595089 initial import
mandel
parents:
diff changeset
260 s += '<';
e78566595089 initial import
mandel
parents:
diff changeset
261 for (int i=0; i<template_instantiations.size(); ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
262 if (i != 0)
e78566595089 initial import
mandel
parents:
diff changeset
263 s += ",";
e78566595089 initial import
mandel
parents:
diff changeset
264 s += template_instantiations.at(i).toString();
e78566595089 initial import
mandel
parents:
diff changeset
265 }
e78566595089 initial import
mandel
parents:
diff changeset
266 s += '>';
e78566595089 initial import
mandel
parents:
diff changeset
267 }
e78566595089 initial import
mandel
parents:
diff changeset
268
e78566595089 initial import
mandel
parents:
diff changeset
269 return s;
e78566595089 initial import
mandel
parents:
diff changeset
270 }
e78566595089 initial import
mandel
parents:
diff changeset
271
e78566595089 initial import
mandel
parents:
diff changeset
272 QString TypeParser::Info::toString() const
e78566595089 initial import
mandel
parents:
diff changeset
273 {
e78566595089 initial import
mandel
parents:
diff changeset
274 QString s;
e78566595089 initial import
mandel
parents:
diff changeset
275
e78566595089 initial import
mandel
parents:
diff changeset
276 if (is_constant) s += "const ";
e78566595089 initial import
mandel
parents:
diff changeset
277 s += instantiationName();
e78566595089 initial import
mandel
parents:
diff changeset
278 for (int i=0; i<arrays.size(); ++i)
e78566595089 initial import
mandel
parents:
diff changeset
279 s += "[" + arrays.at(i) + "]";
e78566595089 initial import
mandel
parents:
diff changeset
280 s += QString(indirections, '*');
e78566595089 initial import
mandel
parents:
diff changeset
281 if (is_reference) s += '&';
e78566595089 initial import
mandel
parents:
diff changeset
282
e78566595089 initial import
mandel
parents:
diff changeset
283 return s;
e78566595089 initial import
mandel
parents:
diff changeset
284 }