| 1 | /**************************************************************************** | 
| 2 | ** | 
| 3 | ** Copyright (C) 2016 The Qt Company Ltd. | 
| 4 | ** Contact: https://www.qt.io/licensing/ | 
| 5 | ** | 
| 6 | ** This file is part of the QtXmlPatterns module of the Qt Toolkit. | 
| 7 | ** | 
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | 
| 9 | ** Commercial License Usage | 
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | 
| 11 | ** accordance with the commercial license agreement provided with the | 
| 12 | ** Software or, alternatively, in accordance with the terms contained in | 
| 13 | ** a written agreement between you and The Qt Company. For licensing terms | 
| 14 | ** and conditions see https://www.qt.io/terms-conditions. For further | 
| 15 | ** information use the contact form at https://www.qt.io/contact-us. | 
| 16 | ** | 
| 17 | ** GNU Lesser General Public License Usage | 
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
| 19 | ** General Public License version 3 as published by the Free Software | 
| 20 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the | 
| 21 | ** packaging of this file. Please review the following information to | 
| 22 | ** ensure the GNU Lesser General Public License version 3 requirements | 
| 23 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. | 
| 24 | ** | 
| 25 | ** GNU General Public License Usage | 
| 26 | ** Alternatively, this file may be used under the terms of the GNU | 
| 27 | ** General Public License version 2.0 or (at your option) the GNU General | 
| 28 | ** Public license version 3 or any later version approved by the KDE Free | 
| 29 | ** Qt Foundation. The licenses are as published by the Free Software | 
| 30 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 | 
| 31 | ** included in the packaging of this file. Please review the following | 
| 32 | ** information to ensure the GNU General Public License requirements will | 
| 33 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and | 
| 34 | ** https://www.gnu.org/licenses/gpl-3.0.html. | 
| 35 | ** | 
| 36 | ** $QT_END_LICENSE$ | 
| 37 | ** | 
| 38 | ****************************************************************************/ | 
| 39 |  | 
| 40 | // | 
| 41 | //  W A R N I N G | 
| 42 | //  ------------- | 
| 43 | // | 
| 44 | // This file is not part of the Qt API.  It exists purely as an | 
| 45 | // implementation detail.  This header file may change from version to | 
| 46 | // version without notice, or even be removed. | 
| 47 | // | 
| 48 | // We mean it. | 
| 49 |  | 
| 50 | /* A Bison parser, made by GNU Bison 3.3.2.  */ | 
| 51 |  | 
| 52 | /* Bison implementation for Yacc-like parsers in C | 
| 53 |  | 
| 54 |    Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, | 
| 55 |    Inc. | 
| 56 |  | 
| 57 |    This program is free software: you can redistribute it and/or modify | 
| 58 |    it under the terms of the GNU General Public License as published by | 
| 59 |    the Free Software Foundation, either version 3 of the License, or | 
| 60 |    (at your option) any later version. | 
| 61 |  | 
| 62 |    This program is distributed in the hope that it will be useful, | 
| 63 |    but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 64 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
| 65 |    GNU General Public License for more details. | 
| 66 |  | 
| 67 |    You should have received a copy of the GNU General Public License | 
| 68 |    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ | 
| 69 |  | 
| 70 | /* As a special exception, you may create a larger work that contains | 
| 71 |    part or all of the Bison parser skeleton and distribute that work | 
| 72 |    under terms of your choice, so long as that work isn't itself a | 
| 73 |    parser generator using the skeleton or a modified version thereof | 
| 74 |    as a parser skeleton.  Alternatively, if you modify or redistribute | 
| 75 |    the parser skeleton itself, you may (at your option) remove this | 
| 76 |    special exception, which will cause the skeleton and the resulting | 
| 77 |    Bison output files to be licensed under the GNU General Public | 
| 78 |    License without this special exception. | 
| 79 |  | 
| 80 |    This special exception was added by the Free Software Foundation in | 
| 81 |    version 2.2 of Bison.  */ | 
| 82 |  | 
| 83 | /* C LALR(1) parser skeleton written by Richard Stallman, by | 
| 84 |    simplifying the original so-called "semantic" parser.  */ | 
| 85 |  | 
| 86 | /* All symbols defined below should begin with yy or YY, to avoid | 
| 87 |    infringing on user name space.  This should be done even for local | 
| 88 |    variables, as they might otherwise be expanded by user macros. | 
| 89 |    There are some unavoidable exceptions within include files to | 
| 90 |    define necessary library symbols; they are noted "INFRINGES ON | 
| 91 |    USER NAME SPACE" below.  */ | 
| 92 |  | 
| 93 | /* Undocumented macros, especially those whose name start with YY_, | 
| 94 |    are private implementation details.  Do not rely on them.  */ | 
| 95 |  | 
| 96 | /* Identify Bison output.  */ | 
| 97 | #define YYBISON 1 | 
| 98 |  | 
| 99 | /* Bison version.  */ | 
| 100 | #define YYBISON_VERSION "3.3.2" | 
| 101 |  | 
| 102 | /* Skeleton name.  */ | 
| 103 | #define YYSKELETON_NAME "yacc.c" | 
| 104 |  | 
| 105 | /* Pure parsers.  */ | 
| 106 | #define YYPURE 1 | 
| 107 |  | 
| 108 | /* Push parsers.  */ | 
| 109 | #define YYPUSH 0 | 
| 110 |  | 
| 111 | /* Pull parsers.  */ | 
| 112 | #define YYPULL 1 | 
| 113 |  | 
| 114 | /* Substitute the type names.  */ | 
| 115 | #define YYSTYPE         XPATHSTYPE | 
| 116 | #define YYLTYPE         XPATHLTYPE | 
| 117 | /* Substitute the variable and function names.  */ | 
| 118 | #define yyparse         XPathparse | 
| 119 | #define yylex           XPathlex | 
| 120 | #define yyerror         XPatherror | 
| 121 | #define yydebug         XPathdebug | 
| 122 | #define yynerrs         XPathnerrs | 
| 123 |  | 
| 124 |  | 
| 125 | /* First part of user prologue.  */ | 
| 126 | #line 50 "querytransformparser.ypp" /* yacc.c:337  */ | 
| 127 |  | 
| 128 | /**************************************************************************** | 
| 129 | ** | 
| 130 | ** Copyright (C) 2016 The Qt Company Ltd. | 
| 131 | ** Contact: https://www.qt.io/licensing/ | 
| 132 | ** | 
| 133 | ** This file is part of the QtXmlPatterns module of the Qt Toolkit. | 
| 134 | ** | 
| 135 | ** $QT_BEGIN_LICENSE:LGPL$ | 
| 136 | ** Commercial License Usage | 
| 137 | ** Licensees holding valid commercial Qt licenses may use this file in | 
| 138 | ** accordance with the commercial license agreement provided with the | 
| 139 | ** Software or, alternatively, in accordance with the terms contained in | 
| 140 | ** a written agreement between you and The Qt Company. For licensing terms | 
| 141 | ** and conditions see https://www.qt.io/terms-conditions. For further | 
| 142 | ** information use the contact form at https://www.qt.io/contact-us. | 
| 143 | ** | 
| 144 | ** GNU Lesser General Public License Usage | 
| 145 | ** Alternatively, this file may be used under the terms of the GNU Lesser | 
| 146 | ** General Public License version 3 as published by the Free Software | 
| 147 | ** Foundation and appearing in the file LICENSE.LGPL3 included in the | 
| 148 | ** packaging of this file. Please review the following information to | 
| 149 | ** ensure the GNU Lesser General Public License version 3 requirements | 
| 150 | ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. | 
| 151 | ** | 
| 152 | ** GNU General Public License Usage | 
| 153 | ** Alternatively, this file may be used under the terms of the GNU | 
| 154 | ** General Public License version 2.0 or (at your option) the GNU General | 
| 155 | ** Public license version 3 or any later version approved by the KDE Free | 
| 156 | ** Qt Foundation. The licenses are as published by the Free Software | 
| 157 | ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 | 
| 158 | ** included in the packaging of this file. Please review the following | 
| 159 | ** information to ensure the GNU General Public License requirements will | 
| 160 | ** be met: https://www.gnu.org/licenses/gpl-2.0.html and | 
| 161 | ** https://www.gnu.org/licenses/gpl-3.0.html. | 
| 162 | ** | 
| 163 | ** $QT_END_LICENSE$ | 
| 164 | ** | 
| 165 | ****************************************************************************/ | 
| 166 |  | 
| 167 | // | 
| 168 | //  W A R N I N G | 
| 169 | //  ------------- | 
| 170 | // | 
| 171 | // This file is not part of the Qt API.  It exists purely as an | 
| 172 | // implementation detail.  This header file may change from version to | 
| 173 | // version without notice, or even be removed. | 
| 174 | // | 
| 175 | // We mean it. | 
| 176 |  | 
| 177 | #include <limits> | 
| 178 |  | 
| 179 | #include <QUrl> | 
| 180 |  | 
| 181 | #include <private/qabstractfloat_p.h> | 
| 182 | #include <private/qandexpression_p.h> | 
| 183 | #include <private/qanyuri_p.h> | 
| 184 | #include <private/qapplytemplate_p.h> | 
| 185 | #include <private/qargumentreference_p.h> | 
| 186 | #include <private/qarithmeticexpression_p.h> | 
| 187 | #include <private/qatomicstring_p.h> | 
| 188 | #include <private/qattributeconstructor_p.h> | 
| 189 | #include <private/qattributenamevalidator_p.h> | 
| 190 | #include <private/qaxisstep_p.h> | 
| 191 | #include <private/qbuiltintypes_p.h> | 
| 192 | #include <private/qcalltemplate_p.h> | 
| 193 | #include <private/qcastableas_p.h> | 
| 194 | #include <private/qcastas_p.h> | 
| 195 | #include <private/qcombinenodes_p.h> | 
| 196 | #include <private/qcommentconstructor_p.h> | 
| 197 | #include <private/qcommonnamespaces_p.h> | 
| 198 | #include <private/qcommonsequencetypes_p.h> | 
| 199 | #include <private/qcommonvalues_p.h> | 
| 200 | #include <private/qcomputednamespaceconstructor_p.h> | 
| 201 | #include <private/qcontextitem_p.h> | 
| 202 | #include <private/qcopyof_p.h> | 
| 203 | #include <private/qcurrentitemstore_p.h> | 
| 204 | #include <private/qdebug_p.h> | 
| 205 | #include <private/qdelegatingnamespaceresolver_p.h> | 
| 206 | #include <private/qdocumentconstructor_p.h> | 
| 207 | #include <private/qelementconstructor_p.h> | 
| 208 | #include <private/qemptysequence_p.h> | 
| 209 | #include <private/qemptysequencetype_p.h> | 
| 210 | #include <private/qevaluationcache_p.h> | 
| 211 | #include <private/qexpressionfactory_p.h> | 
| 212 | #include <private/qexpressionsequence_p.h> | 
| 213 | #include <private/qexpressionvariablereference_p.h> | 
| 214 | #include <private/qexternalvariablereference_p.h> | 
| 215 | #include <private/qforclause_p.h> | 
| 216 | #include <private/qfunctioncall_p.h> | 
| 217 | #include <private/qfunctionfactory_p.h> | 
| 218 | #include <private/qfunctionsignature_p.h> | 
| 219 | #include <private/qgeneralcomparison_p.h> | 
| 220 | #include <private/qgenericpredicate_p.h> | 
| 221 | #include <private/qgenericsequencetype_p.h> | 
| 222 | #include <private/qifthenclause_p.h> | 
| 223 | #include <private/qinstanceof_p.h> | 
| 224 | #include <private/qletclause_p.h> | 
| 225 | #include <private/qliteral_p.h> | 
| 226 | #include <private/qlocalnametest_p.h> | 
| 227 | #include <private/qnamespaceconstructor_p.h> | 
| 228 | #include <private/qnamespacenametest_p.h> | 
| 229 | #include <private/qncnameconstructor_p.h> | 
| 230 | #include <private/qnodecomparison_p.h> | 
| 231 | #include <private/qnodesort_p.h> | 
| 232 | #include <private/qorderby_p.h> | 
| 233 | #include <private/qorexpression_p.h> | 
| 234 | #include <private/qparsercontext_p.h> | 
| 235 | #include <private/qpath_p.h> | 
| 236 | #include <private/qpatternistlocale_p.h> | 
| 237 | #include <private/qpositionalvariablereference_p.h> | 
| 238 | #include <private/qprocessinginstructionconstructor_p.h> | 
| 239 | #include <private/qqnameconstructor_p.h> | 
| 240 | #include <private/qqnametest_p.h> | 
| 241 | #include <private/qqnamevalue_p.h> | 
| 242 | #include <private/qquantifiedexpression_p.h> | 
| 243 | #include <private/qrangeexpression_p.h> | 
| 244 | #include <private/qrangevariablereference_p.h> | 
| 245 | #include <private/qreturnorderby_p.h> | 
| 246 | #include <private/qschemanumeric_p.h> | 
| 247 | #include <private/qschematypefactory_p.h> | 
| 248 | #include <private/qsimplecontentconstructor_p.h> | 
| 249 | #include <private/qstaticbaseuristore_p.h> | 
| 250 | #include <private/qstaticcompatibilitystore_p.h> | 
| 251 | #include <private/qtemplateparameterreference_p.h> | 
| 252 | #include <private/qtemplate_p.h> | 
| 253 | #include <private/qtextnodeconstructor_p.h> | 
| 254 | #include <private/qtokenizer_p.h> | 
| 255 | #include <private/qtreatas_p.h> | 
| 256 | #include <private/qtypechecker_p.h> | 
| 257 | #include <private/qunaryexpression_p.h> | 
| 258 | #include <private/qunresolvedvariablereference_p.h> | 
| 259 | #include <private/quserfunctioncallsite_p.h> | 
| 260 | #include <private/qvaluecomparison_p.h> | 
| 261 | #include <private/qxpathhelper_p.h> | 
| 262 | #include <private/qxsltsimplecontentconstructor_p.h> | 
| 263 |  | 
| 264 | /* | 
| 265 |  * The cpp generated with bison 2.1 wants to | 
| 266 |  * redeclare the C-like prototypes of 'malloc' and 'free', so we avoid that. | 
| 267 |  */ | 
| 268 | #define YYMALLOC malloc | 
| 269 | #define YYFREE free | 
| 270 |  | 
| 271 | QT_BEGIN_NAMESPACE | 
| 272 |  | 
| 273 | /* Due to Qt's QT_BEGIN_NAMESPACE magic, we can't use `using namespace', for some | 
| 274 |  * undocumented reason. */ | 
| 275 | namespace QPatternist | 
| 276 | { | 
| 277 |  | 
| 278 | /** | 
| 279 |  * "Macro that you define with #define in the Bison declarations | 
| 280 |  * section to request verbose, specific error message strings when | 
| 281 |  * yyerror is called." | 
| 282 |  */ | 
| 283 | #define YYERROR_VERBOSE 1 | 
| 284 |  | 
| 285 | #define YYLTYPE_IS_TRIVIAL 0 | 
| 286 | #define YYINITDEPTH 1 | 
| 287 | #define yyoverflow parseInfo->handleStackOverflow | 
| 288 |  | 
| 289 | /* Suppresses `warning: "YYENABLE_NLS" is not defined` | 
| 290 |  * @c YYENABLE_NLS enables Bison internationalization, and we don't | 
| 291 |  * use that, so disable it. See the Bison Manual, section 4.5 Parser Internationalization. | 
| 292 |  */ | 
| 293 | #define YYENABLE_NLS 0 | 
| 294 |  | 
| 295 | static inline QSourceLocation fromYYLTYPE(const YYLTYPE &sourceLocator, | 
| 296 |                                           const ParserContext *const parseInfo) | 
| 297 | { | 
| 298 |     return QSourceLocation(parseInfo->tokenizer->queryURI(), | 
| 299 |                            sourceLocator.first_line, | 
| 300 |                            sourceLocator.first_column); | 
| 301 | } | 
| 302 |  | 
| 303 | /** | 
| 304 |  * @internal | 
| 305 |  * @relates QXmlQuery | 
| 306 |  */ | 
| 307 | typedef QFlags<QXmlQuery::QueryLanguage> QueryLanguages; | 
| 308 |  | 
| 309 | /** | 
| 310 |  * @short Flags invalid expressions and declarations in the currently | 
| 311 |  * parsed language. | 
| 312 |  * | 
| 313 |  * Since this grammar is used for several languages: XQuery 1.0, XSL-T 2.0, and | 
| 314 |  * XPath 2.0 inside XSL-T, and field and selector patterns in W3C XML Schema's | 
| 315 |  * identity constraints, it is the union of all the constructs in these | 
| 316 |  * languages. However, when dealing with each language individually, we | 
| 317 |  * regularly need to disallow some expressions, such as direct element | 
| 318 |  * constructors when parsing XSL-T, or the typeswitch when parsing XPath. | 
| 319 |  * | 
| 320 |  * This is further complicated by that XSLTTokenizer sometimes generates code | 
| 321 |  * which is allowed in XQuery but not in XPath. For that reason the token | 
| 322 |  * INTERNAL is sometimes generated, which signals that an expression, for | 
| 323 |  * instance the @c let clause, should not be flagged as an error, because it's | 
| 324 |  * used for internal purposes. | 
| 325 |  * | 
| 326 |  * Hence, this function is called from each expression and declaration with @p | 
| 327 |  * allowedLanguages stating what languages it is allowed in. | 
| 328 |  * | 
| 329 |  * If @p isInternal is @c true, no error is raised. Otherwise, if the current | 
| 330 |  * language is not in @p allowedLanguages, an error is raised. | 
| 331 |  */ | 
| 332 | static void allowedIn(const QueryLanguages allowedLanguages, | 
| 333 |                       const ParserContext *const parseInfo, | 
| 334 |                       const YYLTYPE &sourceLocator, | 
| 335 |                       const bool isInternal = false) | 
| 336 | { | 
| 337 |     /* We treat XPath 2.0 as a subset of XSL-T 2.0, so if XPath 2.0 is allowed | 
| 338 |      * and XSL-T is the language, it's ok. */ | 
| 339 |     if(!isInternal && | 
| 340 |        (!allowedLanguages.testFlag(flag: parseInfo->languageAccent) && !(allowedLanguages.testFlag(flag: QXmlQuery::XPath20) && parseInfo->languageAccent == QXmlQuery::XSLT20))) | 
| 341 |     { | 
| 342 |  | 
| 343 |         QString langName; | 
| 344 |  | 
| 345 |         switch(parseInfo->languageAccent) | 
| 346 |         { | 
| 347 |             case QXmlQuery::XPath20: | 
| 348 |                 langName = QLatin1String("XPath 2.0" ); | 
| 349 |                 break; | 
| 350 |             case QXmlQuery::XSLT20: | 
| 351 |                 langName = QLatin1String("XSL-T 2.0" ); | 
| 352 |                 break; | 
| 353 |             case QXmlQuery::XQuery10: | 
| 354 |                 langName = QLatin1String("XQuery 1.0" ); | 
| 355 |                 break; | 
| 356 |             case QXmlQuery::XmlSchema11IdentityConstraintSelector: | 
| 357 |                 langName = QtXmlPatterns::tr(sourceText: "W3C XML Schema identity constraint selector" ); | 
| 358 |                 break; | 
| 359 |             case QXmlQuery::XmlSchema11IdentityConstraintField: | 
| 360 |                 langName = QtXmlPatterns::tr(sourceText: "W3C XML Schema identity constraint field" ); | 
| 361 |                 break; | 
| 362 |         } | 
| 363 |  | 
| 364 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A construct was encountered "  | 
| 365 |                                                           "which is disallowed in the current language(%1)." ).arg(a: langName), | 
| 366 |                                         errorCode: ReportContext::XPST0003, | 
| 367 |                                         sourceLocation: fromYYLTYPE(sourceLocator, parseInfo)); | 
| 368 |  | 
| 369 |     } | 
| 370 | } | 
| 371 |  | 
| 372 | static inline bool isVariableReference(const Expression::ID id) | 
| 373 | { | 
| 374 |     return    id == Expression::IDExpressionVariableReference | 
| 375 |            || id == Expression::IDRangeVariableReference | 
| 376 |            || id == Expression::IDArgumentReference; | 
| 377 | } | 
| 378 |  | 
| 379 | class ReflectYYLTYPE : public SourceLocationReflection | 
| 380 | { | 
| 381 | public: | 
| 382 |     inline ReflectYYLTYPE(const YYLTYPE &sourceLocator, | 
| 383 |                           const ParserContext *const pi) : m_sl(sourceLocator) | 
| 384 |                                                          , m_parseInfo(pi) | 
| 385 |     { | 
| 386 |     } | 
| 387 |  | 
| 388 |     virtual const SourceLocationReflection *actualReflection() const | 
| 389 |     { | 
| 390 |         return this; | 
| 391 |     } | 
| 392 |  | 
| 393 |     virtual QSourceLocation sourceLocation() const | 
| 394 |     { | 
| 395 |         return fromYYLTYPE(sourceLocator: m_sl, parseInfo: m_parseInfo); | 
| 396 |     } | 
| 397 |  | 
| 398 |     virtual QString description() const | 
| 399 |     { | 
| 400 |         Q_ASSERT(false); | 
| 401 |         return QString(); | 
| 402 |     } | 
| 403 |  | 
| 404 | private: | 
| 405 |     const YYLTYPE &m_sl; | 
| 406 |     const ParserContext *const m_parseInfo; | 
| 407 | }; | 
| 408 |  | 
| 409 | /** | 
| 410 |  * @short Centralizes a translation string for the purpose of increasing consistency. | 
| 411 |  */ | 
| 412 | static inline QString unknownType() | 
| 413 | { | 
| 414 |     return QtXmlPatterns::tr(sourceText: "%1 is an unknown schema type." ); | 
| 415 | } | 
| 416 |  | 
| 417 | static inline Expression::Ptr create(Expression *const expr, | 
| 418 |                                      const YYLTYPE &sourceLocator, | 
| 419 |                                      const ParserContext *const parseInfo) | 
| 420 | { | 
| 421 |     parseInfo->staticContext->addLocation(reflection: expr, location: fromYYLTYPE(sourceLocator, parseInfo)); | 
| 422 |     return Expression::Ptr(expr); | 
| 423 | } | 
| 424 |  | 
| 425 | static inline Template::Ptr create(Template *const expr, | 
| 426 |                                    const YYLTYPE &sourceLocator, | 
| 427 |                                    const ParserContext *const parseInfo) | 
| 428 | { | 
| 429 |     parseInfo->staticContext->addLocation(reflection: expr, location: fromYYLTYPE(sourceLocator, parseInfo)); | 
| 430 |     return Template::Ptr(expr); | 
| 431 | } | 
| 432 |  | 
| 433 | static inline Expression::Ptr create(const Expression::Ptr &expr, | 
| 434 |                                      const YYLTYPE &sourceLocator, | 
| 435 |                                      const ParserContext *const parseInfo) | 
| 436 | { | 
| 437 |     parseInfo->staticContext->addLocation(reflection: expr.data(), location: fromYYLTYPE(sourceLocator, parseInfo)); | 
| 438 |     return expr; | 
| 439 | } | 
| 440 |  | 
| 441 | static Expression::Ptr createSimpleContent(const Expression::Ptr &source, | 
| 442 |                                            const YYLTYPE &sourceLocator, | 
| 443 |                                            const ParserContext *const parseInfo) | 
| 444 | { | 
| 445 |     return create(expr: parseInfo->isXSLT() ? new XSLTSimpleContentConstructor(source) : new SimpleContentConstructor(source), | 
| 446 |                   sourceLocator, | 
| 447 |                   parseInfo); | 
| 448 | } | 
| 449 |  | 
| 450 | static void loadPattern(const Expression::Ptr &matchPattern, | 
| 451 |                         TemplatePattern::Vector &ourPatterns, | 
| 452 |                         const TemplatePattern::ID id, | 
| 453 |                         const PatternPriority priority, | 
| 454 |                         const Template::Ptr &temp) | 
| 455 | { | 
| 456 |     Q_ASSERT(temp); | 
| 457 |  | 
| 458 |     const PatternPriority effectivePriority = qIsNaN(d: priority) ? matchPattern->patternPriority() : priority; | 
| 459 |  | 
| 460 |     ourPatterns.append(t: TemplatePattern::Ptr(new TemplatePattern(matchPattern, effectivePriority, id, temp))); | 
| 461 | } | 
| 462 |  | 
| 463 | static Expression::Ptr typeCheckTemplateBody(const Expression::Ptr &body, | 
| 464 |                                              const SequenceType::Ptr &reqType, | 
| 465 |                                              const ParserContext *const parseInfo) | 
| 466 | { | 
| 467 |     return TypeChecker::applyFunctionConversion(operand: body, reqType, | 
| 468 |                                                 context: parseInfo->staticContext, | 
| 469 |                                                 code: ReportContext::XTTE0505, | 
| 470 |                                                 TypeChecker::Options(TypeChecker::AutomaticallyConvert | TypeChecker::GeneratePromotion)); | 
| 471 | } | 
| 472 |  | 
| 473 | static void registerNamedTemplate(const QXmlName &name, | 
| 474 |                                   const Expression::Ptr &body, | 
| 475 |                                   ParserContext *const parseInfo, | 
| 476 |                                   const YYLTYPE &sourceLocator, | 
| 477 |                                   const Template::Ptr &temp) | 
| 478 | { | 
| 479 |     Template::Ptr &e = parseInfo->namedTemplates[name]; | 
| 480 |  | 
| 481 |     if(e) | 
| 482 |     { | 
| 483 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A template with name %1 "  | 
| 484 |                                                           "has already been declared." ) | 
| 485 |                                         .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), | 
| 486 |                                                                          name)), | 
| 487 |                                         errorCode: ReportContext::XTSE0660, | 
| 488 |                                         sourceLocation: fromYYLTYPE(sourceLocator, parseInfo)); | 
| 489 |     } | 
| 490 |     else | 
| 491 |     { | 
| 492 |         e = temp; | 
| 493 |         e->body = body; | 
| 494 |     } | 
| 495 | } | 
| 496 |  | 
| 497 | /** | 
| 498 |  * @short Centralizes code for creating numeric literals. | 
| 499 |  */ | 
| 500 | template<typename TNumberClass> | 
| 501 | Expression::Ptr createNumericLiteral(const QString &in, | 
| 502 |                                      const YYLTYPE &sl, | 
| 503 |                                      const ParserContext *const parseInfo) | 
| 504 | { | 
| 505 |     const Item num(TNumberClass::fromLexical(in)); | 
| 506 |  | 
| 507 |     if(num.template as<AtomicValue>()->hasError()) | 
| 508 |     { | 
| 509 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is not a valid numeric literal." ) | 
| 510 |                                            .arg(a: formatData(data: in)), | 
| 511 |                                         errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: sl, parseInfo)); | 
| 512 |         return Expression::Ptr(); /* Avoid compiler warning. */ | 
| 513 |     } | 
| 514 |     else | 
| 515 |         return create(expr: new Literal(num), sourceLocator: sl, parseInfo); | 
| 516 | } | 
| 517 |  | 
| 518 | /** | 
| 519 |  * @short The generated Bison parser calls this function when there is a parse error. | 
| 520 |  * | 
| 521 |  * It is not called, nor should be, for logical errors(which the Bison not know about). For those, | 
| 522 |  * ReportContext::error() is called. | 
| 523 |  */ | 
| 524 | static int XPatherror(YYLTYPE *sourceLocator, const ParserContext *const parseInfo, const char *const msg) | 
| 525 | { | 
| 526 |     Q_UNUSED(sourceLocator); | 
| 527 |     Q_ASSERT(parseInfo); | 
| 528 |  | 
| 529 |     parseInfo->staticContext->error(message: escape(input: QLatin1String(msg)), errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: *sourceLocator, parseInfo)); | 
| 530 |     return 1; | 
| 531 | } | 
| 532 |  | 
| 533 | /** | 
| 534 |  * When we want to connect the OrderBy and ReturnOrderBy, it might be that we have other expressions, such | 
| 535 |  * as @c where and @c let inbetween. We need to continue through them. This function does that. | 
| 536 |  */ | 
| 537 | static ReturnOrderBy *locateReturnClause(const Expression::Ptr &expr) | 
| 538 | { | 
| 539 |     Q_ASSERT(expr); | 
| 540 |  | 
| 541 |     const Expression::ID id = expr->id(); | 
| 542 |     if(id == Expression::IDLetClause || id == Expression::IDIfThenClause || id == Expression::IDForClause) | 
| 543 |         return locateReturnClause(expr: expr->operands()[1]); | 
| 544 |     else if(id == Expression::IDReturnOrderBy) | 
| 545 |         return expr->as<ReturnOrderBy>(); | 
| 546 |     else | 
| 547 |         return 0; | 
| 548 | } | 
| 549 |  | 
| 550 | static inline bool isPredicate(const Expression::ID id) | 
| 551 | { | 
| 552 |     return id == Expression::IDGenericPredicate || | 
| 553 |            id == Expression::IDFirstItemPredicate; | 
| 554 | } | 
| 555 |  | 
| 556 | /** | 
| 557 |  * Assumes expr is an AxisStep wrapped in some kind of predicates or paths. Filters | 
| 558 |  * through the predicates and returns the AxisStep. | 
| 559 |  */ | 
| 560 | static Expression::Ptr findAxisStep(const Expression::Ptr &expr, | 
| 561 |                                     const bool throughStructures = true) | 
| 562 | { | 
| 563 |     Q_ASSERT(expr); | 
| 564 |  | 
| 565 |     if(!throughStructures) | 
| 566 |         return expr; | 
| 567 |  | 
| 568 |     Expression *candidate = expr.data(); | 
| 569 |     Expression::ID id = candidate->id(); | 
| 570 |  | 
| 571 |     while(isPredicate(id) || id == Expression::IDPath) | 
| 572 |     { | 
| 573 |         const Expression::List &children = candidate->operands(); | 
| 574 |         if(children.isEmpty()) | 
| 575 |             return Expression::Ptr(); | 
| 576 |         else | 
| 577 |         { | 
| 578 |             candidate = children.first().data(); | 
| 579 |             id = candidate->id(); | 
| 580 |         } | 
| 581 |     } | 
| 582 |  | 
| 583 |     if(id == Expression::IDEmptySequence) | 
| 584 |         return Expression::Ptr(); | 
| 585 |     else | 
| 586 |     { | 
| 587 |         Q_ASSERT(candidate->is(Expression::IDAxisStep)); | 
| 588 |         return Expression::Ptr(candidate); | 
| 589 |     } | 
| 590 | } | 
| 591 |  | 
| 592 | static void changeToTopAxis(const Expression::Ptr &op) | 
| 593 | { | 
| 594 |     /* This axis must have been written away by now. */ | 
| 595 |     Q_ASSERT(op->as<AxisStep>()->axis() != QXmlNodeModelIndex::AxisChild); | 
| 596 |  | 
| 597 |     if(op->as<AxisStep>()->axis() != QXmlNodeModelIndex::AxisSelf) | 
| 598 |         op->as<AxisStep>()->setAxis(QXmlNodeModelIndex::AxisAttributeOrTop); | 
| 599 | } | 
| 600 |  | 
| 601 | /** | 
| 602 |  * @short Writes @p operand1 and @p operand2, two operands in an XSL-T pattern, | 
| 603 |  * into an equivalent XPath expression. | 
| 604 |  * | 
| 605 |  * Essentially, the following rewrite is done: | 
| 606 |  * | 
| 607 |  * <tt> | 
| 608 |  * axis1::test1(a)/axis2::test2(b) | 
| 609 |  *              => | 
| 610 |  * child-or-top::test2(b)[parent::test1(a)] | 
| 611 |  * </tt> | 
| 612 |  * | 
| 613 |  * Section 5.5.3 The Meaning of a Pattern talks about rewrites that are applied to | 
| 614 |  * only the first step in a pattern, but since we're doing rewrites more radically, | 
| 615 |  * its line of reasoning cannot be followed. | 
| 616 |  * | 
| 617 |  * Keep in mind the rewrites that non-terminal PatternStep do. | 
| 618 |  * | 
| 619 |  * @see createIdPatternPath() | 
| 620 |  */ | 
| 621 | static inline Expression::Ptr createPatternPath(const Expression::Ptr &operand1, | 
| 622 |                                                 const Expression::Ptr &operand2, | 
| 623 |                                                 const QXmlNodeModelIndex::Axis axis, | 
| 624 |                                                 const YYLTYPE &sl, | 
| 625 |                                                 const ParserContext *const parseInfo) | 
| 626 | { | 
| 627 |     const Expression::Ptr operandL(findAxisStep(expr: operand1, throughStructures: false)); | 
| 628 |  | 
| 629 |     if(operandL->is(i: Expression::IDAxisStep)) | 
| 630 |         operandL->as<AxisStep>()->setAxis(axis); | 
| 631 |     else | 
| 632 |         findAxisStep(expr: operand1)->as<AxisStep>()->setAxis(axis); | 
| 633 |  | 
| 634 |     return create(expr: GenericPredicate::create(sourceExpression: operand2, predicateExpression: operandL, | 
| 635 |                                            context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: sl, parseInfo)), sourceLocator: sl, parseInfo); | 
| 636 | } | 
| 637 |  | 
| 638 | /** | 
| 639 |  * @short Performs the same role as createPatternPath(), but is tailored | 
| 640 |  * for @c fn:key() and @c fn:id(). | 
| 641 |  * | 
| 642 |  * @c fn:key() and @c fn:id() can be part of path patterns(only as the first step, | 
| 643 |  * to be precise) and that poses a challenge to rewriting because what | 
| 644 |  * createPatternPath() is not possible to express, since the functions cannot be | 
| 645 |  * node tests. E.g, this rewrite is not possible: | 
| 646 |  * | 
| 647 |  * <tt> | 
| 648 |  * id-or-key/abc | 
| 649 |  *  => | 
| 650 |  * child-or-top::abc[parent::id-or-key] | 
| 651 |  * </tt> | 
| 652 |  * | 
| 653 |  * Our approach is to rewrite like this: | 
| 654 |  * | 
| 655 |  * <tt> | 
| 656 |  * id-or-key/abc | 
| 657 |  * => | 
| 658 |  * child-or-top::abc[parent::node is id-or-key] | 
| 659 |  * </tt> | 
| 660 |  * | 
| 661 |  * @p operand1 is the call to @c fn:key() or @c fn:id(), @p operand2 | 
| 662 |  * the right operand, and @p axis the target axis to rewrite to. | 
| 663 |  * | 
| 664 |  * @see createPatternPath() | 
| 665 |  */ | 
| 666 | static inline Expression::Ptr createIdPatternPath(const Expression::Ptr &operand1, | 
| 667 |                                                   const Expression::Ptr &operand2, | 
| 668 |                                                   const QXmlNodeModelIndex::Axis axis, | 
| 669 |                                                   const YYLTYPE &sl, | 
| 670 |                                                   const ParserContext *const parseInfo) | 
| 671 | { | 
| 672 |     const Expression::Ptr operandR(findAxisStep(expr: operand2)); | 
| 673 |     Q_ASSERT(operandR); | 
| 674 |     changeToTopAxis(op: operandR); | 
| 675 |  | 
| 676 |     const Expression::Ptr parentStep(create(expr: new AxisStep(axis, BuiltinTypes::node), | 
| 677 |                                             sourceLocator: sl, | 
| 678 |                                             parseInfo)); | 
| 679 |     const Expression::Ptr isComp(create(expr: new NodeComparison(parentStep, | 
| 680 |                                                            QXmlNodeModelIndex::Is, | 
| 681 |                                                            operand1), | 
| 682 |                                          sourceLocator: sl, | 
| 683 |                                          parseInfo)); | 
| 684 |  | 
| 685 |     return create(expr: GenericPredicate::create(sourceExpression: operandR, predicateExpression: isComp, | 
| 686 |                                            context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: sl, parseInfo)), sourceLocator: sl, parseInfo); | 
| 687 | } | 
| 688 |  | 
| 689 | /** | 
| 690 |  * @short Centralizes a translation message, for the | 
| 691 |  * purpose of consistency and modularization. | 
| 692 |  */ | 
| 693 | static inline QString prologMessage(const char *const msg) | 
| 694 | { | 
| 695 |     Q_ASSERT(msg); | 
| 696 |     return QtXmlPatterns::tr(sourceText: "Only one %1 declaration can occur in the query prolog." ).arg(a: formatKeyword(keyword: msg)); | 
| 697 | } | 
| 698 |  | 
| 699 | /** | 
| 700 |  * @short Resolves against the static base URI and checks that @p collation | 
| 701 |  * is a supported Unicode Collation. | 
| 702 |  * | 
| 703 |  * "If a default collation declaration specifies a collation by a | 
| 704 |  *  relative URI, that relative URI is resolved to an absolute | 
| 705 |  *  URI using the base URI in the static context." | 
| 706 |  * | 
| 707 |  * @returns the Unicode Collation properly resolved, if @p collation is a valid collation | 
| 708 |  */ | 
| 709 | template<const ReportContext::ErrorCode errorCode> | 
| 710 | static QUrl resolveAndCheckCollation(const QString &collation, | 
| 711 |                                      const ParserContext *const parseInfo, | 
| 712 |                                      const YYLTYPE &sl) | 
| 713 | { | 
| 714 |     Q_ASSERT(parseInfo); | 
| 715 |     const ReflectYYLTYPE ryy(sl, parseInfo); | 
| 716 |  | 
| 717 |     QUrl uri(AnyURI::toQUrl<ReportContext::XQST0046>(value: collation, context: parseInfo->staticContext, r: &ryy)); | 
| 718 |  | 
| 719 |     if(uri.isRelative()) | 
| 720 |         uri = parseInfo->staticContext->baseURI().resolved(relative: uri); | 
| 721 |  | 
| 722 |     XPathHelper::checkCollationSupport<errorCode>(uri.toString(), parseInfo->staticContext, &ryy); | 
| 723 |  | 
| 724 |     return uri; | 
| 725 | } | 
| 726 |  | 
| 727 | /* The Bison generated parser declares macros that aren't used | 
| 728 |  * so suppress the warnings by fake usage of them. | 
| 729 |  * | 
| 730 |  * We do the same for some more defines in the first action. */ | 
| 731 | #if    defined(YYLSP_NEEDED)    \ | 
| 732 |     || defined(YYBISON)         \ | 
| 733 |     || defined(YYBISON_VERSION) \ | 
| 734 |     || defined(YYPURE)          \ | 
| 735 |     || defined(yydebug)         \ | 
| 736 |     || defined(YYSKELETON_NAME) | 
| 737 | #endif | 
| 738 |  | 
| 739 | /** | 
| 740 |  * Wraps @p operand with a CopyOf in case it makes any difference. | 
| 741 |  * | 
| 742 |  * There is no need to wrap the return value in a call to create(), it's | 
| 743 |  * already done. | 
| 744 |  */ | 
| 745 | static Expression::Ptr createCopyOf(const Expression::Ptr &operand, | 
| 746 |                                     const ParserContext *const parseInfo, | 
| 747 |                                     const YYLTYPE &sl) | 
| 748 | { | 
| 749 |     return create(expr: new CopyOf(operand, parseInfo->inheritNamespacesMode, | 
| 750 |                              parseInfo->preserveNamespacesMode), sourceLocator: sl, parseInfo); | 
| 751 | } | 
| 752 |  | 
| 753 | static Expression::Ptr createCompatStore(const Expression::Ptr &expr, | 
| 754 |                                          const YYLTYPE &sourceLocator, | 
| 755 |                                          const ParserContext *const parseInfo) | 
| 756 | { | 
| 757 |     return create(expr: new StaticCompatibilityStore(expr), sourceLocator, parseInfo); | 
| 758 | } | 
| 759 |  | 
| 760 | /** | 
| 761 |  * @short Creates an Expression that corresponds to <tt>/</tt>. This is literally | 
| 762 |  * <tt>fn:root(self::node()) treat as document-node()</tt>. | 
| 763 |  */ | 
| 764 | static Expression::Ptr createRootExpression(const ParserContext *const parseInfo, | 
| 765 |                                             const YYLTYPE &sl) | 
| 766 | { | 
| 767 |     Q_ASSERT(parseInfo); | 
| 768 |     const QXmlName name(StandardNamespaces::fn, StandardLocalNames::root); | 
| 769 |  | 
| 770 |     Expression::List args; | 
| 771 |     args.append(t: create(expr: new ContextItem(), sourceLocator: sl, parseInfo)); | 
| 772 |  | 
| 773 |     const ReflectYYLTYPE ryy(sl, parseInfo); | 
| 774 |  | 
| 775 |     const Expression::Ptr fnRoot(parseInfo->staticContext->functionSignatures() | 
| 776 |                                  ->createFunctionCall(name, arguments: args, context: parseInfo->staticContext, r: &ryy)); | 
| 777 |     Q_ASSERT(fnRoot); | 
| 778 |  | 
| 779 |     return create(expr: new TreatAs(create(expr: fnRoot, sourceLocator: sl, parseInfo), CommonSequenceTypes::ExactlyOneDocumentNode), sourceLocator: sl, parseInfo); | 
| 780 | } | 
| 781 |  | 
| 782 | static int XPathlex(YYSTYPE *lexVal, YYLTYPE *sourceLocator, const ParserContext *const parseInfo) | 
| 783 | { | 
| 784 | #ifdef Patternist_DEBUG_PARSER | 
| 785 |     /** | 
| 786 |      * "External integer variable set to zero by default. If yydebug | 
| 787 |      *  is given a nonzero value, the parser will output information on | 
| 788 |      *  input symbols and parser action. See section Debugging Your Parser." | 
| 789 |      */ | 
| 790 | #   define YYDEBUG 1 | 
| 791 |  | 
| 792 |     extern int XPathdebug; | 
| 793 |     XPathdebug = 1; | 
| 794 | #endif | 
| 795 |  | 
| 796 |     Q_ASSERT(parseInfo); | 
| 797 |  | 
| 798 |     const Tokenizer::Token tok(parseInfo->tokenizer->nextToken(sourceLocator)); | 
| 799 |  | 
| 800 |     (*lexVal).sval = tok.value; | 
| 801 |  | 
| 802 |     return static_cast<int>(tok.type); | 
| 803 | } | 
| 804 |  | 
| 805 | /** | 
| 806 |  * @short Creates a path expression which contains the step <tt>//</tt> between | 
| 807 |  * @p begin and and @p end. | 
| 808 |  * | 
| 809 |  * <tt>begin//end</tt> is a short form for: <tt>begin/descendant-or-self::node()/end</tt> | 
| 810 |  * | 
| 811 |  * This will be compiled as two-path expression: <tt>(/)/(//.)/step/</tt> | 
| 812 |  */ | 
| 813 | static Expression::Ptr createSlashSlashPath(const Expression::Ptr &begin, | 
| 814 |                                             const Expression::Ptr &end, | 
| 815 |                                             const YYLTYPE &sourceLocator, | 
| 816 |                                             const ParserContext *const parseInfo) | 
| 817 | { | 
| 818 |     const Expression::Ptr twoSlash(create(expr: new AxisStep(QXmlNodeModelIndex::AxisDescendantOrSelf, BuiltinTypes::node), sourceLocator, parseInfo)); | 
| 819 |     const Expression::Ptr p1(create(expr: new Path(begin, twoSlash), sourceLocator, parseInfo)); | 
| 820 |  | 
| 821 |     return create(expr: new Path(p1, end), sourceLocator, parseInfo); | 
| 822 | } | 
| 823 |  | 
| 824 | /** | 
| 825 |  * @short Creates a call to <tt>fn:concat()</tt> with @p args as the arguments. | 
| 826 |  */ | 
| 827 | static inline Expression::Ptr createConcatFN(const ParserContext *const parseInfo, | 
| 828 |                                              const Expression::List &args, | 
| 829 |                                              const YYLTYPE &sourceLocator) | 
| 830 | { | 
| 831 |     Q_ASSERT(parseInfo); | 
| 832 |     const QXmlName name(StandardNamespaces::fn, StandardLocalNames::concat); | 
| 833 |     const ReflectYYLTYPE ryy(sourceLocator, parseInfo); | 
| 834 |  | 
| 835 |     return create(expr: parseInfo->staticContext->functionSignatures()->createFunctionCall(name, arguments: args, context: parseInfo->staticContext, r: &ryy), | 
| 836 |                   sourceLocator, parseInfo); | 
| 837 | } | 
| 838 |  | 
| 839 | static inline Expression::Ptr createDirAttributeValue(const Expression::List &content, | 
| 840 |                                                       const ParserContext *const parseInfo, | 
| 841 |                                                       const YYLTYPE &sourceLocator) | 
| 842 | { | 
| 843 |     if(content.isEmpty()) | 
| 844 |         return create(expr: new EmptySequence(), sourceLocator, parseInfo); | 
| 845 |     else if(content.size() == 1) | 
| 846 |         return content.first(); | 
| 847 |     else | 
| 848 |         return createConcatFN(parseInfo, args: content, sourceLocator); | 
| 849 | } | 
| 850 |  | 
| 851 | /** | 
| 852 |  * @short Checks for variable initialization circularity. | 
| 853 |  * | 
| 854 |  * "A recursive function that checks for recursion is full of ironies." | 
| 855 |  * | 
| 856 |  *      -- The Salsa Master | 
| 857 |  * | 
| 858 |  * Issues an error via @p parseInfo's StaticContext if the initialization | 
| 859 |  * expression @p checkee for the global variable @p var, contains a variable | 
| 860 |  * reference to @p var. That is, if there's a circularity. | 
| 861 |  * | 
| 862 |  * @see <a href="http://www.w3.org/TR/xquery/#ERRXQST0054">XQuery 1.0: An XML | 
| 863 |  * Query Language, err:XQST0054</a> | 
| 864 |  */ | 
| 865 | static void checkVariableCircularity(const VariableDeclaration::Ptr &var, | 
| 866 |                                      const Expression::Ptr &checkee, | 
| 867 |                                      const VariableDeclaration::Type type, | 
| 868 |                                      FunctionSignature::List &signList, | 
| 869 |                                      const ParserContext *const parseInfo) | 
| 870 | { | 
| 871 |     Q_ASSERT(var); | 
| 872 |     Q_ASSERT(checkee); | 
| 873 |     Q_ASSERT(parseInfo); | 
| 874 |  | 
| 875 |     const Expression::ID id = checkee->id(); | 
| 876 |  | 
| 877 |     if(id == Expression::IDExpressionVariableReference) | 
| 878 |     { | 
| 879 |         const ExpressionVariableReference *const ref = | 
| 880 |                     static_cast<const ExpressionVariableReference *>(checkee.data()); | 
| 881 |  | 
| 882 |         if(var->slot == ref->slot() && type == ref->variableDeclaration()->type) | 
| 883 |         { | 
| 884 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The initialization of variable %1 "  | 
| 885 |                                                               "depends on itself" ).arg(a: formatKeyword(var, np: parseInfo->staticContext->namePool())), | 
| 886 |                                             errorCode: parseInfo->isXSLT() ? ReportContext::XTDE0640 : ReportContext::XQST0054, reflection: ref); | 
| 887 |             return; | 
| 888 |         } | 
| 889 |         else | 
| 890 |         { | 
| 891 |             /* If the variable we're checking is below another variable, it can be a recursive | 
| 892 |              * dependency through functions, so we need to check variable references too. */ | 
| 893 |             checkVariableCircularity(var, checkee: ref->sourceExpression(), type, signList, parseInfo); | 
| 894 |             return; | 
| 895 |         } | 
| 896 |     } | 
| 897 |     else if(id == Expression::IDUserFunctionCallsite) | 
| 898 |     { | 
| 899 |         const UserFunctionCallsite::Ptr callsite(checkee); | 
| 900 |         const FunctionSignature::Ptr sign(callsite->callTargetDescription()); | 
| 901 |         const FunctionSignature::List::const_iterator end(signList.constEnd()); | 
| 902 |         FunctionSignature::List::const_iterator it(signList.constBegin()); | 
| 903 |         bool noMatch = true; | 
| 904 |  | 
| 905 |         for(; it != end; ++it) | 
| 906 |         { | 
| 907 |             if(*it == sign) | 
| 908 |             { | 
| 909 |                 /* The variable we're checking is depending on a function that's recursive. The | 
| 910 |                  * user has written a weird query, in other words. Since it's the second time | 
| 911 |                  * we've encountered a callsite, we now skip it. */ | 
| 912 |                 noMatch = false; | 
| 913 |                 break; | 
| 914 |             } | 
| 915 |         } | 
| 916 |  | 
| 917 |         if(noMatch) | 
| 918 |         { | 
| 919 |             signList.append(t: sign); | 
| 920 |             /* Check the body of the function being called. */ | 
| 921 |             checkVariableCircularity(var, checkee: callsite->body(), type, signList, parseInfo); | 
| 922 |         } | 
| 923 |         /* Continue with the operands, such that we also check the arguments of the callsite. */ | 
| 924 |     } | 
| 925 |     else if(id == Expression::IDUnresolvedVariableReference) | 
| 926 |     { | 
| 927 |         /* We're called before it has rewritten itself. */ | 
| 928 |         checkVariableCircularity(var, checkee: checkee->as<UnresolvedVariableReference>()->replacement(), type, signList, parseInfo); | 
| 929 |     } | 
| 930 |  | 
| 931 |     /* Check the operands. */ | 
| 932 |     const Expression::List ops(checkee->operands()); | 
| 933 |     if(ops.isEmpty()) | 
| 934 |         return; | 
| 935 |  | 
| 936 |     const Expression::List::const_iterator end(ops.constEnd()); | 
| 937 |     Expression::List::const_iterator it(ops.constBegin()); | 
| 938 |  | 
| 939 |     for(; it != end; ++it) | 
| 940 |         checkVariableCircularity(var, checkee: *it, type, signList, parseInfo); | 
| 941 | } | 
| 942 |  | 
| 943 | static void variableUnavailable(const QXmlName &variableName, | 
| 944 |                                 const ParserContext *const parseInfo, | 
| 945 |                                 const YYLTYPE &location) | 
| 946 | { | 
| 947 |     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "No variable with name %1 exists" ) | 
| 948 |                                        .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: variableName)), | 
| 949 |                                     errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: location, parseInfo)); | 
| 950 | } | 
| 951 |  | 
| 952 | /** | 
| 953 |  * The Cardinality in a TypeDeclaration for a variable in a quantification has no effect, | 
| 954 |  * and this function ensures this by changing @p type to Cardinality Cardinality::zeroOrMore(). | 
| 955 |  * | 
| 956 |  * @see <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=3305">Bugzilla Bug 3305 | 
| 957 |  * Cardinality + on range variables</a> | 
| 958 |  * @see ParserContext::finalizePushedVariable() | 
| 959 |  */ | 
| 960 | static inline SequenceType::Ptr quantificationType(const SequenceType::Ptr &type) | 
| 961 | { | 
| 962 |     Q_ASSERT(type); | 
| 963 |     return makeGenericSequenceType(itemType: type->itemType(), cardinality: Cardinality::zeroOrMore()); | 
| 964 | } | 
| 965 |  | 
| 966 | /** | 
| 967 |  * @p seqType and @p expr may be @c null. | 
| 968 |  */ | 
| 969 | static Expression::Ptr pushVariable(const QXmlName name, | 
| 970 |                                     const SequenceType::Ptr &seqType, | 
| 971 |                                     const Expression::Ptr &expr, | 
| 972 |                                     const VariableDeclaration::Type type, | 
| 973 |                                     const YYLTYPE &sourceLocator, | 
| 974 |                                     ParserContext *const parseInfo, | 
| 975 |                                     const bool checkSource = true) | 
| 976 | { | 
| 977 |     Q_ASSERT(!name.isNull()); | 
| 978 |     Q_ASSERT(parseInfo); | 
| 979 |  | 
| 980 |     /* -2 will cause Q_ASSERTs to trigger if it isn't changed. */ | 
| 981 |     VariableSlotID slot = -2; | 
| 982 |  | 
| 983 |     switch(type) | 
| 984 |     { | 
| 985 |         case VariableDeclaration::FunctionArgument: | 
| 986 |         case VariableDeclaration::ExpressionVariable: | 
| 987 |         { | 
| 988 |             slot = parseInfo->allocateExpressionSlot(); | 
| 989 |             break; | 
| 990 |         } | 
| 991 |         case VariableDeclaration::GlobalVariable: | 
| 992 |         { | 
| 993 |             slot = parseInfo->allocateGlobalVariableSlot(); | 
| 994 |             break; | 
| 995 |         } | 
| 996 |         case VariableDeclaration::RangeVariable: | 
| 997 |         { | 
| 998 |             slot = parseInfo->staticContext->allocateRangeSlot(); | 
| 999 |             break; | 
| 1000 |         } | 
| 1001 |         case VariableDeclaration::PositionalVariable: | 
| 1002 |         { | 
| 1003 |             slot = parseInfo->allocatePositionalSlot(); | 
| 1004 |             break; | 
| 1005 |         } | 
| 1006 |         case VariableDeclaration::TemplateParameter: | 
| 1007 |             /* Fallthrough. We do nothing, template parameters | 
| 1008 |              * doesn't use context slots at all, they're hashed | 
| 1009 |              * on the name. */ | 
| 1010 |         case VariableDeclaration::ExternalVariable: | 
| 1011 |             /* We do nothing, external variables doesn't use | 
| 1012 |              *context slots/stack frames at all. */ | 
| 1013 |             ; | 
| 1014 |     } | 
| 1015 |  | 
| 1016 |     const VariableDeclaration::Ptr var(new VariableDeclaration(name, slot, type, seqType)); | 
| 1017 |  | 
| 1018 |     Expression::Ptr checked; | 
| 1019 |  | 
| 1020 |     if(checkSource && seqType) | 
| 1021 |     { | 
| 1022 |         if(expr) | 
| 1023 |         { | 
| 1024 |             /* We only want to add conversion for function arguments, and variables | 
| 1025 |              * if we're XSL-T. | 
| 1026 |              * | 
| 1027 |              * We unconditionally skip TypeChecker::CheckFocus because the StaticContext we | 
| 1028 |              * pass hasn't set up the focus yet, since that's the parent's responsibility. */ | 
| 1029 |             const TypeChecker::Options options((   type == VariableDeclaration::FunctionArgument | 
| 1030 |                                                 || type == VariableDeclaration::TemplateParameter | 
| 1031 |                                                 || parseInfo->isXSLT()) | 
| 1032 |                                                ? TypeChecker::AutomaticallyConvert : TypeChecker::Options()); | 
| 1033 |  | 
| 1034 |             checked = TypeChecker::applyFunctionConversion(operand: expr, reqType: seqType, context: parseInfo->staticContext, | 
| 1035 |                                                            code: parseInfo->isXSLT() ? ReportContext::XTTE0570 : ReportContext::XPTY0004, | 
| 1036 |                                                            options); | 
| 1037 |         } | 
| 1038 |     } | 
| 1039 |     else | 
| 1040 |         checked = expr; | 
| 1041 |  | 
| 1042 |     /* Add an evaluation cache for all expression variables. No EvaluationCache is needed for | 
| 1043 |      * positional variables because in the end they are calls to Iterator::position(). Similarly, | 
| 1044 |      * no need to cache range variables either because they are calls to DynamicContext::rangeVariable(). | 
| 1045 |      * | 
| 1046 |      * We don't do it for function arguments because the Expression being cached depends -- it depends | 
| 1047 |      * on the callsite. UserFunctionCallsite is responsible for the evaluation caches in that case. | 
| 1048 |      * | 
| 1049 |      * In some cases the EvaluationCache instance isn't necessary, but in those cases EvaluationCache | 
| 1050 |      * optimizes itself away. */ | 
| 1051 |     if(type == VariableDeclaration::ExpressionVariable) | 
| 1052 |         checked = create(expr: new EvaluationCache<false>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo); | 
| 1053 |     else if(type == VariableDeclaration::GlobalVariable) | 
| 1054 |         checked = create(expr: new EvaluationCache<true>(checked, var, parseInfo->allocateCacheSlot()), sourceLocator, parseInfo); | 
| 1055 |  | 
| 1056 |     var->setExpression(checked); | 
| 1057 |  | 
| 1058 |     parseInfo->variables.push(t: var); | 
| 1059 |     return checked; | 
| 1060 | } | 
| 1061 |  | 
| 1062 | static inline VariableDeclaration::Ptr variableByName(const QXmlName name, | 
| 1063 |                                                       const ParserContext *const parseInfo) | 
| 1064 | { | 
| 1065 |     Q_ASSERT(!name.isNull()); | 
| 1066 |     Q_ASSERT(parseInfo); | 
| 1067 |  | 
| 1068 |     /* We walk the list backwards. */ | 
| 1069 |     const VariableDeclaration::Stack::const_iterator start(parseInfo->variables.constBegin()); | 
| 1070 |     VariableDeclaration::Stack::const_iterator it(parseInfo->variables.constEnd()); | 
| 1071 |  | 
| 1072 |     while(it != start) | 
| 1073 |     { | 
| 1074 |         --it; | 
| 1075 |         Q_ASSERT(*it); | 
| 1076 |         if((*it)->name == name) | 
| 1077 |             return *it; | 
| 1078 |     } | 
| 1079 |  | 
| 1080 |     return VariableDeclaration::Ptr(); | 
| 1081 | } | 
| 1082 |  | 
| 1083 | static Expression::Ptr resolveVariable(const QXmlName &name, | 
| 1084 |                                        const YYLTYPE &sourceLocator, | 
| 1085 |                                        ParserContext *const parseInfo, | 
| 1086 |                                        const bool raiseErrorOnUnavailability) | 
| 1087 | { | 
| 1088 |     const VariableDeclaration::Ptr var(variableByName(name, parseInfo)); | 
| 1089 |     Expression::Ptr retval; | 
| 1090 |  | 
| 1091 |     if(var && var->type != VariableDeclaration::ExternalVariable) | 
| 1092 |     { | 
| 1093 |         switch(var->type) | 
| 1094 |         { | 
| 1095 |             case VariableDeclaration::RangeVariable: | 
| 1096 |             { | 
| 1097 |                 retval = create(expr: new RangeVariableReference(var->expression(), var->slot), sourceLocator, parseInfo); | 
| 1098 |                 break; | 
| 1099 |             } | 
| 1100 |             case VariableDeclaration::GlobalVariable: | 
| 1101 |             /* Fallthrough. From the perspective of an ExpressionVariableReference, it can't tell | 
| 1102 |              * a difference between a global and a local expression variable. However, the cache | 
| 1103 |              * mechanism must. */ | 
| 1104 |             case VariableDeclaration::ExpressionVariable: | 
| 1105 |             { | 
| 1106 |                 retval = create(expr: new ExpressionVariableReference(var->slot, var.data()), sourceLocator, parseInfo); | 
| 1107 |                 break; | 
| 1108 |             } | 
| 1109 |             case VariableDeclaration::FunctionArgument: | 
| 1110 |             { | 
| 1111 |                 retval = create(expr: new ArgumentReference(var->sequenceType, var->slot), sourceLocator, parseInfo); | 
| 1112 |                 break; | 
| 1113 |             } | 
| 1114 |             case VariableDeclaration::PositionalVariable: | 
| 1115 |             { | 
| 1116 |                 retval = create(expr: new PositionalVariableReference(var->slot), sourceLocator, parseInfo); | 
| 1117 |                 break; | 
| 1118 |             } | 
| 1119 |             case VariableDeclaration::TemplateParameter: | 
| 1120 |             { | 
| 1121 |                 retval = create(expr: new TemplateParameterReference(var.data()), sourceLocator, parseInfo); | 
| 1122 |                 break; | 
| 1123 |             } | 
| 1124 |             case VariableDeclaration::ExternalVariable: | 
| 1125 |                 /* This code path will never be hit, but the case | 
| 1126 |                  * label silences a warning. See above. */ | 
| 1127 |                 ; | 
| 1128 |         } | 
| 1129 |         Q_ASSERT(retval); | 
| 1130 |         var->references.append(t: retval); | 
| 1131 |     } | 
| 1132 |     else | 
| 1133 |     { | 
| 1134 |         /* Let's see if your external variable loader can provide us with one. */ | 
| 1135 |         const SequenceType::Ptr varType(parseInfo->staticContext-> | 
| 1136 |                                         externalVariableLoader()->announceExternalVariable(name, declaredType: CommonSequenceTypes::ZeroOrMoreItems)); | 
| 1137 |  | 
| 1138 |         if(varType) | 
| 1139 |         { | 
| 1140 |             const Expression::Ptr extRef(create(expr: new ExternalVariableReference(name, varType), sourceLocator, parseInfo)); | 
| 1141 |             const Expression::Ptr checked(TypeChecker::applyFunctionConversion(operand: extRef, reqType: varType, context: parseInfo->staticContext)); | 
| 1142 |             retval = checked; | 
| 1143 |         } | 
| 1144 |         else if(!raiseErrorOnUnavailability && parseInfo->isXSLT()) | 
| 1145 |         { | 
| 1146 |             /* In XSL-T, global variables are in scope for the whole | 
| 1147 |              * stylesheet, so we must resolve this first at the end. */ | 
| 1148 |             retval = create(expr: new UnresolvedVariableReference(name), sourceLocator, parseInfo); | 
| 1149 |             parseInfo->unresolvedVariableReferences.insert(akey: name, avalue: retval); | 
| 1150 |         } | 
| 1151 |         else | 
| 1152 |             variableUnavailable(variableName: name, parseInfo, location: sourceLocator); | 
| 1153 |     } | 
| 1154 |  | 
| 1155 |     return retval; | 
| 1156 | } | 
| 1157 |  | 
| 1158 | static Expression::Ptr createReturnOrderBy(const OrderSpecTransfer::List &orderSpecTransfer, | 
| 1159 |                                            const Expression::Ptr &returnExpr, | 
| 1160 |                                            const OrderBy::Stability stability, | 
| 1161 |                                            const YYLTYPE &sourceLocator, | 
| 1162 |                                            const ParserContext *const parseInfo) | 
| 1163 | { | 
| 1164 |     // TODO do resize(orderSpec.size() + 1) | 
| 1165 |     Expression::List exprs; | 
| 1166 |     OrderBy::OrderSpec::Vector orderSpecs; | 
| 1167 |  | 
| 1168 |     exprs.append(t: returnExpr); | 
| 1169 |  | 
| 1170 |     const int len = orderSpecTransfer.size(); | 
| 1171 |  | 
| 1172 |     for(int i = 0; i < len; ++i) | 
| 1173 |     { | 
| 1174 |         exprs.append(t: orderSpecTransfer.at(i).expression); | 
| 1175 |         orderSpecs.append(t: orderSpecTransfer.at(i).orderSpec); | 
| 1176 |     } | 
| 1177 |  | 
| 1178 |     return create(expr: new ReturnOrderBy(stability, orderSpecs, exprs), sourceLocator, parseInfo); | 
| 1179 | } | 
| 1180 |  | 
| 1181 |  | 
| 1182 | #line 1134 "qquerytransformparser.cpp" /* yacc.c:337  */ | 
| 1183 | # ifndef YY_NULLPTR | 
| 1184 | #  if defined __cplusplus | 
| 1185 | #   if 201103L <= __cplusplus | 
| 1186 | #    define YY_NULLPTR nullptr | 
| 1187 | #   else | 
| 1188 | #    define YY_NULLPTR 0 | 
| 1189 | #   endif | 
| 1190 | #  else | 
| 1191 | #   define YY_NULLPTR ((void*)0) | 
| 1192 | #  endif | 
| 1193 | # endif | 
| 1194 |  | 
| 1195 | /* Enabling verbose error messages.  */ | 
| 1196 | #ifdef YYERROR_VERBOSE | 
| 1197 | # undef YYERROR_VERBOSE | 
| 1198 | # define YYERROR_VERBOSE 1 | 
| 1199 | #else | 
| 1200 | # define YYERROR_VERBOSE 1 | 
| 1201 | #endif | 
| 1202 |  | 
| 1203 | /* In a future release of Bison, this section will be replaced | 
| 1204 |    by #include "qquerytransformparser_p.h".  */ | 
| 1205 | #ifndef YY_XPATH_QQUERYTRANSFORMPARSER_P_H_INCLUDED | 
| 1206 | # define YY_XPATH_QQUERYTRANSFORMPARSER_P_H_INCLUDED | 
| 1207 | /* Debug traces.  */ | 
| 1208 | #ifndef XPATHDEBUG | 
| 1209 | # if defined YYDEBUG | 
| 1210 | #  if YYDEBUG | 
| 1211 | #   define XPATHDEBUG 1 | 
| 1212 | #  else | 
| 1213 | #   define XPATHDEBUG 0 | 
| 1214 | #  endif | 
| 1215 | # else /* ! defined YYDEBUG */ | 
| 1216 | #  define XPATHDEBUG 0 | 
| 1217 | # endif /* ! defined YYDEBUG */ | 
| 1218 | #endif  /* ! defined XPATHDEBUG */ | 
| 1219 | #if XPATHDEBUG | 
| 1220 | extern int XPathdebug; | 
| 1221 | #endif | 
| 1222 |  | 
| 1223 | /* Token type.  */ | 
| 1224 | #ifndef XPATHTOKENTYPE | 
| 1225 | # define XPATHTOKENTYPE | 
| 1226 |   enum XPathtokentype | 
| 1227 |   { | 
| 1228 |     T_END_OF_FILE = 0, | 
| 1229 |     T_STRING_LITERAL = 258, | 
| 1230 |     T_NON_BOUNDARY_WS = 259, | 
| 1231 |     T_XPATH2_STRING_LITERAL = 260, | 
| 1232 |     T_QNAME = 261, | 
| 1233 |     T_NCNAME = 262, | 
| 1234 |     T_CLARK_NAME = 263, | 
| 1235 |     T_ANY_LOCAL_NAME = 264, | 
| 1236 |     T_ANY_PREFIX = 265, | 
| 1237 |     T_NUMBER = 266, | 
| 1238 |     T_XPATH2_NUMBER = 267, | 
| 1239 |     T_ANCESTOR = 268, | 
| 1240 |     T_ANCESTOR_OR_SELF = 269, | 
| 1241 |     T_AND = 270, | 
| 1242 |     T_APOS = 271, | 
| 1243 |     T_APPLY_TEMPLATE = 272, | 
| 1244 |     T_AS = 273, | 
| 1245 |     T_ASCENDING = 274, | 
| 1246 |     T_ASSIGN = 275, | 
| 1247 |     T_AT = 276, | 
| 1248 |     T_AT_SIGN = 277, | 
| 1249 |     T_ATTRIBUTE = 278, | 
| 1250 |     T_AVT = 279, | 
| 1251 |     T_BAR = 280, | 
| 1252 |     T_BASEURI = 281, | 
| 1253 |     T_BEGIN_END_TAG = 282, | 
| 1254 |     T_BOUNDARY_SPACE = 283, | 
| 1255 |     T_BY = 284, | 
| 1256 |     T_CALL_TEMPLATE = 285, | 
| 1257 |     T_CASE = 286, | 
| 1258 |     T_CASTABLE = 287, | 
| 1259 |     T_CAST = 288, | 
| 1260 |     T_CHILD = 289, | 
| 1261 |     T_COLLATION = 290, | 
| 1262 |     T_COLONCOLON = 291, | 
| 1263 |     T_COMMA = 292, | 
| 1264 |     T_COMMENT = 293, | 
| 1265 |     T_COMMENT_START = 294, | 
| 1266 |     T_CONSTRUCTION = 295, | 
| 1267 |     T_COPY_NAMESPACES = 296, | 
| 1268 |     T_CURLY_LBRACE = 297, | 
| 1269 |     T_CURLY_RBRACE = 298, | 
| 1270 |     T_DECLARE = 299, | 
| 1271 |     T_DEFAULT = 300, | 
| 1272 |     T_DESCENDANT = 301, | 
| 1273 |     T_DESCENDANT_OR_SELF = 302, | 
| 1274 |     T_DESCENDING = 303, | 
| 1275 |     T_DIV = 304, | 
| 1276 |     T_DOCUMENT = 305, | 
| 1277 |     T_DOCUMENT_NODE = 306, | 
| 1278 |     T_DOLLAR = 307, | 
| 1279 |     T_DOT = 308, | 
| 1280 |     T_DOTDOT = 309, | 
| 1281 |     T_ELEMENT = 310, | 
| 1282 |     T_ELSE = 311, | 
| 1283 |     T_EMPTY = 312, | 
| 1284 |     T_EMPTY_SEQUENCE = 313, | 
| 1285 |     T_ENCODING = 314, | 
| 1286 |     T_END_SORT = 315, | 
| 1287 |     T_EQ = 316, | 
| 1288 |     T_ERROR = 317, | 
| 1289 |     T_EVERY = 318, | 
| 1290 |     T_EXCEPT = 319, | 
| 1291 |     T_EXTERNAL = 320, | 
| 1292 |     T_FOLLOWING = 321, | 
| 1293 |     T_FOLLOWING_SIBLING = 322, | 
| 1294 |     T_FOLLOWS = 323, | 
| 1295 |     T_FOR_APPLY_TEMPLATE = 324, | 
| 1296 |     T_FOR = 325, | 
| 1297 |     T_FUNCTION = 326, | 
| 1298 |     T_GE = 327, | 
| 1299 |     T_G_EQ = 328, | 
| 1300 |     T_G_GE = 329, | 
| 1301 |     T_G_GT = 330, | 
| 1302 |     T_G_LE = 331, | 
| 1303 |     T_G_LT = 332, | 
| 1304 |     T_G_NE = 333, | 
| 1305 |     T_GREATEST = 334, | 
| 1306 |     T_GT = 335, | 
| 1307 |     T_IDIV = 336, | 
| 1308 |     T_IF = 337, | 
| 1309 |     T_IMPORT = 338, | 
| 1310 |     T_INHERIT = 339, | 
| 1311 |     T_IN = 340, | 
| 1312 |     T_INSTANCE = 341, | 
| 1313 |     T_INTERSECT = 342, | 
| 1314 |     T_IS = 343, | 
| 1315 |     T_ITEM = 344, | 
| 1316 |     T_LAX = 345, | 
| 1317 |     T_LBRACKET = 346, | 
| 1318 |     T_LEAST = 347, | 
| 1319 |     T_LE = 348, | 
| 1320 |     T_LET = 349, | 
| 1321 |     T_LPAREN = 350, | 
| 1322 |     T_LT = 351, | 
| 1323 |     T_MAP = 352, | 
| 1324 |     T_MATCHES = 353, | 
| 1325 |     T_MINUS = 354, | 
| 1326 |     T_MODE = 355, | 
| 1327 |     T_MOD = 356, | 
| 1328 |     T_MODULE = 357, | 
| 1329 |     T_NAME = 358, | 
| 1330 |     T_NAMESPACE = 359, | 
| 1331 |     T_NE = 360, | 
| 1332 |     T_NODE = 361, | 
| 1333 |     T_NO_INHERIT = 362, | 
| 1334 |     T_NO_PRESERVE = 363, | 
| 1335 |     T_OF = 364, | 
| 1336 |     T_OPTION = 365, | 
| 1337 |     T_ORDERED = 366, | 
| 1338 |     T_ORDERING = 367, | 
| 1339 |     T_ORDER = 368, | 
| 1340 |     T_OR = 369, | 
| 1341 |     T_PARENT = 370, | 
| 1342 |     T_PI_START = 371, | 
| 1343 |     T_PLUS = 372, | 
| 1344 |     T_POSITION_SET = 373, | 
| 1345 |     T_PRAGMA_END = 374, | 
| 1346 |     T_PRAGMA_START = 375, | 
| 1347 |     T_PRECEDES = 376, | 
| 1348 |     T_PRECEDING = 377, | 
| 1349 |     T_PRECEDING_SIBLING = 378, | 
| 1350 |     T_PRESERVE = 379, | 
| 1351 |     T_PRIORITY = 380, | 
| 1352 |     T_PROCESSING_INSTRUCTION = 381, | 
| 1353 |     T_QUESTION = 382, | 
| 1354 |     T_QUICK_TAG_END = 383, | 
| 1355 |     T_QUOTE = 384, | 
| 1356 |     T_RBRACKET = 385, | 
| 1357 |     T_RETURN = 386, | 
| 1358 |     T_RPAREN = 387, | 
| 1359 |     T_SATISFIES = 388, | 
| 1360 |     T_SCHEMA_ATTRIBUTE = 389, | 
| 1361 |     T_SCHEMA_ELEMENT = 390, | 
| 1362 |     T_SCHEMA = 391, | 
| 1363 |     T_SELF = 392, | 
| 1364 |     T_SEMI_COLON = 393, | 
| 1365 |     T_SLASH = 394, | 
| 1366 |     T_SLASHSLASH = 395, | 
| 1367 |     T_SOME = 396, | 
| 1368 |     T_SORT = 397, | 
| 1369 |     T_STABLE = 398, | 
| 1370 |     T_STAR = 399, | 
| 1371 |     T_STRICT = 400, | 
| 1372 |     T_STRIP = 401, | 
| 1373 |     T_SUCCESS = 402, | 
| 1374 |     T_COMMENT_CONTENT = 403, | 
| 1375 |     T_PI_CONTENT = 404, | 
| 1376 |     T_PI_TARGET = 405, | 
| 1377 |     T_XSLT_VERSION = 406, | 
| 1378 |     T_TEMPLATE = 407, | 
| 1379 |     T_TEXT = 408, | 
| 1380 |     T_THEN = 409, | 
| 1381 |     T_TO = 410, | 
| 1382 |     T_TREAT = 411, | 
| 1383 |     T_TUNNEL = 412, | 
| 1384 |     T_TYPESWITCH = 413, | 
| 1385 |     T_UNION = 414, | 
| 1386 |     T_UNORDERED = 415, | 
| 1387 |     T_VALIDATE = 416, | 
| 1388 |     T_VARIABLE = 417, | 
| 1389 |     T_VERSION = 418, | 
| 1390 |     T_WHERE = 419, | 
| 1391 |     T_XQUERY = 420, | 
| 1392 |     T_INTERNAL = 421, | 
| 1393 |     T_INTERNAL_NAME = 422, | 
| 1394 |     T_CURRENT = 423 | 
| 1395 |   }; | 
| 1396 | #endif | 
| 1397 |  | 
| 1398 | /* Value type.  */ | 
| 1399 |  | 
| 1400 | /* Location type.  */ | 
| 1401 | #if ! defined XPATHLTYPE && ! defined XPATHLTYPE_IS_DECLARED | 
| 1402 | typedef struct XPATHLTYPE XPATHLTYPE; | 
| 1403 | struct XPATHLTYPE | 
| 1404 | { | 
| 1405 |   int first_line; | 
| 1406 |   int first_column; | 
| 1407 |   int last_line; | 
| 1408 |   int last_column; | 
| 1409 | }; | 
| 1410 | # define XPATHLTYPE_IS_DECLARED 1 | 
| 1411 | # define XPATHLTYPE_IS_TRIVIAL 1 | 
| 1412 | #endif | 
| 1413 |  | 
| 1414 |  | 
| 1415 |  | 
| 1416 | int XPathparse (QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo); | 
| 1417 |  | 
| 1418 | #endif /* !YY_XPATH_QQUERYTRANSFORMPARSER_P_H_INCLUDED  */ | 
| 1419 |  | 
| 1420 |  | 
| 1421 |  | 
| 1422 | #ifdef short | 
| 1423 | # undef short | 
| 1424 | #endif | 
| 1425 |  | 
| 1426 | #ifdef YYTYPE_UINT8 | 
| 1427 | typedef YYTYPE_UINT8 yytype_uint8; | 
| 1428 | #else | 
| 1429 | typedef unsigned char yytype_uint8; | 
| 1430 | #endif | 
| 1431 |  | 
| 1432 | #ifdef YYTYPE_INT8 | 
| 1433 | typedef YYTYPE_INT8 yytype_int8; | 
| 1434 | #else | 
| 1435 | typedef signed char yytype_int8; | 
| 1436 | #endif | 
| 1437 |  | 
| 1438 | #ifdef YYTYPE_UINT16 | 
| 1439 | typedef YYTYPE_UINT16 yytype_uint16; | 
| 1440 | #else | 
| 1441 | typedef unsigned short yytype_uint16; | 
| 1442 | #endif | 
| 1443 |  | 
| 1444 | #ifdef YYTYPE_INT16 | 
| 1445 | typedef YYTYPE_INT16 yytype_int16; | 
| 1446 | #else | 
| 1447 | typedef short yytype_int16; | 
| 1448 | #endif | 
| 1449 |  | 
| 1450 | #ifndef YYSIZE_T | 
| 1451 | # ifdef __SIZE_TYPE__ | 
| 1452 | #  define YYSIZE_T __SIZE_TYPE__ | 
| 1453 | # elif defined size_t | 
| 1454 | #  define YYSIZE_T size_t | 
| 1455 | # elif ! defined YYSIZE_T | 
| 1456 | #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1457 | #  define YYSIZE_T size_t | 
| 1458 | # else | 
| 1459 | #  define YYSIZE_T unsigned | 
| 1460 | # endif | 
| 1461 | #endif | 
| 1462 |  | 
| 1463 | #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) | 
| 1464 |  | 
| 1465 | #ifndef YY_ | 
| 1466 | # if defined YYENABLE_NLS && YYENABLE_NLS | 
| 1467 | #  if ENABLE_NLS | 
| 1468 | #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1469 | #   define YY_(Msgid) dgettext ("bison-runtime", Msgid) | 
| 1470 | #  endif | 
| 1471 | # endif | 
| 1472 | # ifndef YY_ | 
| 1473 | #  define YY_(Msgid) Msgid | 
| 1474 | # endif | 
| 1475 | #endif | 
| 1476 |  | 
| 1477 | #ifndef YY_ATTRIBUTE | 
| 1478 | # if (defined __GNUC__                                               \ | 
| 1479 |       && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__)))  \ | 
| 1480 |      || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C | 
| 1481 | #  define YY_ATTRIBUTE(Spec) __attribute__(Spec) | 
| 1482 | # else | 
| 1483 | #  define YY_ATTRIBUTE(Spec) /* empty */ | 
| 1484 | # endif | 
| 1485 | #endif | 
| 1486 |  | 
| 1487 | #ifndef YY_ATTRIBUTE_PURE | 
| 1488 | # define YY_ATTRIBUTE_PURE   YY_ATTRIBUTE ((__pure__)) | 
| 1489 | #endif | 
| 1490 |  | 
| 1491 | #ifndef YY_ATTRIBUTE_UNUSED | 
| 1492 | # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) | 
| 1493 | #endif | 
| 1494 |  | 
| 1495 | /* Suppress unused-variable warnings by "using" E.  */ | 
| 1496 | #if ! defined lint || defined __GNUC__ | 
| 1497 | # define YYUSE(E) ((void) (E)) | 
| 1498 | #else | 
| 1499 | # define YYUSE(E) /* empty */ | 
| 1500 | #endif | 
| 1501 |  | 
| 1502 | #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ | 
| 1503 | /* Suppress an incorrect diagnostic about yylval being uninitialized.  */ | 
| 1504 | # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ | 
| 1505 |     _Pragma ("GCC diagnostic push") \ | 
| 1506 |     _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ | 
| 1507 |     _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") | 
| 1508 | # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ | 
| 1509 |     _Pragma ("GCC diagnostic pop") | 
| 1510 | #else | 
| 1511 | # define YY_INITIAL_VALUE(Value) Value | 
| 1512 | #endif | 
| 1513 | #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | 
| 1514 | # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | 
| 1515 | # define YY_IGNORE_MAYBE_UNINITIALIZED_END | 
| 1516 | #endif | 
| 1517 | #ifndef YY_INITIAL_VALUE | 
| 1518 | # define YY_INITIAL_VALUE(Value) /* Nothing. */ | 
| 1519 | #endif | 
| 1520 |  | 
| 1521 |  | 
| 1522 | #if ! defined yyoverflow || YYERROR_VERBOSE | 
| 1523 |  | 
| 1524 | /* The parser invokes alloca or malloc; define the necessary symbols.  */ | 
| 1525 |  | 
| 1526 | # ifdef YYSTACK_USE_ALLOCA | 
| 1527 | #  if YYSTACK_USE_ALLOCA | 
| 1528 | #   ifdef __GNUC__ | 
| 1529 | #    define YYSTACK_ALLOC __builtin_alloca | 
| 1530 | #   elif defined __BUILTIN_VA_ARG_INCR | 
| 1531 | #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1532 | #   elif defined _AIX | 
| 1533 | #    define YYSTACK_ALLOC __alloca | 
| 1534 | #   elif defined _MSC_VER | 
| 1535 | #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1536 | #    define alloca _alloca | 
| 1537 | #   else | 
| 1538 | #    define YYSTACK_ALLOC alloca | 
| 1539 | #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS | 
| 1540 | #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1541 |       /* Use EXIT_SUCCESS as a witness for stdlib.h.  */ | 
| 1542 | #     ifndef EXIT_SUCCESS | 
| 1543 | #      define EXIT_SUCCESS 0 | 
| 1544 | #     endif | 
| 1545 | #    endif | 
| 1546 | #   endif | 
| 1547 | #  endif | 
| 1548 | # endif | 
| 1549 |  | 
| 1550 | # ifdef YYSTACK_ALLOC | 
| 1551 |    /* Pacify GCC's 'empty if-body' warning.  */ | 
| 1552 | #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) | 
| 1553 | #  ifndef YYSTACK_ALLOC_MAXIMUM | 
| 1554 |     /* The OS might guarantee only one guard page at the bottom of the stack, | 
| 1555 |        and a page size can be as small as 4096 bytes.  So we cannot safely | 
| 1556 |        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number | 
| 1557 |        to allow for a few compiler-allocated temporary stack slots.  */ | 
| 1558 | #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ | 
| 1559 | #  endif | 
| 1560 | # else | 
| 1561 | #  define YYSTACK_ALLOC YYMALLOC | 
| 1562 | #  define YYSTACK_FREE YYFREE | 
| 1563 | #  ifndef YYSTACK_ALLOC_MAXIMUM | 
| 1564 | #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM | 
| 1565 | #  endif | 
| 1566 | #  if (defined __cplusplus && ! defined EXIT_SUCCESS \ | 
| 1567 |        && ! ((defined YYMALLOC || defined malloc) \ | 
| 1568 |              && (defined YYFREE || defined free))) | 
| 1569 | #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ | 
| 1570 | #   ifndef EXIT_SUCCESS | 
| 1571 | #    define EXIT_SUCCESS 0 | 
| 1572 | #   endif | 
| 1573 | #  endif | 
| 1574 | #  ifndef YYMALLOC | 
| 1575 | #   define YYMALLOC malloc | 
| 1576 | #   if ! defined malloc && ! defined EXIT_SUCCESS | 
| 1577 | void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ | 
| 1578 | #   endif | 
| 1579 | #  endif | 
| 1580 | #  ifndef YYFREE | 
| 1581 | #   define YYFREE free | 
| 1582 | #   if ! defined free && ! defined EXIT_SUCCESS | 
| 1583 | void free (void *); /* INFRINGES ON USER NAME SPACE */ | 
| 1584 | #   endif | 
| 1585 | #  endif | 
| 1586 | # endif | 
| 1587 | #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ | 
| 1588 |  | 
| 1589 |  | 
| 1590 | #if (! defined yyoverflow \ | 
| 1591 |      && (! defined __cplusplus \ | 
| 1592 |          || (defined XPATHLTYPE_IS_TRIVIAL && XPATHLTYPE_IS_TRIVIAL \ | 
| 1593 |              && defined XPATHSTYPE_IS_TRIVIAL && XPATHSTYPE_IS_TRIVIAL))) | 
| 1594 |  | 
| 1595 | /* A type that is properly aligned for any stack member.  */ | 
| 1596 | union yyalloc | 
| 1597 | { | 
| 1598 |   yytype_int16 yyss_alloc; | 
| 1599 |   YYSTYPE yyvs_alloc; | 
| 1600 |   YYLTYPE yyls_alloc; | 
| 1601 | }; | 
| 1602 |  | 
| 1603 | /* The size of the maximum gap between one aligned stack and the next.  */ | 
| 1604 | # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) | 
| 1605 |  | 
| 1606 | /* The size of an array large to enough to hold all stacks, each with | 
| 1607 |    N elements.  */ | 
| 1608 | # define YYSTACK_BYTES(N) \ | 
| 1609 |      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ | 
| 1610 |       + 2 * YYSTACK_GAP_MAXIMUM) | 
| 1611 |  | 
| 1612 | # define YYCOPY_NEEDED 1 | 
| 1613 |  | 
| 1614 | /* Relocate STACK from its old location to the new one.  The | 
| 1615 |    local variables YYSIZE and YYSTACKSIZE give the old and new number of | 
| 1616 |    elements in the stack, and YYPTR gives the new location of the | 
| 1617 |    stack.  Advance YYPTR to a properly aligned location for the next | 
| 1618 |    stack.  */ | 
| 1619 | # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \ | 
| 1620 |     do                                                                  \ | 
| 1621 |       {                                                                 \ | 
| 1622 |         YYSIZE_T yynewbytes;                                            \ | 
| 1623 |         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \ | 
| 1624 |         Stack = &yyptr->Stack_alloc;                                    \ | 
| 1625 |         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ | 
| 1626 |         yyptr += yynewbytes / sizeof (*yyptr);                          \ | 
| 1627 |       }                                                                 \ | 
| 1628 |     while (0) | 
| 1629 |  | 
| 1630 | #endif | 
| 1631 |  | 
| 1632 | #if defined YYCOPY_NEEDED && YYCOPY_NEEDED | 
| 1633 | /* Copy COUNT objects from SRC to DST.  The source and destination do | 
| 1634 |    not overlap.  */ | 
| 1635 | # ifndef YYCOPY | 
| 1636 | #  if defined __GNUC__ && 1 < __GNUC__ | 
| 1637 | #   define YYCOPY(Dst, Src, Count) \ | 
| 1638 |       __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) | 
| 1639 | #  else | 
| 1640 | #   define YYCOPY(Dst, Src, Count)              \ | 
| 1641 |       do                                        \ | 
| 1642 |         {                                       \ | 
| 1643 |           YYSIZE_T yyi;                         \ | 
| 1644 |           for (yyi = 0; yyi < (Count); yyi++)   \ | 
| 1645 |             (Dst)[yyi] = (Src)[yyi];            \ | 
| 1646 |         }                                       \ | 
| 1647 |       while (0) | 
| 1648 | #  endif | 
| 1649 | # endif | 
| 1650 | #endif /* !YYCOPY_NEEDED */ | 
| 1651 |  | 
| 1652 | /* YYFINAL -- State number of the termination state.  */ | 
| 1653 | #define YYFINAL  5 | 
| 1654 | /* YYLAST -- Last index in YYTABLE.  */ | 
| 1655 | #define YYLAST   2052 | 
| 1656 |  | 
| 1657 | /* YYNTOKENS -- Number of terminals.  */ | 
| 1658 | #define YYNTOKENS  169 | 
| 1659 | /* YYNNTS -- Number of nonterminals.  */ | 
| 1660 | #define YYNNTS  237 | 
| 1661 | /* YYNRULES -- Number of rules.  */ | 
| 1662 | #define YYNRULES  472 | 
| 1663 | /* YYNSTATES -- Number of states.  */ | 
| 1664 | #define YYNSTATES  812 | 
| 1665 |  | 
| 1666 | #define YYUNDEFTOK  2 | 
| 1667 | #define YYMAXUTOK   423 | 
| 1668 |  | 
| 1669 | /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM | 
| 1670 |    as returned by yylex, with out-of-bounds checking.  */ | 
| 1671 | #define YYTRANSLATE(YYX)                                                \ | 
| 1672 |   ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) | 
| 1673 |  | 
| 1674 | /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM | 
| 1675 |    as returned by yylex.  */ | 
| 1676 | static const yytype_uint8 yytranslate[] = | 
| 1677 | { | 
| 1678 |        0,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1679 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1680 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1681 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1682 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1683 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1684 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1685 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1686 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1687 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1688 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1689 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1690 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1691 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1692 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1693 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1694 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1695 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1696 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1697 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1698 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1699 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1700 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1701 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1702 |        2,     2,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 1703 |        2,     2,     2,     2,     2,     2,     1,     2,     3,     4, | 
| 1704 |        5,     6,     7,     8,     9,    10,    11,    12,    13,    14, | 
| 1705 |       15,    16,    17,    18,    19,    20,    21,    22,    23,    24, | 
| 1706 |       25,    26,    27,    28,    29,    30,    31,    32,    33,    34, | 
| 1707 |       35,    36,    37,    38,    39,    40,    41,    42,    43,    44, | 
| 1708 |       45,    46,    47,    48,    49,    50,    51,    52,    53,    54, | 
| 1709 |       55,    56,    57,    58,    59,    60,    61,    62,    63,    64, | 
| 1710 |       65,    66,    67,    68,    69,    70,    71,    72,    73,    74, | 
| 1711 |       75,    76,    77,    78,    79,    80,    81,    82,    83,    84, | 
| 1712 |       85,    86,    87,    88,    89,    90,    91,    92,    93,    94, | 
| 1713 |       95,    96,    97,    98,    99,   100,   101,   102,   103,   104, | 
| 1714 |      105,   106,   107,   108,   109,   110,   111,   112,   113,   114, | 
| 1715 |      115,   116,   117,   118,   119,   120,   121,   122,   123,   124, | 
| 1716 |      125,   126,   127,   128,   129,   130,   131,   132,   133,   134, | 
| 1717 |      135,   136,   137,   138,   139,   140,   141,   142,   143,   144, | 
| 1718 |      145,   146,   147,   148,   149,   150,   151,   152,   153,   154, | 
| 1719 |      155,   156,   157,   158,   159,   160,   161,   162,   163,   164, | 
| 1720 |      165,   166,   167,   168 | 
| 1721 | }; | 
| 1722 |  | 
| 1723 | #if XPATHDEBUG | 
| 1724 |   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */ | 
| 1725 | static const yytype_uint16 yyrline[] = | 
| 1726 | { | 
| 1727 |        0,  1431,  1431,  1432,  1434,  1435,  1466,  1467,  1483,  1581, | 
| 1728 |     1583,  1589,  1591,  1598,  1604,  1610,  1617,  1620,  1624,  1628, | 
| 1729 |     1648,  1662,  1666,  1660,  1729,  1733,  1750,  1753,  1755,  1760, | 
| 1730 |     1761,  1765,  1766,  1770,  1774,  1778,  1780,  1781,  1783,  1785, | 
| 1731 |     1831,  1845,  1850,  1855,  1856,  1858,  1873,  1888,  1898,  1913, | 
| 1732 |     1917,  1922,  1936,  1940,  1945,  1959,  1964,  1969,  1974,  1979, | 
| 1733 |     1995,  2018,  2026,  2027,  2028,  2030,  2047,  2048,  2050,  2051, | 
| 1734 |     2053,  2054,  2056,  2111,  2115,  2121,  2124,  2129,  2143,  2147, | 
| 1735 |     2153,  2152,  2261,  2264,  2270,  2291,  2297,  2301,  2303,  2308, | 
| 1736 |     2318,  2319,  2324,  2325,  2334,  2404,  2415,  2416,  2420,  2425, | 
| 1737 |     2494,  2495,  2499,  2504,  2548,  2549,  2554,  2561,  2567,  2568, | 
| 1738 |     2569,  2570,  2571,  2572,  2578,  2583,  2589,  2592,  2597,  2603, | 
| 1739 |     2609,  2613,  2638,  2639,  2643,  2647,  2641,  2688,  2691,  2686, | 
| 1740 |     2707,  2708,  2709,  2712,  2716,  2724,  2723,  2737,  2736,  2745, | 
| 1741 |     2746,  2747,  2749,  2757,  2768,  2771,  2773,  2778,  2785,  2792, | 
| 1742 |     2798,  2818,  2823,  2829,  2832,  2834,  2835,  2842,  2848,  2852, | 
| 1743 |     2857,  2858,  2861,  2865,  2860,  2875,  2879,  2874,  2887,  2890, | 
| 1744 |     2894,  2889,  2904,  2908,  2903,  2916,  2918,  2946,  2945,  2957, | 
| 1745 |     2965,  2956,  2976,  2977,  2980,  2984,  2989,  2994,  2993,  3009, | 
| 1746 |     3015,  3016,  3022,  3023,  3029,  3030,  3031,  3032,  3034,  3035, | 
| 1747 |     3041,  3042,  3048,  3049,  3051,  3052,  3058,  3059,  3060,  3061, | 
| 1748 |     3063,  3064,  3074,  3075,  3081,  3082,  3084,  3088,  3093,  3094, | 
| 1749 |     3101,  3102,  3108,  3109,  3115,  3116,  3122,  3123,  3129,  3133, | 
| 1750 |     3138,  3139,  3140,  3142,  3148,  3149,  3150,  3151,  3152,  3153, | 
| 1751 |     3155,  3160,  3161,  3162,  3163,  3164,  3165,  3167,  3172,  3173, | 
| 1752 |     3174,  3176,  3190,  3191,  3192,  3194,  3211,  3215,  3220,  3221, | 
| 1753 |     3223,  3228,  3229,  3231,  3237,  3241,  3247,  3250,  3251,  3255, | 
| 1754 |     3264,  3269,  3273,  3274,  3279,  3278,  3293,  3301,  3300,  3316, | 
| 1755 |     3324,  3324,  3333,  3335,  3338,  3343,  3345,  3349,  3415,  3418, | 
| 1756 |     3424,  3427,  3436,  3440,  3444,  3449,  3450,  3455,  3456,  3459, | 
| 1757 |     3458,  3488,  3490,  3491,  3493,  3537,  3538,  3539,  3540,  3541, | 
| 1758 |     3542,  3543,  3544,  3545,  3546,  3547,  3548,  3551,  3550,  3561, | 
| 1759 |     3572,  3577,  3579,  3584,  3585,  3590,  3594,  3596,  3600,  3609, | 
| 1760 |     3616,  3617,  3623,  3624,  3625,  3626,  3627,  3628,  3629,  3630, | 
| 1761 |     3640,  3641,  3646,  3651,  3657,  3663,  3668,  3673,  3678,  3684, | 
| 1762 |     3689,  3694,  3724,  3728,  3735,  3737,  3741,  3746,  3747,  3748, | 
| 1763 |     3782,  3791,  3780,  4032,  4036,  4056,  4059,  4065,  4070,  4075, | 
| 1764 |     4081,  4084,  4094,  4101,  4105,  4111,  4125,  4131,  4148,  4153, | 
| 1765 |     4166,  4167,  4168,  4169,  4170,  4171,  4172,  4174,  4182,  4181, | 
| 1766 |     4221,  4224,  4229,  4244,  4249,  4256,  4268,  4272,  4268,  4278, | 
| 1767 |     4280,  4284,  4286,  4301,  4305,  4314,  4319,  4323,  4329,  4332, | 
| 1768 |     4337,  4342,  4347,  4348,  4349,  4350,  4352,  4353,  4354,  4355, | 
| 1769 |     4360,  4396,  4397,  4398,  4399,  4400,  4401,  4402,  4404,  4409, | 
| 1770 |     4414,  4420,  4421,  4423,  4428,  4433,  4438,  4443,  4459,  4460, | 
| 1771 |     4462,  4467,  4472,  4476,  4488,  4501,  4511,  4516,  4521,  4526, | 
| 1772 |     4540,  4554,  4555,  4557,  4567,  4569,  4574,  4581,  4588,  4590, | 
| 1773 |     4592,  4593,  4595,  4599,  4604,  4605,  4607,  4613,  4615,  4617, | 
| 1774 |     4621,  4626,  4638 | 
| 1775 | }; | 
| 1776 | #endif | 
| 1777 |  | 
| 1778 | #if XPATHDEBUG || YYERROR_VERBOSE || 1 | 
| 1779 | /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. | 
| 1780 |    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */ | 
| 1781 | static const char *const yytname[] = | 
| 1782 | { | 
| 1783 |   "\"end of file\"" , "error" , "$undefined" , "\"<string literal>\"" , | 
| 1784 |   "\"<non-boundary text node>\"" , "\"<string literal(XPath 2.0)>\"" , | 
| 1785 |   "\"QName\"" , "\"NCName\"" , "\"ClarkName\"" , "T_ANY_LOCAL_NAME" , | 
| 1786 |   "T_ANY_PREFIX" , "\"<number literal>\"" , | 
| 1787 |   "\"<number literal(XPath 2.0)>\"" , "\"ancestor\"" , | 
| 1788 |   "\"ancestor-or-self\"" , "\"and\"" , "\"'\"" , "\"apply-template\"" , | 
| 1789 |   "\"as\"" , "\"ascending\"" , "\":=\"" , "\"at\"" , "\"@\"" , "\"attribute\"" , | 
| 1790 |   "T_AVT" , "\"|\"" , "\"base-uri\"" , "\"</\"" , "\"boundary-space\"" , | 
| 1791 |   "\"by\"" , "\"call-template\"" , "\"case\"" , "\"castable\"" , "\"cast\"" , | 
| 1792 |   "\"child\"" , "\"collation\"" , "\"::\"" , "\",\"" , "\"comment\"" , | 
| 1793 |   "\"<!--\"" , "\"construction\"" , "\"copy-namespaces\"" , "\"{\"" , "\"}\"" , | 
| 1794 |   "\"declare\"" , "\"default\"" , "\"descendant\"" , "\"descendant-or-self\"" , | 
| 1795 |   "\"descending\"" , "\"div\"" , "\"document\"" , "\"document-node\"" , | 
| 1796 |   "\"$\"" , "\".\"" , "\"..\"" , "\"element\"" , "\"else\"" , "\"empty\"" , | 
| 1797 |   "\"empty-sequence\"" , "\"encoding\"" , "\"end_sort\"" , "\"eq\"" , | 
| 1798 |   "\"unknown keyword\"" , "\"every\"" , "\"except\"" , "\"external\"" , | 
| 1799 |   "\"following\"" , "\"following-sibling\"" , "\">>\"" , | 
| 1800 |   "\"for-apply-template\"" , "\"for\"" , "\"function\"" , "\"ge\"" , "\"=\"" , | 
| 1801 |   "\">=\"" , "\">\"" , "\"<=\"" , "\"<\"" , "\"!=\"" , "\"greatest\"" , "\"gt\"" , | 
| 1802 |   "\"idiv\"" , "\"if\"" , "\"import\"" , "\"inherit\"" , "\"in\"" , | 
| 1803 |   "\"instance\"" , "\"intersect\"" , "\"is\"" , "\"item\"" , "\"lax\"" , | 
| 1804 |   "\"[\"" , "\"least\"" , "\"le\"" , "\"let\"" , "\"(\"" , "\"lt\"" , "\"map\"" , | 
| 1805 |   "\"matches\"" , "\"-\"" , "\"mode\"" , "\"mod\"" , "\"module\"" , "\"name\"" , | 
| 1806 |   "\"namespace\"" , "\"ne\"" , "\"node\"" , "\"no-inherit\"" , | 
| 1807 |   "\"no-preserve\"" , "\"of\"" , "\"option\"" , "\"ordered\"" , "\"ordering\"" , | 
| 1808 |   "\"order\"" , "\"or\"" , "\"parent\"" , "\"<?\"" , "\"+\"" , "T_POSITION_SET" , | 
| 1809 |   "\"#)\"" , "\"(#\"" , "\"<<\"" , "\"preceding\"" , "\"preceding-sibling\"" , | 
| 1810 |   "\"preserve\"" , "\"priority\"" , "\"processing-instruction\"" , "\"?\"" , | 
| 1811 |   "\"/>\"" , "\"\\\"\"" , "\"]\"" , "\"return\"" , "\")\"" , "\"satisfies\"" , | 
| 1812 |   "\"schema-attribute\"" , "\"schema-element\"" , "\"schema\"" , "\"self\"" , | 
| 1813 |   "\";\"" , "\"/\"" , "\"//\"" , "\"some\"" , "\"sort\"" , "\"stable\"" , | 
| 1814 |   "\"*\"" , "\"strict\"" , "\"strip\"" , "T_SUCCESS" , "T_COMMENT_CONTENT" , | 
| 1815 |   "T_PI_CONTENT" , "T_PI_TARGET" , "T_XSLT_VERSION" , "\"template\"" , | 
| 1816 |   "\"text\"" , "\"then\"" , "\"to\"" , "\"treat\"" , "\"tunnel\"" , | 
| 1817 |   "\"typeswitch\"" , "\"union\"" , "\"unordered\"" , "\"validate\"" , | 
| 1818 |   "\"variable\"" , "\"version\"" , "\"where\"" , "\"xquery\"" , "\"internal\"" , | 
| 1819 |   "\"internal-name\"" , "\"current\"" , "$accept" , "Module" , "VersionDecl" , | 
| 1820 |   "Encoding" , "MainModule" , "LibraryModule" , "ModuleDecl" , "Prolog" , | 
| 1821 |   "TemplateDecl" , "$@1" , "$@2" , "OptionalPriority" , "OptionalTemplateName" , | 
| 1822 |   "TemplateName" , "Setter" , "Import" , "Separator" , "NamespaceDecl" , | 
| 1823 |   "BoundarySpaceDecl" , "BoundarySpacePolicy" , "DefaultNamespaceDecl" , | 
| 1824 |   "DeclareDefaultElementNamespace" , "DeclareDefaultFunctionNamespace" , | 
| 1825 |   "OptionDecl" , "OrderingModeDecl" , "OrderingMode" , "EmptyOrderDecl" , | 
| 1826 |   "OrderingEmptySequence" , "CopyNamespacesDecl" , "PreserveMode" , | 
| 1827 |   "InheritMode" , "DefaultCollationDecl" , "BaseURIDecl" , "SchemaImport" , | 
| 1828 |   "SchemaPrefix" , "ModuleImport" , "ModuleNamespaceDecl" , "FileLocations" , | 
| 1829 |   "FileLocation" , "VarDecl" , "VariableValue" , "OptionalDefaultValue" , | 
| 1830 |   "ConstructionDecl" , "ConstructionMode" , "FunctionDecl" , "@3" , | 
| 1831 |   "ParamList" , "Param" , "FunctionBody" , "EnclosedExpr" , "QueryBody" , | 
| 1832 |   "Pattern" , "PathPattern" , "IdKeyPattern" , "RelativePathPattern" , | 
| 1833 |   "PatternStep" , "Expr" , "ExpressionSequence" , "ExprSingle" , | 
| 1834 |   "OptionalModes" , "OptionalMode" , "Modes" , "Mode" , "FLWORExpr" , | 
| 1835 |   "ForClause" , "@4" , "@5" , "ForTail" , "$@6" , "@7" , "PositionalVar" , | 
| 1836 |   "LetClause" , "@8" , "LetTail" , "@9" , "WhereClause" , "OrderByClause" , | 
| 1837 |   "MandatoryOrderByClause" , "OrderSpecList" , "OrderSpec" , | 
| 1838 |   "DirectionModifier" , "EmptynessModifier" , "CollationModifier" , | 
| 1839 |   "OrderByInputOrder" , "QuantifiedExpr" , "SomeQuantificationExpr" , "$@10" , | 
| 1840 |   "@11" , "SomeQuantificationTail" , "@12" , "@13" , "EveryQuantificationExpr" , | 
| 1841 |   "$@14" , "@15" , "EveryQuantificationTail" , "@16" , "@17" , | 
| 1842 |   "SatisfiesClause" , "TypeswitchExpr" , "$@18" , "CaseClause" , "$@19" , | 
| 1843 |   "$@20" , "CaseTail" , "CaseVariable" , "CaseDefault" , "$@21" , "IfExpr" , | 
| 1844 |   "OrExpr" , "AndExpr" , "ComparisonExpr" , "RangeExpr" , "AdditiveExpr" , | 
| 1845 |   "AdditiveOperator" , "MultiplicativeExpr" , "MultiplyOperator" , | 
| 1846 |   "UnionExpr" , "IntersectExceptExpr" , "UnionOperator" , "IntersectOperator" , | 
| 1847 |   "InstanceOfExpr" , "TreatExpr" , "CastableExpr" , "CastExpr" , "UnaryExpr" , | 
| 1848 |   "UnaryOperator" , "ValueExpr" , "GeneralComp" , "GeneralComparisonOperator" , | 
| 1849 |   "ValueComp" , "ValueComparisonOperator" , "NodeComp" , "NodeOperator" , | 
| 1850 |   "ValidateExpr" , "ValidationMode" , "ExtensionExpr" , | 
| 1851 |   "EnclosedOptionalExpr" , "Pragmas" , "Pragma" , "PragmaContents" , | 
| 1852 |   "PathExpr" , "RelativePathExpr" , "StepExpr" , "@22" , "$@23" , | 
| 1853 |   "TemplateWithParameters" , "$@24" , "TemplateParameters" , | 
| 1854 |   "OptionalTemplateParameters" , "TemplateParameter" , "IsTunnel" , | 
| 1855 |   "OptionalAssign" , "MapOrSlash" , "FilteredAxisStep" , "AxisStep" , | 
| 1856 |   "ForwardStep" , "$@25" , "NodeTestInAxisStep" , "Axis" , "AxisToken" , | 
| 1857 |   "AbbrevForwardStep" , "$@26" , "ReverseStep" , "AbbrevReverseStep" , | 
| 1858 |   "NodeTest" , "NameTest" , "WildCard" , "FilterExpr" , "PrimaryExpr" , | 
| 1859 |   "Literal" , "NumericLiteral" , "VarRef" , "VarName" , "ParenthesizedExpr" , | 
| 1860 |   "ContextItemExpr" , "OrderingExpr" , "FunctionCallExpr" , | 
| 1861 |   "FunctionArguments" , "Constructor" , "DirectConstructor" , | 
| 1862 |   "DirElemConstructor" , "@27" , "@28" , "DirElemConstructorTail" , | 
| 1863 |   "DirAttributeList" , "Attribute" , "DirAttributeValue" , "AttrValueContent" , | 
| 1864 |   "DirElemContent" , "DirCommentConstructor" , "DirPIConstructor" , | 
| 1865 |   "ComputedConstructor" , "CompDocConstructor" , "CompElemConstructor" , | 
| 1866 |   "$@29" , "IsInternal" , "CompAttrConstructor" , "CompTextConstructor" , | 
| 1867 |   "CompCommentConstructor" , "CompPIConstructor" , "CompAttributeName" , | 
| 1868 |   "$@30" , "$@31" , "CompElementName" , "CompNameExpr" , "CompPIName" , | 
| 1869 |   "CompNamespaceConstructor" , "SingleType" , "TypeDeclaration" , | 
| 1870 |   "SequenceType" , "OccurrenceIndicator" , "ItemType" , "AtomicType" , | 
| 1871 |   "KindTest" , "AnyKindTest" , "DocumentTest" , "AnyElementTest" , "TextTest" , | 
| 1872 |   "CommentTest" , "PITest" , "AnyAttributeTest" , "AttributeTest" , | 
| 1873 |   "SchemaAttributeTest" , "ElementTest" , "OptionalQuestionMark" , | 
| 1874 |   "SchemaElementTest" , "EmptyParanteses" , "AttributeName" , "ElementName" , | 
| 1875 |   "TypeName" , "FunctionName" , "NCName" , "LexicalName" , "PragmaName" , | 
| 1876 |   "URILiteral" , "StringLiteral" , "QName" , YY_NULLPTR | 
| 1877 | }; | 
| 1878 | #endif | 
| 1879 |  | 
| 1880 | # ifdef YYPRINT | 
| 1881 | /* YYTOKNUM[NUM] -- (External) token number corresponding to the | 
| 1882 |    (internal) symbol number NUM (which must be that of a token).  */ | 
| 1883 | static const yytype_uint16 yytoknum[] = | 
| 1884 | { | 
| 1885 |        0,   256,   257,   258,   259,   260,   261,   262,   263,   264, | 
| 1886 |      265,   266,   267,   268,   269,   270,   271,   272,   273,   274, | 
| 1887 |      275,   276,   277,   278,   279,   280,   281,   282,   283,   284, | 
| 1888 |      285,   286,   287,   288,   289,   290,   291,   292,   293,   294, | 
| 1889 |      295,   296,   297,   298,   299,   300,   301,   302,   303,   304, | 
| 1890 |      305,   306,   307,   308,   309,   310,   311,   312,   313,   314, | 
| 1891 |      315,   316,   317,   318,   319,   320,   321,   322,   323,   324, | 
| 1892 |      325,   326,   327,   328,   329,   330,   331,   332,   333,   334, | 
| 1893 |      335,   336,   337,   338,   339,   340,   341,   342,   343,   344, | 
| 1894 |      345,   346,   347,   348,   349,   350,   351,   352,   353,   354, | 
| 1895 |      355,   356,   357,   358,   359,   360,   361,   362,   363,   364, | 
| 1896 |      365,   366,   367,   368,   369,   370,   371,   372,   373,   374, | 
| 1897 |      375,   376,   377,   378,   379,   380,   381,   382,   383,   384, | 
| 1898 |      385,   386,   387,   388,   389,   390,   391,   392,   393,   394, | 
| 1899 |      395,   396,   397,   398,   399,   400,   401,   402,   403,   404, | 
| 1900 |      405,   406,   407,   408,   409,   410,   411,   412,   413,   414, | 
| 1901 |      415,   416,   417,   418,   419,   420,   421,   422,   423 | 
| 1902 | }; | 
| 1903 | # endif | 
| 1904 |  | 
| 1905 | #define YYPACT_NINF -668 | 
| 1906 |  | 
| 1907 | #define yypact_value_is_default(Yystate) \ | 
| 1908 |   (!!((Yystate) == (-668))) | 
| 1909 |  | 
| 1910 | #define YYTABLE_NINF -463 | 
| 1911 |  | 
| 1912 | #define yytable_value_is_error(Yytable_value) \ | 
| 1913 |   0 | 
| 1914 |  | 
| 1915 |   /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing | 
| 1916 |      STATE-NUM.  */ | 
| 1917 | static const yytype_int16 yypact[] = | 
| 1918 | { | 
| 1919 |      -63,   -28,   185,    86,   337,  -668,   117,  -668,  -668,  -668, | 
| 1920 |      734,  -668,  -668,   181,   253,   156,  -668,   213,  -668,  -668, | 
| 1921 |     -668,  -668,  -668,  -668,  -668,   212,  -668,   -12,   230,   337, | 
| 1922 |      342,  -668,   -38,   189,   298,  -668,  -668,   188,   272,   353, | 
| 1923 |     -668,  -668,    71,   316,  -668,  -668,   318,   239,   276,   134, | 
| 1924 |      188,   900,  -668,   334,   282,  -668,  -668,   233,  -668,   367, | 
| 1925 |     -668,  -668,   133,   290,   295,  -668,  1730,  1730,   345,  -668, | 
| 1926 |     -668,   -38,   305,  -668,   -36,   396,   334,  -668,  -668,  -668, | 
| 1927 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,   334,  -668,  -668, | 
| 1928 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,   369, | 
| 1929 |      370,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,   307, | 
| 1930 |      389,  -668,   601,   173,    24,   -22,    32,  -668,   338,   267, | 
| 1931 |      393,   394,  1398,  -668,  -668,  -668,  -668,  -668,   334,  -668, | 
| 1932 |       59,  -668,  -668,   166,  -668,   339,  -668,  -668,  -668,   395, | 
| 1933 |     -668,  -668,  -668,  -668,  -668,  -668,   341,  -668,  -668,  -668, | 
| 1934 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 1935 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 1936 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 1937 |      340,  -668,  -668,   347,   337,   291,   360,   493,   373,   349, | 
| 1938 |     1885,    64,  -668,   334,  -668,   226,   392,  -668,   358,  -668, | 
| 1939 |      304,   334,  -668,  -668,   188,   167,   174,   206,    21,   188, | 
| 1940 |      430,   342,   -53,   351,   188,   334,     6,  -668,  -668,  -668, | 
| 1941 |     -668,    79,   287,  -668,   353,   353,  -668,  -668,  -668,  1232, | 
| 1942 |      336,    18,   403,   344,  -668,   324,  1232,   334,  -668,   308, | 
| 1943 |     -668,   337,  -668,  -668,    23,  -668,   416,  -668,   342,   342, | 
| 1944 |      166,   166,   353,   334,   334,  -668,  1232,  -668,  -668,  -668, | 
| 1945 |     -668,  -668,  1232,  1232,  1398,  1398,  -668,  -668,  -668,  -668, | 
| 1946 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 1947 |     -668,  1398,  1398,  1398,  -668,  -668,  1398,  1398,  -668,  -668, | 
| 1948 |     -668,  -668,  1398,  -668,  -668,  1398,  -668,  -668,  1398,   352, | 
| 1949 |      447,   448,   449,  -668,  -668,  1066,  -668,  -668,  -668,  -668, | 
| 1950 |     -668,  1730,  1564,  1232,   108,  -668,  1232,  1232,  -668,  -668, | 
| 1951 |     -668,   337,   461,  -668,  -668,  -668,  -668,   282,   374,   378, | 
| 1952 |      282,  -668,  -668,  -668,     0,    51,  -668,  -668,   416,   342, | 
| 1953 |     -668,   226,   343,   226,  1232,  -668,  -668,   337,  -668,  -668, | 
| 1954 |      291,  -668,  -668,   291,  -668,  -668,   437,   337,   372,   376, | 
| 1955 |      421,    26,   408,   337,   291,   342,   384,    -1,   431,  -668, | 
| 1956 |      355,  -668,  -668,    52,    69,  -668,  -668,  -668,   466,   466, | 
| 1957 |     -668,   356,   482,   337,   435,   484,   337,   353,   485,  -668, | 
| 1958 |      453,  -668,  -668,   379,  -668,   365,   368,  -668,   371,   377, | 
| 1959 |      466,  -668,  -668,   380,  -668,  -668,   389,  -668,  -668,  -668, | 
| 1960 |     -668,   168,    24,   -22,    32,  -668,   456,   456,   342,   342, | 
| 1961 |     -668,   459,  -668,   191,  -668,   375,   404,  -668,  -668,  -668, | 
| 1962 |      383,   369,   370,   386,   291,  -668,   442,   388,    -6,   342, | 
| 1963 |     -668,   342,  -668,  -668,  -668,  -668,  -668,  -668,   465,   391, | 
| 1964 |      291,  -668,  -668,   157,   291,   337,   337,    16,   291,  -668, | 
| 1965 |      409,  -668,   348,   291,  -668,  -668,   415,    -6,   466,   353, | 
| 1966 |     -668,   342,  -668,   342,  -668,   416,   456,   440,   495,   239, | 
| 1967 |      381,   454,   507,   425,   457,   507,   466,   463,  -668,  -668, | 
| 1968 |     -668,  -668,  -668,  -668,   462,  -668,   282,   282,  -668,   121, | 
| 1969 |     -668,  -668,  -668,  -668,  -668,  -668,   412,  -668,  -668,   512, | 
| 1970 |      433,   417,  1232,  -668,  -668,  -668,  -668,   337,  -668,  -668, | 
| 1971 |      513,  -668,   497,  -668,   422,   423,  -668,  -668,  -668,  -668, | 
| 1972 |     -668,  -668,   291,  -668,   291,   291,  -668,  -668,  -668,   504, | 
| 1973 |      515,   188,  -668,  -668,    83,   416,   466,   432,   432,  -668, | 
| 1974 |     -668,  1232,   508,   476,   450,  -668,   492,  1232,  -668,   337, | 
| 1975 |      291,  -668,  -668,   291,   547,   566,  1232,   539,  -668,  -668, | 
| 1976 |     -668,  -668,  -668,  -668,  -668,  -668,   543,  1730,    62,   536, | 
| 1977 |     -668,   419,   353,  -668,  -668,  -668,  -668,  -668,   353,    84, | 
| 1978 |     -668,  -668,   291,  1804,  -668,   291,    46,  -668,   445,   446, | 
| 1979 |     -668,   353,  1232,  -668,    33,   524,   550,  -668,  -668,  -668, | 
| 1980 |     1232,   515,  -668,   537,  -668,  -668,   528,  -668,  -668,   421, | 
| 1981 |     1232,  -668,   466,   466,   504,  -668,  1232,  -668,   404,  1899, | 
| 1982 |     1899,   567,  -668,   140,   148,  -668,   339,  -668,  -668,  1232, | 
| 1983 |     -668,   573,  -668,  -668,  -668,  -668,  -668,    92,   226,   226, | 
| 1984 |     -668,  1232,   337,  -668,  -668,   342,   456,  -668,  -668,   -23, | 
| 1985 |     -668,   574,  -668,  -668,   466,   552,   148,   148,  1804,   464, | 
| 1986 |     1899,  1899,  1899,  1899,  -668,  1232,   291,    11,  -668,  -668, | 
| 1987 |     -668,  -668,   582,   472,  -668,  -668,    10,    47,   584,  -668, | 
| 1988 |      337,   569,  -668,  1232,  -668,   234,  -668,  -668,   506,   148, | 
| 1989 |      148,  -668,  -668,  -668,  -668,   555,  1232,  -668,  -668,    63, | 
| 1990 |      250,  -668,  -668,   556,  1232,  -668,  -668,  -668,  -668,   479, | 
| 1991 |     -668,   559,  -668,  -668,  -668,   481,  -668,  1232,  -668,  -668, | 
| 1992 |      291,  -668,   373,   488,   353,  -668,   562,  -668,  -668,  -668, | 
| 1993 |     -668,  -668,   342,  -668,  -668,  -668,   353,   191,  1232,   353, | 
| 1994 |     1232,  -668,  -668,   578,  -668,   337,   521,   466,   353,   542, | 
| 1995 |      466,   487,  -668,   466,  -668,   373,  -668,   466,   534,   466, | 
| 1996 |     -668,   600,  1232,   538,   125,  -668,   416,  1232,   495,  1232, | 
| 1997 |     -668,  1232,    -2,  -668,  -668,  -668,   291,  -668,   544,  -668, | 
| 1998 |     -668,   342,  1232,  -668,  -668,  1232,    10,  -668,  -668,  -668, | 
| 1999 |       11,  -668,  -668,    47,   490,  -668,  -668,  -668,  1232,    63, | 
| 2000 |     -668,  -668 | 
| 2001 | }; | 
| 2002 |  | 
| 2003 |   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. | 
| 2004 |      Performed when YYTABLE does not specify something else to do.  Zero | 
| 2005 |      means the default is an error.  */ | 
| 2006 | static const yytype_uint16 yydefact[] = | 
| 2007 | { | 
| 2008 |        4,     0,     0,    11,     0,     1,     0,     3,     2,    11, | 
| 2009 |        0,   469,   470,     6,     0,     9,   471,   457,   472,   328, | 
| 2010 |      329,   343,   342,   306,   305,   116,   317,   390,     0,     0, | 
| 2011 |        0,   308,   390,     0,     0,   310,   309,   390,     0,     0, | 
| 2012 |      349,   322,   390,     0,   311,   313,     0,     0,     0,     0, | 
| 2013 |      390,     0,   229,     0,     0,    49,   315,     0,   228,     0, | 
| 2014 |      312,   314,     0,     0,     0,   316,   265,     0,     0,   327, | 
| 2015 |      274,   390,     0,    50,   252,     0,     0,    16,    13,    15, | 
| 2016 |       14,    29,    12,    43,    44,    19,    33,     0,    34,    35, | 
| 2017 |       30,    31,    36,    37,    17,    32,    18,     8,    89,   105, | 
| 2018 |      104,   109,   122,   123,   110,   160,   161,   111,   112,   108, | 
| 2019 |      190,   192,   194,   198,   200,   204,   210,   212,   218,   220, | 
| 2020 |      222,   224,     0,   226,   196,   195,   197,   230,     0,   232, | 
| 2021 |        0,   259,   231,   266,   267,   271,   295,   297,   299,     0, | 
| 2022 |      301,   298,   321,   319,   323,   326,   272,   330,   332,   340, | 
| 2023 |      333,   334,   335,   337,   336,   338,   355,   357,   358,   359, | 
| 2024 |      356,   380,   381,   382,   383,   384,   385,   386,   324,   427, | 
| 2025 |      421,   426,   425,   424,   320,   438,   439,   422,   423,   325, | 
| 2026 |        0,   460,   341,   458,     0,     0,     0,     0,     0,     0, | 
| 2027 |        0,     0,   391,   396,   440,   370,     0,   457,     0,   458, | 
| 2028 |        0,     0,   434,   378,   390,     0,     0,     0,     0,   390, | 
| 2029 |        0,     0,     0,    26,   390,     0,     0,   429,   345,   344, | 
| 2030 |      346,     0,     0,   446,     0,     0,   465,   464,   360,     0, | 
| 2031 |       66,    62,     0,     0,   348,     0,     0,     0,   428,     0, | 
| 2032 |      466,   261,   467,   403,     0,   404,     0,   435,     0,     0, | 
| 2033 |      263,   264,     0,     0,     0,   433,     0,   254,   253,   463, | 
| 2034 |      273,   350,     0,     0,     0,     0,   241,   250,   243,   234, | 
| 2035 |      236,   237,   238,   239,   235,   244,   248,   245,   246,   242, | 
| 2036 |      249,     0,     0,     0,   203,   202,     0,     0,   207,   208, | 
| 2037 |      209,   206,     0,   215,   214,     0,   217,   216,     0,     0, | 
| 2038 |        0,     0,     0,   227,   251,     0,   255,   258,   294,   293, | 
| 2039 |      292,     0,     0,     0,     0,   304,     0,   352,     7,    38, | 
| 2040 |        5,     0,     0,   121,   117,   120,   280,     0,     0,     0, | 
| 2041 |        0,   318,   455,   454,     0,     0,   456,   402,     0,     0, | 
| 2042 |      399,   370,     0,   370,     0,   280,   394,     0,    42,    41, | 
| 2043 |        0,    79,    78,     0,    56,    55,     0,     0,     0,     0, | 
| 2044 |        0,     0,     0,     0,     0,     0,     0,   285,     0,   387, | 
| 2045 |        0,   431,   432,     0,     0,   388,   401,   400,   408,   408, | 
| 2046 |      365,     0,     0,     0,     0,     0,     0,     0,     0,   347, | 
| 2047 |        0,   405,   379,     0,   262,     0,     0,   395,     0,     0, | 
| 2048 |      408,   275,   393,     0,   107,   106,   191,   193,   233,   240, | 
| 2049 |      247,   199,   201,   205,   211,   213,     0,     0,     0,     0, | 
| 2050 |      256,     0,   270,     0,   268,     0,     0,   300,   302,   303, | 
| 2051 |        0,   354,   353,     0,     0,   468,     0,     0,   282,     0, | 
| 2052 |      441,     0,   442,   392,   397,   371,   113,   372,     0,     0, | 
| 2053 |        0,    40,    77,     0,     0,     0,     0,     0,     0,   462, | 
| 2054 |        0,   461,     0,     0,    48,    28,     0,   282,   408,     0, | 
| 2055 |      430,     0,   447,     0,   448,     0,     0,     0,   133,   361, | 
| 2056 |        0,     0,    68,     0,     0,    68,   408,     0,    88,   260, | 
| 2057 |      436,   437,   445,   453,     0,   177,     0,     0,   219,   412, | 
| 2058 |      416,   417,   418,   420,   221,   223,   406,   225,   257,     0, | 
| 2059 |        0,     0,     0,   296,   331,   351,    10,     0,   339,   289, | 
| 2060 |      281,   283,     0,   459,     0,     0,   398,   276,   279,    60, | 
| 2061 |       57,    58,     0,    59,     0,     0,    53,    52,    51,    82, | 
| 2062 |      469,   390,    47,    21,     0,     0,   408,   451,   451,   389, | 
| 2063 |      409,     0,     0,     0,     0,   366,     0,     0,    67,     0, | 
| 2064 |        0,    63,    64,     0,     0,     0,     0,     0,   411,   419, | 
| 2065 |      413,   415,   414,   410,   407,   159,     0,     0,   150,   146, | 
| 2066 |      148,   288,     0,   444,   443,    54,    45,    46,     0,     0, | 
| 2067 |       83,   277,     0,     0,   286,     0,     0,   452,     0,     0, | 
| 2068 |      169,     0,     0,   365,     0,     0,    69,    70,    65,    61, | 
| 2069 |        0,     0,   162,   184,   178,   158,     0,   151,   152,   153, | 
| 2070 |        0,   284,   408,   408,     0,    80,     0,    39,   307,    93, | 
| 2071 |        0,    22,    90,    96,    92,   100,   103,    99,    20,     0, | 
| 2072 |       73,    75,   450,   449,   170,   134,   124,     0,   370,   370, | 
| 2073 |      367,     0,     0,   135,   163,     0,     0,   269,   154,   155, | 
| 2074 |      147,   290,    85,    84,   408,     0,    94,    95,     0,     0, | 
| 2075 |        0,     0,     0,     0,    74,     0,     0,     0,   125,   373, | 
| 2076 |      363,   362,     0,     0,   189,    71,   144,     0,     0,   179, | 
| 2077 |        0,     0,   149,     0,   287,     0,   278,    91,   114,    97, | 
| 2078 |       98,   101,   102,    76,    72,     0,     0,   171,   175,   144, | 
| 2079 |        0,   369,   368,     0,     0,   140,   141,   136,   139,     0, | 
| 2080 |      145,     0,   164,   168,   185,     0,   156,     0,   291,    86, | 
| 2081 |        0,    87,     0,    24,     0,   176,     0,   131,   126,   132, | 
| 2082 |      130,   376,     0,   377,   374,   375,     0,   144,     0,     0, | 
| 2083 |        0,   157,    81,   115,   118,     0,   285,   408,     0,     0, | 
| 2084 |      408,     0,   142,   408,   180,     0,    25,   408,     0,   408, | 
| 2085 |      364,     0,     0,     0,     0,   119,     0,     0,   133,     0, | 
| 2086 |      143,     0,     0,   182,   181,   183,     0,   172,     0,   137, | 
| 2087 |      165,     0,     0,    23,   173,     0,   144,   166,   187,   186, | 
| 2088 |        0,   127,   138,     0,     0,   174,   128,   167,     0,   144, | 
| 2089 |      188,   129 | 
| 2090 | }; | 
| 2091 |  | 
| 2092 |   /* YYPGOTO[NTERM-NUM].  */ | 
| 2093 | static const yytype_int16 yypgoto[] = | 
| 2094 | { | 
| 2095 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,   613,  -668,  -668, | 
| 2096 |     -668,  -668,  -668,  -668,  -668,  -668,  -285,  -668,  -668,  -668, | 
| 2097 |     -668,  -668,  -668,  -668,  -668,   418,  -668,     5,  -668,  -668, | 
| 2098 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,   142,  -668,  -668, | 
| 2099 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,     4,  -668,   -51, | 
| 2100 |     -668,  -668,   -35,  -668,  -397,  -340,   -47,   317,  -255,  -668, | 
| 2101 |     -668,  -668,  -641,  -668,  -619,  -668,  -668,  -174,  -668,  -668, | 
| 2102 |     -142,  -583,  -668,  -159,  -668,  -657,  -109,   216,  -668,    27, | 
| 2103 |     -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -157,  -668, | 
| 2104 |     -668,  -668,  -668,  -668,  -152,  -668,  -668,  -667,  -668,  -668, | 
| 2105 |     -125,  -668,  -668,  -668,  -668,  -668,  -668,  -668,  -668,   387, | 
| 2106 |      385,   131,   366,  -668,   397,  -668,   361,   359,  -668,  -668, | 
| 2107 |      362,  -668,  -668,  -668,   535,  -668,  -668,  -668,  -668,  -668, | 
| 2108 |     -668,  -668,  -668,  -668,  -668,  -668,  -245,  -668,   526,  -668, | 
| 2109 |     -668,   279,  -294,  -668,  -668,   313,  -668,   194,   -91,    85, | 
| 2110 |     -668,  -668,  -668,   -87,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 2111 |     -668,  -668,  -668,  -668,  -175,  -668,  -668,  -668,  -668,  -668, | 
| 2112 |     -668,  -668,  -183,  -668,  -668,  -668,  -538,  -668,  -668,   -42, | 
| 2113 |     -668,  -668,  -668,  -668,    67,  -668,  -668,  -327,  -668,  -668, | 
| 2114 |     -668,  -668,  -668,  -668,  -668,     3,  -668,  -668,  -668,  -668, | 
| 2115 |     -668,  -668,  -668,  -668,   458,  -668,  -668,   252,  -341,  -412, | 
| 2116 |     -668,  -668,   -55,  -394,  -668,  -668,  -668,  -668,  -668,  -668, | 
| 2117 |     -304,  -668,  -668,   467,   124,   469,   -11,  -668,   -24,  -170, | 
| 2118 |      321,  -668,   639,  -668,  -308,    15,   -30 | 
| 2119 | }; | 
| 2120 |  | 
| 2121 |   /* YYDEFGOTO[NTERM-NUM].  */ | 
| 2122 | static const yytype_int16 yydefgoto[] = | 
| 2123 | { | 
| 2124 |       -1,     2,     3,   185,     7,     8,     9,    10,    77,   593, | 
| 2125 |      669,   756,   366,   367,    78,    79,   320,    80,    81,   350, | 
| 2126 |       82,    83,    84,    85,    86,    87,    88,   458,    89,   356, | 
| 2127 |      532,    90,    91,    92,   386,    93,   383,   560,   606,    94, | 
| 2128 |      641,   676,    95,   353,    96,   664,   589,   590,   730,   341, | 
| 2129 |       97,   631,   632,   633,   634,   635,    98,    99,   100,   733, | 
| 2130 |      189,   753,   324,   101,   102,   678,   709,   738,   806,   809, | 
| 2131 |      553,   103,   686,   717,   796,   718,   719,   720,   579,   580, | 
| 2132 |      619,   659,   692,   512,   104,   105,   654,   687,   722,   797, | 
| 2133 |      803,   106,   644,   677,   707,   794,   800,   708,   107,   567, | 
| 2134 |      614,   725,   774,   784,   656,   785,   804,   108,   109,   110, | 
| 2135 |      111,   112,   113,   287,   114,   292,   115,   116,   295,   298, | 
| 2136 |      117,   118,   119,   120,   121,   122,   123,   124,   281,   125, | 
| 2137 |      282,   126,   283,   127,   128,   129,   306,   130,   131,   393, | 
| 2138 |      132,   133,   134,   253,   626,   437,   438,   520,   468,   521, | 
| 2139 |      522,   694,   312,   135,   136,   137,   314,   427,   138,   139, | 
| 2140 |      140,   190,   141,   142,   143,   144,   145,   146,   147,   148, | 
| 2141 |      149,   150,   219,   151,   152,   153,   154,   433,   155,   156, | 
| 2142 |      157,   380,   554,   681,   479,   555,   650,   342,   710,   158, | 
| 2143 |      159,   160,   161,   162,   475,   193,   163,   164,   165,   166, | 
| 2144 |      338,   339,   526,   375,   340,   246,   167,   505,   477,   498, | 
| 2145 |      573,   499,   500,   168,   169,   170,   370,   171,   172,   173, | 
| 2146 |      174,   175,   176,   177,   598,   178,   194,   335,   179,   524, | 
| 2147 |      180,   181,   556,   241,   541,   182,   183 | 
| 2148 | }; | 
| 2149 |  | 
| 2150 |   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If | 
| 2151 |      positive, shift that token.  If negative, reduce the rule whose | 
| 2152 |      number is the opposite.  If YYTABLE_NINF, syntax error.  */ | 
| 2153 | static const yytype_int16 yytable[] = | 
| 2154 | { | 
| 2155 |      199,   397,   237,   293,   235,   504,   198,   404,   405,   220, | 
| 2156 |      429,   245,   690,   434,   445,   331,   447,   422,   424,    13, | 
| 2157 |      723,   202,   501,   501,  -307,   260,    11,   217,    12,   242, | 
| 2158 |      395,   223,    16,   459,    18,   201,   261,   439,   478,   450, | 
| 2159 |      215,   378,   379,   238,   196,   222,  -288,   713,   705,   648, | 
| 2160 |      791,   247,   740,   232,   257,   637,   357,   200,    55,   494, | 
| 2161 |      255,   328,   432,   384,   550,   451,   639,   715,   452,   400, | 
| 2162 |       16,   332,    18,   288,   254,   482,   358,   304,   485,   464, | 
| 2163 |       46,   617,   501,   191,   721,    16,   197,    18,   441,   471, | 
| 2164 |      737,   754,   359,   443,   467,   536,   296,   -27,   226,   227, | 
| 2165 |      736,   305,     1,   716,    50,   289,   473,    73,   537,   258, | 
| 2166 |      618,   640,   502,   502,    16,   197,    18,    19,    20,   297, | 
| 2167 |      581,   624,   385,   509,   775,   290,   739,   545,   192,   792, | 
| 2168 |      637,   426,   440,    46,   360,     4,   723,   294,   333,   428, | 
| 2169 |      243,    64,   337,   691,   706,   564,   327,   534,   535,   516, | 
| 2170 |      346,   519,   740,   510,   192,   333,   613,    50,   325,    38, | 
| 2171 |      199,   336,   649,   328,   369,   529,   221,   679,   291,   533, | 
| 2172 |      782,   337,   502,   538,   714,   236,   509,   715,   542,    59, | 
| 2173 |      706,   199,   381,   442,   472,     5,   391,   363,     6,   390, | 
| 2174 |      737,   199,   199,    75,   220,   220,   333,   374,   377,   318, | 
| 2175 |      187,   474,   401,   402,   486,   596,   510,   347,   334,   403, | 
| 2176 |      343,   333,   361,   716,    54,   594,   625,   368,   199,   199, | 
| 2177 |      680,    14,   220,   373,   398,   399,   739,   714,   244,    11, | 
| 2178 |      549,    12,   666,   667,   329,   308,   230,   192,   570,    49, | 
| 2179 |      184,   530,    63,    64,   689,   226,   227,   585,   571,   586, | 
| 2180 |      587,   607,    69,    11,   741,    12,   394,   578,   421,   396, | 
| 2181 |      186,   330,   501,   309,   531,   572,   425,   284,   236,   430, | 
| 2182 |      231,   525,   284,   699,   700,   608,   236,   742,   609,   670, | 
| 2183 |      671,   661,   662,   616,   199,   285,   546,   672,   673,    33, | 
| 2184 |      285,   348,   236,    16,   197,    18,   600,   448,   351,   729, | 
| 2185 |      595,   547,   605,   548,   509,   310,   311,   627,  -462,   199, | 
| 2186 |      638,   612,   188,   349,   354,   444,   202,   223,   247,   255, | 
| 2187 |      352,   682,   683,   695,   204,   195,   205,    47,   286,   236, | 
| 2188 |      355,   461,   701,   702,   510,   199,   435,   203,   206,   207, | 
| 2189 |       11,   465,    12,   208,   685,   250,   251,   646,    16,   197, | 
| 2190 |       18,   540,   502,    12,   192,   653,   343,   220,   343,    16, | 
| 2191 |      218,    18,   435,   506,   506,   578,    57,   216,   224,   209, | 
| 2192 |      225,   229,   454,    16,   240,    18,   236,   200,   463,    16, | 
| 2193 |      323,    18,   726,   239,   674,   248,   199,   199,   199,   199, | 
| 2194 |      249,   704,   503,   503,   503,   503,   684,   252,   435,   622, | 
| 2195 |      256,   435,   210,   259,   265,   623,   262,   263,   211,   199, | 
| 2196 |      212,   199,   408,   409,   410,   523,   768,   523,   645,   771, | 
| 2197 |      703,   264,   773,   300,   299,   301,   776,   302,   778,   319, | 
| 2198 |      313,   315,   316,   321,   344,   317,   333,   362,   728,   220, | 
| 2199 |      382,   199,  -461,   199,   326,   752,   199,   523,   388,   523, | 
| 2200 |      213,   735,   503,   345,   365,   387,   389,   392,   305,   747, | 
| 2201 |      214,   416,    16,   197,    18,   417,   418,   419,   436,   221, | 
| 2202 |      435,   435,   751,   244,   453,   446,   455,   435,   457,   426, | 
| 2203 |      456,   462,   466,   469,   476,   568,   569,   470,   480,   481, | 
| 2204 |      483,   484,   487,   762,   327,   764,   488,   490,   489,   191, | 
| 2205 |      491,   793,   508,   492,   539,   513,   636,    38,   527,   493, | 
| 2206 |      543,   328,   495,   514,   496,   517,   552,   780,   515,   204, | 
| 2207 |      518,   205,   787,   528,   789,   551,   790,   558,   559,   561, | 
| 2208 |      562,   786,   435,   206,   207,   557,   565,   799,   208,   574, | 
| 2209 |      801,   575,   636,   636,   592,   497,   576,   566,   577,   582, | 
| 2210 |      581,   757,   220,   810,   583,   584,   588,   591,   220,   597, | 
| 2211 |      601,   602,    54,   760,   209,   604,   763,   610,   603,   611, | 
| 2212 |      613,   220,   615,   620,   435,   769,   519,   642,   643,   665, | 
| 2213 |      651,   636,   329,   636,   636,   636,   636,   652,   657,   655, | 
| 2214 |       63,    64,   668,   675,   693,   696,   698,   322,   711,   199, | 
| 2215 |      199,   712,   724,   211,   727,   212,   732,   734,   746,   330, | 
| 2216 |      748,   749,   750,   755,   758,   765,   467,   770,   772,   777, | 
| 2217 |      779,   808,    15,   781,   658,   199,   199,   563,   663,   795, | 
| 2218 |      364,   688,   503,   697,   431,   811,   788,   802,   761,   511, | 
| 2219 |      199,   199,   199,   199,   731,   213,   807,   660,   805,   783, | 
| 2220 |      407,   406,   411,   413,   414,   214,   307,   303,   449,   743, | 
| 2221 |      415,   544,   266,   343,   343,   767,   621,   435,   744,   267, | 
| 2222 |      647,   507,   599,   268,   269,   270,   271,   272,   273,   274, | 
| 2223 |      376,   275,   460,   371,   412,   372,   228,     0,     0,   276, | 
| 2224 |        0,     0,     0,     0,   277,     0,     0,   278,     0,     0, | 
| 2225 |        0,     0,   325,     0,   220,   435,   279,     0,     0,     0, | 
| 2226 |        0,     0,   199,     0,     0,     0,   220,     0,   759,   220, | 
| 2227 |        0,     0,   280,     0,     0,   745,     0,     0,   220,     0, | 
| 2228 |        0,     0,     0,     0,     0,   325,     0,    11,     0,    12, | 
| 2229 |       16,    17,    18,    19,    20,    21,    22,    23,    24,     0, | 
| 2230 |        0,    25,     0,     0,     0,     0,    26,    27,    28,     0, | 
| 2231 |       29,   199,     0,     0,    30,     0,     0,   798,    31,     0, | 
| 2232 |      766,     0,    32,    33,     0,     0,     0,     0,    34,     0, | 
| 2233 |       35,    36,     0,     0,    37,    38,    39,    40,    41,    42, | 
| 2234 |        0,     0,     0,     0,     0,     0,     0,    43,     0,     0, | 
| 2235 |       44,    45,     0,     0,    46,     0,     0,     0,     0,     0, | 
| 2236 |        0,    47,     0,     0,     0,     0,    48,    49,     0,     0, | 
| 2237 |        0,     0,     0,     0,     0,     0,     0,     0,    50,    51, | 
| 2238 |        0,     0,     0,    52,     0,     0,     0,     0,    53,     0, | 
| 2239 |       54,     0,     0,     0,     0,    55,     0,     0,     0,    56, | 
| 2240 |       57,    58,     0,     0,    59,     0,    60,    61,     0,     0, | 
| 2241 |       62,     0,     0,     0,     0,     0,     0,     0,    63,    64, | 
| 2242 |        0,    65,     0,    66,    67,    68,     0,     0,    69,     0, | 
| 2243 |        0,     0,     0,     0,     0,    70,     0,    71,     0,     0, | 
| 2244 |        0,     0,    72,     0,    73,    74,     0,     0,     0,     0, | 
| 2245 |        0,    75,    76,    11,     0,    12,    16,    17,    18,    19, | 
| 2246 |       20,    21,    22,    23,    24,     0,     0,    25,     0,     0, | 
| 2247 |        0,     0,    26,    27,    28,     0,    29,     0,     0,     0, | 
| 2248 |       30,     0,     0,     0,    31,     0,     0,     0,    32,    33, | 
| 2249 |        0,     0,     0,     0,   233,     0,    35,    36,     0,     0, | 
| 2250 |       37,    38,    39,    40,    41,    42,     0,     0,     0,     0, | 
| 2251 |        0,     0,     0,    43,     0,     0,    44,    45,     0,     0, | 
| 2252 |       46,     0,     0,     0,     0,     0,     0,    47,     0,     0, | 
| 2253 |        0,     0,    48,     0,     0,     0,     0,     0,     0,     0, | 
| 2254 |        0,     0,     0,     0,    50,    51,     0,     0,     0,    52, | 
| 2255 |        0,     0,     0,     0,    53,     0,    54,     0,     0,     0, | 
| 2256 |        0,    55,     0,     0,     0,    56,    57,    58,     0,     0, | 
| 2257 |       59,     0,    60,    61,     0,     0,    62,     0,     0,     0, | 
| 2258 |        0,     0,   234,     0,    63,    64,     0,    65,     0,    66, | 
| 2259 |       67,    68,     0,     0,    69,     0,     0,     0,     0,     0, | 
| 2260 |        0,    70,     0,    71,     0,     0,     0,     0,    72,     0, | 
| 2261 |       73,    74,     0,     0,     0,     0,     0,    75,    76,    11, | 
| 2262 |        0,    12,    16,    17,    18,    19,    20,    21,    22,    23, | 
| 2263 |       24,     0,     0,    25,     0,     0,     0,     0,    26,    27, | 
| 2264 |       28,     0,    29,     0,     0,     0,    30,     0,     0,     0, | 
| 2265 |       31,     0,     0,     0,    32,    33,     0,     0,     0,   420, | 
| 2266 |      233,     0,    35,    36,     0,     0,    37,    38,    39,    40, | 
| 2267 |       41,    42,     0,     0,     0,     0,     0,     0,     0,    43, | 
| 2268 |        0,     0,    44,    45,     0,     0,    46,     0,     0,     0, | 
| 2269 |        0,     0,     0,    47,     0,     0,     0,     0,    48,     0, | 
| 2270 |        0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2271 |       50,    51,     0,     0,     0,    52,     0,     0,     0,     0, | 
| 2272 |       53,     0,    54,     0,     0,     0,     0,    55,     0,     0, | 
| 2273 |        0,    56,    57,    58,     0,     0,    59,     0,    60,    61, | 
| 2274 |        0,     0,    62,     0,     0,     0,     0,     0,     0,     0, | 
| 2275 |       63,    64,     0,    65,     0,    66,    67,    68,     0,     0, | 
| 2276 |       69,     0,     0,     0,     0,     0,     0,    70,     0,    71, | 
| 2277 |        0,     0,     0,     0,    72,     0,    73,    74,     0,     0, | 
| 2278 |        0,     0,     0,    75,    76,    11,     0,    12,    16,    17, | 
| 2279 |       18,    19,    20,    21,    22,    23,    24,     0,     0,    25, | 
| 2280 |        0,     0,     0,     0,    26,    27,    28,     0,    29,     0, | 
| 2281 |        0,     0,    30,     0,     0,     0,    31,     0,     0,     0, | 
| 2282 |       32,    33,     0,     0,     0,     0,   233,     0,    35,    36, | 
| 2283 |        0,     0,    37,    38,    39,    40,    41,    42,     0,     0, | 
| 2284 |        0,     0,     0,     0,     0,    43,     0,     0,    44,    45, | 
| 2285 |        0,     0,    46,     0,     0,     0,     0,     0,     0,    47, | 
| 2286 |        0,     0,     0,     0,    48,     0,     0,     0,     0,     0, | 
| 2287 |        0,     0,     0,     0,     0,     0,    50,    51,     0,     0, | 
| 2288 |        0,    52,     0,     0,     0,     0,    53,     0,    54,     0, | 
| 2289 |        0,     0,     0,    55,     0,     0,     0,    56,    57,    58, | 
| 2290 |        0,     0,    59,     0,    60,    61,     0,     0,    62,     0, | 
| 2291 |        0,     0,     0,     0,     0,     0,    63,    64,     0,    65, | 
| 2292 |        0,    66,    67,    68,     0,     0,    69,     0,     0,     0, | 
| 2293 |        0,     0,     0,    70,     0,    71,     0,     0,     0,     0, | 
| 2294 |       72,     0,    73,    74,     0,     0,     0,     0,     0,    75, | 
| 2295 |       76,    11,     0,    12,    16,    17,    18,    19,    20,    21, | 
| 2296 |       22,    23,    24,     0,     0,    25,     0,     0,     0,     0, | 
| 2297 |       26,    27,     0,     0,    29,     0,     0,     0,    30,     0, | 
| 2298 |        0,     0,    31,     0,     0,     0,    32,    33,     0,     0, | 
| 2299 |        0,     0,   233,     0,    35,    36,     0,     0,    37,    38, | 
| 2300 |       39,    40,    41,    42,     0,     0,     0,     0,     0,     0, | 
| 2301 |        0,     0,     0,     0,    44,    45,     0,     0,     0,     0, | 
| 2302 |        0,     0,     0,     0,     0,    47,     0,     0,     0,     0, | 
| 2303 |        0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2304 |        0,     0,     0,    51,     0,     0,     0,    52,     0,     0, | 
| 2305 |        0,     0,    53,     0,    54,     0,     0,     0,     0,    55, | 
| 2306 |        0,     0,     0,    56,    57,    58,     0,     0,    59,     0, | 
| 2307 |       60,    61,     0,     0,    62,     0,     0,     0,     0,     0, | 
| 2308 |        0,     0,    63,    64,     0,    65,     0,    66,    67,     0, | 
| 2309 |        0,     0,    69,     0,     0,     0,     0,     0,     0,    70, | 
| 2310 |        0,    71,     0,     0,     0,     0,     0,     0,    73,    74, | 
| 2311 |        0,     0,     0,     0,     0,    75,    76,    11,     0,    12, | 
| 2312 |       16,    17,    18,    19,    20,    21,    22,    23,    24,     0, | 
| 2313 |        0,    25,     0,     0,     0,     0,    26,    27,     0,     0, | 
| 2314 |       29,     0,     0,     0,    30,     0,     0,     0,    31,     0, | 
| 2315 |        0,     0,    32,    33,     0,     0,     0,     0,   233,     0, | 
| 2316 |       35,    36,     0,     0,    37,    38,    39,    40,    41,    42, | 
| 2317 |        0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2318 |       44,    45,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2319 |        0,    47,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2320 |        0,     0,     0,     0,     0,     0,     0,     0,     0,    51, | 
| 2321 |        0,     0,     0,     0,     0,     0,     0,     0,    53,     0, | 
| 2322 |       54,     0,     0,     0,     0,    55,     0,     0,     0,    56, | 
| 2323 |       57,     0,     0,     0,     0,     0,    60,    61,     0,     0, | 
| 2324 |       62,     0,     0,     0,     0,     0,     0,     0,    63,    64, | 
| 2325 |        0,    65,     0,     0,     0,     0,   423,     0,    69,     0, | 
| 2326 |        0,     0,     0,     0,     0,    70,     0,    71,     0,     0, | 
| 2327 |        0,     0,     0,     0,    73,     0,     0,     0,     0,     0, | 
| 2328 |        0,    75,    76,    11,     0,    12,    16,    17,    18,    19, | 
| 2329 |       20,    21,    22,    23,    24,     0,     0,    25,     0,     0, | 
| 2330 |        0,     0,    26,    27,     0,     0,    29,     0,     0,     0, | 
| 2331 |       30,     0,     0,     0,    31,     0,     0,     0,    32,    33, | 
| 2332 |        0,     0,     0,     0,   233,     0,    35,    36,     0,     0, | 
| 2333 |       37,    38,    39,    40,    41,    42,     0,     0,     0,     0, | 
| 2334 |        0,     0,     0,     0,     0,     0,    44,    45,     0,     0, | 
| 2335 |        0,     0,     0,     0,     0,     0,     0,    47,     0,     0, | 
| 2336 |       16,    17,    18,    19,    20,     0,     0,    23,    24,     0, | 
| 2337 |        0,     0,     0,     0,     0,    51,    26,   628,     0,     0, | 
| 2338 |        0,     0,     0,     0,    53,     0,    54,     0,    31,     0, | 
| 2339 |        0,    55,   327,     0,     0,    56,    57,     0,     0,     0, | 
| 2340 |       35,    36,    60,    61,     0,    38,    62,     0,    41,   328, | 
| 2341 |        0,     0,     0,     0,    63,    64,     0,    65,     0,     0, | 
| 2342 |       44,    45,     0,     0,    69,     0,     0,     0,     0,     0, | 
| 2343 |        0,    70,     0,    71,     0,     0,     0,     0,     0,     0, | 
| 2344 |       73,    16,   197,    18,    19,    20,     0,    75,    76,     0, | 
| 2345 |        0,     0,     0,     0,     0,    16,   197,    18,    19,    20, | 
| 2346 |       54,     0,    23,    24,     0,     0,     0,     0,     0,    56, | 
| 2347 |        0,    26,   628,   327,     0,     0,    60,    61,     0,     0, | 
| 2348 |      329,     0,     0,    31,     0,     0,    38,   327,    63,    64, | 
| 2349 |      328,    65,     0,   629,   630,    35,    36,     0,    69,     0, | 
| 2350 |       38,     0,     0,    41,   328,     0,     0,   330,     0,     0, | 
| 2351 |        0,     0,     0,     0,     0,    44,    45,     0,     0,     0, | 
| 2352 |        0,    75,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2353 |        0,     0,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2354 |        0,    54,     0,     0,     0,     0,     0,     0,     0,     0, | 
| 2355 |        0,     0,     0,     0,     0,    54,     0,     0,     0,     0, | 
| 2356 |        0,   329,     0,     0,    56,     0,     0,     0,     0,     0, | 
| 2357 |       64,    60,    61,     0,     0,   329,     0,     0,     0,    69, | 
| 2358 |        0,     0,     0,    63,    64,     0,    65,     0,   330,     0, | 
| 2359 |        0,     0,     0,    69,     0,     0,     0,     0,     0,     0, | 
| 2360 |        0,     0,   330 | 
| 2361 | }; | 
| 2362 |  | 
| 2363 | static const yytype_int16 yycheck[] = | 
| 2364 | { | 
| 2365 |       30,   246,    53,    25,    51,   417,    30,   262,   263,    39, | 
| 2366 |      314,    62,    35,   321,   341,   190,   343,   311,   312,     4, | 
| 2367 |      687,    32,   416,   417,    36,    76,     3,    38,     5,    59, | 
| 2368 |        7,    42,     6,     7,     8,    32,    87,    37,   379,   347, | 
| 2369 |       37,   224,   225,    54,    29,    42,    52,    37,    37,    16, | 
| 2370 |       52,    62,   709,    50,    90,   593,    35,    95,   111,   400, | 
| 2371 |       71,    55,   317,    45,   476,   350,    20,   686,   353,   252, | 
| 2372 |        6,     7,     8,    49,    71,   383,    55,   128,   386,   364, | 
| 2373 |       70,    19,   476,    95,    37,     6,     7,     8,    37,    37, | 
| 2374 |      709,   732,    71,   338,    95,    79,    64,    98,     6,     7, | 
| 2375 |       37,    42,   165,   686,    94,    81,    37,   160,    92,   145, | 
| 2376 |       48,    65,   416,   417,     6,     7,     8,     9,    10,    87, | 
| 2377 |       37,    37,   104,   113,   765,   101,   709,   468,   166,   131, | 
| 2378 |      668,    23,   132,    70,   113,   163,   803,   159,   132,   314, | 
| 2379 |        7,   135,   193,   166,   133,   486,    38,   455,   456,   434, | 
| 2380 |      201,   157,   809,   143,   166,   132,    31,    94,   188,    51, | 
| 2381 |      190,   191,   129,    55,   215,   450,    95,    75,   144,   454, | 
| 2382 |       45,   222,   476,   458,   164,    42,   113,   796,   463,   120, | 
| 2383 |      133,   211,   229,   132,   132,     0,   237,   211,   102,   236, | 
| 2384 |      809,   221,   222,   167,   224,   225,   132,   221,   222,   184, | 
| 2385 |       44,   132,   253,   254,   387,   546,   143,   204,   144,   256, | 
| 2386 |      195,   132,   209,   796,   106,   132,   132,   214,   248,   249, | 
| 2387 |      128,   104,   252,   144,   248,   249,   809,   164,    95,     3, | 
| 2388 |      475,     5,   629,   630,   126,    69,   102,   166,   117,    83, | 
| 2389 |       59,    84,   134,   135,   656,     6,     7,   532,   127,   534, | 
| 2390 |      535,   559,   144,     3,     4,     5,   241,   512,   305,   244, | 
| 2391 |        7,   153,   656,    97,   107,   144,   313,    99,    42,   316, | 
| 2392 |      136,   441,    99,   670,   671,   560,    42,    27,   563,   139, | 
| 2393 |      140,   622,   623,   577,   314,   117,   469,   139,   140,    39, | 
| 2394 |      117,   124,    42,     6,     7,     8,   551,   344,   124,    65, | 
| 2395 |      545,   471,   557,   473,   113,   139,   140,   592,    95,   339, | 
| 2396 |      595,   566,   100,   146,   108,   339,   327,   328,   329,   330, | 
| 2397 |      146,   648,   649,   664,    26,    95,    28,    77,   155,    42, | 
| 2398 |      124,   361,   672,   673,   143,   365,   321,   148,    40,    41, | 
| 2399 |        3,   365,     5,    45,   652,    66,    67,   602,     6,     7, | 
| 2400 |        8,     3,   656,     5,   166,   610,   341,   387,   343,     6, | 
| 2401 |        7,     8,   347,   418,   419,   620,   116,    95,    52,    71, | 
| 2402 |       52,    95,   357,     6,     7,     8,    42,    95,   363,     6, | 
| 2403 |        7,     8,   690,   150,   639,    95,   416,   417,   418,   419, | 
| 2404 |       95,   676,   416,   417,   418,   419,   651,    52,   383,   582, | 
| 2405 |       95,   386,   104,     7,    15,   588,    37,    37,   110,   439, | 
| 2406 |      112,   441,   281,   282,   283,   439,   757,   441,   601,   760, | 
| 2407 |      675,   114,   763,   156,    86,    32,   767,    33,   769,   138, | 
| 2408 |       91,    36,    91,    73,    42,    95,   132,     7,   693,   469, | 
| 2409 |      104,   471,    95,   473,    95,   730,   476,   471,   104,   473, | 
| 2410 |      152,   706,   476,    95,   103,    52,   132,   149,    42,   714, | 
| 2411 |      162,   109,     6,     7,     8,    18,    18,    18,     7,    95, | 
| 2412 |      455,   456,   727,    95,    37,   132,   104,   462,    57,    23, | 
| 2413 |      104,    73,    98,    52,    18,   496,   497,   132,   132,     7, | 
| 2414 |       55,     7,     7,   748,    38,   750,    43,   132,   119,    95, | 
| 2415 |      132,   786,    43,   132,    95,   130,   593,    51,    43,   132, | 
| 2416 |       95,    55,   132,   130,    58,    73,    21,   772,   132,    26, | 
| 2417 |      132,    28,   777,   132,   779,    85,   781,    73,    21,   104, | 
| 2418 |       73,   776,   517,    40,    41,   154,    73,   792,    45,   127, | 
| 2419 |      795,    29,   629,   630,   541,    89,   113,    85,   131,    52, | 
| 2420 |       37,   734,   582,   808,   132,   132,    52,    42,   588,   127, | 
| 2421 |       52,    85,   106,   746,    71,    73,   749,    20,   118,     3, | 
| 2422 |       31,   601,    29,    37,   559,   758,   157,   132,   132,   626, | 
| 2423 |       56,   668,   126,   670,   671,   672,   673,    37,    60,    52, | 
| 2424 |      134,   135,    25,    20,    20,    43,   132,   104,    16,   629, | 
| 2425 |      630,   129,    18,   110,    35,   112,   100,    52,    52,   153, | 
| 2426 |      131,    52,   131,   125,    52,    37,    95,    75,   131,    85, | 
| 2427 |       20,   131,     9,    85,   619,   655,   656,   485,   624,    85, | 
| 2428 |      212,   655,   656,   668,   317,   809,   778,   796,   747,   423, | 
| 2429 |      670,   671,   672,   673,   695,   152,   803,   620,   800,   774, | 
| 2430 |      265,   264,   286,   292,   295,   162,   130,   122,   345,   710, | 
| 2431 |      298,   467,    61,   648,   649,   756,   581,   652,   710,    68, | 
| 2432 |      603,   419,   548,    72,    73,    74,    75,    76,    77,    78, | 
| 2433 |      222,    80,   361,   216,   287,   216,    47,    -1,    -1,    88, | 
| 2434 |       -1,    -1,    -1,    -1,    93,    -1,    -1,    96,    -1,    -1, | 
| 2435 |       -1,    -1,   732,    -1,   734,   690,   105,    -1,    -1,    -1, | 
| 2436 |       -1,    -1,   742,    -1,    -1,    -1,   746,    -1,   742,   749, | 
| 2437 |       -1,    -1,   121,    -1,    -1,   710,    -1,    -1,   758,    -1, | 
| 2438 |       -1,    -1,    -1,    -1,    -1,   765,    -1,     3,    -1,     5, | 
| 2439 |        6,     7,     8,     9,    10,    11,    12,    13,    14,    -1, | 
| 2440 |       -1,    17,    -1,    -1,    -1,    -1,    22,    23,    24,    -1, | 
| 2441 |       26,   791,    -1,    -1,    30,    -1,    -1,   791,    34,    -1, | 
| 2442 |      755,    -1,    38,    39,    -1,    -1,    -1,    -1,    44,    -1, | 
| 2443 |       46,    47,    -1,    -1,    50,    51,    52,    53,    54,    55, | 
| 2444 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    63,    -1,    -1, | 
| 2445 |       66,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1, | 
| 2446 |       -1,    77,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1, | 
| 2447 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    94,    95, | 
| 2448 |       -1,    -1,    -1,    99,    -1,    -1,    -1,    -1,   104,    -1, | 
| 2449 |      106,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115, | 
| 2450 |      116,   117,    -1,    -1,   120,    -1,   122,   123,    -1,    -1, | 
| 2451 |      126,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135, | 
| 2452 |       -1,   137,    -1,   139,   140,   141,    -1,    -1,   144,    -1, | 
| 2453 |       -1,    -1,    -1,    -1,    -1,   151,    -1,   153,    -1,    -1, | 
| 2454 |       -1,    -1,   158,    -1,   160,   161,    -1,    -1,    -1,    -1, | 
| 2455 |       -1,   167,   168,     3,    -1,     5,     6,     7,     8,     9, | 
| 2456 |       10,    11,    12,    13,    14,    -1,    -1,    17,    -1,    -1, | 
| 2457 |       -1,    -1,    22,    23,    24,    -1,    26,    -1,    -1,    -1, | 
| 2458 |       30,    -1,    -1,    -1,    34,    -1,    -1,    -1,    38,    39, | 
| 2459 |       -1,    -1,    -1,    -1,    44,    -1,    46,    47,    -1,    -1, | 
| 2460 |       50,    51,    52,    53,    54,    55,    -1,    -1,    -1,    -1, | 
| 2461 |       -1,    -1,    -1,    63,    -1,    -1,    66,    67,    -1,    -1, | 
| 2462 |       70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1, | 
| 2463 |       -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2464 |       -1,    -1,    -1,    -1,    94,    95,    -1,    -1,    -1,    99, | 
| 2465 |       -1,    -1,    -1,    -1,   104,    -1,   106,    -1,    -1,    -1, | 
| 2466 |       -1,   111,    -1,    -1,    -1,   115,   116,   117,    -1,    -1, | 
| 2467 |      120,    -1,   122,   123,    -1,    -1,   126,    -1,    -1,    -1, | 
| 2468 |       -1,    -1,   132,    -1,   134,   135,    -1,   137,    -1,   139, | 
| 2469 |      140,   141,    -1,    -1,   144,    -1,    -1,    -1,    -1,    -1, | 
| 2470 |       -1,   151,    -1,   153,    -1,    -1,    -1,    -1,   158,    -1, | 
| 2471 |      160,   161,    -1,    -1,    -1,    -1,    -1,   167,   168,     3, | 
| 2472 |       -1,     5,     6,     7,     8,     9,    10,    11,    12,    13, | 
| 2473 |       14,    -1,    -1,    17,    -1,    -1,    -1,    -1,    22,    23, | 
| 2474 |       24,    -1,    26,    -1,    -1,    -1,    30,    -1,    -1,    -1, | 
| 2475 |       34,    -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    43, | 
| 2476 |       44,    -1,    46,    47,    -1,    -1,    50,    51,    52,    53, | 
| 2477 |       54,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    63, | 
| 2478 |       -1,    -1,    66,    67,    -1,    -1,    70,    -1,    -1,    -1, | 
| 2479 |       -1,    -1,    -1,    77,    -1,    -1,    -1,    -1,    82,    -1, | 
| 2480 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2481 |       94,    95,    -1,    -1,    -1,    99,    -1,    -1,    -1,    -1, | 
| 2482 |      104,    -1,   106,    -1,    -1,    -1,    -1,   111,    -1,    -1, | 
| 2483 |       -1,   115,   116,   117,    -1,    -1,   120,    -1,   122,   123, | 
| 2484 |       -1,    -1,   126,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2485 |      134,   135,    -1,   137,    -1,   139,   140,   141,    -1,    -1, | 
| 2486 |      144,    -1,    -1,    -1,    -1,    -1,    -1,   151,    -1,   153, | 
| 2487 |       -1,    -1,    -1,    -1,   158,    -1,   160,   161,    -1,    -1, | 
| 2488 |       -1,    -1,    -1,   167,   168,     3,    -1,     5,     6,     7, | 
| 2489 |        8,     9,    10,    11,    12,    13,    14,    -1,    -1,    17, | 
| 2490 |       -1,    -1,    -1,    -1,    22,    23,    24,    -1,    26,    -1, | 
| 2491 |       -1,    -1,    30,    -1,    -1,    -1,    34,    -1,    -1,    -1, | 
| 2492 |       38,    39,    -1,    -1,    -1,    -1,    44,    -1,    46,    47, | 
| 2493 |       -1,    -1,    50,    51,    52,    53,    54,    55,    -1,    -1, | 
| 2494 |       -1,    -1,    -1,    -1,    -1,    63,    -1,    -1,    66,    67, | 
| 2495 |       -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77, | 
| 2496 |       -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1, | 
| 2497 |       -1,    -1,    -1,    -1,    -1,    -1,    94,    95,    -1,    -1, | 
| 2498 |       -1,    99,    -1,    -1,    -1,    -1,   104,    -1,   106,    -1, | 
| 2499 |       -1,    -1,    -1,   111,    -1,    -1,    -1,   115,   116,   117, | 
| 2500 |       -1,    -1,   120,    -1,   122,   123,    -1,    -1,   126,    -1, | 
| 2501 |       -1,    -1,    -1,    -1,    -1,    -1,   134,   135,    -1,   137, | 
| 2502 |       -1,   139,   140,   141,    -1,    -1,   144,    -1,    -1,    -1, | 
| 2503 |       -1,    -1,    -1,   151,    -1,   153,    -1,    -1,    -1,    -1, | 
| 2504 |      158,    -1,   160,   161,    -1,    -1,    -1,    -1,    -1,   167, | 
| 2505 |      168,     3,    -1,     5,     6,     7,     8,     9,    10,    11, | 
| 2506 |       12,    13,    14,    -1,    -1,    17,    -1,    -1,    -1,    -1, | 
| 2507 |       22,    23,    -1,    -1,    26,    -1,    -1,    -1,    30,    -1, | 
| 2508 |       -1,    -1,    34,    -1,    -1,    -1,    38,    39,    -1,    -1, | 
| 2509 |       -1,    -1,    44,    -1,    46,    47,    -1,    -1,    50,    51, | 
| 2510 |       52,    53,    54,    55,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2511 |       -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1,    -1, | 
| 2512 |       -1,    -1,    -1,    -1,    -1,    77,    -1,    -1,    -1,    -1, | 
| 2513 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2514 |       -1,    -1,    -1,    95,    -1,    -1,    -1,    99,    -1,    -1, | 
| 2515 |       -1,    -1,   104,    -1,   106,    -1,    -1,    -1,    -1,   111, | 
| 2516 |       -1,    -1,    -1,   115,   116,   117,    -1,    -1,   120,    -1, | 
| 2517 |      122,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,    -1, | 
| 2518 |       -1,    -1,   134,   135,    -1,   137,    -1,   139,   140,    -1, | 
| 2519 |       -1,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1,   151, | 
| 2520 |       -1,   153,    -1,    -1,    -1,    -1,    -1,    -1,   160,   161, | 
| 2521 |       -1,    -1,    -1,    -1,    -1,   167,   168,     3,    -1,     5, | 
| 2522 |        6,     7,     8,     9,    10,    11,    12,    13,    14,    -1, | 
| 2523 |       -1,    17,    -1,    -1,    -1,    -1,    22,    23,    -1,    -1, | 
| 2524 |       26,    -1,    -1,    -1,    30,    -1,    -1,    -1,    34,    -1, | 
| 2525 |       -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    44,    -1, | 
| 2526 |       46,    47,    -1,    -1,    50,    51,    52,    53,    54,    55, | 
| 2527 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2528 |       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2529 |       -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2530 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95, | 
| 2531 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1, | 
| 2532 |      106,    -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,   115, | 
| 2533 |      116,    -1,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1, | 
| 2534 |      126,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   134,   135, | 
| 2535 |       -1,   137,    -1,    -1,    -1,    -1,   142,    -1,   144,    -1, | 
| 2536 |       -1,    -1,    -1,    -1,    -1,   151,    -1,   153,    -1,    -1, | 
| 2537 |       -1,    -1,    -1,    -1,   160,    -1,    -1,    -1,    -1,    -1, | 
| 2538 |       -1,   167,   168,     3,    -1,     5,     6,     7,     8,     9, | 
| 2539 |       10,    11,    12,    13,    14,    -1,    -1,    17,    -1,    -1, | 
| 2540 |       -1,    -1,    22,    23,    -1,    -1,    26,    -1,    -1,    -1, | 
| 2541 |       30,    -1,    -1,    -1,    34,    -1,    -1,    -1,    38,    39, | 
| 2542 |       -1,    -1,    -1,    -1,    44,    -1,    46,    47,    -1,    -1, | 
| 2543 |       50,    51,    52,    53,    54,    55,    -1,    -1,    -1,    -1, | 
| 2544 |       -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1, | 
| 2545 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    77,    -1,    -1, | 
| 2546 |        6,     7,     8,     9,    10,    -1,    -1,    13,    14,    -1, | 
| 2547 |       -1,    -1,    -1,    -1,    -1,    95,    22,    23,    -1,    -1, | 
| 2548 |       -1,    -1,    -1,    -1,   104,    -1,   106,    -1,    34,    -1, | 
| 2549 |       -1,   111,    38,    -1,    -1,   115,   116,    -1,    -1,    -1, | 
| 2550 |       46,    47,   122,   123,    -1,    51,   126,    -1,    54,    55, | 
| 2551 |       -1,    -1,    -1,    -1,   134,   135,    -1,   137,    -1,    -1, | 
| 2552 |       66,    67,    -1,    -1,   144,    -1,    -1,    -1,    -1,    -1, | 
| 2553 |       -1,   151,    -1,   153,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2554 |      160,     6,     7,     8,     9,    10,    -1,   167,   168,    -1, | 
| 2555 |       -1,    -1,    -1,    -1,    -1,     6,     7,     8,     9,    10, | 
| 2556 |      106,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,   115, | 
| 2557 |       -1,    22,    23,    38,    -1,    -1,   122,   123,    -1,    -1, | 
| 2558 |      126,    -1,    -1,    34,    -1,    -1,    51,    38,   134,   135, | 
| 2559 |       55,   137,    -1,   139,   140,    46,    47,    -1,   144,    -1, | 
| 2560 |       51,    -1,    -1,    54,    55,    -1,    -1,   153,    -1,    -1, | 
| 2561 |       -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    -1,    -1, | 
| 2562 |       -1,   167,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2563 |       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2564 |       -1,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2565 |       -1,    -1,    -1,    -1,    -1,   106,    -1,    -1,    -1,    -1, | 
| 2566 |       -1,   126,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1, | 
| 2567 |      135,   122,   123,    -1,    -1,   126,    -1,    -1,    -1,   144, | 
| 2568 |       -1,    -1,    -1,   134,   135,    -1,   137,    -1,   153,    -1, | 
| 2569 |       -1,    -1,    -1,   144,    -1,    -1,    -1,    -1,    -1,    -1, | 
| 2570 |       -1,    -1,   153 | 
| 2571 | }; | 
| 2572 |  | 
| 2573 |   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing | 
| 2574 |      symbol of state STATE-NUM.  */ | 
| 2575 | static const yytype_uint16 yystos[] = | 
| 2576 | { | 
| 2577 |        0,   165,   170,   171,   163,     0,   102,   173,   174,   175, | 
| 2578 |      176,     3,     5,   404,   104,   176,     6,     7,     8,     9, | 
| 2579 |       10,    11,    12,    13,    14,    17,    22,    23,    24,    26, | 
| 2580 |       30,    34,    38,    39,    44,    46,    47,    50,    51,    52, | 
| 2581 |       53,    54,    55,    63,    66,    67,    70,    77,    82,    83, | 
| 2582 |       94,    95,    99,   104,   106,   111,   115,   116,   117,   120, | 
| 2583 |      122,   123,   126,   134,   135,   137,   139,   140,   141,   144, | 
| 2584 |      151,   153,   158,   160,   161,   167,   168,   177,   183,   184, | 
| 2585 |      186,   187,   189,   190,   191,   192,   193,   194,   195,   197, | 
| 2586 |      200,   201,   202,   204,   208,   211,   213,   219,   225,   226, | 
| 2587 |      227,   232,   233,   240,   253,   254,   260,   267,   276,   277, | 
| 2588 |      278,   279,   280,   281,   283,   285,   286,   289,   290,   291, | 
| 2589 |      292,   293,   294,   295,   296,   298,   300,   302,   303,   304, | 
| 2590 |      306,   307,   309,   310,   311,   322,   323,   324,   327,   328, | 
| 2591 |      329,   331,   332,   333,   334,   335,   336,   337,   338,   339, | 
| 2592 |      340,   342,   343,   344,   345,   347,   348,   349,   358,   359, | 
| 2593 |      360,   361,   362,   365,   366,   367,   368,   375,   382,   383, | 
| 2594 |      384,   386,   387,   388,   389,   390,   391,   392,   394,   397, | 
| 2595 |      399,   400,   404,   405,    59,   172,     7,    44,   100,   229, | 
| 2596 |      330,    95,   166,   364,   395,    95,   404,     7,   397,   405, | 
| 2597 |       95,   364,   395,   148,    26,    28,    40,    41,    45,    71, | 
| 2598 |      104,   110,   112,   152,   162,   364,    95,   395,     7,   341, | 
| 2599 |      405,    95,   364,   395,    52,    52,     6,     7,   401,    95, | 
| 2600 |      102,   136,   364,    44,   132,   225,    42,   218,   395,   150, | 
| 2601 |        7,   402,   405,     7,    95,   218,   374,   395,    95,    95, | 
| 2602 |      310,   310,    52,   312,   364,   395,    95,    90,   145,     7, | 
| 2603 |      218,   218,    37,    37,   114,    15,    61,    68,    72,    73, | 
| 2604 |       74,    75,    76,    77,    78,    80,    88,    93,    96,   105, | 
| 2605 |      121,   297,   299,   301,    99,   117,   155,   282,    49,    81, | 
| 2606 |      101,   144,   284,    25,   159,   287,    64,    87,   288,    86, | 
| 2607 |      156,    32,    33,   293,   218,    42,   305,   307,    69,    97, | 
| 2608 |      139,   140,   321,    91,   325,    36,    91,    95,   404,   138, | 
| 2609 |      185,    73,   104,     7,   231,   405,    95,    38,    55,   126, | 
| 2610 |      153,   333,     7,   132,   144,   396,   405,   218,   369,   370, | 
| 2611 |      373,   218,   356,   404,    42,    95,   218,   364,   124,   146, | 
| 2612 |      188,   124,   146,   212,   108,   124,   198,    35,    55,    71, | 
| 2613 |      113,   364,     7,   397,   194,   103,   181,   182,   364,   218, | 
| 2614 |      385,   392,   394,   144,   397,   372,   373,   397,   341,   341, | 
| 2615 |      350,   225,   104,   205,    45,   104,   203,    52,   104,   132, | 
| 2616 |      225,   218,   149,   308,   404,     7,   404,   305,   397,   397, | 
| 2617 |      341,   218,   218,   225,   227,   227,   278,   279,   280,   280, | 
| 2618 |      280,   281,   283,   285,   286,   289,   109,    18,    18,    18, | 
| 2619 |       43,   225,   311,   142,   311,   225,    23,   326,   333,   389, | 
| 2620 |      225,   226,   227,   346,   403,   404,     7,   314,   315,    37, | 
| 2621 |      132,    37,   132,   305,   397,   356,   132,   356,   225,   314, | 
| 2622 |      403,   185,   185,    37,   404,   104,   104,    57,   196,     7, | 
| 2623 |      399,   405,    73,   404,   185,   397,    98,    95,   317,    52, | 
| 2624 |      132,    37,   132,    37,   132,   363,    18,   377,   377,   353, | 
| 2625 |      132,     7,   403,    55,     7,   403,   341,     7,    43,   119, | 
| 2626 |      132,   132,   132,   132,   377,   132,    58,    89,   378,   380, | 
| 2627 |      381,   382,   389,   397,   378,   376,   381,   376,    43,   113, | 
| 2628 |      143,   246,   252,   130,   130,   132,   185,    73,   132,   157, | 
| 2629 |      316,   318,   319,   397,   398,   398,   371,    43,   132,   185, | 
| 2630 |       84,   107,   199,   185,   403,   403,    79,    92,   185,    95, | 
| 2631 |        3,   403,   185,    95,   316,   377,   341,   398,   398,   305, | 
| 2632 |      378,    85,    21,   239,   351,   354,   401,   154,    73,    21, | 
| 2633 |      206,   104,    73,   206,   377,    73,    85,   268,   395,   395, | 
| 2634 |      117,   127,   144,   379,   127,    29,   113,   131,   227,   247, | 
| 2635 |      248,    37,    52,   132,   132,   185,   185,   185,    52,   215, | 
| 2636 |      216,    42,   364,   178,   132,   305,   377,   127,   393,   393, | 
| 2637 |      227,    52,    85,   118,    73,   227,   207,   403,   185,   185, | 
| 2638 |       20,     3,   227,    31,   269,    29,   311,    19,    48,   249, | 
| 2639 |       37,   318,   341,   341,    37,   132,   313,   185,    23,   139, | 
| 2640 |      140,   220,   221,   222,   223,   224,   322,   345,   185,    20, | 
| 2641 |       65,   209,   132,   132,   261,   341,   227,   353,    16,   129, | 
| 2642 |      355,    56,    37,   227,   255,    52,   273,    60,   196,   250, | 
| 2643 |      248,   377,   377,   216,   214,   225,   223,   223,    25,   179, | 
| 2644 |      139,   140,   139,   140,   227,    20,   210,   262,   234,    75, | 
| 2645 |      128,   352,   356,   356,   227,   403,   241,   256,   397,   378, | 
| 2646 |       35,   166,   251,    20,   320,   377,    43,   221,   132,   223, | 
| 2647 |      223,   224,   224,   227,   185,    37,   133,   263,   266,   235, | 
| 2648 |      357,    16,   129,    37,   164,   233,   240,   242,   244,   245, | 
| 2649 |      246,    37,   257,   266,    18,   270,   403,    35,   227,    65, | 
| 2650 |      217,   218,   100,   228,    52,   227,    37,   233,   236,   240, | 
| 2651 |      244,     4,    27,   218,   348,   404,    52,   227,   131,    52, | 
| 2652 |      131,   227,   185,   230,   231,   125,   180,   341,    52,   397, | 
| 2653 |      341,   245,   227,   341,   227,    37,   404,   317,   377,   341, | 
| 2654 |       75,   377,   131,   377,   271,   231,   377,    85,   377,    20, | 
| 2655 |      227,    85,    45,   269,   272,   274,   305,   227,   239,   227, | 
| 2656 |      227,    52,   131,   185,   264,    85,   243,   258,   397,   227, | 
| 2657 |      265,   227,   242,   259,   275,   263,   237,   257,   131,   238, | 
| 2658 |      227,   236 | 
| 2659 | }; | 
| 2660 |  | 
| 2661 |   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */ | 
| 2662 | static const yytype_uint16 yyr1[] = | 
| 2663 | { | 
| 2664 |        0,   169,   170,   170,   171,   171,   172,   172,   173,   174, | 
| 2665 |      175,   176,   176,   176,   176,   176,   176,   176,   176,   176, | 
| 2666 |      177,   178,   179,   177,   180,   180,   181,   181,   182,   183, | 
| 2667 |      183,   183,   183,   183,   183,   183,   184,   184,   185,   186, | 
| 2668 |      187,   188,   188,   189,   189,   190,   191,   192,   193,   194, | 
| 2669 |      194,   195,   196,   196,   197,   198,   198,   199,   199,   200, | 
| 2670 |      201,   202,   203,   203,   203,   204,   205,   205,   206,   206, | 
| 2671 |      207,   207,   208,   209,   209,   210,   210,   211,   212,   212, | 
| 2672 |      214,   213,   215,   215,   215,   216,   217,   217,   218,   219, | 
| 2673 |      220,   220,   221,   221,   221,   221,   221,   221,   221,   222, | 
| 2674 |      223,   223,   223,   224,   225,   225,   226,   226,   227,   227, | 
| 2675 |      227,   227,   227,   227,   228,   228,   229,   229,   230,   230, | 
| 2676 |      231,   231,   232,   232,   234,   235,   233,   237,   238,   236, | 
| 2677 |      236,   236,   236,   239,   239,   241,   240,   243,   242,   242, | 
| 2678 |      242,   242,   244,   244,   245,   245,   246,   247,   247,   248, | 
| 2679 |      249,   249,   249,   250,   250,   251,   251,   251,   252,   252, | 
| 2680 |      253,   253,   255,   256,   254,   258,   259,   257,   257,   261, | 
| 2681 |      262,   260,   264,   265,   263,   263,   266,   268,   267,   270, | 
| 2682 |      271,   269,   272,   272,   273,   273,   274,   275,   274,   276, | 
| 2683 |      277,   277,   278,   278,   279,   279,   279,   279,   280,   280, | 
| 2684 |      281,   281,   282,   282,   283,   283,   284,   284,   284,   284, | 
| 2685 |      285,   285,   286,   286,   287,   287,   288,   288,   289,   289, | 
| 2686 |      290,   290,   291,   291,   292,   292,   293,   293,   294,   294, | 
| 2687 |      295,   295,   295,   296,   297,   297,   297,   297,   297,   297, | 
| 2688 |      298,   299,   299,   299,   299,   299,   299,   300,   301,   301, | 
| 2689 |      301,   302,   303,   303,   303,   304,   305,   305,   306,   306, | 
| 2690 |      307,   308,   308,   309,   309,   309,   309,   310,   310,   310, | 
| 2691 |      310,   311,   311,   311,   312,   311,   311,   313,   311,   311, | 
| 2692 |      315,   314,   316,   316,   316,   317,   317,   318,   319,   319, | 
| 2693 |      320,   320,   321,   321,   321,   322,   322,   323,   323,   325, | 
| 2694 |      324,   324,   326,   326,   327,   328,   328,   328,   328,   328, | 
| 2695 |      328,   328,   328,   328,   328,   328,   328,   330,   329,   329, | 
| 2696 |      329,   331,   332,   333,   333,   334,   334,   335,   335,   335, | 
| 2697 |      336,   336,   337,   337,   337,   337,   337,   337,   337,   337, | 
| 2698 |      338,   338,   339,   339,   340,   341,   341,   342,   342,   343, | 
| 2699 |      344,   345,   346,   346,   346,   347,   347,   348,   348,   348, | 
| 2700 |      350,   351,   349,   352,   352,   353,   353,   354,   355,   355, | 
| 2701 |      356,   356,   356,   357,   357,   357,   357,   357,   358,   359, | 
| 2702 |      360,   360,   360,   360,   360,   360,   360,   361,   363,   362, | 
| 2703 |      364,   364,   365,   366,   367,   368,   370,   371,   369,   369, | 
| 2704 |      372,   372,   373,   374,   374,   375,   376,   376,   377,   377, | 
| 2705 |      378,   378,   379,   379,   379,   379,   380,   380,   380,   380, | 
| 2706 |      381,   382,   382,   382,   382,   382,   382,   382,   383,   384, | 
| 2707 |      384,   385,   385,   386,   387,   388,   388,   388,   389,   389, | 
| 2708 |      390,   390,   390,   390,   390,   391,   392,   392,   392,   392, | 
| 2709 |      392,   393,   393,   394,   395,   396,   396,   397,   397,   398, | 
| 2710 |      399,   399,   400,   400,   401,   401,   402,   402,   403,   404, | 
| 2711 |      404,   405,   405 | 
| 2712 | }; | 
| 2713 |  | 
| 2714 |   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */ | 
| 2715 | static const yytype_uint8 yyr2[] = | 
| 2716 | { | 
| 2717 |        0,     2,     2,     2,     0,     5,     0,     2,     2,     2, | 
| 2718 |        6,     0,     2,     2,     2,     2,     2,     2,     2,     2, | 
| 2719 |        7,     0,     0,    15,     0,     2,     0,     1,     2,     1, | 
| 2720 |        1,     1,     1,     1,     1,     1,     1,     1,     1,     7, | 
| 2721 |        4,     1,     1,     1,     1,     6,     6,     5,     4,     1, | 
| 2722 |        1,     5,     2,     2,     6,     1,     1,     1,     1,     5, | 
| 2723 |        5,     6,     0,     3,     3,     6,     0,     3,     0,     2, | 
| 2724 |        1,     3,     9,     1,     2,     0,     2,     4,     1,     1, | 
| 2725 |        0,    11,     0,     1,     3,     3,     1,     1,     3,     1, | 
| 2726 |        1,     3,     1,     1,     2,     2,     1,     3,     3,     1, | 
| 2727 |        1,     3,     3,     1,     1,     1,     3,     3,     1,     1, | 
| 2728 |        1,     1,     1,     4,     0,     2,     0,     2,     1,     3, | 
| 2729 |        1,     1,     1,     1,     0,     0,    10,     0,     0,    10, | 
| 2730 |        1,     1,     1,     0,     3,     0,     9,     0,     8,     1, | 
| 2731 |        1,     1,     3,     5,     0,     1,     2,     3,     1,     4, | 
| 2732 |        0,     1,     1,     0,     1,     0,     2,     3,     3,     2, | 
| 2733 |        1,     1,     0,     0,     9,     0,     0,     9,     1,     0, | 
| 2734 |        0,     9,     0,     0,     9,     1,     2,     0,     6,     0, | 
| 2735 |        0,     8,     1,     1,     0,     3,     3,     0,     6,     8, | 
| 2736 |        1,     3,     1,     3,     1,     1,     1,     1,     1,     3, | 
| 2737 |        1,     3,     1,     1,     1,     3,     1,     1,     1,     1, | 
| 2738 |        1,     3,     1,     3,     1,     1,     1,     1,     1,     4, | 
| 2739 |        1,     4,     1,     4,     1,     4,     1,     2,     1,     1, | 
| 2740 |        1,     1,     1,     3,     1,     1,     1,     1,     1,     1, | 
| 2741 |        3,     1,     1,     1,     1,     1,     1,     3,     1,     1, | 
| 2742 |        1,     2,     1,     2,     2,     2,     2,     3,     2,     1, | 
| 2743 |        4,     0,     1,     2,     2,     1,     1,     1,     3,     7, | 
| 2744 |        3,     1,     1,     2,     0,     3,     5,     0,     9,     5, | 
| 2745 |        0,     2,     0,     1,     3,     0,     3,     5,     0,     1, | 
| 2746 |        0,     2,     1,     1,     1,     1,     4,     1,     1,     0, | 
| 2747 |        3,     1,     1,     1,     2,     1,     1,     1,     1,     1, | 
| 2748 |        1,     1,     1,     1,     1,     1,     1,     0,     3,     1, | 
| 2749 |        1,     1,     1,     1,     1,     1,     1,     1,     1,     1, | 
| 2750 |        1,     4,     1,     1,     1,     1,     1,     1,     1,     5, | 
| 2751 |        1,     1,     1,     1,     2,     1,     1,     3,     2,     1, | 
| 2752 |        2,     4,     0,     1,     1,     1,     1,     1,     1,     1, | 
| 2753 |        0,     0,     8,     1,     5,     0,     2,     3,     3,     3, | 
| 2754 |        0,     2,     2,     0,     2,     2,     2,     2,     2,     3, | 
| 2755 |        1,     1,     1,     1,     1,     1,     1,     3,     0,     5, | 
| 2756 |        0,     1,     4,     3,     3,     3,     0,     0,     3,     1, | 
| 2757 |        1,     1,     1,     1,     1,     3,     1,     2,     0,     2, | 
| 2758 |        2,     2,     0,     1,     1,     1,     1,     1,     1,     2, | 
| 2759 |        1,     1,     1,     1,     1,     1,     1,     1,     2,     2, | 
| 2760 |        4,     1,     1,     2,     2,     2,     4,     4,     1,     1, | 
| 2761 |        2,     4,     4,     6,     6,     4,     2,     4,     4,     7, | 
| 2762 |        7,     0,     1,     4,     2,     1,     1,     1,     1,     1, | 
| 2763 |        1,     1,     1,     2,     1,     1,     1,     1,     1,     1, | 
| 2764 |        1,     1,     1 | 
| 2765 | }; | 
| 2766 |  | 
| 2767 |  | 
| 2768 | #define yyerrok         (yyerrstatus = 0) | 
| 2769 | #define yyclearin       (yychar = YYEMPTY) | 
| 2770 | #define YYEMPTY         (-2) | 
| 2771 | #define YYEOF           0 | 
| 2772 |  | 
| 2773 | #define YYACCEPT        goto yyacceptlab | 
| 2774 | #define YYABORT         goto yyabortlab | 
| 2775 | #define YYERROR         goto yyerrorlab | 
| 2776 |  | 
| 2777 |  | 
| 2778 | #define YYRECOVERING()  (!!yyerrstatus) | 
| 2779 |  | 
| 2780 | #define YYBACKUP(Token, Value)                                    \ | 
| 2781 |   do                                                              \ | 
| 2782 |     if (yychar == YYEMPTY)                                        \ | 
| 2783 |       {                                                           \ | 
| 2784 |         yychar = (Token);                                         \ | 
| 2785 |         yylval = (Value);                                         \ | 
| 2786 |         YYPOPSTACK (yylen);                                       \ | 
| 2787 |         yystate = *yyssp;                                         \ | 
| 2788 |         goto yybackup;                                            \ | 
| 2789 |       }                                                           \ | 
| 2790 |     else                                                          \ | 
| 2791 |       {                                                           \ | 
| 2792 |         yyerror (&yylloc, parseInfo, YY_("syntax error: cannot back up")); \ | 
| 2793 |         YYERROR;                                                  \ | 
| 2794 |       }                                                           \ | 
| 2795 |   while (0) | 
| 2796 |  | 
| 2797 | /* Error token number */ | 
| 2798 | #define YYTERROR        1 | 
| 2799 | #define YYERRCODE       256 | 
| 2800 |  | 
| 2801 |  | 
| 2802 | /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. | 
| 2803 |    If N is 0, then set CURRENT to the empty location which ends | 
| 2804 |    the previous symbol: RHS[0] (always defined).  */ | 
| 2805 |  | 
| 2806 | #ifndef YYLLOC_DEFAULT | 
| 2807 | # define YYLLOC_DEFAULT(Current, Rhs, N)                                \ | 
| 2808 |     do                                                                  \ | 
| 2809 |       if (N)                                                            \ | 
| 2810 |         {                                                               \ | 
| 2811 |           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \ | 
| 2812 |           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \ | 
| 2813 |           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \ | 
| 2814 |           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \ | 
| 2815 |         }                                                               \ | 
| 2816 |       else                                                              \ | 
| 2817 |         {                                                               \ | 
| 2818 |           (Current).first_line   = (Current).last_line   =              \ | 
| 2819 |             YYRHSLOC (Rhs, 0).last_line;                                \ | 
| 2820 |           (Current).first_column = (Current).last_column =              \ | 
| 2821 |             YYRHSLOC (Rhs, 0).last_column;                              \ | 
| 2822 |         }                                                               \ | 
| 2823 |     while (0) | 
| 2824 | #endif | 
| 2825 |  | 
| 2826 | #define YYRHSLOC(Rhs, K) ((Rhs)[K]) | 
| 2827 |  | 
| 2828 |  | 
| 2829 | /* Enable debugging if requested.  */ | 
| 2830 | #if XPATHDEBUG | 
| 2831 |  | 
| 2832 | # ifndef YYFPRINTF | 
| 2833 | #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */ | 
| 2834 | #  define YYFPRINTF fprintf | 
| 2835 | # endif | 
| 2836 |  | 
| 2837 | # define YYDPRINTF(Args)                        \ | 
| 2838 | do {                                            \ | 
| 2839 |   if (yydebug)                                  \ | 
| 2840 |     YYFPRINTF Args;                             \ | 
| 2841 | } while (0) | 
| 2842 |  | 
| 2843 |  | 
| 2844 | /* YY_LOCATION_PRINT -- Print the location on the stream. | 
| 2845 |    This macro was not mandated originally: define only if we know | 
| 2846 |    we won't break user code: when these are the locations we know.  */ | 
| 2847 |  | 
| 2848 | #ifndef YY_LOCATION_PRINT | 
| 2849 | # if defined XPATHLTYPE_IS_TRIVIAL && XPATHLTYPE_IS_TRIVIAL | 
| 2850 |  | 
| 2851 | /* Print *YYLOCP on YYO.  Private, do not rely on its existence. */ | 
| 2852 |  | 
| 2853 | YY_ATTRIBUTE_UNUSED | 
| 2854 | static int | 
| 2855 | yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) | 
| 2856 | { | 
| 2857 |   int res = 0; | 
| 2858 |   int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; | 
| 2859 |   if (0 <= yylocp->first_line) | 
| 2860 |     { | 
| 2861 |       res += YYFPRINTF (yyo, "%d" , yylocp->first_line); | 
| 2862 |       if (0 <= yylocp->first_column) | 
| 2863 |         res += YYFPRINTF (yyo, ".%d" , yylocp->first_column); | 
| 2864 |     } | 
| 2865 |   if (0 <= yylocp->last_line) | 
| 2866 |     { | 
| 2867 |       if (yylocp->first_line < yylocp->last_line) | 
| 2868 |         { | 
| 2869 |           res += YYFPRINTF (yyo, "-%d" , yylocp->last_line); | 
| 2870 |           if (0 <= end_col) | 
| 2871 |             res += YYFPRINTF (yyo, ".%d" , end_col); | 
| 2872 |         } | 
| 2873 |       else if (0 <= end_col && yylocp->first_column < end_col) | 
| 2874 |         res += YYFPRINTF (yyo, "-%d" , end_col); | 
| 2875 |     } | 
| 2876 |   return res; | 
| 2877 |  } | 
| 2878 |  | 
| 2879 | #  define YY_LOCATION_PRINT(File, Loc)          \ | 
| 2880 |   yy_location_print_ (File, &(Loc)) | 
| 2881 |  | 
| 2882 | # else | 
| 2883 | #  define YY_LOCATION_PRINT(File, Loc) ((void) 0) | 
| 2884 | # endif | 
| 2885 | #endif | 
| 2886 |  | 
| 2887 |  | 
| 2888 | # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \ | 
| 2889 | do {                                                                      \ | 
| 2890 |   if (yydebug)                                                            \ | 
| 2891 |     {                                                                     \ | 
| 2892 |       YYFPRINTF (stderr, "%s ", Title);                                   \ | 
| 2893 |       yy_symbol_print (stderr,                                            \ | 
| 2894 |                   Type, Value, Location, parseInfo); \ | 
| 2895 |       YYFPRINTF (stderr, "\n");                                           \ | 
| 2896 |     }                                                                     \ | 
| 2897 | } while (0) | 
| 2898 |  | 
| 2899 |  | 
| 2900 | /*-----------------------------------. | 
| 2901 | | Print this symbol's value on YYO.  | | 
| 2902 | `-----------------------------------*/ | 
| 2903 |  | 
| 2904 | static void | 
| 2905 | yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo) | 
| 2906 | { | 
| 2907 |   FILE *yyoutput = yyo; | 
| 2908 |   YYUSE (yyoutput); | 
| 2909 |   YYUSE (yylocationp); | 
| 2910 |   YYUSE (parseInfo); | 
| 2911 |   if (!yyvaluep) | 
| 2912 |     return; | 
| 2913 | # ifdef YYPRINT | 
| 2914 |   if (yytype < YYNTOKENS) | 
| 2915 |     YYPRINT (yyo, yytoknum[yytype], *yyvaluep); | 
| 2916 | # endif | 
| 2917 |   YYUSE (yytype); | 
| 2918 | } | 
| 2919 |  | 
| 2920 |  | 
| 2921 | /*---------------------------. | 
| 2922 | | Print this symbol on YYO.  | | 
| 2923 | `---------------------------*/ | 
| 2924 |  | 
| 2925 | static void | 
| 2926 | yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo) | 
| 2927 | { | 
| 2928 |   YYFPRINTF (yyo, "%s %s (" , | 
| 2929 |              yytype < YYNTOKENS ? "token"  : "nterm" , yytname[yytype]); | 
| 2930 |  | 
| 2931 |   YY_LOCATION_PRINT (yyo, *yylocationp); | 
| 2932 |   YYFPRINTF (yyo, ": " ); | 
| 2933 |   yy_symbol_value_print (yyo, yytype, yyvaluep, yylocationp, parseInfo); | 
| 2934 |   YYFPRINTF (yyo, ")" ); | 
| 2935 | } | 
| 2936 |  | 
| 2937 | /*------------------------------------------------------------------. | 
| 2938 | | yy_stack_print -- Print the state stack from its BOTTOM up to its | | 
| 2939 | | TOP (included).                                                   | | 
| 2940 | `------------------------------------------------------------------*/ | 
| 2941 |  | 
| 2942 | static void | 
| 2943 | yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) | 
| 2944 | { | 
| 2945 |   YYFPRINTF (stderr, "Stack now" ); | 
| 2946 |   for (; yybottom <= yytop; yybottom++) | 
| 2947 |     { | 
| 2948 |       int yybot = *yybottom; | 
| 2949 |       YYFPRINTF (stderr, " %d" , yybot); | 
| 2950 |     } | 
| 2951 |   YYFPRINTF (stderr, "\n" ); | 
| 2952 | } | 
| 2953 |  | 
| 2954 | # define YY_STACK_PRINT(Bottom, Top)                            \ | 
| 2955 | do {                                                            \ | 
| 2956 |   if (yydebug)                                                  \ | 
| 2957 |     yy_stack_print ((Bottom), (Top));                           \ | 
| 2958 | } while (0) | 
| 2959 |  | 
| 2960 |  | 
| 2961 | /*------------------------------------------------. | 
| 2962 | | Report that the YYRULE is going to be reduced.  | | 
| 2963 | `------------------------------------------------*/ | 
| 2964 |  | 
| 2965 | static void | 
| 2966 | yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo) | 
| 2967 | { | 
| 2968 |   unsigned long yylno = yyrline[yyrule]; | 
| 2969 |   int yynrhs = yyr2[yyrule]; | 
| 2970 |   int yyi; | 
| 2971 |   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n" , | 
| 2972 |              yyrule - 1, yylno); | 
| 2973 |   /* The symbols being reduced.  */ | 
| 2974 |   for (yyi = 0; yyi < yynrhs; yyi++) | 
| 2975 |     { | 
| 2976 |       YYFPRINTF (stderr, "   $%d = " , yyi + 1); | 
| 2977 |       yy_symbol_print (stderr, | 
| 2978 |                        yystos[yyssp[yyi + 1 - yynrhs]], | 
| 2979 |                        &yyvsp[(yyi + 1) - (yynrhs)] | 
| 2980 |                        , &(yylsp[(yyi + 1) - (yynrhs)])                       , parseInfo); | 
| 2981 |       YYFPRINTF (stderr, "\n" ); | 
| 2982 |     } | 
| 2983 | } | 
| 2984 |  | 
| 2985 | # define YY_REDUCE_PRINT(Rule)          \ | 
| 2986 | do {                                    \ | 
| 2987 |   if (yydebug)                          \ | 
| 2988 |     yy_reduce_print (yyssp, yyvsp, yylsp, Rule, parseInfo); \ | 
| 2989 | } while (0) | 
| 2990 |  | 
| 2991 | /* Nonzero means print parse trace.  It is left uninitialized so that | 
| 2992 |    multiple parsers can coexist.  */ | 
| 2993 | int yydebug; | 
| 2994 | #else /* !XPATHDEBUG */ | 
| 2995 | # define YYDPRINTF(Args) | 
| 2996 | # define YY_SYMBOL_PRINT(Title, Type, Value, Location) | 
| 2997 | # define YY_STACK_PRINT(Bottom, Top) | 
| 2998 | # define YY_REDUCE_PRINT(Rule) | 
| 2999 | #endif /* !XPATHDEBUG */ | 
| 3000 |  | 
| 3001 |  | 
| 3002 | /* YYINITDEPTH -- initial size of the parser's stacks.  */ | 
| 3003 | #ifndef YYINITDEPTH | 
| 3004 | # define YYINITDEPTH 200 | 
| 3005 | #endif | 
| 3006 |  | 
| 3007 | /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only | 
| 3008 |    if the built-in stack extension method is used). | 
| 3009 |  | 
| 3010 |    Do not make this value too large; the results are undefined if | 
| 3011 |    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) | 
| 3012 |    evaluated with infinite-precision integer arithmetic.  */ | 
| 3013 |  | 
| 3014 | #ifndef YYMAXDEPTH | 
| 3015 | # define YYMAXDEPTH 10000 | 
| 3016 | #endif | 
| 3017 |  | 
| 3018 |  | 
| 3019 | #if YYERROR_VERBOSE | 
| 3020 |  | 
| 3021 | # ifndef yystrlen | 
| 3022 | #  if defined __GLIBC__ && defined _STRING_H | 
| 3023 | #   define yystrlen strlen | 
| 3024 | #  else | 
| 3025 | /* Return the length of YYSTR.  */ | 
| 3026 | static YYSIZE_T | 
| 3027 | yystrlen (const char *yystr) | 
| 3028 | { | 
| 3029 |   YYSIZE_T yylen; | 
| 3030 |   for (yylen = 0; yystr[yylen]; yylen++) | 
| 3031 |     continue; | 
| 3032 |   return yylen; | 
| 3033 | } | 
| 3034 | #  endif | 
| 3035 | # endif | 
| 3036 |  | 
| 3037 | # ifndef yystpcpy | 
| 3038 | #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE | 
| 3039 | #   define yystpcpy stpcpy | 
| 3040 | #  else | 
| 3041 | /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in | 
| 3042 |    YYDEST.  */ | 
| 3043 | static char * | 
| 3044 | yystpcpy (char *yydest, const char *yysrc) | 
| 3045 | { | 
| 3046 |   char *yyd = yydest; | 
| 3047 |   const char *yys = yysrc; | 
| 3048 |  | 
| 3049 |   while ((*yyd++ = *yys++) != '\0') | 
| 3050 |     continue; | 
| 3051 |  | 
| 3052 |   return yyd - 1; | 
| 3053 | } | 
| 3054 | #  endif | 
| 3055 | # endif | 
| 3056 |  | 
| 3057 | # ifndef yytnamerr | 
| 3058 | /* Copy to YYRES the contents of YYSTR after stripping away unnecessary | 
| 3059 |    quotes and backslashes, so that it's suitable for yyerror.  The | 
| 3060 |    heuristic is that double-quoting is unnecessary unless the string | 
| 3061 |    contains an apostrophe, a comma, or backslash (other than | 
| 3062 |    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is | 
| 3063 |    null, do not copy; instead, return the length of what the result | 
| 3064 |    would have been.  */ | 
| 3065 | static YYSIZE_T | 
| 3066 | yytnamerr (char *yyres, const char *yystr) | 
| 3067 | { | 
| 3068 |   if (*yystr == '"') | 
| 3069 |     { | 
| 3070 |       YYSIZE_T yyn = 0; | 
| 3071 |       char const *yyp = yystr; | 
| 3072 |  | 
| 3073 |       for (;;) | 
| 3074 |         switch (*++yyp) | 
| 3075 |           { | 
| 3076 |           case '\'': | 
| 3077 |           case ',': | 
| 3078 |             goto do_not_strip_quotes; | 
| 3079 |  | 
| 3080 |           case '\\': | 
| 3081 |             if (*++yyp != '\\') | 
| 3082 |               goto do_not_strip_quotes; | 
| 3083 |             else | 
| 3084 |               goto append; | 
| 3085 |  | 
| 3086 |           append: | 
| 3087 |           default: | 
| 3088 |             if (yyres) | 
| 3089 |               yyres[yyn] = *yyp; | 
| 3090 |             yyn++; | 
| 3091 |             break; | 
| 3092 |  | 
| 3093 |           case '"': | 
| 3094 |             if (yyres) | 
| 3095 |               yyres[yyn] = '\0'; | 
| 3096 |             return yyn; | 
| 3097 |           } | 
| 3098 |     do_not_strip_quotes: ; | 
| 3099 |     } | 
| 3100 |  | 
| 3101 |   if (! yyres) | 
| 3102 |     return yystrlen (s: yystr); | 
| 3103 |  | 
| 3104 |   return (YYSIZE_T) (yystpcpy (dest: yyres, src: yystr) - yyres); | 
| 3105 | } | 
| 3106 | # endif | 
| 3107 |  | 
| 3108 | /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message | 
| 3109 |    about the unexpected token YYTOKEN for the state stack whose top is | 
| 3110 |    YYSSP. | 
| 3111 |  | 
| 3112 |    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is | 
| 3113 |    not large enough to hold the message.  In that case, also set | 
| 3114 |    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the | 
| 3115 |    required number of bytes is too large to store.  */ | 
| 3116 | static int | 
| 3117 | yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | 
| 3118 |                 yytype_int16 *yyssp, int yytoken) | 
| 3119 | { | 
| 3120 |   YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yystr: yytname[yytoken]); | 
| 3121 |   YYSIZE_T yysize = yysize0; | 
| 3122 |   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | 
| 3123 |   /* Internationalized format string. */ | 
| 3124 |   const char *yyformat = YY_NULLPTR; | 
| 3125 |   /* Arguments of yyformat. */ | 
| 3126 |   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; | 
| 3127 |   /* Number of reported tokens (one for the "unexpected", one per | 
| 3128 |      "expected"). */ | 
| 3129 |   int yycount = 0; | 
| 3130 |  | 
| 3131 |   /* There are many possibilities here to consider: | 
| 3132 |      - If this state is a consistent state with a default action, then | 
| 3133 |        the only way this function was invoked is if the default action | 
| 3134 |        is an error action.  In that case, don't check for expected | 
| 3135 |        tokens because there are none. | 
| 3136 |      - The only way there can be no lookahead present (in yychar) is if | 
| 3137 |        this state is a consistent state with a default action.  Thus, | 
| 3138 |        detecting the absence of a lookahead is sufficient to determine | 
| 3139 |        that there is no unexpected or expected token to report.  In that | 
| 3140 |        case, just report a simple "syntax error". | 
| 3141 |      - Don't assume there isn't a lookahead just because this state is a | 
| 3142 |        consistent state with a default action.  There might have been a | 
| 3143 |        previous inconsistent state, consistent state with a non-default | 
| 3144 |        action, or user semantic action that manipulated yychar. | 
| 3145 |      - Of course, the expected token list depends on states to have | 
| 3146 |        correct lookahead information, and it depends on the parser not | 
| 3147 |        to perform extra reductions after fetching a lookahead from the | 
| 3148 |        scanner and before detecting a syntax error.  Thus, state merging | 
| 3149 |        (from LALR or IELR) and default reductions corrupt the expected | 
| 3150 |        token list.  However, the list is correct for canonical LR with | 
| 3151 |        one exception: it will still contain any token that will not be | 
| 3152 |        accepted due to an error action in a later state. | 
| 3153 |   */ | 
| 3154 |   if (yytoken != YYEMPTY) | 
| 3155 |     { | 
| 3156 |       int yyn = yypact[*yyssp]; | 
| 3157 |       yyarg[yycount++] = yytname[yytoken]; | 
| 3158 |       if (!yypact_value_is_default (yyn)) | 
| 3159 |         { | 
| 3160 |           /* Start YYX at -YYN if negative to avoid negative indexes in | 
| 3161 |              YYCHECK.  In other words, skip the first -YYN actions for | 
| 3162 |              this state because they are default actions.  */ | 
| 3163 |           int yyxbegin = yyn < 0 ? -yyn : 0; | 
| 3164 |           /* Stay within bounds of both yycheck and yytname.  */ | 
| 3165 |           int yychecklim = YYLAST - yyn + 1; | 
| 3166 |           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; | 
| 3167 |           int yyx; | 
| 3168 |  | 
| 3169 |           for (yyx = yyxbegin; yyx < yyxend; ++yyx) | 
| 3170 |             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR | 
| 3171 |                 && !yytable_value_is_error (yytable[yyx + yyn])) | 
| 3172 |               { | 
| 3173 |                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) | 
| 3174 |                   { | 
| 3175 |                     yycount = 1; | 
| 3176 |                     yysize = yysize0; | 
| 3177 |                     break; | 
| 3178 |                   } | 
| 3179 |                 yyarg[yycount++] = yytname[yyx]; | 
| 3180 |                 { | 
| 3181 |                   YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yystr: yytname[yyx]); | 
| 3182 |                   if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) | 
| 3183 |                     yysize = yysize1; | 
| 3184 |                   else | 
| 3185 |                     return 2; | 
| 3186 |                 } | 
| 3187 |               } | 
| 3188 |         } | 
| 3189 |     } | 
| 3190 |  | 
| 3191 |   switch (yycount) | 
| 3192 |     { | 
| 3193 | # define YYCASE_(N, S)                      \ | 
| 3194 |       case N:                               \ | 
| 3195 |         yyformat = S;                       \ | 
| 3196 |       break | 
| 3197 |     default: /* Avoid compiler warnings. */ | 
| 3198 |       YYCASE_(0, YY_("syntax error" )); | 
| 3199 |       YYCASE_(1, YY_("syntax error, unexpected %s" )); | 
| 3200 |       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s" )); | 
| 3201 |       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s" )); | 
| 3202 |       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s" )); | 
| 3203 |       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s" )); | 
| 3204 | # undef YYCASE_ | 
| 3205 |     } | 
| 3206 |  | 
| 3207 |   { | 
| 3208 |     YYSIZE_T yysize1 = yysize + yystrlen (s: yyformat); | 
| 3209 |     if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) | 
| 3210 |       yysize = yysize1; | 
| 3211 |     else | 
| 3212 |       return 2; | 
| 3213 |   } | 
| 3214 |  | 
| 3215 |   if (*yymsg_alloc < yysize) | 
| 3216 |     { | 
| 3217 |       *yymsg_alloc = 2 * yysize; | 
| 3218 |       if (! (yysize <= *yymsg_alloc | 
| 3219 |              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) | 
| 3220 |         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; | 
| 3221 |       return 1; | 
| 3222 |     } | 
| 3223 |  | 
| 3224 |   /* Avoid sprintf, as that infringes on the user's name space. | 
| 3225 |      Don't have undefined behavior even if the translation | 
| 3226 |      produced a string with the wrong number of "%s"s.  */ | 
| 3227 |   { | 
| 3228 |     char *yyp = *yymsg; | 
| 3229 |     int yyi = 0; | 
| 3230 |     while ((*yyp = *yyformat) != '\0') | 
| 3231 |       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) | 
| 3232 |         { | 
| 3233 |           yyp += yytnamerr (yyres: yyp, yystr: yyarg[yyi++]); | 
| 3234 |           yyformat += 2; | 
| 3235 |         } | 
| 3236 |       else | 
| 3237 |         { | 
| 3238 |           yyp++; | 
| 3239 |           yyformat++; | 
| 3240 |         } | 
| 3241 |   } | 
| 3242 |   return 0; | 
| 3243 | } | 
| 3244 | #endif /* YYERROR_VERBOSE */ | 
| 3245 |  | 
| 3246 | /*-----------------------------------------------. | 
| 3247 | | Release the memory associated to this symbol.  | | 
| 3248 | `-----------------------------------------------*/ | 
| 3249 |  | 
| 3250 | static void | 
| 3251 | yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo) | 
| 3252 | { | 
| 3253 |   YYUSE (yyvaluep); | 
| 3254 |   YYUSE (yylocationp); | 
| 3255 |   YYUSE (parseInfo); | 
| 3256 |   if (!yymsg) | 
| 3257 |     yymsg = "Deleting" ; | 
| 3258 |   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); | 
| 3259 |  | 
| 3260 |   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | 
| 3261 |   YYUSE (yytype); | 
| 3262 |   YY_IGNORE_MAYBE_UNINITIALIZED_END | 
| 3263 | } | 
| 3264 |  | 
| 3265 |  | 
| 3266 |  | 
| 3267 |  | 
| 3268 | /*----------. | 
| 3269 | | yyparse.  | | 
| 3270 | `----------*/ | 
| 3271 |  | 
| 3272 | int | 
| 3273 | yyparse (QT_PREPEND_NAMESPACE(QPatternist)::ParserContext *const parseInfo) | 
| 3274 | { | 
| 3275 | /* The lookahead symbol.  */ | 
| 3276 | int yychar; | 
| 3277 |  | 
| 3278 |  | 
| 3279 | /* The semantic value of the lookahead symbol.  */ | 
| 3280 | /* Default value used for initialization, for pacifying older GCCs | 
| 3281 |    or non-GCC compilers.  */ | 
| 3282 | YY_INITIAL_VALUE (static YYSTYPE yyval_default;) | 
| 3283 | YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); | 
| 3284 |  | 
| 3285 | /* Location data for the lookahead symbol.  */ | 
| 3286 | static YYLTYPE yyloc_default | 
| 3287 | # if defined XPATHLTYPE_IS_TRIVIAL && XPATHLTYPE_IS_TRIVIAL | 
| 3288 |   = { 1, 1, 1, 1 } | 
| 3289 | # endif | 
| 3290 | ; | 
| 3291 | YYLTYPE yylloc = yyloc_default; | 
| 3292 |  | 
| 3293 |     /* Number of syntax errors so far.  */ | 
| 3294 |     int yynerrs; | 
| 3295 |  | 
| 3296 |     int yystate; | 
| 3297 |     /* Number of tokens to shift before error messages enabled.  */ | 
| 3298 |     int yyerrstatus; | 
| 3299 |  | 
| 3300 |     /* The stacks and their tools: | 
| 3301 |        'yyss': related to states. | 
| 3302 |        'yyvs': related to semantic values. | 
| 3303 |        'yyls': related to locations. | 
| 3304 |  | 
| 3305 |        Refer to the stacks through separate pointers, to allow yyoverflow | 
| 3306 |        to reallocate them elsewhere.  */ | 
| 3307 |  | 
| 3308 |     /* The state stack.  */ | 
| 3309 |     yytype_int16 yyssa[YYINITDEPTH]; | 
| 3310 |     yytype_int16 *yyss; | 
| 3311 |     yytype_int16 *yyssp; | 
| 3312 |  | 
| 3313 |     /* The semantic value stack.  */ | 
| 3314 |     YYSTYPE yyvsa[YYINITDEPTH]; | 
| 3315 |     YYSTYPE *yyvs; | 
| 3316 |     YYSTYPE *yyvsp; | 
| 3317 |  | 
| 3318 |     /* The location stack.  */ | 
| 3319 |     YYLTYPE yylsa[YYINITDEPTH]; | 
| 3320 |     YYLTYPE *yyls; | 
| 3321 |     YYLTYPE *yylsp; | 
| 3322 |  | 
| 3323 |     /* The locations where the error started and ended.  */ | 
| 3324 |     YYLTYPE yyerror_range[3]; | 
| 3325 |  | 
| 3326 |     YYSIZE_T yystacksize; | 
| 3327 |  | 
| 3328 |   int yyn; | 
| 3329 |   int yyresult; | 
| 3330 |   /* Lookahead token as an internal (translated) token number.  */ | 
| 3331 |   int yytoken = 0; | 
| 3332 |   /* The variables used to return semantic value and location from the | 
| 3333 |      action routines.  */ | 
| 3334 |   YYSTYPE yyval; | 
| 3335 |   YYLTYPE yyloc; | 
| 3336 |  | 
| 3337 | #if YYERROR_VERBOSE | 
| 3338 |   /* Buffer for error messages, and its allocated size.  */ | 
| 3339 |   char yymsgbuf[128]; | 
| 3340 |   char *yymsg = yymsgbuf; | 
| 3341 |   YYSIZE_T yymsg_alloc = sizeof yymsgbuf; | 
| 3342 | #endif | 
| 3343 |  | 
| 3344 | #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) | 
| 3345 |  | 
| 3346 |   /* The number of symbols on the RHS of the reduced rule. | 
| 3347 |      Keep to zero when no symbol should be popped.  */ | 
| 3348 |   int yylen = 0; | 
| 3349 |  | 
| 3350 |   yyssp = yyss = yyssa; | 
| 3351 |   yyvsp = yyvs = yyvsa; | 
| 3352 |   yylsp = yyls = yylsa; | 
| 3353 |   yystacksize = YYINITDEPTH; | 
| 3354 |  | 
| 3355 |   YYDPRINTF ((stderr, "Starting parse\n" )); | 
| 3356 |  | 
| 3357 |   yystate = 0; | 
| 3358 |   yyerrstatus = 0; | 
| 3359 |   yynerrs = 0; | 
| 3360 |   yychar = YYEMPTY; /* Cause a token to be read.  */ | 
| 3361 |   yylsp[0] = yylloc; | 
| 3362 |   goto yysetstate; | 
| 3363 |  | 
| 3364 |  | 
| 3365 | /*------------------------------------------------------------. | 
| 3366 | | yynewstate -- push a new state, which is found in yystate.  | | 
| 3367 | `------------------------------------------------------------*/ | 
| 3368 | yynewstate: | 
| 3369 |   /* In all cases, when you get here, the value and location stacks | 
| 3370 |      have just been pushed.  So pushing a state here evens the stacks.  */ | 
| 3371 |   yyssp++; | 
| 3372 |  | 
| 3373 |  | 
| 3374 | /*--------------------------------------------------------------------. | 
| 3375 | | yynewstate -- set current state (the top of the stack) to yystate.  | | 
| 3376 | `--------------------------------------------------------------------*/ | 
| 3377 | yysetstate: | 
| 3378 |   *yyssp = (yytype_int16) yystate; | 
| 3379 |  | 
| 3380 |   if (yyss + yystacksize - 1 <= yyssp) | 
| 3381 | #if !defined yyoverflow && !defined YYSTACK_RELOCATE | 
| 3382 |     goto yyexhaustedlab; | 
| 3383 | #else | 
| 3384 |     { | 
| 3385 |       /* Get the current used size of the three stacks, in elements.  */ | 
| 3386 |       YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); | 
| 3387 |  | 
| 3388 | # if defined yyoverflow | 
| 3389 |       { | 
| 3390 |         /* Give user a chance to reallocate the stack.  Use copies of | 
| 3391 |            these so that the &'s don't force the real ones into | 
| 3392 |            memory.  */ | 
| 3393 |         YYSTYPE *yyvs1 = yyvs; | 
| 3394 |         yytype_int16 *yyss1 = yyss; | 
| 3395 |         YYLTYPE *yyls1 = yyls; | 
| 3396 |  | 
| 3397 |         /* Each stack pointer address is followed by the size of the | 
| 3398 |            data in use in that stack, in bytes.  This used to be a | 
| 3399 |            conditional around just the two extra args, but that might | 
| 3400 |            be undefined if yyoverflow is a macro.  */ | 
| 3401 |         yyoverflow (YY_("memory exhausted" ), | 
| 3402 |                     yyss: &yyss1, yysize * sizeof (*yyssp), | 
| 3403 |                     yyvs: &yyvs1, yysize * sizeof (*yyvsp), | 
| 3404 |                     yyls: &yyls1, yysize * sizeof (*yylsp), | 
| 3405 |                     yystacksize: &yystacksize); | 
| 3406 |         yyss = yyss1; | 
| 3407 |         yyvs = yyvs1; | 
| 3408 |         yyls = yyls1; | 
| 3409 |       } | 
| 3410 | # else /* defined YYSTACK_RELOCATE */ | 
| 3411 |       /* Extend the stack our own way.  */ | 
| 3412 |       if (YYMAXDEPTH <= yystacksize) | 
| 3413 |         goto yyexhaustedlab; | 
| 3414 |       yystacksize *= 2; | 
| 3415 |       if (YYMAXDEPTH < yystacksize) | 
| 3416 |         yystacksize = YYMAXDEPTH; | 
| 3417 |  | 
| 3418 |       { | 
| 3419 |         yytype_int16 *yyss1 = yyss; | 
| 3420 |         union yyalloc *yyptr = | 
| 3421 |           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); | 
| 3422 |         if (! yyptr) | 
| 3423 |           goto yyexhaustedlab; | 
| 3424 |         YYSTACK_RELOCATE (yyss_alloc, yyss); | 
| 3425 |         YYSTACK_RELOCATE (yyvs_alloc, yyvs); | 
| 3426 |         YYSTACK_RELOCATE (yyls_alloc, yyls); | 
| 3427 | # undef YYSTACK_RELOCATE | 
| 3428 |         if (yyss1 != yyssa) | 
| 3429 |           YYSTACK_FREE (yyss1); | 
| 3430 |       } | 
| 3431 | # endif | 
| 3432 |  | 
| 3433 |       yyssp = yyss + yysize - 1; | 
| 3434 |       yyvsp = yyvs + yysize - 1; | 
| 3435 |       yylsp = yyls + yysize - 1; | 
| 3436 |  | 
| 3437 |       YYDPRINTF ((stderr, "Stack size increased to %lu\n" , | 
| 3438 |                   (unsigned long) yystacksize)); | 
| 3439 |  | 
| 3440 |       if (yyss + yystacksize - 1 <= yyssp) | 
| 3441 |         YYABORT; | 
| 3442 |     } | 
| 3443 | #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ | 
| 3444 |  | 
| 3445 |   YYDPRINTF ((stderr, "Entering state %d\n" , yystate)); | 
| 3446 |  | 
| 3447 |   if (yystate == YYFINAL) | 
| 3448 |     YYACCEPT; | 
| 3449 |  | 
| 3450 |   goto yybackup; | 
| 3451 |  | 
| 3452 |  | 
| 3453 | /*-----------. | 
| 3454 | | yybackup.  | | 
| 3455 | `-----------*/ | 
| 3456 | yybackup: | 
| 3457 |   /* Do appropriate processing given the current state.  Read a | 
| 3458 |      lookahead token if we need one and don't already have one.  */ | 
| 3459 |  | 
| 3460 |   /* First try to decide what to do without reference to lookahead token.  */ | 
| 3461 |   yyn = yypact[yystate]; | 
| 3462 |   if (yypact_value_is_default (yyn)) | 
| 3463 |     goto yydefault; | 
| 3464 |  | 
| 3465 |   /* Not known => get a lookahead token if don't already have one.  */ | 
| 3466 |  | 
| 3467 |   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */ | 
| 3468 |   if (yychar == YYEMPTY) | 
| 3469 |     { | 
| 3470 |       YYDPRINTF ((stderr, "Reading a token: " )); | 
| 3471 |       yychar = yylex (lexVal: &yylval, sourceLocator: &yylloc, parseInfo); | 
| 3472 |     } | 
| 3473 |  | 
| 3474 |   if (yychar <= YYEOF) | 
| 3475 |     { | 
| 3476 |       yychar = yytoken = YYEOF; | 
| 3477 |       YYDPRINTF ((stderr, "Now at end of input.\n" )); | 
| 3478 |     } | 
| 3479 |   else | 
| 3480 |     { | 
| 3481 |       yytoken = YYTRANSLATE (yychar); | 
| 3482 |       YY_SYMBOL_PRINT ("Next token is" , yytoken, &yylval, &yylloc); | 
| 3483 |     } | 
| 3484 |  | 
| 3485 |   /* If the proper action on seeing token YYTOKEN is to reduce or to | 
| 3486 |      detect an error, take that action.  */ | 
| 3487 |   yyn += yytoken; | 
| 3488 |   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) | 
| 3489 |     goto yydefault; | 
| 3490 |   yyn = yytable[yyn]; | 
| 3491 |   if (yyn <= 0) | 
| 3492 |     { | 
| 3493 |       if (yytable_value_is_error (yyn)) | 
| 3494 |         goto yyerrlab; | 
| 3495 |       yyn = -yyn; | 
| 3496 |       goto yyreduce; | 
| 3497 |     } | 
| 3498 |  | 
| 3499 |   /* Count tokens shifted since error; after three, turn off error | 
| 3500 |      status.  */ | 
| 3501 |   if (yyerrstatus) | 
| 3502 |     yyerrstatus--; | 
| 3503 |  | 
| 3504 |   /* Shift the lookahead token.  */ | 
| 3505 |   YY_SYMBOL_PRINT ("Shifting" , yytoken, &yylval, &yylloc); | 
| 3506 |  | 
| 3507 |   /* Discard the shifted token.  */ | 
| 3508 |   yychar = YYEMPTY; | 
| 3509 |  | 
| 3510 |   yystate = yyn; | 
| 3511 |   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | 
| 3512 |   *++yyvsp = yylval; | 
| 3513 |   YY_IGNORE_MAYBE_UNINITIALIZED_END | 
| 3514 |   *++yylsp = yylloc; | 
| 3515 |   goto yynewstate; | 
| 3516 |  | 
| 3517 |  | 
| 3518 | /*-----------------------------------------------------------. | 
| 3519 | | yydefault -- do the default action for the current state.  | | 
| 3520 | `-----------------------------------------------------------*/ | 
| 3521 | yydefault: | 
| 3522 |   yyn = yydefact[yystate]; | 
| 3523 |   if (yyn == 0) | 
| 3524 |     goto yyerrlab; | 
| 3525 |   goto yyreduce; | 
| 3526 |  | 
| 3527 |  | 
| 3528 | /*-----------------------------. | 
| 3529 | | yyreduce -- do a reduction.  | | 
| 3530 | `-----------------------------*/ | 
| 3531 | yyreduce: | 
| 3532 |   /* yyn is the number of a rule to reduce with.  */ | 
| 3533 |   yylen = yyr2[yyn]; | 
| 3534 |  | 
| 3535 |   /* If YYLEN is nonzero, implement the default value of the action: | 
| 3536 |      '$$ = $1'. | 
| 3537 |  | 
| 3538 |      Otherwise, the following line sets YYVAL to garbage. | 
| 3539 |      This behavior is undocumented and Bison | 
| 3540 |      users should not rely upon it.  Assigning to YYVAL | 
| 3541 |      unconditionally makes the parser a bit smaller, and it avoids a | 
| 3542 |      GCC warning that YYVAL may be used uninitialized.  */ | 
| 3543 |   yyval = yyvsp[1-yylen]; | 
| 3544 |  | 
| 3545 |   /* Default location. */ | 
| 3546 |   YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); | 
| 3547 |   yyerror_range[1] = yyloc; | 
| 3548 |   YY_REDUCE_PRINT (yyn); | 
| 3549 |   switch (yyn) | 
| 3550 |     { | 
| 3551 |         case 5: | 
| 3552 | #line 1436 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3553 |     { | 
| 3554 |  | 
| 3555 | /* Suppress more compiler warnings about unused defines. */ | 
| 3556 | #if    defined(YYNNTS)              \ | 
| 3557 |     || defined(yyerrok)             \ | 
| 3558 |     || defined(YYNSTATES)           \ | 
| 3559 |     || defined(YYRHSLOC)            \ | 
| 3560 |     || defined(YYRECOVERING)        \ | 
| 3561 |     || defined(YYFAIL)              \ | 
| 3562 |     || defined(YYERROR)             \ | 
| 3563 |     || defined(YYNRULES)            \ | 
| 3564 |     || defined(YYBACKUP)            \ | 
| 3565 |     || defined(YYMAXDEPTH)          \ | 
| 3566 |     || defined(yyclearin)           \ | 
| 3567 |     || defined(YYERRCODE)           \ | 
| 3568 |     || defined(YY_LOCATION_PRINT)   \ | 
| 3569 |     || defined(YYLLOC_DEFAULT) | 
| 3570 | #endif | 
| 3571 |  | 
| 3572 |         if((yyvsp[-2].sval) != QLatin1String("1.0" )) | 
| 3573 |         { | 
| 3574 |             const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 3575 |  | 
| 3576 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Version %1 is not supported. The supported "  | 
| 3577 |                                                "XQuery version is 1.0." ) | 
| 3578 |                                                .arg(a: formatData(data: (yyvsp[-2].sval))), | 
| 3579 |                                             errorCode: ReportContext::XQST0031, reflection: &ryy); | 
| 3580 |         } | 
| 3581 |     } | 
| 3582 | #line 3534 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3583 |     break; | 
| 3584 |  | 
| 3585 |   case 7: | 
| 3586 | #line 1468 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3587 |     { | 
| 3588 |         const QRegExp encNameRegExp(QLatin1String("[A-Za-z][A-Za-z0-9._\\-]*" )); | 
| 3589 |  | 
| 3590 |         if(!encNameRegExp.exactMatch(str: (yyvsp[0].sval))) | 
| 3591 |         { | 
| 3592 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The encoding %1 is invalid. "  | 
| 3593 |                                                "It must contain Latin characters only, "  | 
| 3594 |                                                "must not contain whitespace, and must match "  | 
| 3595 |                                                "the regular expression %2." ) | 
| 3596 |                                             .arg(args: formatKeyword(keyword: (yyvsp[(2) - (2)].sval)), | 
| 3597 |                                                  args: formatExpression(expr: encNameRegExp.pattern())), | 
| 3598 |                                             errorCode: ReportContext::XQST0087, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3599 |         } | 
| 3600 |     } | 
| 3601 | #line 3553 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3602 |     break; | 
| 3603 |  | 
| 3604 |   case 8: | 
| 3605 | #line 1484 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3606 |     { | 
| 3607 |         /* In XSL-T, we can have dangling variable references, so resolve them | 
| 3608 |          * before we proceed with other steps, such as checking circularity. */ | 
| 3609 |         if(parseInfo->isXSLT()) | 
| 3610 |         { | 
| 3611 |             typedef QHash<QXmlName, Expression::Ptr> Hash; | 
| 3612 |             const Hash::const_iterator end(parseInfo->unresolvedVariableReferences.constEnd()); | 
| 3613 |  | 
| 3614 |             for(Hash::const_iterator it(parseInfo->unresolvedVariableReferences.constBegin()); it != end; ++it) | 
| 3615 |             { | 
| 3616 |                 const Expression::Ptr body(resolveVariable(name: it.key(), sourceLocator: (yyloc), parseInfo, raiseErrorOnUnavailability: true)); // TODO source locations vaise | 
| 3617 |                 Q_ASSERT(body); | 
| 3618 |                 it.value()->as<UnresolvedVariableReference>()->bindTo(body); | 
| 3619 |             } | 
| 3620 |         } | 
| 3621 |  | 
| 3622 |         /* The UserFunction callsites aren't bound yet, so bind them(if possible!). */ | 
| 3623 |         { | 
| 3624 |             const UserFunctionCallsite::List::const_iterator cend(parseInfo->userFunctionCallsites.constEnd()); | 
| 3625 |             UserFunctionCallsite::List::const_iterator cit(parseInfo->userFunctionCallsites.constBegin()); | 
| 3626 |             for(; cit != cend; ++cit) /* For each callsite. */ | 
| 3627 |             { | 
| 3628 |                 const UserFunctionCallsite::Ptr callsite(*cit); | 
| 3629 |                 Q_ASSERT(callsite); | 
| 3630 |                 const UserFunction::List::const_iterator end(parseInfo->userFunctions.constEnd()); | 
| 3631 |                 UserFunction::List::const_iterator it(parseInfo->userFunctions.constBegin()); | 
| 3632 |  | 
| 3633 |                 for(; it != end; ++it) /* For each UserFunction. */ | 
| 3634 |                 { | 
| 3635 |                     const FunctionSignature::Ptr sign((*it)->signature()); | 
| 3636 |                     Q_ASSERT(sign); | 
| 3637 |  | 
| 3638 |                     if(callsite->isSignatureValid(sign)) | 
| 3639 |                     { | 
| 3640 |                         callsite->setSource(userFunction: (*it), | 
| 3641 |                                             cacheSlotOffset: parseInfo->allocateCacheSlots(count: (*it)->argumentDeclarations().count())); | 
| 3642 |                         break; | 
| 3643 |                     } | 
| 3644 |                 } | 
| 3645 |                 if(it == end) | 
| 3646 |                 { | 
| 3647 |                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "No function with signature %1 is available" ) | 
| 3648 |                                                        .arg(a: formatFunction(func: callsite)), | 
| 3649 |                                                     errorCode: ReportContext::XPST0017, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3650 |                 } | 
| 3651 |             } | 
| 3652 |         } | 
| 3653 |  | 
| 3654 |         /* Mark callsites in UserFunction bodies as recursive, if they are. */ | 
| 3655 |         { | 
| 3656 |             const UserFunction::List::const_iterator fend(parseInfo->userFunctions.constEnd()); | 
| 3657 |             UserFunction::List::const_iterator fit(parseInfo->userFunctions.constBegin()); | 
| 3658 |             for(; fit != fend; ++fit) | 
| 3659 |             { | 
| 3660 |                 CallTargetDescription::List signList; | 
| 3661 |                 signList.append(t: (*fit)->signature()); | 
| 3662 |                 CallTargetDescription::checkCallsiteCircularity(signList, expr: (*fit)->body()); | 
| 3663 |             } | 
| 3664 |         } | 
| 3665 |  | 
| 3666 |         /* Now, check all global variables for circularity.  This is done | 
| 3667 |          * backwards because global variables are only in scope below them, | 
| 3668 |          * in XQuery. */ | 
| 3669 |         { | 
| 3670 |             const VariableDeclaration::List::const_iterator start(parseInfo->declaredVariables.constBegin()); | 
| 3671 |             VariableDeclaration::List::const_iterator it(parseInfo->declaredVariables.constEnd()); | 
| 3672 |  | 
| 3673 |             while(it != start) | 
| 3674 |             { | 
| 3675 |                 --it; | 
| 3676 |                 if((*it)->type != VariableDeclaration::ExpressionVariable && (*it)->type != VariableDeclaration::GlobalVariable) | 
| 3677 |                     continue; /* We want to ignore 'external' variables. */ | 
| 3678 |  | 
| 3679 |                 FunctionSignature::List signList; | 
| 3680 |                 checkVariableCircularity(var: *it, checkee: (*it)->expression(), type: (*it)->type, signList, parseInfo); | 
| 3681 |                 ExpressionFactory::registerLastPath(operand: (*it)->expression()); | 
| 3682 |                 parseInfo->finalizePushedVariable(amount: 1, shouldPop: false); /* Warn if it's unused. */ | 
| 3683 |             } | 
| 3684 |         } | 
| 3685 |  | 
| 3686 |         /* Generate code for doing initial template name calling. One problem | 
| 3687 |          * is that we compilation in the initial template name, since we throw away the | 
| 3688 |          * code if we don't have the requested template. */ | 
| 3689 |         if(parseInfo->languageAccent == QXmlQuery::XSLT20 | 
| 3690 |            && !parseInfo->initialTemplateName.isNull() | 
| 3691 |            && parseInfo->namedTemplates.contains(akey: parseInfo->initialTemplateName)) | 
| 3692 |         { | 
| 3693 |             parseInfo->queryBody = create(expr: new CallTemplate(parseInfo->initialTemplateName, | 
| 3694 |                                                            WithParam::Hash()), | 
| 3695 |                                           sourceLocator: (yyloc), parseInfo); | 
| 3696 |             parseInfo->templateCalls.append(t: parseInfo->queryBody); | 
| 3697 |             /* We just discard the template body that XSLTTokenizer generated. */ | 
| 3698 |         } | 
| 3699 |         else | 
| 3700 |             parseInfo->queryBody = (yyvsp[0].expr); | 
| 3701 |     } | 
| 3702 | #line 3654 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3703 |     break; | 
| 3704 |  | 
| 3705 |   case 10: | 
| 3706 | #line 1584 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3707 |     { | 
| 3708 |         // TODO add to namespace context | 
| 3709 |         parseInfo->moduleNamespace = parseInfo->staticContext->namePool()->allocateNamespace(uri: (yyvsp[-3].sval)); | 
| 3710 |     } | 
| 3711 | #line 3663 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3712 |     break; | 
| 3713 |  | 
| 3714 |   case 12: | 
| 3715 | #line 1592 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3716 |     { | 
| 3717 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3718 |         if(parseInfo->hasSecondPrologPart) | 
| 3719 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A default namespace declaration must occur before function, "  | 
| 3720 |                                                "variable, and option declarations." ), errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3721 |     } | 
| 3722 | #line 3674 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3723 |     break; | 
| 3724 |  | 
| 3725 |   case 13: | 
| 3726 | #line 1599 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3727 |     { | 
| 3728 |         if(parseInfo->hasSecondPrologPart) | 
| 3729 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A default namespace declaration must occur before function, "  | 
| 3730 |                                                "variable, and option declarations." ), errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3731 |     } | 
| 3732 | #line 3684 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3733 |     break; | 
| 3734 |  | 
| 3735 |   case 14: | 
| 3736 | #line 1605 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3737 |     { | 
| 3738 |         if(parseInfo->hasSecondPrologPart) | 
| 3739 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Namespace declarations must occur before function, "  | 
| 3740 |                                                "variable, and option declarations." ), errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3741 |     } | 
| 3742 | #line 3694 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3743 |     break; | 
| 3744 |  | 
| 3745 |   case 15: | 
| 3746 | #line 1611 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3747 |     { | 
| 3748 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3749 |         if(parseInfo->hasSecondPrologPart) | 
| 3750 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Module imports must occur before function, "  | 
| 3751 |                                                "variable, and option declarations." ), errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3752 |     } | 
| 3753 | #line 3705 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3754 |     break; | 
| 3755 |  | 
| 3756 |   case 17: | 
| 3757 | #line 1621 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3758 |     { | 
| 3759 |         parseInfo->hasSecondPrologPart = true; | 
| 3760 |     } | 
| 3761 | #line 3713 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3762 |     break; | 
| 3763 |  | 
| 3764 |   case 18: | 
| 3765 | #line 1625 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3766 |     { | 
| 3767 |         parseInfo->hasSecondPrologPart = true; | 
| 3768 |     } | 
| 3769 | #line 3721 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3770 |     break; | 
| 3771 |  | 
| 3772 |   case 19: | 
| 3773 | #line 1629 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3774 |     { | 
| 3775 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3776 |         parseInfo->hasSecondPrologPart = true; | 
| 3777 |     } | 
| 3778 | #line 3730 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3779 |     break; | 
| 3780 |  | 
| 3781 |   case 20: | 
| 3782 | #line 1652 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3783 |     { | 
| 3784 |         Template::Ptr temp(create(expr: new Template(parseInfo->currentImportPrecedence, (yyvsp[-2].sequenceType)), sourceLocator: (yyloc), parseInfo)); | 
| 3785 |  | 
| 3786 |         registerNamedTemplate(name: (yyvsp[-4].qName), body: typeCheckTemplateBody(body: (yyvsp[-1].expr), reqType: (yyvsp[-2].sequenceType), parseInfo), | 
| 3787 |                               parseInfo, sourceLocator: (yylsp[-6]), temp); | 
| 3788 |         temp->templateParameters = parseInfo->templateParameters; | 
| 3789 |         parseInfo->templateParametersHandled(); | 
| 3790 |     } | 
| 3791 | #line 3743 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3792 |     break; | 
| 3793 |  | 
| 3794 |   case 21: | 
| 3795 | #line 1662 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3796 |     { | 
| 3797 |     parseInfo->isParsingPattern = true; | 
| 3798 |   } | 
| 3799 | #line 3751 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3800 |     break; | 
| 3801 |  | 
| 3802 |   case 22: | 
| 3803 | #line 1666 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3804 |     { | 
| 3805 |     parseInfo->isParsingPattern = false; | 
| 3806 |   } | 
| 3807 | #line 3759 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3808 |     break; | 
| 3809 |  | 
| 3810 |   case 23: | 
| 3811 | #line 1675 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3812 |     { | 
| 3813 |         /* In this grammar branch, we're guaranteed to be a template rule, but | 
| 3814 |          * may also be a named template. */ | 
| 3815 |  | 
| 3816 |         const ImportPrecedence ip = parseInfo->isFirstTemplate() ? 0 : parseInfo->currentImportPrecedence; | 
| 3817 |         Expression::Ptr pattern((yyvsp[-8].expr)); | 
| 3818 |         const TemplatePattern::ID templateID = parseInfo->allocateTemplateID(); | 
| 3819 |  | 
| 3820 |         Template::Ptr templ(create(expr: new Template(ip, (yyvsp[-2].sequenceType)), sourceLocator: (yyloc), parseInfo)); | 
| 3821 |         templ->body = typeCheckTemplateBody(body: (yyvsp[-1].expr), reqType: (yyvsp[-2].sequenceType), parseInfo); | 
| 3822 |         templ->templateParameters = parseInfo->templateParameters; | 
| 3823 |         parseInfo->templateParametersHandled(); | 
| 3824 |  | 
| 3825 |         TemplatePattern::Vector ourPatterns; | 
| 3826 |         /* We do it as per 6.4 Conflict Resolution for Template Rules: | 
| 3827 |          * | 
| 3828 |          * "If the pattern contains multiple alternatives separated by |, then | 
| 3829 |          * the template rule is treated equivalently to a set of template | 
| 3830 |          * rules, one for each alternative. However, it is not an error if a | 
| 3831 |          * node matches more than one of the alternatives." */ | 
| 3832 |         while(pattern->is(i: Expression::IDCombineNodes)) | 
| 3833 |         { | 
| 3834 |             const Expression::List operands(pattern->operands()); | 
| 3835 |             pattern = operands.first(); | 
| 3836 |  | 
| 3837 |             loadPattern(matchPattern: operands.at(i: 1), ourPatterns, id: templateID, priority: (yyvsp[-4].enums.Double), temp: templ); | 
| 3838 |         } | 
| 3839 |  | 
| 3840 |         loadPattern(matchPattern: pattern, ourPatterns, id: templateID, priority: (yyvsp[-4].enums.Double), temp: templ); | 
| 3841 |  | 
| 3842 |         if(!(yyvsp[-12].qName).isNull()) | 
| 3843 |             registerNamedTemplate(name: (yyvsp[-12].qName), body: (yyvsp[-1].expr), parseInfo, sourceLocator: (yylsp[-14]), temp: templ); | 
| 3844 |  | 
| 3845 |         /* Now, let's add it to all the relevant templates. */ | 
| 3846 |         for(int i = 0; i < (yyvsp[-5].qNameVector).count(); ++i) /* For each mode. */ | 
| 3847 |         { | 
| 3848 |             const QXmlName &modeName = (yyvsp[-5].qNameVector).at(i); | 
| 3849 |  | 
| 3850 |             if(modeName == QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::all) && (yyvsp[-5].qNameVector).count() > 1) | 
| 3851 |             { | 
| 3852 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The keyword %1 cannot occur with any other mode name." ) | 
| 3853 |                                                                  .arg(a: formatKeyword(keyword: QLatin1String("#all" ))), | 
| 3854 |                                                 errorCode: ReportContext::XTSE0530, | 
| 3855 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3856 |             } | 
| 3857 |  | 
| 3858 |             /* For each pattern the template use. */ | 
| 3859 |             const TemplateMode::Ptr mode(parseInfo->modeFor(modeName)); | 
| 3860 |             for(int t = 0; t < ourPatterns.count(); ++t) | 
| 3861 |                 mode->templatePatterns.append(t: ourPatterns.at(i: t)); | 
| 3862 |         } | 
| 3863 |     } | 
| 3864 | #line 3816 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3865 |     break; | 
| 3866 |  | 
| 3867 |   case 24: | 
| 3868 | #line 1729 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3869 |     { | 
| 3870 |         (yyval.enums.Double) = std::numeric_limits<xsDouble>::quiet_NaN(); | 
| 3871 |     } | 
| 3872 | #line 3824 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3873 |     break; | 
| 3874 |  | 
| 3875 |   case 25: | 
| 3876 | #line 1734 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3877 |     { | 
| 3878 |         const AtomicValue::Ptr val(Decimal::fromLexical(strNumeric: (yyvsp[0].sval))); | 
| 3879 |         if(val->hasError()) | 
| 3880 |         { | 
| 3881 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The value of attribute %1 must be of type %2, which %3 isn't." ) | 
| 3882 |                                                              .arg(args: formatKeyword(keyword: QLatin1String("priority" )), | 
| 3883 |                                                                   args: formatType(np: parseInfo->staticContext->namePool(), type: BuiltinTypes::xsDecimal), | 
| 3884 |                                                                   args: formatData(data: (yyvsp[0].sval))), | 
| 3885 |                                             errorCode: ReportContext::XTSE0530, | 
| 3886 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3887 |         } | 
| 3888 |         else | 
| 3889 |             (yyval.enums.Double) = val->as<Numeric>()->toDouble(); | 
| 3890 |     } | 
| 3891 | #line 3843 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3892 |     break; | 
| 3893 |  | 
| 3894 |   case 26: | 
| 3895 | #line 1750 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3896 |     { | 
| 3897 |         (yyval.qName) = QXmlName(); | 
| 3898 |     } | 
| 3899 | #line 3851 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3900 |     break; | 
| 3901 |  | 
| 3902 |   case 28: | 
| 3903 | #line 1756 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3904 |     { | 
| 3905 |         (yyval.qName) = (yyvsp[0].qName); | 
| 3906 |     } | 
| 3907 | #line 3859 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3908 |     break; | 
| 3909 |  | 
| 3910 |   case 30: | 
| 3911 | #line 1762 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3912 |     { | 
| 3913 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3914 |     } | 
| 3915 | #line 3867 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3916 |     break; | 
| 3917 |  | 
| 3918 |   case 32: | 
| 3919 | #line 1767 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3920 |     { | 
| 3921 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3922 |     } | 
| 3923 | #line 3875 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3924 |     break; | 
| 3925 |  | 
| 3926 |   case 33: | 
| 3927 | #line 1771 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3928 |     { | 
| 3929 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3930 |     } | 
| 3931 | #line 3883 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3932 |     break; | 
| 3933 |  | 
| 3934 |   case 34: | 
| 3935 | #line 1775 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3936 |     { | 
| 3937 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3938 |     } | 
| 3939 | #line 3891 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3940 |     break; | 
| 3941 |  | 
| 3942 |   case 39: | 
| 3943 | #line 1786 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3944 |     { | 
| 3945 |         if(!(yyvsp[-1].enums.Bool)) | 
| 3946 |             allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 3947 |  | 
| 3948 |         if((yyvsp[-4].sval) == QLatin1String("xmlns" )) | 
| 3949 |         { | 
| 3950 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "It is not possible to redeclare prefix %1." ) | 
| 3951 |                                                .arg(a: formatKeyword(keyword: QLatin1String("xmlns" ))), | 
| 3952 |                                             errorCode: ReportContext::XQST0070, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3953 |         } | 
| 3954 |         else if ((yyvsp[-2].sval) == CommonNamespaces::XML || (yyvsp[-4].sval) == QLatin1String("xml" )) | 
| 3955 |         { | 
| 3956 |              parseInfo->staticContext->error(message: QtXmlPatterns::tr( | 
| 3957 |                                             sourceText: "The prefix %1 can not be bound. By default, it is already bound "  | 
| 3958 |                                             "to the namespace %2." ) | 
| 3959 |                                              .arg(a: formatKeyword(keyword: "xml" )) | 
| 3960 |                                              .arg(a: formatURI(uri: CommonNamespaces::XML)), | 
| 3961 |                                              errorCode: ReportContext::XQST0070, | 
| 3962 |                                              sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3963 |         } | 
| 3964 |         else if(parseInfo->declaredPrefixes.contains(str: (yyvsp[-4].sval))) | 
| 3965 |         { | 
| 3966 |             /* This includes the case where the user has bound a default prefix(such | 
| 3967 |              * as 'local') and now tries to do it again. */ | 
| 3968 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Prefix %1 is already declared in the prolog." ) | 
| 3969 |                                                .arg(a: formatKeyword(keyword: (yyvsp[-4].sval))), | 
| 3970 |                                             errorCode: ReportContext::XQST0033, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3971 |         } | 
| 3972 |         else | 
| 3973 |         { | 
| 3974 |             parseInfo->declaredPrefixes.append(t: (yyvsp[-4].sval)); | 
| 3975 |  | 
| 3976 |             if((yyvsp[-2].sval).isEmpty()) | 
| 3977 |             { | 
| 3978 |                 parseInfo->staticContext->namespaceBindings()->addBinding(nb: QXmlName(StandardNamespaces::UndeclarePrefix, | 
| 3979 |                                                                                    StandardLocalNames::empty, | 
| 3980 |                                                                                    parseInfo->staticContext->namePool()->allocatePrefix(prefix: (yyvsp[-4].sval)))); | 
| 3981 |             } | 
| 3982 |             else | 
| 3983 |             { | 
| 3984 |                 parseInfo->staticContext->namespaceBindings()->addBinding(nb: parseInfo->staticContext->namePool()->allocateBinding(prefix: (yyvsp[-4].sval), uri: (yyvsp[-2].sval))); | 
| 3985 |             } | 
| 3986 |         } | 
| 3987 |     } | 
| 3988 | #line 3940 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 3989 |     break; | 
| 3990 |  | 
| 3991 |   case 40: | 
| 3992 | #line 1832 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 3993 |     { | 
| 3994 |         if(parseInfo->hasDeclaration(decl: ParserContext::BoundarySpaceDecl)) | 
| 3995 |         { | 
| 3996 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare boundary-space" ), | 
| 3997 |                                             errorCode: ReportContext::XQST0068, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 3998 |         } | 
| 3999 |         else | 
| 4000 |         { | 
| 4001 |             parseInfo->staticContext->setBoundarySpacePolicy((yyvsp[-1].enums.boundarySpacePolicy)); | 
| 4002 |             parseInfo->registerDeclaration(decl: ParserContext::BoundarySpaceDecl); | 
| 4003 |         } | 
| 4004 |     } | 
| 4005 | #line 3957 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4006 |     break; | 
| 4007 |  | 
| 4008 |   case 41: | 
| 4009 | #line 1846 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4010 |     { | 
| 4011 |         (yyval.enums.boundarySpacePolicy) = StaticContext::BSPStrip; | 
| 4012 |     } | 
| 4013 | #line 3965 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4014 |     break; | 
| 4015 |  | 
| 4016 |   case 42: | 
| 4017 | #line 1851 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4018 |     { | 
| 4019 |         (yyval.enums.boundarySpacePolicy) = StaticContext::BSPPreserve; | 
| 4020 |     } | 
| 4021 | #line 3973 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4022 |     break; | 
| 4023 |  | 
| 4024 |   case 45: | 
| 4025 | #line 1860 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4026 |     { | 
| 4027 |         if(parseInfo->hasDeclaration(decl: ParserContext::DeclareDefaultElementNamespace)) | 
| 4028 |         { | 
| 4029 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare default element namespace" ), | 
| 4030 |                                             errorCode: ReportContext::XQST0066, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4031 |         } | 
| 4032 |         else | 
| 4033 |         { | 
| 4034 |             parseInfo->staticContext->namespaceBindings()->addBinding(nb: QXmlName(parseInfo->staticContext->namePool()->allocateNamespace(uri: (yyvsp[-1].sval)), StandardLocalNames::empty)); | 
| 4035 |             parseInfo->registerDeclaration(decl: ParserContext::DeclareDefaultElementNamespace); | 
| 4036 |         } | 
| 4037 |     } | 
| 4038 | #line 3990 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4039 |     break; | 
| 4040 |  | 
| 4041 |   case 46: | 
| 4042 | #line 1875 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4043 |     { | 
| 4044 |         if(parseInfo->hasDeclaration(decl: ParserContext::DeclareDefaultFunctionNamespace)) | 
| 4045 |         { | 
| 4046 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare default function namespace" ), | 
| 4047 |                                             errorCode: ReportContext::XQST0066, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4048 |         } | 
| 4049 |         else | 
| 4050 |         { | 
| 4051 |             parseInfo->staticContext->setDefaultFunctionNamespace((yyvsp[-1].sval)); | 
| 4052 |             parseInfo->registerDeclaration(decl: ParserContext::DeclareDefaultFunctionNamespace); | 
| 4053 |         } | 
| 4054 |     } | 
| 4055 | #line 4007 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4056 |     break; | 
| 4057 |  | 
| 4058 |   case 47: | 
| 4059 | #line 1889 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4060 |     { | 
| 4061 |         if((yyvsp[-2].qName).prefix() == StandardPrefixes::empty) | 
| 4062 |         { | 
| 4063 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The name of an option must have a prefix. "  | 
| 4064 |                                                "There is no default namespace for options." ), | 
| 4065 |                                             errorCode: ReportContext::XPST0081, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4066 |         } | 
| 4067 |     } | 
| 4068 | #line 4020 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4069 |     break; | 
| 4070 |  | 
| 4071 |   case 48: | 
| 4072 | #line 1899 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4073 |     { | 
| 4074 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 4075 |         if(parseInfo->hasDeclaration(decl: ParserContext::OrderingModeDecl)) | 
| 4076 |         { | 
| 4077 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare ordering" ), | 
| 4078 |                                             errorCode: ReportContext::XQST0065, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4079 |         } | 
| 4080 |         else | 
| 4081 |         { | 
| 4082 |             parseInfo->registerDeclaration(decl: ParserContext::OrderingModeDecl); | 
| 4083 |             parseInfo->staticContext->setOrderingMode((yyvsp[-1].enums.orderingMode)); | 
| 4084 |         } | 
| 4085 |     } | 
| 4086 | #line 4038 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4087 |     break; | 
| 4088 |  | 
| 4089 |   case 49: | 
| 4090 | #line 1914 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4091 |     { | 
| 4092 |         (yyval.enums.orderingMode) = StaticContext::Ordered; | 
| 4093 |     } | 
| 4094 | #line 4046 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4095 |     break; | 
| 4096 |  | 
| 4097 |   case 50: | 
| 4098 | #line 1918 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4099 |     { | 
| 4100 |         (yyval.enums.orderingMode) = StaticContext::Unordered; | 
| 4101 |     } | 
| 4102 | #line 4054 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4103 |     break; | 
| 4104 |  | 
| 4105 |   case 51: | 
| 4106 | #line 1923 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4107 |     { | 
| 4108 |         if(parseInfo->hasDeclaration(decl: ParserContext::EmptyOrderDecl)) | 
| 4109 |         { | 
| 4110 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare default order" ), | 
| 4111 |                                             errorCode: ReportContext::XQST0069, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4112 |         } | 
| 4113 |         else | 
| 4114 |         { | 
| 4115 |             parseInfo->registerDeclaration(decl: ParserContext::EmptyOrderDecl); | 
| 4116 |             parseInfo->staticContext->setOrderingEmptySequence((yyvsp[-1].enums.orderingEmptySequence)); | 
| 4117 |         } | 
| 4118 |     } | 
| 4119 | #line 4071 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4120 |     break; | 
| 4121 |  | 
| 4122 |   case 52: | 
| 4123 | #line 1937 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4124 |     { | 
| 4125 |         (yyval.enums.orderingEmptySequence) = StaticContext::Least; | 
| 4126 |     } | 
| 4127 | #line 4079 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4128 |     break; | 
| 4129 |  | 
| 4130 |   case 53: | 
| 4131 | #line 1941 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4132 |     { | 
| 4133 |         (yyval.enums.orderingEmptySequence) = StaticContext::Greatest; | 
| 4134 |     } | 
| 4135 | #line 4087 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4136 |     break; | 
| 4137 |  | 
| 4138 |   case 54: | 
| 4139 | #line 1947 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4140 |     { | 
| 4141 |         if(parseInfo->hasDeclaration(decl: ParserContext::CopyNamespacesDecl)) | 
| 4142 |         { | 
| 4143 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare copy-namespaces" ), | 
| 4144 |                                             errorCode: ReportContext::XQST0055, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4145 |         } | 
| 4146 |         else | 
| 4147 |         { | 
| 4148 |             parseInfo->registerDeclaration(decl: ParserContext::CopyNamespacesDecl); | 
| 4149 |         } | 
| 4150 |     } | 
| 4151 | #line 4103 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4152 |     break; | 
| 4153 |  | 
| 4154 |   case 55: | 
| 4155 | #line 1960 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4156 |     { | 
| 4157 |         parseInfo->preserveNamespacesMode = true; | 
| 4158 |     } | 
| 4159 | #line 4111 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4160 |     break; | 
| 4161 |  | 
| 4162 |   case 56: | 
| 4163 | #line 1965 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4164 |     { | 
| 4165 |         parseInfo->preserveNamespacesMode = false; | 
| 4166 |     } | 
| 4167 | #line 4119 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4168 |     break; | 
| 4169 |  | 
| 4170 |   case 57: | 
| 4171 | #line 1970 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4172 |     { | 
| 4173 |         parseInfo->inheritNamespacesMode = true; | 
| 4174 |     } | 
| 4175 | #line 4127 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4176 |     break; | 
| 4177 |  | 
| 4178 |   case 58: | 
| 4179 | #line 1975 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4180 |     { | 
| 4181 |         parseInfo->inheritNamespacesMode = false; | 
| 4182 |     } | 
| 4183 | #line 4135 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4184 |     break; | 
| 4185 |  | 
| 4186 |   case 59: | 
| 4187 | #line 1980 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4188 |     { | 
| 4189 |         if(parseInfo->hasDeclaration(decl: ParserContext::DefaultCollationDecl)) | 
| 4190 |         { | 
| 4191 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare default collation" ), | 
| 4192 |                                             errorCode: ReportContext::XQST0038, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4193 |         } | 
| 4194 |         else | 
| 4195 |         { | 
| 4196 |             const QUrl coll(resolveAndCheckCollation<ReportContext::XQST0038>(collation: (yyvsp[-1].sval), parseInfo, sl: (yyloc))); | 
| 4197 |  | 
| 4198 |             parseInfo->registerDeclaration(decl: ParserContext::DefaultCollationDecl); | 
| 4199 |             parseInfo->staticContext->setDefaultCollation(coll); | 
| 4200 |         } | 
| 4201 |     } | 
| 4202 | #line 4154 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4203 |     break; | 
| 4204 |  | 
| 4205 |   case 60: | 
| 4206 | #line 1996 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4207 |     { | 
| 4208 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-2].enums.Bool)); | 
| 4209 |         if(parseInfo->hasDeclaration(decl: ParserContext::BaseURIDecl)) | 
| 4210 |         { | 
| 4211 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare base-uri" ), | 
| 4212 |                                             errorCode: ReportContext::XQST0032, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4213 |         } | 
| 4214 |         else | 
| 4215 |         { | 
| 4216 |             parseInfo->registerDeclaration(decl: ParserContext::BaseURIDecl); | 
| 4217 |             const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 4218 |  | 
| 4219 |             QUrl toBeBase(AnyURI::toQUrl<ReportContext::XQST0046>(value: (yyvsp[-1].sval), context: parseInfo->staticContext, r: &ryy)); | 
| 4220 |             /* Now we're guaranteed that base is a valid lexical representation, but it can still be relative. */ | 
| 4221 |  | 
| 4222 |             if(toBeBase.isRelative()) | 
| 4223 |                 toBeBase = parseInfo->staticContext->baseURI().resolved(relative: toBeBase); | 
| 4224 |  | 
| 4225 |             parseInfo->staticContext->setBaseURI(toBeBase); | 
| 4226 |         } | 
| 4227 |     } | 
| 4228 | #line 4180 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4229 |     break; | 
| 4230 |  | 
| 4231 |   case 61: | 
| 4232 | #line 2019 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4233 |     { | 
| 4234 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The Schema Import feature is not supported, "  | 
| 4235 |                                            "and therefore %1 declarations cannot occur." ) | 
| 4236 |                                            .arg(a: formatKeyword(keyword: "import schema" )), | 
| 4237 |                                         errorCode: ReportContext::XQST0009, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4238 |     } | 
| 4239 | #line 4191 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4240 |     break; | 
| 4241 |  | 
| 4242 |   case 65: | 
| 4243 | #line 2031 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4244 |     { | 
| 4245 |         if((yyvsp[-2].sval).isEmpty()) | 
| 4246 |         { | 
| 4247 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The target namespace of a %1 cannot be empty." ) | 
| 4248 |                                                .arg(a: formatKeyword(keyword: "module import" )), | 
| 4249 |                                            errorCode: ReportContext::XQST0088, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4250 |  | 
| 4251 |         } | 
| 4252 |         else | 
| 4253 |         { | 
| 4254 |             /* This is temporary until we have implemented it. */ | 
| 4255 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The module import feature is not supported" ), | 
| 4256 |                                             errorCode: ReportContext::XQST0016, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4257 |         } | 
| 4258 |     } | 
| 4259 | #line 4211 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4260 |     break; | 
| 4261 |  | 
| 4262 |   case 72: | 
| 4263 | #line 2058 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4264 |     { | 
| 4265 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-6].enums.Bool)); | 
| 4266 |         if(variableByName(name: (yyvsp[-4].qName), parseInfo)) | 
| 4267 |         { | 
| 4268 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A variable with name %1 has already "  | 
| 4269 |                                                               "been declared." ) | 
| 4270 |                                                .arg(a: formatKeyword(keyword: parseInfo->staticContext->namePool()->toLexical(qName: (yyvsp[-4].qName)))), | 
| 4271 |                                             errorCode: parseInfo->isXSLT() ? ReportContext::XTSE0630 : ReportContext::XQST0049, | 
| 4272 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4273 |         } | 
| 4274 |         else | 
| 4275 |         { | 
| 4276 |             if((yyvsp[-2].expr)) /* We got a value assigned. */ | 
| 4277 |             { | 
| 4278 |                 const Expression::Ptr checked | 
| 4279 |                         (TypeChecker::applyFunctionConversion(operand: (yyvsp[-2].expr), reqType: (yyvsp[-3].sequenceType), context: parseInfo->staticContext, | 
| 4280 |                                                               code: (yyvsp[-6].enums.Bool) ? ReportContext::XTTE0570 : ReportContext::XPTY0004, | 
| 4281 |                                                               (yyvsp[-6].enums.Bool) ? TypeChecker::Options(TypeChecker::CheckFocus | TypeChecker::AutomaticallyConvert) : TypeChecker::CheckFocus)); | 
| 4282 |  | 
| 4283 |                 pushVariable(name: (yyvsp[-4].qName), seqType: (yyvsp[-3].sequenceType), expr: checked, type: VariableDeclaration::GlobalVariable, sourceLocator: (yyloc), parseInfo); | 
| 4284 |                 parseInfo->declaredVariables.append(t: parseInfo->variables.last()); | 
| 4285 |             } | 
| 4286 |             else /* We got an 'external' declaration. */ | 
| 4287 |             { | 
| 4288 |                 const SequenceType::Ptr varType(parseInfo->staticContext-> | 
| 4289 |                                                 externalVariableLoader()->announceExternalVariable(name: (yyvsp[-4].qName), declaredType: (yyvsp[-3].sequenceType))); | 
| 4290 |  | 
| 4291 |                 if(varType) | 
| 4292 |                 { | 
| 4293 |                     /* We push the declaration such that we can see name clashes and so on, but we don't use it for tying | 
| 4294 |                      * any references to it. */ | 
| 4295 |                     pushVariable(name: (yyvsp[-4].qName), seqType: varType, expr: Expression::Ptr(), type: VariableDeclaration::ExternalVariable, sourceLocator: (yyloc), parseInfo); | 
| 4296 |                 } | 
| 4297 |                 else if((yyvsp[-1].expr)) | 
| 4298 |                 { | 
| 4299 |                     /* Ok, the xsl:param got a default value, we make it | 
| 4300 |                      * available as a regular variable declaration. */ | 
| 4301 |                     // TODO turn into checked | 
| 4302 |                     pushVariable(name: (yyvsp[-4].qName), seqType: (yyvsp[-3].sequenceType), expr: (yyvsp[-1].expr), type: VariableDeclaration::GlobalVariable, sourceLocator: (yyloc), parseInfo); | 
| 4303 |                     // TODO ensure that duplicates are trapped. | 
| 4304 |                 } | 
| 4305 |                 else | 
| 4306 |                 { | 
| 4307 |                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "No value is available for the external "  | 
| 4308 |                                                                       "variable with name %1." ) | 
| 4309 |                                                        .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-4].qName))), | 
| 4310 |                                                     errorCode: parseInfo->isXSLT() ? ReportContext::XTDE0050 : ReportContext::XPDY0002, | 
| 4311 |                                                     sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4312 |                 } | 
| 4313 |             } | 
| 4314 |         } | 
| 4315 |     } | 
| 4316 | #line 4268 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4317 |     break; | 
| 4318 |  | 
| 4319 |   case 73: | 
| 4320 | #line 2112 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4321 |     { | 
| 4322 |         (yyval.expr).reset(); | 
| 4323 |     } | 
| 4324 | #line 4276 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4325 |     break; | 
| 4326 |  | 
| 4327 |   case 74: | 
| 4328 | #line 2116 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4329 |     { | 
| 4330 |         (yyval.expr) = (yyvsp[0].expr); | 
| 4331 |     } | 
| 4332 | #line 4284 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4333 |     break; | 
| 4334 |  | 
| 4335 |   case 75: | 
| 4336 | #line 2121 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4337 |     { | 
| 4338 |         (yyval.expr).reset(); | 
| 4339 |     } | 
| 4340 | #line 4292 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4341 |     break; | 
| 4342 |  | 
| 4343 |   case 76: | 
| 4344 | #line 2125 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4345 |     { | 
| 4346 |         (yyval.expr) = (yyvsp[0].expr); | 
| 4347 |     } | 
| 4348 | #line 4300 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4349 |     break; | 
| 4350 |  | 
| 4351 |   case 77: | 
| 4352 | #line 2130 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4353 |     { | 
| 4354 |         if(parseInfo->hasDeclaration(decl: ParserContext::ConstructionDecl)) | 
| 4355 |         { | 
| 4356 |             parseInfo->staticContext->error(message: prologMessage(msg: "declare ordering" ), | 
| 4357 |                                             errorCode: ReportContext::XQST0067, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4358 |         } | 
| 4359 |         else | 
| 4360 |         { | 
| 4361 |             parseInfo->registerDeclaration(decl: ParserContext::ConstructionDecl); | 
| 4362 |             parseInfo->staticContext->setConstructionMode((yyvsp[-1].enums.constructionMode)); | 
| 4363 |         } | 
| 4364 |     } | 
| 4365 | #line 4317 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4366 |     break; | 
| 4367 |  | 
| 4368 |   case 78: | 
| 4369 | #line 2144 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4370 |     { | 
| 4371 |         (yyval.enums.constructionMode) = StaticContext::CMStrip; | 
| 4372 |     } | 
| 4373 | #line 4325 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4374 |     break; | 
| 4375 |  | 
| 4376 |   case 79: | 
| 4377 | #line 2148 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4378 |     { | 
| 4379 |         (yyval.enums.constructionMode) = StaticContext::CMPreserve; | 
| 4380 |     } | 
| 4381 | #line 4333 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4382 |     break; | 
| 4383 |  | 
| 4384 |   case 80: | 
| 4385 | #line 2153 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4386 |     { | 
| 4387 |                 (yyval.enums.slot) = parseInfo->currentExpressionSlot() - (yyvsp[-1].functionArguments).count(); | 
| 4388 |               } | 
| 4389 | #line 4341 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4390 |     break; | 
| 4391 |  | 
| 4392 |   case 81: | 
| 4393 | #line 2157 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4394 |     { | 
| 4395 |         if(!(yyvsp[-8].enums.Bool)) | 
| 4396 |             allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-8].enums.Bool)); | 
| 4397 |  | 
| 4398 |         /* If FunctionBody is null, it is 'external', otherwise the value is the body. */ | 
| 4399 |         const QXmlName::NamespaceCode ns((yyvsp[-7].qName).namespaceURI()); | 
| 4400 |  | 
| 4401 |         if(parseInfo->isXSLT() && !(yyvsp[-7].qName).hasPrefix()) | 
| 4402 |         { | 
| 4403 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A stylesheet function must have a prefixed name." ), | 
| 4404 |                                             errorCode: ReportContext::XTSE0740, | 
| 4405 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4406 |         } | 
| 4407 |  | 
| 4408 |         if((yyvsp[-1].expr)) /* We got a function body. */ | 
| 4409 |         { | 
| 4410 |             if(ns == StandardNamespaces::empty) | 
| 4411 |             { | 
| 4412 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The namespace for a user defined function "  | 
| 4413 |                                                    "cannot be empty (try the predefined "  | 
| 4414 |                                                    "prefix %1 which exists for cases "  | 
| 4415 |                                                    "like this)" ) | 
| 4416 |                                                    .arg(a: formatKeyword(keyword: "local" )), | 
| 4417 |                                                 errorCode: ReportContext::XQST0060, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4418 |             } | 
| 4419 |             else if(XPathHelper::isReservedNamespace(ns)) | 
| 4420 |             { | 
| 4421 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr( | 
| 4422 |                                                    sourceText: "The namespace %1 is reserved; therefore "  | 
| 4423 |                                                    "user defined functions may not use it. "  | 
| 4424 |                                                    "Try the predefined prefix %2, which "  | 
| 4425 |                                                    "exists for these cases." ) | 
| 4426 |                                                 .arg(args: formatURI(np: parseInfo->staticContext->namePool(), uri: ns), args: formatKeyword(keyword: "local" )), | 
| 4427 |                                                 errorCode: parseInfo->isXSLT() ? ReportContext::XTSE0080 : ReportContext::XQST0045, | 
| 4428 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4429 |             } | 
| 4430 |             else if(parseInfo->moduleNamespace != StandardNamespaces::empty && | 
| 4431 |                     ns != parseInfo->moduleNamespace) | 
| 4432 |             { | 
| 4433 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr( | 
| 4434 |                                                    sourceText: "The namespace of a user defined "  | 
| 4435 |                                                    "function in a library module must be "  | 
| 4436 |                                                    "equivalent to the module namespace. "  | 
| 4437 |                                                    "In other words, it should be %1 instead "  | 
| 4438 |                                                    "of %2" ) | 
| 4439 |                                                 .arg(args: formatURI(np: parseInfo->staticContext->namePool(), uri: parseInfo->moduleNamespace), | 
| 4440 |                                                      args: formatURI(np: parseInfo->staticContext->namePool(), uri: ns)), | 
| 4441 |                                                 errorCode: ReportContext::XQST0048, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4442 |             } | 
| 4443 |             else | 
| 4444 |             { | 
| 4445 |                 /* Apply function conversion such that the body matches the declared | 
| 4446 |                  * return type. */ | 
| 4447 |                 const Expression::Ptr checked(TypeChecker::applyFunctionConversion(operand: (yyvsp[-1].expr), reqType: (yyvsp[-2].sequenceType), | 
| 4448 |                                                                                    context: parseInfo->staticContext, | 
| 4449 |                                                                                    code: ReportContext::XPTY0004, | 
| 4450 |                                                                                    TypeChecker::Options(TypeChecker::AutomaticallyConvert | | 
| 4451 |                                                                                                         TypeChecker::CheckFocus | | 
| 4452 |                                                                                                         TypeChecker::GeneratePromotion))); | 
| 4453 |  | 
| 4454 |                 const int argCount = (yyvsp[-5].functionArguments).count(); | 
| 4455 |                 const FunctionSignature::Ptr sign(new FunctionSignature((yyvsp[-7].qName) /* name */, | 
| 4456 |                                                                         argCount /* minArgs */, | 
| 4457 |                                                                         argCount /* maxArgs */, | 
| 4458 |                                                                         (yyvsp[-2].sequenceType) /* returnType */)); | 
| 4459 |                 sign->setArguments((yyvsp[-5].functionArguments)); | 
| 4460 |                 const UserFunction::List::const_iterator end(parseInfo->userFunctions.constEnd()); | 
| 4461 |                 UserFunction::List::const_iterator it(parseInfo->userFunctions.constBegin()); | 
| 4462 |  | 
| 4463 |                 for(; it != end; ++it) | 
| 4464 |                 { | 
| 4465 |                     if(*(*it)->signature() == *sign) | 
| 4466 |                     { | 
| 4467 |                         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A function already exists with "  | 
| 4468 |                                                            "the signature %1." ) | 
| 4469 |                                                            .arg(a: formatFunction(np: parseInfo->staticContext->namePool(), func: sign)), | 
| 4470 |                                                         errorCode: parseInfo->isXSLT() ? ReportContext::XTSE0770 : ReportContext::XQST0034, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4471 |                     } | 
| 4472 |                 } | 
| 4473 |  | 
| 4474 |                 VariableDeclaration::List argDecls; | 
| 4475 |  | 
| 4476 |                 for(int i = 0; i < argCount; ++i) | 
| 4477 |                     argDecls.append(t: parseInfo->variables.at(i)); | 
| 4478 |  | 
| 4479 |                 if((yyvsp[-3].enums.slot) > -1) | 
| 4480 |                 { | 
| 4481 |                     /* We have allocated slots, so now push them out of scope. */ | 
| 4482 |                     parseInfo->finalizePushedVariable(amount: argCount); | 
| 4483 |                 } | 
| 4484 |  | 
| 4485 |                 parseInfo->userFunctions.append(t: UserFunction::Ptr(new UserFunction(sign, checked, (yyvsp[-3].enums.slot), argDecls))); | 
| 4486 |             } | 
| 4487 |         } | 
| 4488 |         else /* We got an 'external' declaration. */ | 
| 4489 |         { | 
| 4490 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "No external functions are supported. "  | 
| 4491 |                                                "All supported functions can be used directly, "  | 
| 4492 |                                                "without first declaring them as external" ), | 
| 4493 |                                             errorCode: ReportContext::XPST0017, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4494 |         } | 
| 4495 |     } | 
| 4496 | #line 4448 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4497 |     break; | 
| 4498 |  | 
| 4499 |   case 82: | 
| 4500 | #line 2261 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4501 |     { | 
| 4502 |         (yyval.functionArguments) = FunctionArgument::List(); | 
| 4503 |     } | 
| 4504 | #line 4456 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4505 |     break; | 
| 4506 |  | 
| 4507 |   case 83: | 
| 4508 | #line 2265 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4509 |     { | 
| 4510 |         FunctionArgument::List l; | 
| 4511 |         l.append(t: (yyvsp[0].functionArgument)); | 
| 4512 |         (yyval.functionArguments) = l; | 
| 4513 |     } | 
| 4514 | #line 4466 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4515 |     break; | 
| 4516 |  | 
| 4517 |   case 84: | 
| 4518 | #line 2271 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4519 |     { | 
| 4520 |         FunctionArgument::List::const_iterator it((yyvsp[-2].functionArguments).constBegin()); | 
| 4521 |         const FunctionArgument::List::const_iterator end((yyvsp[-2].functionArguments).constEnd()); | 
| 4522 |  | 
| 4523 |         for(; it != end; ++it) | 
| 4524 |         { | 
| 4525 |             if((*it)->name() == (yyvsp[0].functionArgument)->name()) | 
| 4526 |             { | 
| 4527 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "An argument with name %1 has already "  | 
| 4528 |                                                    "been declared. Every argument name "  | 
| 4529 |                                                    "must be unique." ) | 
| 4530 |                                                    .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[0].functionArgument)->name())), | 
| 4531 |                                                 errorCode: ReportContext::XQST0039, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4532 |             } | 
| 4533 |         } | 
| 4534 |  | 
| 4535 |         (yyvsp[-2].functionArguments).append(t: (yyvsp[0].functionArgument)); | 
| 4536 |         (yyval.functionArguments) = (yyvsp[-2].functionArguments); | 
| 4537 |     } | 
| 4538 | #line 4490 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4539 |     break; | 
| 4540 |  | 
| 4541 |   case 85: | 
| 4542 | #line 2292 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4543 |     { | 
| 4544 |         pushVariable(name: (yyvsp[-1].qName), seqType: (yyvsp[0].sequenceType), expr: Expression::Ptr(), type: VariableDeclaration::FunctionArgument, sourceLocator: (yyloc), parseInfo); | 
| 4545 |         (yyval.functionArgument) = FunctionArgument::Ptr(new FunctionArgument((yyvsp[-1].qName), (yyvsp[0].sequenceType))); | 
| 4546 |     } | 
| 4547 | #line 4499 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4548 |     break; | 
| 4549 |  | 
| 4550 |   case 86: | 
| 4551 | #line 2298 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4552 |     { | 
| 4553 |         (yyval.expr).reset(); | 
| 4554 |     } | 
| 4555 | #line 4507 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4556 |     break; | 
| 4557 |  | 
| 4558 |   case 88: | 
| 4559 | #line 2304 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4560 |     { | 
| 4561 |         (yyval.expr) = (yyvsp[-1].expr); | 
| 4562 |     } | 
| 4563 | #line 4515 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4564 |     break; | 
| 4565 |  | 
| 4566 |   case 91: | 
| 4567 | #line 2320 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4568 |     { | 
| 4569 |         (yyval.expr) = create(expr: new CombineNodes((yyvsp[-2].expr), CombineNodes::Union, (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 4570 |     } | 
| 4571 | #line 4523 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4572 |     break; | 
| 4573 |  | 
| 4574 |   case 93: | 
| 4575 | #line 2326 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4576 |     { | 
| 4577 |         /* We write this into a node test. The spec says, 5.5.3 The Meaning of a Pattern: | 
| 4578 |          * "Similarly, / matches a document node, and only a document node, | 
| 4579 |          * because the result of the expression root(.)//(/) returns the root | 
| 4580 |          * node of the tree containing the context node if and only if it is a | 
| 4581 |          * document node." */ | 
| 4582 |         (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisSelf, BuiltinTypes::document), sourceLocator: (yyloc), parseInfo); | 
| 4583 |     } | 
| 4584 | #line 4536 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4585 |     break; | 
| 4586 |  | 
| 4587 |   case 94: | 
| 4588 | #line 2335 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4589 |     { | 
| 4590 |         /* /axis::node-test | 
| 4591 |          *       => | 
| 4592 |          * axis::node-test[parent::document-node()] | 
| 4593 |          * | 
| 4594 |          * In practice it looks like this. $2 is: | 
| 4595 |          * | 
| 4596 |          *     TruthPredicate | 
| 4597 |          *          AxisStep    self::element(c) | 
| 4598 |          *          TruthPredicate | 
| 4599 |          *              AxisStep    parent::element(b) | 
| 4600 |          *              AxisStep    parent::element(a) | 
| 4601 |          * | 
| 4602 |          * and we want this: | 
| 4603 |          * | 
| 4604 |          *      TruthPredicate | 
| 4605 |          *          AxisStep    self::element(c) | 
| 4606 |          *          TruthPredicate | 
| 4607 |          *              AxisStep    self::element(b) | 
| 4608 |          *              TruthPredicate | 
| 4609 |          *                  AxisStep    parent::element(a) | 
| 4610 |          *                  AxisStep    parent::document() | 
| 4611 |          * | 
| 4612 |          * So we want to rewrite the predicate deepest down into a | 
| 4613 |          * another TruthPredicate containing the AxisStep. | 
| 4614 |          * | 
| 4615 |          * The simplest case where $2 is only an axis step is special. When $2 is: | 
| 4616 |          * | 
| 4617 |          *  AxisStep self::element(a) | 
| 4618 |          * | 
| 4619 |          * we want: | 
| 4620 |          * | 
| 4621 |          *  TruthPredicate | 
| 4622 |          *      AxisStep self::element(a) | 
| 4623 |          *      AxisStep parent::document() | 
| 4624 |          */ | 
| 4625 |  | 
| 4626 |         /* First, find the target. */ | 
| 4627 |         Expression::Ptr target((yyvsp[0].expr)); | 
| 4628 |  | 
| 4629 |         while(isPredicate(id: target->id())) | 
| 4630 |         { | 
| 4631 |             const Expression::Ptr candidate(target->operands().at(i: 1)); | 
| 4632 |  | 
| 4633 |             if(isPredicate(id: candidate->id())) | 
| 4634 |                 target = candidate; | 
| 4635 |             else | 
| 4636 |                 break; /* target is now the last predicate. */ | 
| 4637 |         } | 
| 4638 |  | 
| 4639 |         if(target->is(i: Expression::IDAxisStep)) | 
| 4640 |         { | 
| 4641 |             (yyval.expr) = create(expr: GenericPredicate::create(sourceExpression: (yyvsp[0].expr), predicateExpression: create(expr: new AxisStep(QXmlNodeModelIndex::AxisParent, BuiltinTypes::document), sourceLocator: (yyloc), parseInfo), | 
| 4642 |                                                  context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: (yylsp[-1]), parseInfo)), sourceLocator: (yylsp[-1]), parseInfo); | 
| 4643 |         } | 
| 4644 |         else | 
| 4645 |         { | 
| 4646 |             const Expression::List targetOperands(target->operands()); | 
| 4647 |             Expression::List newOps; | 
| 4648 |             newOps.append(t: targetOperands.at(i: 0)); | 
| 4649 |  | 
| 4650 |             newOps.append(t: create(expr: GenericPredicate::create(sourceExpression: targetOperands.at(i: 1), | 
| 4651 |                                                           predicateExpression: create(expr: new AxisStep(QXmlNodeModelIndex::AxisParent, BuiltinTypes::document), sourceLocator: (yyloc), parseInfo), | 
| 4652 |                                                           context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: (yylsp[-1]), parseInfo)), sourceLocator: (yylsp[-1]), parseInfo)); | 
| 4653 |  | 
| 4654 |             target->setOperands(newOps); | 
| 4655 |             (yyval.expr) = (yyvsp[0].expr); | 
| 4656 |         } | 
| 4657 |     } | 
| 4658 | #line 4610 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4659 |     break; | 
| 4660 |  | 
| 4661 |   case 95: | 
| 4662 | #line 2405 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4663 |     { | 
| 4664 |         /* //axis::node-test | 
| 4665 |          *        => | 
| 4666 |          * axis::node-test[parent::node()] | 
| 4667 |          * | 
| 4668 |          * Spec says: "//para matches any para element that has a parent node." | 
| 4669 |          */ | 
| 4670 |         (yyval.expr) = create(expr: GenericPredicate::create(sourceExpression: (yyvsp[0].expr), predicateExpression: create(expr: new AxisStep(QXmlNodeModelIndex::AxisParent, BuiltinTypes::node), sourceLocator: (yyloc), parseInfo), | 
| 4671 |                                              context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: (yylsp[-1]), parseInfo)), sourceLocator: (yylsp[-1]), parseInfo); | 
| 4672 |     } | 
| 4673 | #line 4625 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4674 |     break; | 
| 4675 |  | 
| 4676 |   case 97: | 
| 4677 | #line 2417 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4678 |     { | 
| 4679 |         createIdPatternPath(operand1: (yyvsp[-2].expr), operand2: (yyvsp[0].expr), axis: QXmlNodeModelIndex::AxisParent, sl: (yylsp[-1]), parseInfo); | 
| 4680 |     } | 
| 4681 | #line 4633 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4682 |     break; | 
| 4683 |  | 
| 4684 |   case 98: | 
| 4685 | #line 2421 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4686 |     { | 
| 4687 |         createIdPatternPath(operand1: (yyvsp[-2].expr), operand2: (yyvsp[0].expr), axis: QXmlNodeModelIndex::AxisAncestor, sl: (yylsp[-1]), parseInfo); | 
| 4688 |     } | 
| 4689 | #line 4641 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4690 |     break; | 
| 4691 |  | 
| 4692 |   case 99: | 
| 4693 | #line 2426 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4694 |     { | 
| 4695 |         const Expression::List ands((yyvsp[0].expr)->operands()); | 
| 4696 |         const FunctionSignature::Ptr signature((yyvsp[0].expr)->as<FunctionCall>()->signature()); | 
| 4697 |         const QXmlName name(signature->name()); | 
| 4698 |         const QXmlName key(StandardNamespaces::fn, StandardLocalNames::key); | 
| 4699 |         const QXmlName id(StandardNamespaces::fn, StandardLocalNames::id); | 
| 4700 |  | 
| 4701 |         if(name == id) | 
| 4702 |         { | 
| 4703 |             const Expression::ID id = ands.first()->id(); | 
| 4704 |             if(!isVariableReference(id) && id != Expression::IDStringValue) | 
| 4705 |             { | 
| 4706 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "When function %1 is used for matching inside a pattern, "  | 
| 4707 |                                                                   "the argument must be a variable reference or a string literal." ) | 
| 4708 |                                                                   .arg(a: formatFunction(np: parseInfo->staticContext->namePool(), func: signature)), | 
| 4709 |                                                 errorCode: ReportContext::XPST0003, | 
| 4710 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4711 |             } | 
| 4712 |         } | 
| 4713 |         else if(name == key) | 
| 4714 |         { | 
| 4715 |             if(ands.first()->id() != Expression::IDStringValue) | 
| 4716 |             { | 
| 4717 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "In an XSL-T pattern, the first argument to function %1 "  | 
| 4718 |                                                                   "must be a string literal, when used for matching." ) | 
| 4719 |                                                                   .arg(a: formatFunction(np: parseInfo->staticContext->namePool(), func: signature)), | 
| 4720 |                                                 errorCode: ReportContext::XPST0003, | 
| 4721 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4722 |             } | 
| 4723 |  | 
| 4724 |             const Expression::ID id2 = ands.at(i: 1)->id(); | 
| 4725 |             if(!isVariableReference(id: id2) && | 
| 4726 |                id2 != Expression::IDStringValue && | 
| 4727 |                id2 != Expression::IDIntegerValue && | 
| 4728 |                id2 != Expression::IDBooleanValue && | 
| 4729 |                id2 != Expression::IDFloat) | 
| 4730 |             { | 
| 4731 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "In an XSL-T pattern, the first argument to function %1 "  | 
| 4732 |                                                                   "must be a literal or a variable reference, when used for matching." ) | 
| 4733 |                                                                   .arg(a: formatFunction(np: parseInfo->staticContext->namePool(), func: signature)), | 
| 4734 |                                                 errorCode: ReportContext::XPST0003, | 
| 4735 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4736 |             } | 
| 4737 |  | 
| 4738 |             if(ands.count() == 3) | 
| 4739 |             { | 
| 4740 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "In an XSL-T pattern, function %1 cannot have a third argument." ) | 
| 4741 |                                                                   .arg(a: formatFunction(np: parseInfo->staticContext->namePool(), func: signature)), | 
| 4742 |                                                 errorCode: ReportContext::XPST0003, | 
| 4743 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4744 |             } | 
| 4745 |  | 
| 4746 |         } | 
| 4747 |         else | 
| 4748 |         { | 
| 4749 |             const FunctionSignature::Hash signs(parseInfo->staticContext->functionSignatures()->functionSignatures()); | 
| 4750 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "In an XSL-T pattern, only function %1 "  | 
| 4751 |                                                               "and %2, not %3, can be used for matching." ) | 
| 4752 |                                                               .arg(args: formatFunction(np: parseInfo->staticContext->namePool(), func: signs.value(akey: id)), | 
| 4753 |                                                                    args: formatFunction(np: parseInfo->staticContext->namePool(), func: signs.value(akey: key)), | 
| 4754 |                                                                    args: formatFunction(np: parseInfo->staticContext->namePool(), func: signature)), | 
| 4755 |                                             errorCode: ReportContext::XPST0003, | 
| 4756 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4757 |         } | 
| 4758 |  | 
| 4759 |         (yyval.expr) = (yyvsp[0].expr); | 
| 4760 |     } | 
| 4761 | #line 4713 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4762 |     break; | 
| 4763 |  | 
| 4764 |   case 101: | 
| 4765 | #line 2496 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4766 |     { | 
| 4767 |         (yyval.expr) = createPatternPath(operand1: (yyvsp[-2].expr), operand2: (yyvsp[0].expr), axis: QXmlNodeModelIndex::AxisParent, sl: (yylsp[-1]), parseInfo); | 
| 4768 |     } | 
| 4769 | #line 4721 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4770 |     break; | 
| 4771 |  | 
| 4772 |   case 102: | 
| 4773 | #line 2500 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4774 |     { | 
| 4775 |         (yyval.expr) = createPatternPath(operand1: (yyvsp[-2].expr), operand2: (yyvsp[0].expr), axis: QXmlNodeModelIndex::AxisAncestor, sl: (yylsp[-1]), parseInfo); | 
| 4776 |     } | 
| 4777 | #line 4729 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4778 |     break; | 
| 4779 |  | 
| 4780 |   case 103: | 
| 4781 | #line 2505 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4782 |     { | 
| 4783 |         const Expression::Ptr expr(findAxisStep(expr: (yyvsp[0].expr))); | 
| 4784 |  | 
| 4785 |         const QXmlNodeModelIndex::Axis axis = expr->as<AxisStep>()->axis(); | 
| 4786 |         AxisStep *const axisStep = expr->as<AxisStep>(); | 
| 4787 |  | 
| 4788 |         /* Here we constrain the possible axes, and we rewrite the axes as according | 
| 4789 |          * to 5.5.3 The Meaning of a Pattern. | 
| 4790 |          * | 
| 4791 |          * However, we also rewrite axis child and attribute to axis self. The | 
| 4792 |          * reason for this is that if we don't, we will match the children of | 
| 4793 |          * the context node, instead of the context node itself. The formal | 
| 4794 |          * definition of a pattern, root(.)//EE is insensitive to context, | 
| 4795 |          * while the way we implement pattern, "the other way of seeing it", | 
| 4796 |          * e.g from right to left, are very much. */ | 
| 4797 |  | 
| 4798 |         if(axisStep->nodeTest() == BuiltinTypes::document | 
| 4799 |            || axis == QXmlNodeModelIndex::AxisChild) | 
| 4800 |             axisStep->setAxis(QXmlNodeModelIndex::AxisSelf); | 
| 4801 |         else if(axis == QXmlNodeModelIndex::AxisAttribute) | 
| 4802 |         { | 
| 4803 |             axisStep->setAxis(QXmlNodeModelIndex::AxisSelf); | 
| 4804 |             /* Consider that the user write attribute::node().  This is | 
| 4805 |              * semantically equivalent to attribute::attribute(), but since we have changed | 
| 4806 |              * the axis to axis self, we also need to change the node test, such that we | 
| 4807 |              * have self::attribute(). */ | 
| 4808 |             if(*axisStep->nodeTest() == *BuiltinTypes::node) | 
| 4809 |                 axisStep->setNodeTest(BuiltinTypes::attribute); | 
| 4810 |         } | 
| 4811 |         else | 
| 4812 |         { | 
| 4813 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "In an XSL-T pattern, axis %1 cannot be used, "  | 
| 4814 |                                                               "only axis %2 or %3 can." ) | 
| 4815 |                                             .arg(args: formatKeyword(keyword: AxisStep::axisName(axis)), | 
| 4816 |                                                  args: formatKeyword(keyword: AxisStep::axisName(axis: QXmlNodeModelIndex::AxisChild)), | 
| 4817 |                                                  args: formatKeyword(keyword: AxisStep::axisName(axis: QXmlNodeModelIndex::AxisAttribute))), | 
| 4818 |                                             errorCode: ReportContext::XPST0003, | 
| 4819 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4820 |         } | 
| 4821 |  | 
| 4822 |         (yyval.expr) = (yyvsp[0].expr); | 
| 4823 |     } | 
| 4824 | #line 4776 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4825 |     break; | 
| 4826 |  | 
| 4827 |   case 105: | 
| 4828 | #line 2550 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4829 |     { | 
| 4830 |         (yyval.expr) = create(expr: new ExpressionSequence((yyvsp[0].expressionList)), sourceLocator: (yyloc), parseInfo); | 
| 4831 |     } | 
| 4832 | #line 4784 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4833 |     break; | 
| 4834 |  | 
| 4835 |   case 106: | 
| 4836 | #line 2555 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4837 |     { | 
| 4838 |         Expression::List l; | 
| 4839 |         l.append(t: (yyvsp[-2].expr)); | 
| 4840 |         l.append(t: (yyvsp[0].expr)); | 
| 4841 |         (yyval.expressionList) = l; | 
| 4842 |     } | 
| 4843 | #line 4795 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4844 |     break; | 
| 4845 |  | 
| 4846 |   case 107: | 
| 4847 | #line 2562 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4848 |     { | 
| 4849 |         (yyvsp[-2].expressionList).append(t: (yyvsp[0].expr)); | 
| 4850 |         (yyval.expressionList) = (yyvsp[-2].expressionList); | 
| 4851 |     } | 
| 4852 | #line 4804 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4853 |     break; | 
| 4854 |  | 
| 4855 |   case 113: | 
| 4856 | #line 2573 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4857 |     { | 
| 4858 |         (yyval.expr) = createDirAttributeValue(content: (yyvsp[-1].expressionList), parseInfo, sourceLocator: (yyloc)); | 
| 4859 |     } | 
| 4860 | #line 4812 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4861 |     break; | 
| 4862 |  | 
| 4863 |   case 114: | 
| 4864 | #line 2578 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4865 |     { | 
| 4866 |         QVector<QXmlName> result; | 
| 4867 |         result.append(t: QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::Default)); | 
| 4868 |         (yyval.qNameVector) = result; | 
| 4869 |     } | 
| 4870 | #line 4822 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4871 |     break; | 
| 4872 |  | 
| 4873 |   case 115: | 
| 4874 | #line 2584 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4875 |     { | 
| 4876 |         (yyval.qNameVector) = (yyvsp[0].qNameVector); | 
| 4877 |     } | 
| 4878 | #line 4830 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4879 |     break; | 
| 4880 |  | 
| 4881 |   case 116: | 
| 4882 | #line 2589 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4883 |     { | 
| 4884 |             (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::Default); | 
| 4885 |     } | 
| 4886 | #line 4838 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4887 |     break; | 
| 4888 |  | 
| 4889 |   case 117: | 
| 4890 | #line 2593 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4891 |     { | 
| 4892 |         (yyval.qName) = (yyvsp[0].qName); | 
| 4893 |     } | 
| 4894 | #line 4846 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4895 |     break; | 
| 4896 |  | 
| 4897 |   case 118: | 
| 4898 | #line 2598 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4899 |     { | 
| 4900 |         QVector<QXmlName> result; | 
| 4901 |         result.append(t: (yyvsp[0].qName)); | 
| 4902 |         (yyval.qNameVector) = result; | 
| 4903 |     } | 
| 4904 | #line 4856 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4905 |     break; | 
| 4906 |  | 
| 4907 |   case 119: | 
| 4908 | #line 2604 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4909 |     { | 
| 4910 |         (yyvsp[-2].qNameVector).append(t: (yyvsp[0].qName)); | 
| 4911 |         (yyval.qNameVector) = (yyvsp[-2].qNameVector); | 
| 4912 |     } | 
| 4913 | #line 4865 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4914 |     break; | 
| 4915 |  | 
| 4916 |   case 120: | 
| 4917 | #line 2610 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4918 |     { | 
| 4919 |         (yyval.qName) = (yyvsp[0].qName); | 
| 4920 |     } | 
| 4921 | #line 4873 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4922 |     break; | 
| 4923 |  | 
| 4924 |   case 121: | 
| 4925 | #line 2614 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4926 |     { | 
| 4927 |         if((yyvsp[0].sval) == QLatin1String("#current" )) | 
| 4928 |             (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::current); | 
| 4929 |         else if((yyvsp[0].sval) == QLatin1String("#default" )) | 
| 4930 |             (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::Default); | 
| 4931 |         else if((yyvsp[0].sval) == QLatin1String("#all" )) | 
| 4932 |             (yyval.qName) = QXmlName(StandardNamespaces::InternalXSLT, StandardLocalNames::all); | 
| 4933 |         else | 
| 4934 |         { | 
| 4935 |             const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 4936 |  | 
| 4937 |             if(!QXmlUtils::isNCName(ncName: (yyvsp[0].sval))) | 
| 4938 |             { | 
| 4939 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is an invalid template mode name." ) | 
| 4940 |                                                                   .arg(a: formatKeyword(keyword: (yyvsp[0].sval))), | 
| 4941 |                                                 errorCode: ReportContext::XTSE0550, | 
| 4942 |                                                 sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4943 |             } | 
| 4944 |  | 
| 4945 |             (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: StandardNamespaces::empty, ln: (yyvsp[0].sval)); | 
| 4946 |         } | 
| 4947 |     } | 
| 4948 | #line 4900 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4949 |     break; | 
| 4950 |  | 
| 4951 |   case 124: | 
| 4952 | #line 2643 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4953 |     { | 
| 4954 |                /* We're pushing the range variable here, not the positional. */ | 
| 4955 |                (yyval.expr) = pushVariable(name: (yyvsp[-4].qName), seqType: quantificationType(type: (yyvsp[-3].sequenceType)), expr: (yyvsp[0].expr), type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 4956 |            } | 
| 4957 | #line 4909 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4958 |     break; | 
| 4959 |  | 
| 4960 |   case 125: | 
| 4961 | #line 2647 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4962 |     { | 
| 4963 |                /* It is ok this appears after PositionalVar, because currentRangeSlot() | 
| 4964 |                 * uses a different "channel" than currentPositionSlot(), so they can't trash | 
| 4965 |                 * each other. */ | 
| 4966 |                (yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot(); | 
| 4967 |            } | 
| 4968 | #line 4920 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 4969 |     break; | 
| 4970 |  | 
| 4971 |   case 126: | 
| 4972 | #line 2654 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 4973 |     { | 
| 4974 |         Q_ASSERT((yyvsp[-3].expr)); | 
| 4975 |         Q_ASSERT((yyvsp[0].expr)); | 
| 4976 |  | 
| 4977 |         /* We want the next last pushed variable, since we push the range variable after the | 
| 4978 |          * positional variable. */ | 
| 4979 |         if((yyvsp[-5].enums.slot) != -1 && parseInfo->variables.at(i: parseInfo->variables.count() -2)->name == (yyvsp[-7].qName)) | 
| 4980 |         { | 
| 4981 |             /* Ok, a positional variable is used since its slot is not -1, and its name is equal | 
| 4982 |              * to our range variable. This is an error. */ | 
| 4983 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The name of a variable bound in a for-expression must be different "  | 
| 4984 |                                                "from the positional variable. Hence, the two variables named %1 collide." ) | 
| 4985 |                                                .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-7].qName))), | 
| 4986 |                                             errorCode: ReportContext::XQST0089, | 
| 4987 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 4988 |  | 
| 4989 |         } | 
| 4990 |  | 
| 4991 |         const Expression::Ptr retBody(create(expr: new ForClause((yyvsp[-1].enums.slot), (yyvsp[-2].expr), (yyvsp[0].expr), (yyvsp[-5].enums.slot)), sourceLocator: (yyloc), parseInfo)); | 
| 4992 |         ReturnOrderBy *const rob = locateReturnClause(expr: (yyvsp[0].expr)); | 
| 4993 |  | 
| 4994 |         if(rob) | 
| 4995 |             (yyval.expr) = create(expr: new OrderBy(rob->stability(), rob->orderSpecs(), retBody, rob), sourceLocator: (yyloc), parseInfo); | 
| 4996 |         else | 
| 4997 |             (yyval.expr) = retBody; | 
| 4998 |  | 
| 4999 |         parseInfo->finalizePushedVariable(); | 
| 5000 |  | 
| 5001 |         if((yyvsp[-5].enums.slot) != -1) /* We also have a positional variable to remove from the scope. */ | 
| 5002 |             parseInfo->finalizePushedVariable(); | 
| 5003 |     } | 
| 5004 | #line 4956 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5005 |     break; | 
| 5006 |  | 
| 5007 |   case 127: | 
| 5008 | #line 2688 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5009 |     { | 
| 5010 |              pushVariable(name: (yyvsp[-4].qName), seqType: quantificationType(type: (yyvsp[-3].sequenceType)), expr: (yyvsp[0].expr), type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 5011 |          } | 
| 5012 | #line 4964 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5013 |     break; | 
| 5014 |  | 
| 5015 |   case 128: | 
| 5016 | #line 2691 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5017 |     { | 
| 5018 |              /* It is ok this appears after PositionalVar, because currentRangeSlot() | 
| 5019 |               * uses a different "channel" than currentPositionSlot(), so they can't trash | 
| 5020 |               * each other. */ | 
| 5021 |              (yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot(); | 
| 5022 |          } | 
| 5023 | #line 4975 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5024 |     break; | 
| 5025 |  | 
| 5026 |   case 129: | 
| 5027 | #line 2698 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5028 |     { | 
| 5029 |         (yyval.expr) = create(expr: new ForClause((yyvsp[-1].enums.slot), (yyvsp[-3].expr), (yyvsp[0].expr), (yyvsp[-5].enums.slot)), sourceLocator: (yyloc), parseInfo); | 
| 5030 |  | 
| 5031 |         parseInfo->finalizePushedVariable(); | 
| 5032 |  | 
| 5033 |         if((yyvsp[-5].enums.slot) != -1) /* We also have a positional variable to remove from the scope. */ | 
| 5034 |             parseInfo->finalizePushedVariable(); | 
| 5035 |     } | 
| 5036 | #line 4988 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5037 |     break; | 
| 5038 |  | 
| 5039 |   case 133: | 
| 5040 | #line 2712 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5041 |     { | 
| 5042 |         (yyval.enums.slot) = -1; | 
| 5043 |     } | 
| 5044 | #line 4996 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5045 |     break; | 
| 5046 |  | 
| 5047 |   case 134: | 
| 5048 | #line 2717 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5049 |     { | 
| 5050 |         pushVariable(name: (yyvsp[0].qName), seqType: CommonSequenceTypes::ExactlyOneInteger, expr: Expression::Ptr(), | 
| 5051 |                      type: VariableDeclaration::PositionalVariable, sourceLocator: (yyloc), parseInfo); | 
| 5052 |         (yyval.enums.slot) = parseInfo->currentPositionSlot(); | 
| 5053 |     } | 
| 5054 | #line 5006 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5055 |     break; | 
| 5056 |  | 
| 5057 |   case 135: | 
| 5058 | #line 2724 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5059 |     { | 
| 5060 |                 (yyval.expr) = pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), type: VariableDeclaration::ExpressionVariable, sourceLocator: (yyloc), parseInfo); | 
| 5061 |            } | 
| 5062 | #line 5014 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5063 |     break; | 
| 5064 |  | 
| 5065 |   case 136: | 
| 5066 | #line 2728 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5067 |     { | 
| 5068 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-7].enums.Bool)); | 
| 5069 |  | 
| 5070 |         Q_ASSERT(parseInfo->variables.top()->name == (yyvsp[-5].qName)); | 
| 5071 |         (yyval.expr) = create(expr: new LetClause((yyvsp[-1].expr), (yyvsp[0].expr), parseInfo->variables.top()), sourceLocator: (yyloc), parseInfo); | 
| 5072 |         parseInfo->finalizePushedVariable(); | 
| 5073 |     } | 
| 5074 | #line 5026 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5075 |     break; | 
| 5076 |  | 
| 5077 |   case 137: | 
| 5078 | #line 2737 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5079 |     { (yyval.expr) = pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), type: VariableDeclaration::ExpressionVariable, sourceLocator: (yyloc), parseInfo);} | 
| 5080 | #line 5032 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5081 |     break; | 
| 5082 |  | 
| 5083 |   case 138: | 
| 5084 | #line 2739 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5085 |     { | 
| 5086 |         Q_ASSERT(parseInfo->variables.top()->name == (yyvsp[-5].qName)); | 
| 5087 |         (yyval.expr) = create(expr: new LetClause((yyvsp[-1].expr), (yyvsp[0].expr), parseInfo->variables.top()), sourceLocator: (yyloc), parseInfo); | 
| 5088 |         parseInfo->finalizePushedVariable(); | 
| 5089 |     } | 
| 5090 | #line 5042 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5091 |     break; | 
| 5092 |  | 
| 5093 |   case 142: | 
| 5094 | #line 2750 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5095 |     { | 
| 5096 |         if((yyvsp[-2].orderSpecs).isEmpty()) | 
| 5097 |             (yyval.expr) = (yyvsp[0].expr); | 
| 5098 |         else | 
| 5099 |             (yyval.expr) = createReturnOrderBy(orderSpecTransfer: (yyvsp[-2].orderSpecs), returnExpr: (yyvsp[0].expr), stability: parseInfo->orderStability.pop(), sourceLocator: (yyloc), parseInfo); | 
| 5100 |     } | 
| 5101 | #line 5053 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5102 |     break; | 
| 5103 |  | 
| 5104 |   case 143: | 
| 5105 | #line 2758 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5106 |     { | 
| 5107 |         if((yyvsp[-2].orderSpecs).isEmpty()) | 
| 5108 |             (yyval.expr) = create(expr: new IfThenClause((yyvsp[-3].expr), (yyvsp[0].expr), create(expr: new EmptySequence, sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 5109 |         else | 
| 5110 |             (yyval.expr) = create(expr: new IfThenClause((yyvsp[-3].expr), createReturnOrderBy(orderSpecTransfer: (yyvsp[-2].orderSpecs), returnExpr: (yyvsp[0].expr), stability: parseInfo->orderStability.pop(), sourceLocator: (yyloc), parseInfo), | 
| 5111 |                                          create(expr: new EmptySequence, sourceLocator: (yyloc), parseInfo)), | 
| 5112 |                         sourceLocator: (yyloc), parseInfo); | 
| 5113 |     } | 
| 5114 | #line 5066 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5115 |     break; | 
| 5116 |  | 
| 5117 |   case 144: | 
| 5118 | #line 2768 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5119 |     { | 
| 5120 |         (yyval.orderSpecs) = OrderSpecTransfer::List(); | 
| 5121 |     } | 
| 5122 | #line 5074 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5123 |     break; | 
| 5124 |  | 
| 5125 |   case 146: | 
| 5126 | #line 2774 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5127 |     { | 
| 5128 |         (yyval.orderSpecs) = (yyvsp[0].orderSpecs); | 
| 5129 |     } | 
| 5130 | #line 5082 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5131 |     break; | 
| 5132 |  | 
| 5133 |   case 147: | 
| 5134 | #line 2779 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5135 |     { | 
| 5136 |         OrderSpecTransfer::List list; | 
| 5137 |         list += (yyvsp[-2].orderSpecs); | 
| 5138 |         list.append(t: (yyvsp[0].orderSpec)); | 
| 5139 |         (yyval.orderSpecs) = list; | 
| 5140 |     } | 
| 5141 | #line 5093 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5142 |     break; | 
| 5143 |  | 
| 5144 |   case 148: | 
| 5145 | #line 2786 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5146 |     { | 
| 5147 |         OrderSpecTransfer::List list; | 
| 5148 |         list.append(t: (yyvsp[0].orderSpec)); | 
| 5149 |         (yyval.orderSpecs) = list; | 
| 5150 |     } | 
| 5151 | #line 5103 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5152 |     break; | 
| 5153 |  | 
| 5154 |   case 149: | 
| 5155 | #line 2793 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5156 |     { | 
| 5157 |         (yyval.orderSpec) = OrderSpecTransfer((yyvsp[-3].expr), OrderBy::OrderSpec((yyvsp[-2].enums.sortDirection), (yyvsp[-1].enums.orderingEmptySequence))); | 
| 5158 |     } | 
| 5159 | #line 5111 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5160 |     break; | 
| 5161 |  | 
| 5162 |   case 150: | 
| 5163 | #line 2798 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5164 |     { | 
| 5165 |         /* Where does the specification state the default value is ascending? | 
| 5166 |          * | 
| 5167 |          * It is implicit, in the first enumerated list in 3.8.3 Order By and Return Clauses: | 
| 5168 |          * | 
| 5169 |          * "If T1 and T2 are two tuples in the tuple stream, and V1 and V2 are the first pair | 
| 5170 |          *  of values encountered when evaluating their orderspecs from left to right for | 
| 5171 |          *  which one value is greater-than the other (as defined above), then: | 
| 5172 |          * | 
| 5173 |          *      1. If V1 is greater-than V2: If the orderspec specifies descending, | 
| 5174 |          *         then T1 precedes T2 in the tuple stream; otherwise, T2 precedes T1 in the tuple stream. | 
| 5175 |          *      2. If V2 is greater-than V1: If the orderspec specifies descending, | 
| 5176 |          *         then T2 precedes T1 in the tuple stream; otherwise, T1 precedes T2 in the tuple stream." | 
| 5177 |          * | 
| 5178 |          * which means that if you don't specify anything, or you | 
| 5179 |          * specify ascending, you get the same result. | 
| 5180 |          */ | 
| 5181 |         (yyval.enums.sortDirection) = OrderBy::OrderSpec::Ascending; | 
| 5182 |     } | 
| 5183 | #line 5135 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5184 |     break; | 
| 5185 |  | 
| 5186 |   case 151: | 
| 5187 | #line 2819 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5188 |     { | 
| 5189 |         (yyval.enums.sortDirection) = OrderBy::OrderSpec::Ascending; | 
| 5190 |     } | 
| 5191 | #line 5143 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5192 |     break; | 
| 5193 |  | 
| 5194 |   case 152: | 
| 5195 | #line 2824 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5196 |     { | 
| 5197 |         (yyval.enums.sortDirection) = OrderBy::OrderSpec::Descending; | 
| 5198 |     } | 
| 5199 | #line 5151 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5200 |     break; | 
| 5201 |  | 
| 5202 |   case 153: | 
| 5203 | #line 2829 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5204 |     { | 
| 5205 |         (yyval.enums.orderingEmptySequence) = parseInfo->staticContext->orderingEmptySequence(); | 
| 5206 |     } | 
| 5207 | #line 5159 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5208 |     break; | 
| 5209 |  | 
| 5210 |   case 156: | 
| 5211 | #line 2836 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5212 |     { | 
| 5213 |         if(parseInfo->isXSLT()) | 
| 5214 |             resolveAndCheckCollation<ReportContext::XTDE1035>(collation: (yyvsp[0].sval), parseInfo, sl: (yyloc)); | 
| 5215 |         else | 
| 5216 |             resolveAndCheckCollation<ReportContext::XQST0076>(collation: (yyvsp[0].sval), parseInfo, sl: (yyloc)); | 
| 5217 |     } | 
| 5218 | #line 5170 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5219 |     break; | 
| 5220 |  | 
| 5221 |   case 157: | 
| 5222 | #line 2843 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5223 |     { | 
| 5224 |         /* We do nothing. We don't use collations, and we have this non-terminal | 
| 5225 |          * in order to accept expressions. */ | 
| 5226 |     } | 
| 5227 | #line 5179 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5228 |     break; | 
| 5229 |  | 
| 5230 |   case 158: | 
| 5231 | #line 2849 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5232 |     { | 
| 5233 |         parseInfo->orderStability.push(t: OrderBy::StableOrder); | 
| 5234 |     } | 
| 5235 | #line 5187 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5236 |     break; | 
| 5237 |  | 
| 5238 |   case 159: | 
| 5239 | #line 2853 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5240 |     { | 
| 5241 |         parseInfo->orderStability.push(t: OrderBy::UnstableOrder); | 
| 5242 |     } | 
| 5243 | #line 5195 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5244 |     break; | 
| 5245 |  | 
| 5246 |   case 162: | 
| 5247 | #line 2861 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5248 |     { | 
| 5249 |                             pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), | 
| 5250 |                                          type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 5251 |                         } | 
| 5252 | #line 5204 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5253 |     break; | 
| 5254 |  | 
| 5255 |   case 163: | 
| 5256 | #line 2865 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5257 |     {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} | 
| 5258 | #line 5210 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5259 |     break; | 
| 5260 |  | 
| 5261 |   case 164: | 
| 5262 | #line 2867 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5263 |     { | 
| 5264 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5265 |         (yyval.expr) = create(expr: new QuantifiedExpression((yyvsp[-1].enums.slot), | 
| 5266 |                                              QuantifiedExpression::Some, (yyvsp[-3].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5267 |         parseInfo->finalizePushedVariable(); | 
| 5268 |     } | 
| 5269 | #line 5221 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5270 |     break; | 
| 5271 |  | 
| 5272 |   case 165: | 
| 5273 | #line 2875 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5274 |     { | 
| 5275 |                             (yyval.expr) = pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), | 
| 5276 |                                                     type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 5277 |                         } | 
| 5278 | #line 5230 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5279 |     break; | 
| 5280 |  | 
| 5281 |   case 166: | 
| 5282 | #line 2879 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5283 |     {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} | 
| 5284 | #line 5236 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5285 |     break; | 
| 5286 |  | 
| 5287 |   case 167: | 
| 5288 | #line 2881 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5289 |     { | 
| 5290 |         (yyval.expr) = create(expr: new QuantifiedExpression((yyvsp[-1].enums.slot), | 
| 5291 |                                              QuantifiedExpression::Some, (yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5292 |         parseInfo->finalizePushedVariable(); | 
| 5293 |     } | 
| 5294 | #line 5246 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5295 |     break; | 
| 5296 |  | 
| 5297 |   case 169: | 
| 5298 | #line 2890 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5299 |     { | 
| 5300 |                             pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), | 
| 5301 |                                          type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 5302 |                          } | 
| 5303 | #line 5255 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5304 |     break; | 
| 5305 |  | 
| 5306 |   case 170: | 
| 5307 | #line 2894 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5308 |     {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} | 
| 5309 | #line 5261 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5310 |     break; | 
| 5311 |  | 
| 5312 |   case 171: | 
| 5313 | #line 2896 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5314 |     { | 
| 5315 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5316 |         (yyval.expr) = create(expr: new QuantifiedExpression((yyvsp[-1].enums.slot), | 
| 5317 |                                              QuantifiedExpression::Every, (yyvsp[-3].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5318 |         parseInfo->finalizePushedVariable(); | 
| 5319 |     } | 
| 5320 | #line 5272 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5321 |     break; | 
| 5322 |  | 
| 5323 |   case 172: | 
| 5324 | #line 2904 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5325 |     { | 
| 5326 |                             (yyval.expr) = pushVariable(name: (yyvsp[-3].qName), seqType: quantificationType(type: (yyvsp[-2].sequenceType)), expr: (yyvsp[0].expr), | 
| 5327 |                                                     type: VariableDeclaration::RangeVariable, sourceLocator: (yyloc), parseInfo); | 
| 5328 |                          } | 
| 5329 | #line 5281 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5330 |     break; | 
| 5331 |  | 
| 5332 |   case 173: | 
| 5333 | #line 2908 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5334 |     {(yyval.enums.slot) = parseInfo->staticContext->currentRangeSlot();} | 
| 5335 | #line 5287 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5336 |     break; | 
| 5337 |  | 
| 5338 |   case 174: | 
| 5339 | #line 2910 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5340 |     { | 
| 5341 |         (yyval.expr) = create(expr: new QuantifiedExpression((yyvsp[-1].enums.slot), | 
| 5342 |                                              QuantifiedExpression::Every, (yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5343 |         parseInfo->finalizePushedVariable(); | 
| 5344 |     } | 
| 5345 | #line 5297 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5346 |     break; | 
| 5347 |  | 
| 5348 |   case 176: | 
| 5349 | #line 2919 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5350 |     { | 
| 5351 |         (yyval.expr) = (yyvsp[0].expr); | 
| 5352 |     } | 
| 5353 | #line 5305 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5354 |     break; | 
| 5355 |  | 
| 5356 |   case 177: | 
| 5357 | #line 2946 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5358 |     { | 
| 5359 |                     parseInfo->typeswitchSource.push(t: (yyvsp[-1].expr)); | 
| 5360 |                 } | 
| 5361 | #line 5313 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5362 |     break; | 
| 5363 |  | 
| 5364 |   case 178: | 
| 5365 | #line 2950 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5366 |     { | 
| 5367 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 5368 |         parseInfo->typeswitchSource.pop(); | 
| 5369 |         (yyval.expr) = (yyvsp[0].expr); | 
| 5370 |     } | 
| 5371 | #line 5323 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5372 |     break; | 
| 5373 |  | 
| 5374 |   case 179: | 
| 5375 | #line 2957 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5376 |     { | 
| 5377 |         if(!(yyvsp[-1].qName).isNull()) | 
| 5378 |         { | 
| 5379 |             pushVariable(name: (yyvsp[-1].qName), seqType: (yyvsp[0].sequenceType), expr: parseInfo->typeswitchSource.top(), | 
| 5380 |                          type: VariableDeclaration::ExpressionVariable, sourceLocator: (yyloc), parseInfo, checkSource: false); | 
| 5381 |         } | 
| 5382 |     } | 
| 5383 | #line 5335 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5384 |     break; | 
| 5385 |  | 
| 5386 |   case 180: | 
| 5387 | #line 2965 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5388 |     { | 
| 5389 |         /* The variable shouldn't be in-scope for other case branches. */ | 
| 5390 |         if(!(yyvsp[-4].qName).isNull()) | 
| 5391 |             parseInfo->finalizePushedVariable(); | 
| 5392 |     } | 
| 5393 | #line 5345 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5394 |     break; | 
| 5395 |  | 
| 5396 |   case 181: | 
| 5397 | #line 2971 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5398 |     { | 
| 5399 |         const Expression::Ptr instanceOf(create(expr: new InstanceOf(parseInfo->typeswitchSource.top(), (yyvsp[-5].sequenceType)), sourceLocator: (yyloc), parseInfo)); | 
| 5400 |         (yyval.expr) = create(expr: new IfThenClause(instanceOf, (yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5401 |     } | 
| 5402 | #line 5354 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5403 |     break; | 
| 5404 |  | 
| 5405 |   case 184: | 
| 5406 | #line 2980 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5407 |     { | 
| 5408 |         (yyval.qName) = QXmlName(); | 
| 5409 |     } | 
| 5410 | #line 5362 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5411 |     break; | 
| 5412 |  | 
| 5413 |   case 185: | 
| 5414 | #line 2985 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5415 |     { | 
| 5416 |         (yyval.qName) = (yyvsp[-1].qName); | 
| 5417 |     } | 
| 5418 | #line 5370 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5419 |     break; | 
| 5420 |  | 
| 5421 |   case 186: | 
| 5422 | #line 2990 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5423 |     { | 
| 5424 |         (yyval.expr) = (yyvsp[0].expr); | 
| 5425 |     } | 
| 5426 | #line 5378 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5427 |     break; | 
| 5428 |  | 
| 5429 |   case 187: | 
| 5430 | #line 2994 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5431 |     { | 
| 5432 |         if(!(yyvsp[0].qName).isNull()) | 
| 5433 |         { | 
| 5434 |             pushVariable(name: (yyvsp[0].qName), seqType: parseInfo->typeswitchSource.top()->staticType(), | 
| 5435 |                          expr: parseInfo->typeswitchSource.top(), | 
| 5436 |                          type: VariableDeclaration::ExpressionVariable, sourceLocator: (yyloc), parseInfo, checkSource: false); | 
| 5437 |         } | 
| 5438 |     } | 
| 5439 | #line 5391 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5440 |     break; | 
| 5441 |  | 
| 5442 |   case 188: | 
| 5443 | #line 3003 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5444 |     { | 
| 5445 |         if(!(yyvsp[-3].qName).isNull()) | 
| 5446 |             parseInfo->finalizePushedVariable(); | 
| 5447 |         (yyval.expr) = (yyvsp[0].expr); | 
| 5448 |     } | 
| 5449 | #line 5401 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5450 |     break; | 
| 5451 |  | 
| 5452 |   case 189: | 
| 5453 | #line 3010 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5454 |     { | 
| 5455 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5456 |         (yyval.expr) = create(expr: new IfThenClause((yyvsp[-5].expr), (yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5457 |     } | 
| 5458 | #line 5410 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5459 |     break; | 
| 5460 |  | 
| 5461 |   case 191: | 
| 5462 | #line 3017 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5463 |     { | 
| 5464 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5465 |         (yyval.expr) = create(expr: new OrExpression((yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5466 |     } | 
| 5467 | #line 5419 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5468 |     break; | 
| 5469 |  | 
| 5470 |   case 193: | 
| 5471 | #line 3024 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5472 |     { | 
| 5473 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5474 |         (yyval.expr) = create(expr: new AndExpression((yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5475 |     } | 
| 5476 | #line 5428 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5477 |     break; | 
| 5478 |  | 
| 5479 |   case 199: | 
| 5480 | #line 3036 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5481 |     { | 
| 5482 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5483 |         (yyval.expr) = create(expr: new RangeExpression((yyvsp[-2].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5484 |     } | 
| 5485 | #line 5437 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5486 |     break; | 
| 5487 |  | 
| 5488 |   case 201: | 
| 5489 | #line 3043 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5490 |     { | 
| 5491 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5492 |         (yyval.expr) = create(expr: new ArithmeticExpression((yyvsp[-2].expr), (yyvsp[-1].enums.mathOperator), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5493 |     } | 
| 5494 | #line 5446 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5495 |     break; | 
| 5496 |  | 
| 5497 |   case 202: | 
| 5498 | #line 3048 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5499 |     {(yyval.enums.mathOperator) = AtomicMathematician::Add;} | 
| 5500 | #line 5452 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5501 |     break; | 
| 5502 |  | 
| 5503 |   case 203: | 
| 5504 | #line 3049 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5505 |     {(yyval.enums.mathOperator) = AtomicMathematician::Substract;} | 
| 5506 | #line 5458 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5507 |     break; | 
| 5508 |  | 
| 5509 |   case 205: | 
| 5510 | #line 3053 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5511 |     { | 
| 5512 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5513 |         (yyval.expr) = create(expr: new ArithmeticExpression((yyvsp[-2].expr), (yyvsp[-1].enums.mathOperator), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5514 |     } | 
| 5515 | #line 5467 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5516 |     break; | 
| 5517 |  | 
| 5518 |   case 206: | 
| 5519 | #line 3058 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5520 |     {(yyval.enums.mathOperator) = AtomicMathematician::Multiply;} | 
| 5521 | #line 5473 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5522 |     break; | 
| 5523 |  | 
| 5524 |   case 207: | 
| 5525 | #line 3059 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5526 |     {(yyval.enums.mathOperator) = AtomicMathematician::Div;} | 
| 5527 | #line 5479 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5528 |     break; | 
| 5529 |  | 
| 5530 |   case 208: | 
| 5531 | #line 3060 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5532 |     {(yyval.enums.mathOperator) = AtomicMathematician::IDiv;} | 
| 5533 | #line 5485 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5534 |     break; | 
| 5535 |  | 
| 5536 |   case 209: | 
| 5537 | #line 3061 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5538 |     {(yyval.enums.mathOperator) = AtomicMathematician::Mod;} | 
| 5539 | #line 5491 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5540 |     break; | 
| 5541 |  | 
| 5542 |   case 211: | 
| 5543 | #line 3065 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5544 |     { | 
| 5545 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | 
| 5546 |                                  | QXmlQuery::XPath20 | 
| 5547 |                                  | QXmlQuery::XmlSchema11IdentityConstraintField | 
| 5548 |                                  | QXmlQuery::XmlSchema11IdentityConstraintSelector), | 
| 5549 |                   parseInfo, sourceLocator: (yyloc)); | 
| 5550 |         (yyval.expr) = create(expr: new CombineNodes((yyvsp[-2].expr), CombineNodes::Union, (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5551 |     } | 
| 5552 | #line 5504 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5553 |     break; | 
| 5554 |  | 
| 5555 |   case 213: | 
| 5556 | #line 3076 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5557 |     { | 
| 5558 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5559 |         (yyval.expr) = create(expr: new CombineNodes((yyvsp[-2].expr), (yyvsp[-1].enums.combinedNodeOp), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5560 |     } | 
| 5561 | #line 5513 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5562 |     break; | 
| 5563 |  | 
| 5564 |   case 216: | 
| 5565 | #line 3085 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5566 |     { | 
| 5567 |         (yyval.enums.combinedNodeOp) = CombineNodes::Intersect; | 
| 5568 |     } | 
| 5569 | #line 5521 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5570 |     break; | 
| 5571 |  | 
| 5572 |   case 217: | 
| 5573 | #line 3089 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5574 |     { | 
| 5575 |         (yyval.enums.combinedNodeOp) = CombineNodes::Except; | 
| 5576 |     } | 
| 5577 | #line 5529 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5578 |     break; | 
| 5579 |  | 
| 5580 |   case 219: | 
| 5581 | #line 3095 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5582 |     { | 
| 5583 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5584 |         (yyval.expr) = create(expr: new InstanceOf((yyvsp[-3].expr), | 
| 5585 |                     SequenceType::Ptr((yyvsp[0].sequenceType))), sourceLocator: (yyloc), parseInfo); | 
| 5586 |     } | 
| 5587 | #line 5539 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5588 |     break; | 
| 5589 |  | 
| 5590 |   case 221: | 
| 5591 | #line 3103 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5592 |     { | 
| 5593 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5594 |         (yyval.expr) = create(expr: new TreatAs((yyvsp[-3].expr), (yyvsp[0].sequenceType)), sourceLocator: (yyloc), parseInfo); | 
| 5595 |     } | 
| 5596 | #line 5548 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5597 |     break; | 
| 5598 |  | 
| 5599 |   case 223: | 
| 5600 | #line 3110 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5601 |     { | 
| 5602 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5603 |         (yyval.expr) = create(expr: new CastableAs((yyvsp[-3].expr), (yyvsp[0].sequenceType)), sourceLocator: (yyloc), parseInfo); | 
| 5604 |     } | 
| 5605 | #line 5557 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5606 |     break; | 
| 5607 |  | 
| 5608 |   case 225: | 
| 5609 | #line 3117 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5610 |     { | 
| 5611 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5612 |         (yyval.expr) = create(expr: new CastAs((yyvsp[-3].expr), (yyvsp[0].sequenceType)), sourceLocator: (yyloc), parseInfo); | 
| 5613 |     } | 
| 5614 | #line 5566 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5615 |     break; | 
| 5616 |  | 
| 5617 |   case 227: | 
| 5618 | #line 3124 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5619 |     { | 
| 5620 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5621 |         (yyval.expr) = create(expr: new UnaryExpression((yyvsp[-1].enums.mathOperator), (yyvsp[0].expr), parseInfo->staticContext), sourceLocator: (yyloc), parseInfo); | 
| 5622 |     } | 
| 5623 | #line 5575 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5624 |     break; | 
| 5625 |  | 
| 5626 |   case 228: | 
| 5627 | #line 3130 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5628 |     { | 
| 5629 |         (yyval.enums.mathOperator) = AtomicMathematician::Add; | 
| 5630 |     } | 
| 5631 | #line 5583 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5632 |     break; | 
| 5633 |  | 
| 5634 |   case 229: | 
| 5635 | #line 3134 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5636 |     { | 
| 5637 |         (yyval.enums.mathOperator) = AtomicMathematician::Substract; | 
| 5638 |     } | 
| 5639 | #line 5591 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5640 |     break; | 
| 5641 |  | 
| 5642 |   case 233: | 
| 5643 | #line 3143 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5644 |     { | 
| 5645 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 5646 |         (yyval.expr) = create(expr: new GeneralComparison((yyvsp[-2].expr), (yyvsp[-1].enums.valueOperator), (yyvsp[0].expr), parseInfo->isBackwardsCompat.top()), sourceLocator: (yyloc), parseInfo); | 
| 5647 |     } | 
| 5648 | #line 5600 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5649 |     break; | 
| 5650 |  | 
| 5651 |   case 234: | 
| 5652 | #line 3148 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5653 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorEqual;} | 
| 5654 | #line 5606 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5655 |     break; | 
| 5656 |  | 
| 5657 |   case 235: | 
| 5658 | #line 3149 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5659 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorNotEqual;} | 
| 5660 | #line 5612 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5661 |     break; | 
| 5662 |  | 
| 5663 |   case 236: | 
| 5664 | #line 3150 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5665 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterOrEqual;} | 
| 5666 | #line 5618 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5667 |     break; | 
| 5668 |  | 
| 5669 |   case 237: | 
| 5670 | #line 3151 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5671 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterThan;} | 
| 5672 | #line 5624 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5673 |     break; | 
| 5674 |  | 
| 5675 |   case 238: | 
| 5676 | #line 3152 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5677 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessOrEqual;} | 
| 5678 | #line 5630 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5679 |     break; | 
| 5680 |  | 
| 5681 |   case 239: | 
| 5682 | #line 3153 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5683 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessThan;} | 
| 5684 | #line 5636 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5685 |     break; | 
| 5686 |  | 
| 5687 |   case 240: | 
| 5688 | #line 3156 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5689 |     { | 
| 5690 |         (yyval.expr) = create(expr: new ValueComparison((yyvsp[-2].expr), (yyvsp[-1].enums.valueOperator), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5691 |     } | 
| 5692 | #line 5644 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5693 |     break; | 
| 5694 |  | 
| 5695 |   case 241: | 
| 5696 | #line 3160 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5697 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorEqual;} | 
| 5698 | #line 5650 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5699 |     break; | 
| 5700 |  | 
| 5701 |   case 242: | 
| 5702 | #line 3161 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5703 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorNotEqual;} | 
| 5704 | #line 5656 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5705 |     break; | 
| 5706 |  | 
| 5707 |   case 243: | 
| 5708 | #line 3162 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5709 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterOrEqual;} | 
| 5710 | #line 5662 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5711 |     break; | 
| 5712 |  | 
| 5713 |   case 244: | 
| 5714 | #line 3163 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5715 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorGreaterThan;} | 
| 5716 | #line 5668 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5717 |     break; | 
| 5718 |  | 
| 5719 |   case 245: | 
| 5720 | #line 3164 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5721 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessOrEqual;} | 
| 5722 | #line 5674 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5723 |     break; | 
| 5724 |  | 
| 5725 |   case 246: | 
| 5726 | #line 3165 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5727 |     {(yyval.enums.valueOperator) = AtomicComparator::OperatorLessThan;} | 
| 5728 | #line 5680 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5729 |     break; | 
| 5730 |  | 
| 5731 |   case 247: | 
| 5732 | #line 3168 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5733 |     { | 
| 5734 |         (yyval.expr) = create(expr: new NodeComparison((yyvsp[-2].expr), (yyvsp[-1].enums.nodeOperator), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5735 |     } | 
| 5736 | #line 5688 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5737 |     break; | 
| 5738 |  | 
| 5739 |   case 248: | 
| 5740 | #line 3172 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5741 |     {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Is;} | 
| 5742 | #line 5694 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5743 |     break; | 
| 5744 |  | 
| 5745 |   case 249: | 
| 5746 | #line 3173 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5747 |     {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Precedes;} | 
| 5748 | #line 5700 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5749 |     break; | 
| 5750 |  | 
| 5751 |   case 250: | 
| 5752 | #line 3174 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5753 |     {(yyval.enums.nodeOperator) = QXmlNodeModelIndex::Follows;} | 
| 5754 | #line 5706 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5755 |     break; | 
| 5756 |  | 
| 5757 |   case 251: | 
| 5758 | #line 3177 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5759 |     { | 
| 5760 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 5761 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The Schema Validation Feature is not supported. "  | 
| 5762 |                                                           "Hence, %1-expressions may not be used." ) | 
| 5763 |                                            .arg(a: formatKeyword(keyword: "validate" )), | 
| 5764 |                                         errorCode: ReportContext::XQST0075, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 5765 |         /* | 
| 5766 |         $$ = Validate::create($2, $1, parseInfo->staticContext); | 
| 5767 |         */ | 
| 5768 |     } | 
| 5769 | #line 5721 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5770 |     break; | 
| 5771 |  | 
| 5772 |   case 252: | 
| 5773 | #line 3190 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5774 |     {(yyval.enums.validationMode) = Validate::Strict;} | 
| 5775 | #line 5727 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5776 |     break; | 
| 5777 |  | 
| 5778 |   case 253: | 
| 5779 | #line 3191 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5780 |     {(yyval.enums.validationMode) = Validate::Strict;} | 
| 5781 | #line 5733 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5782 |     break; | 
| 5783 |  | 
| 5784 |   case 254: | 
| 5785 | #line 3192 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5786 |     {(yyval.enums.validationMode) = Validate::Lax;} | 
| 5787 | #line 5739 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5788 |     break; | 
| 5789 |  | 
| 5790 |   case 255: | 
| 5791 | #line 3195 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5792 |     { | 
| 5793 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 5794 |         /* We don't support any pragmas, so we only do the | 
| 5795 |          * necessary validation and use the fallback expression. */ | 
| 5796 |  | 
| 5797 |         if((yyvsp[0].expr)) | 
| 5798 |             (yyval.expr) = (yyvsp[0].expr); | 
| 5799 |         else | 
| 5800 |         { | 
| 5801 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "None of the pragma expressions are supported. "  | 
| 5802 |                                                "Therefore, a fallback expression "  | 
| 5803 |                                                "must be present" ), | 
| 5804 |                                             errorCode: ReportContext::XQST0079, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 5805 |         } | 
| 5806 |     } | 
| 5807 | #line 5759 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5808 |     break; | 
| 5809 |  | 
| 5810 |   case 256: | 
| 5811 | #line 3212 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5812 |     { | 
| 5813 |         (yyval.expr).reset(); | 
| 5814 |     } | 
| 5815 | #line 5767 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5816 |     break; | 
| 5817 |  | 
| 5818 |   case 257: | 
| 5819 | #line 3216 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5820 |     { | 
| 5821 |         (yyval.expr) = (yyvsp[-1].expr); | 
| 5822 |     } | 
| 5823 | #line 5775 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5824 |     break; | 
| 5825 |  | 
| 5826 |   case 260: | 
| 5827 | #line 3224 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5828 |     { | 
| 5829 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 5830 |     } | 
| 5831 | #line 5783 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5832 |     break; | 
| 5833 |  | 
| 5834 |   case 263: | 
| 5835 | #line 3232 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5836 |     { | 
| 5837 |         /* This is "/step". That is, fn:root(self::node()) treat as document-node()/RelativePathExpr. */ | 
| 5838 |         (yyval.expr) = create(expr: new Path(createRootExpression(parseInfo, sl: (yyloc)), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5839 |     } | 
| 5840 | #line 5792 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5841 |     break; | 
| 5842 |  | 
| 5843 |   case 264: | 
| 5844 | #line 3238 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5845 |     { | 
| 5846 |         (yyval.expr) = createSlashSlashPath(begin: createRootExpression(parseInfo, sl: (yyloc)), end: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo); | 
| 5847 |     } | 
| 5848 | #line 5800 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5849 |     break; | 
| 5850 |  | 
| 5851 |   case 265: | 
| 5852 | #line 3242 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5853 |     { | 
| 5854 |         /* This is "/". That is, fn:root(self::node()) treat as document-node(). */ | 
| 5855 |         (yyval.expr) = createRootExpression(parseInfo, sl: (yyloc)); | 
| 5856 |     } | 
| 5857 | #line 5809 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5858 |     break; | 
| 5859 |  | 
| 5860 |   case 268: | 
| 5861 | #line 3252 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5862 |     { | 
| 5863 |         (yyval.expr) = create(expr: new Path((yyvsp[-2].expr), (yyvsp[0].expr), (yyvsp[-1].enums.pathKind)), sourceLocator: (yyloc), parseInfo); | 
| 5864 |     } | 
| 5865 | #line 5817 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5866 |     break; | 
| 5867 |  | 
| 5868 |   case 269: | 
| 5869 | #line 3256 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5870 |     { | 
| 5871 |         const Expression::Ptr orderBy(createReturnOrderBy(orderSpecTransfer: (yyvsp[-3].orderSpecs), returnExpr: (yyvsp[-1].expr), stability: parseInfo->orderStability.pop(), sourceLocator: (yyloc), parseInfo)); | 
| 5872 |  | 
| 5873 |         ReturnOrderBy *const rob = orderBy->as<ReturnOrderBy>(); | 
| 5874 |         const Expression::Ptr path(create(expr: new Path((yyvsp[-6].expr), orderBy, (yyvsp[-5].enums.pathKind)), sourceLocator: (yyloc), parseInfo)); | 
| 5875 |  | 
| 5876 |         (yyval.expr) = create(expr: new OrderBy(rob->stability(), rob->orderSpecs(), path, rob), sourceLocator: (yyloc), parseInfo); | 
| 5877 |     } | 
| 5878 | #line 5830 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5879 |     break; | 
| 5880 |  | 
| 5881 |   case 270: | 
| 5882 | #line 3265 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5883 |     { | 
| 5884 |         (yyval.expr) = createSlashSlashPath(begin: (yyvsp[-2].expr), end: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo); | 
| 5885 |     } | 
| 5886 | #line 5838 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5887 |     break; | 
| 5888 |  | 
| 5889 |   case 271: | 
| 5890 | #line 3270 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5891 |     { | 
| 5892 |         (yyval.expr) = NodeSortExpression::wrapAround(operand: (yyvsp[0].expr), context: parseInfo->staticContext); | 
| 5893 |     } | 
| 5894 | #line 5846 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5895 |     break; | 
| 5896 |  | 
| 5897 |   case 273: | 
| 5898 | #line 3275 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5899 |     { | 
| 5900 |         (yyval.expr) = create(expr: new CurrentItemStore((yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5901 |     } | 
| 5902 | #line 5854 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5903 |     break; | 
| 5904 |  | 
| 5905 |   case 274: | 
| 5906 | #line 3279 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5907 |     { | 
| 5908 |         const xsDouble version = (yyvsp[0].sval).toDouble(); | 
| 5909 |  | 
| 5910 |         parseInfo->isBackwardsCompat.push(t: version != 2); | 
| 5911 |  | 
| 5912 |         (yyval.enums.Double) = version; | 
| 5913 |     } | 
| 5914 | #line 5866 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5915 |     break; | 
| 5916 |  | 
| 5917 |   case 275: | 
| 5918 | #line 3287 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5919 |     { | 
| 5920 |         if((yyvsp[-1].enums.Double) < 2) | 
| 5921 |             (yyval.expr) = createCompatStore(expr: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo); | 
| 5922 |         else | 
| 5923 |             (yyval.expr) = (yyvsp[0].expr); | 
| 5924 |     } | 
| 5925 | #line 5877 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5926 |     break; | 
| 5927 |  | 
| 5928 |   case 276: | 
| 5929 | #line 3294 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5930 |     { | 
| 5931 |     allowedIn(allowedLanguages: QXmlQuery::XSLT20, parseInfo, sourceLocator: (yyloc)); | 
| 5932 |     Q_ASSERT(!(yyvsp[-3].sval).isEmpty()); | 
| 5933 |     (yyval.expr) = create(expr: new StaticBaseURIStore((yyvsp[-3].sval), (yyvsp[-1].expr)), sourceLocator: (yyloc), parseInfo); | 
| 5934 | } | 
| 5935 | #line 5887 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5936 |     break; | 
| 5937 |  | 
| 5938 |   case 277: | 
| 5939 | #line 3301 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5940 |     { | 
| 5941 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20), parseInfo, sourceLocator: (yyloc)); | 
| 5942 |         parseInfo->resolvers.push(t: parseInfo->staticContext->namespaceBindings()); | 
| 5943 |         const NamespaceResolver::Ptr resolver(new DelegatingNamespaceResolver(parseInfo->staticContext->namespaceBindings())); | 
| 5944 |         resolver->addBinding(nb: QXmlName(parseInfo->staticContext->namePool()->allocateNamespace(uri: (yyvsp[-1].sval)), | 
| 5945 |                                       StandardLocalNames::empty, | 
| 5946 |                                       parseInfo->staticContext->namePool()->allocatePrefix(prefix: (yyvsp[-3].sval)))); | 
| 5947 |         parseInfo->staticContext->setNamespaceBindings(resolver); | 
| 5948 |     } | 
| 5949 | #line 5901 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5950 |     break; | 
| 5951 |  | 
| 5952 |   case 278: | 
| 5953 | #line 3312 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5954 |     { | 
| 5955 |         parseInfo->staticContext->setNamespaceBindings(parseInfo->resolvers.pop()); | 
| 5956 |         (yyval.expr) = (yyvsp[-1].expr); | 
| 5957 |     } | 
| 5958 | #line 5910 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5959 |     break; | 
| 5960 |  | 
| 5961 |   case 279: | 
| 5962 | #line 3317 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5963 |     { | 
| 5964 |         (yyval.expr) = create(expr: new CallTemplate((yyvsp[-3].qName), parseInfo->templateWithParams), sourceLocator: (yyloc), parseInfo); | 
| 5965 |         parseInfo->templateWithParametersHandled(); | 
| 5966 |         parseInfo->templateCalls.append(t: (yyval.expr)); | 
| 5967 |     } | 
| 5968 | #line 5920 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5969 |     break; | 
| 5970 |  | 
| 5971 |   case 280: | 
| 5972 | #line 3324 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5973 |     { | 
| 5974 |         parseInfo->startParsingWithParam(); | 
| 5975 |     } | 
| 5976 | #line 5928 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5977 |     break; | 
| 5978 |  | 
| 5979 |   case 281: | 
| 5980 | #line 3328 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5981 |     { | 
| 5982 |         parseInfo->endParsingWithParam(); | 
| 5983 |     } | 
| 5984 | #line 5936 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5985 |     break; | 
| 5986 |  | 
| 5987 |   case 282: | 
| 5988 | #line 3333 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5989 |     { | 
| 5990 |     } | 
| 5991 | #line 5943 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5992 |     break; | 
| 5993 |  | 
| 5994 |   case 283: | 
| 5995 | #line 3336 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 5996 |     { | 
| 5997 |     } | 
| 5998 | #line 5950 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 5999 |     break; | 
| 6000 |  | 
| 6001 |   case 284: | 
| 6002 | #line 3339 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6003 |     { | 
| 6004 |     } | 
| 6005 | #line 5957 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6006 |     break; | 
| 6007 |  | 
| 6008 |   case 285: | 
| 6009 | #line 3343 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6010 |     { | 
| 6011 |     } | 
| 6012 | #line 5964 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6013 |     break; | 
| 6014 |  | 
| 6015 |   case 286: | 
| 6016 | #line 3346 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6017 |     { | 
| 6018 |     } | 
| 6019 | #line 5971 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6020 |     break; | 
| 6021 |  | 
| 6022 |   case 287: | 
| 6023 | #line 3350 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6024 |     { | 
| 6025 |         /* Note, this grammar rule is invoked for @c xsl:param @em and @c | 
| 6026 |          * xsl:with-param. */ | 
| 6027 |         const bool isParsingWithParam = parseInfo->isParsingWithParam(); | 
| 6028 |  | 
| 6029 |         /** | 
| 6030 |          * @c xsl:param doesn't make life easy: | 
| 6031 |          * | 
| 6032 |          * If it only has @c name, it's default value is an empty | 
| 6033 |          * string(hence has type @c xs:string), but the value that | 
| 6034 |          * (maybe) is supplied can be anything, typically a node. | 
| 6035 |          * | 
| 6036 |          * Therefore, for that very common case we can't rely on | 
| 6037 |          * the Expression's type, but have to force it to item()*. | 
| 6038 |          * | 
| 6039 |          * So if we're supplied the type item()*, we pass a null | 
| 6040 |          * SequenceType. TemplateParameterReference recognizes this | 
| 6041 |          * and has item()* as its static type, regardless of if the | 
| 6042 |          * expression has a more specific type. | 
| 6043 |          */ | 
| 6044 |         SequenceType::Ptr type; | 
| 6045 |  | 
| 6046 |         if(!(yyvsp[-1].sequenceType)->is(other: CommonSequenceTypes::ZeroOrMoreItems)) | 
| 6047 |             type = (yyvsp[-1].sequenceType); | 
| 6048 |  | 
| 6049 |         Expression::Ptr expr; | 
| 6050 |  | 
| 6051 |         /* The default value is an empty sequence. */ | 
| 6052 |         if(!(yyvsp[0].expr) && ((type && (yyvsp[-1].sequenceType)->cardinality().allowsEmpty()) | 
| 6053 |                    || isParsingWithParam)) | 
| 6054 |             expr = create(expr: new EmptySequence, sourceLocator: (yyloc), parseInfo); | 
| 6055 |         else | 
| 6056 |             expr = (yyvsp[0].expr); | 
| 6057 |  | 
| 6058 |         /* We ensure we have some type, so CallTemplate, Template and friends | 
| 6059 |          * are happy. */ | 
| 6060 |         if(!isParsingWithParam && !type) | 
| 6061 |             type = CommonSequenceTypes::ZeroOrMoreItems; | 
| 6062 |  | 
| 6063 |         if((yyvsp[-4].enums.Bool)) | 
| 6064 |             /* TODO, handle tunnel parameters. */; | 
| 6065 |         else | 
| 6066 |         { | 
| 6067 |             if((!isParsingWithParam && VariableDeclaration::contains(list: parseInfo->templateParameters, lookup: (yyvsp[-2].qName))) || | 
| 6068 |                (isParsingWithParam && parseInfo->templateWithParams.contains(akey: (yyvsp[-2].qName)))) | 
| 6069 |             { | 
| 6070 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Each name of a template parameter must be unique; %1 is duplicated." ) | 
| 6071 |                                                                  .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-2].qName))), | 
| 6072 |                                                 errorCode: isParsingWithParam ? ReportContext::XTSE0670 : ReportContext::XTSE0580, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6073 |             } | 
| 6074 |             else | 
| 6075 |             { | 
| 6076 |                 if(isParsingWithParam) | 
| 6077 |                     parseInfo->templateWithParams[(yyvsp[-2].qName)] = WithParam::Ptr(new WithParam((yyvsp[-2].qName), (yyvsp[-1].sequenceType), expr)); | 
| 6078 |                 else | 
| 6079 |                 { | 
| 6080 |                     Q_ASSERT(type); | 
| 6081 |                     pushVariable(name: (yyvsp[-2].qName), seqType: type, expr, type: VariableDeclaration::TemplateParameter, sourceLocator: (yyloc), parseInfo); | 
| 6082 |                     parseInfo->templateParameters.append(t: parseInfo->variables.top()); | 
| 6083 |                 } | 
| 6084 |             } | 
| 6085 |         } | 
| 6086 |     } | 
| 6087 | #line 6039 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6088 |     break; | 
| 6089 |  | 
| 6090 |   case 288: | 
| 6091 | #line 3415 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6092 |     { | 
| 6093 |         (yyval.enums.Bool) = false; | 
| 6094 |     } | 
| 6095 | #line 6047 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6096 |     break; | 
| 6097 |  | 
| 6098 |   case 289: | 
| 6099 | #line 3419 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6100 |     { | 
| 6101 |         (yyval.enums.Bool) = true; | 
| 6102 |     } | 
| 6103 | #line 6055 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6104 |     break; | 
| 6105 |  | 
| 6106 |   case 290: | 
| 6107 | #line 3424 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6108 |     { | 
| 6109 |         (yyval.expr) = Expression::Ptr(); | 
| 6110 |     } | 
| 6111 | #line 6063 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6112 |     break; | 
| 6113 |  | 
| 6114 |   case 291: | 
| 6115 | #line 3428 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6116 |     { | 
| 6117 |         (yyval.expr) = (yyvsp[0].expr); | 
| 6118 |     } | 
| 6119 | #line 6071 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6120 |     break; | 
| 6121 |  | 
| 6122 |   case 292: | 
| 6123 | #line 3437 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6124 |     { | 
| 6125 |         (yyval.enums.pathKind) = Path::RegularPath; | 
| 6126 |     } | 
| 6127 | #line 6079 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6128 |     break; | 
| 6129 |  | 
| 6130 |   case 293: | 
| 6131 | #line 3441 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6132 |     { | 
| 6133 |         (yyval.enums.pathKind) = Path::XSLTForEach; | 
| 6134 |     } | 
| 6135 | #line 6087 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6136 |     break; | 
| 6137 |  | 
| 6138 |   case 294: | 
| 6139 | #line 3445 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6140 |     { | 
| 6141 |         (yyval.enums.pathKind) = Path::ForApplyTemplate; | 
| 6142 |     } | 
| 6143 | #line 6095 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6144 |     break; | 
| 6145 |  | 
| 6146 |   case 296: | 
| 6147 | #line 3451 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6148 |     { | 
| 6149 |         (yyval.expr) = create(expr: GenericPredicate::create(sourceExpression: (yyvsp[-3].expr), predicateExpression: (yyvsp[-1].expr), context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 6150 |     } | 
| 6151 | #line 6103 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6152 |     break; | 
| 6153 |  | 
| 6154 |   case 299: | 
| 6155 | #line 3459 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6156 |     { | 
| 6157 |                 if((yyvsp[0].enums.axis) == QXmlNodeModelIndex::AxisAttribute) | 
| 6158 |                     parseInfo->nodeTestSource = BuiltinTypes::attribute; | 
| 6159 |              } | 
| 6160 | #line 6112 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6161 |     break; | 
| 6162 |  | 
| 6163 |   case 300: | 
| 6164 | #line 3464 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6165 |     { | 
| 6166 |         if((yyvsp[0].itemType)) | 
| 6167 |         { | 
| 6168 |             /* A node test was explicitly specified. The un-abbreviated syntax was used. */ | 
| 6169 |             (yyval.expr) = create(expr: new AxisStep((yyvsp[-2].enums.axis), (yyvsp[0].itemType)), sourceLocator: (yyloc), parseInfo); | 
| 6170 |         } | 
| 6171 |         else | 
| 6172 |         { | 
| 6173 |             /* Quote from 3.2.1.1 Axes | 
| 6174 |              * | 
| 6175 |              * [Definition: Every axis has a principal node kind. If an axis | 
| 6176 |              *  can contain elements, then the principal node kind is element; | 
| 6177 |              *  otherwise, it is the kind of nodes that the axis can contain.] Thus: | 
| 6178 |              * - For the attribute axis, the principal node kind is attribute. | 
| 6179 |              * - For all other axes, the principal node kind is element. */ | 
| 6180 |  | 
| 6181 |             if((yyvsp[-2].enums.axis) == QXmlNodeModelIndex::AxisAttribute) | 
| 6182 |                 (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisAttribute, BuiltinTypes::attribute), sourceLocator: (yyloc), parseInfo); | 
| 6183 |             else | 
| 6184 |                 (yyval.expr) = create(expr: new AxisStep((yyvsp[-2].enums.axis), BuiltinTypes::element), sourceLocator: (yyloc), parseInfo); | 
| 6185 |         } | 
| 6186 |  | 
| 6187 |         parseInfo->restoreNodeTestSource(); | 
| 6188 |     } | 
| 6189 | #line 6141 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6190 |     break; | 
| 6191 |  | 
| 6192 |   case 304: | 
| 6193 | #line 3494 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6194 |     { | 
| 6195 |         if((yyvsp[-1].enums.axis) == QXmlNodeModelIndex::AxisNamespace) | 
| 6196 |         { | 
| 6197 |             /* We don't raise XPST0010 here because the namespace axis isn't an optional | 
| 6198 |              * axis. It simply is not part of the XQuery grammar. */ | 
| 6199 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The %1-axis is unsupported in XQuery" ) | 
| 6200 |                                                .arg(a: formatKeyword(keyword: "namespace" )), | 
| 6201 |                                             errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6202 |         } | 
| 6203 |         else | 
| 6204 |             (yyval.enums.axis) = (yyvsp[-1].enums.axis); | 
| 6205 |  | 
| 6206 |         switch((yyvsp[-1].enums.axis)) | 
| 6207 |         { | 
| 6208 |             case QXmlNodeModelIndex::AxisAttribute: | 
| 6209 |             { | 
| 6210 |                 allowedIn(allowedLanguages: QueryLanguages(  QXmlQuery::XPath20 | 
| 6211 |                                          | QXmlQuery::XQuery10 | 
| 6212 |                                          | QXmlQuery::XmlSchema11IdentityConstraintField | 
| 6213 |                                          | QXmlQuery::XSLT20), | 
| 6214 |                           parseInfo, sourceLocator: (yyloc)); | 
| 6215 |                 break; | 
| 6216 |             } | 
| 6217 |             case QXmlNodeModelIndex::AxisChild: | 
| 6218 |             { | 
| 6219 |                 allowedIn(allowedLanguages: QueryLanguages(  QXmlQuery::XPath20 | 
| 6220 |                                          | QXmlQuery::XQuery10 | 
| 6221 |                                          | QXmlQuery::XmlSchema11IdentityConstraintField | 
| 6222 |                                          | QXmlQuery::XmlSchema11IdentityConstraintSelector | 
| 6223 |                                          | QXmlQuery::XSLT20), | 
| 6224 |                           parseInfo, sourceLocator: (yyloc)); | 
| 6225 |                 break; | 
| 6226 |             } | 
| 6227 |             default: | 
| 6228 |             { | 
| 6229 |                 allowedIn(allowedLanguages: QueryLanguages(  QXmlQuery::XPath20 | 
| 6230 |                                          | QXmlQuery::XQuery10 | 
| 6231 |                                          | QXmlQuery::XSLT20), | 
| 6232 |                           parseInfo, sourceLocator: (yyloc)); | 
| 6233 |             } | 
| 6234 |         } | 
| 6235 |     } | 
| 6236 | #line 6188 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6237 |     break; | 
| 6238 |  | 
| 6239 |   case 305: | 
| 6240 | #line 3537 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6241 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAncestorOrSelf  ;} | 
| 6242 | #line 6194 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6243 |     break; | 
| 6244 |  | 
| 6245 |   case 306: | 
| 6246 | #line 3538 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6247 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAncestor        ;} | 
| 6248 | #line 6200 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6249 |     break; | 
| 6250 |  | 
| 6251 |   case 307: | 
| 6252 | #line 3539 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6253 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisAttribute       ;} | 
| 6254 | #line 6206 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6255 |     break; | 
| 6256 |  | 
| 6257 |   case 308: | 
| 6258 | #line 3540 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6259 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisChild           ;} | 
| 6260 | #line 6212 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6261 |     break; | 
| 6262 |  | 
| 6263 |   case 309: | 
| 6264 | #line 3541 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6265 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisDescendantOrSelf;} | 
| 6266 | #line 6218 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6267 |     break; | 
| 6268 |  | 
| 6269 |   case 310: | 
| 6270 | #line 3542 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6271 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisDescendant      ;} | 
| 6272 | #line 6224 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6273 |     break; | 
| 6274 |  | 
| 6275 |   case 311: | 
| 6276 | #line 3543 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6277 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisFollowing       ;} | 
| 6278 | #line 6230 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6279 |     break; | 
| 6280 |  | 
| 6281 |   case 312: | 
| 6282 | #line 3544 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6283 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisPreceding       ;} | 
| 6284 | #line 6236 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6285 |     break; | 
| 6286 |  | 
| 6287 |   case 313: | 
| 6288 | #line 3545 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6289 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisFollowingSibling;} | 
| 6290 | #line 6242 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6291 |     break; | 
| 6292 |  | 
| 6293 |   case 314: | 
| 6294 | #line 3546 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6295 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisPrecedingSibling;} | 
| 6296 | #line 6248 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6297 |     break; | 
| 6298 |  | 
| 6299 |   case 315: | 
| 6300 | #line 3547 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6301 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisParent          ;} | 
| 6302 | #line 6254 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6303 |     break; | 
| 6304 |  | 
| 6305 |   case 316: | 
| 6306 | #line 3548 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6307 |     {(yyval.enums.axis) = QXmlNodeModelIndex::AxisSelf            ;} | 
| 6308 | #line 6260 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6309 |     break; | 
| 6310 |  | 
| 6311 |   case 317: | 
| 6312 | #line 3551 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6313 |     { | 
| 6314 |                         parseInfo->nodeTestSource = BuiltinTypes::attribute; | 
| 6315 |                    } | 
| 6316 | #line 6268 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6317 |     break; | 
| 6318 |  | 
| 6319 |   case 318: | 
| 6320 | #line 3555 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6321 |     { | 
| 6322 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XSLT20 | QXmlQuery::XmlSchema11IdentityConstraintField), parseInfo, sourceLocator: (yyloc)); | 
| 6323 |         (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisAttribute, (yyvsp[0].itemType)), sourceLocator: (yyloc), parseInfo); | 
| 6324 |  | 
| 6325 |         parseInfo->restoreNodeTestSource(); | 
| 6326 |     } | 
| 6327 | #line 6279 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6328 |     break; | 
| 6329 |  | 
| 6330 |   case 319: | 
| 6331 | #line 3562 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6332 |     { | 
| 6333 |         ItemType::Ptr nodeTest; | 
| 6334 |  | 
| 6335 |         if(parseInfo->isParsingPattern && *(yyvsp[0].itemType) == *BuiltinTypes::node) | 
| 6336 |             nodeTest = BuiltinTypes::xsltNodeTest; | 
| 6337 |         else | 
| 6338 |             nodeTest = (yyvsp[0].itemType); | 
| 6339 |  | 
| 6340 |         (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisChild, nodeTest), sourceLocator: (yyloc), parseInfo); | 
| 6341 |     } | 
| 6342 | #line 6294 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6343 |     break; | 
| 6344 |  | 
| 6345 |   case 320: | 
| 6346 | #line 3573 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6347 |     { | 
| 6348 |         (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisAttribute, (yyvsp[0].itemType)), sourceLocator: (yyloc), parseInfo); | 
| 6349 |     } | 
| 6350 | #line 6302 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6351 |     break; | 
| 6352 |  | 
| 6353 |   case 322: | 
| 6354 | #line 3580 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6355 |     { | 
| 6356 |         (yyval.expr) = create(expr: new AxisStep(QXmlNodeModelIndex::AxisParent, BuiltinTypes::node), sourceLocator: (yyloc), parseInfo); | 
| 6357 |     } | 
| 6358 | #line 6310 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6359 |     break; | 
| 6360 |  | 
| 6361 |   case 324: | 
| 6362 | #line 3586 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6363 |     { | 
| 6364 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6365 |     } | 
| 6366 | #line 6318 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6367 |     break; | 
| 6368 |  | 
| 6369 |   case 325: | 
| 6370 | #line 3591 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6371 |     { | 
| 6372 |         (yyval.itemType) = QNameTest::create(primaryType: parseInfo->nodeTestSource, qName: (yyvsp[0].qName)); | 
| 6373 |     } | 
| 6374 | #line 6326 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6375 |     break; | 
| 6376 |  | 
| 6377 |   case 327: | 
| 6378 | #line 3597 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6379 |     { | 
| 6380 |         (yyval.itemType) = parseInfo->nodeTestSource; | 
| 6381 |     } | 
| 6382 | #line 6334 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6383 |     break; | 
| 6384 |  | 
| 6385 |   case 328: | 
| 6386 | #line 3601 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6387 |     { | 
| 6388 |         const NamePool::Ptr np(parseInfo->staticContext->namePool()); | 
| 6389 |         const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 6390 |  | 
| 6391 |         const QXmlName::NamespaceCode ns(QNameConstructor::namespaceForPrefix(prefix: np->allocatePrefix(prefix: (yyvsp[0].sval)), context: parseInfo->staticContext, r: &ryy)); | 
| 6392 |  | 
| 6393 |         (yyval.itemType) = NamespaceNameTest::create(primaryType: parseInfo->nodeTestSource, namespaceURI: ns); | 
| 6394 |     } | 
| 6395 | #line 6347 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6396 |     break; | 
| 6397 |  | 
| 6398 |   case 329: | 
| 6399 | #line 3610 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6400 |     { | 
| 6401 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6402 |         const QXmlName::LocalNameCode c = parseInfo->staticContext->namePool()->allocateLocalName(ln: (yyvsp[0].sval)); | 
| 6403 |         (yyval.itemType) = LocalNameTest::create(primaryType: parseInfo->nodeTestSource, localName: c); | 
| 6404 |     } | 
| 6405 | #line 6357 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6406 |     break; | 
| 6407 |  | 
| 6408 |   case 331: | 
| 6409 | #line 3618 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6410 |     { | 
| 6411 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6412 |         (yyval.expr) = create(expr: GenericPredicate::create(sourceExpression: (yyvsp[-3].expr), predicateExpression: (yyvsp[-1].expr), context: parseInfo->staticContext, location: fromYYLTYPE(sourceLocator: (yylsp[0]), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 6413 |     } | 
| 6414 | #line 6366 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6415 |     break; | 
| 6416 |  | 
| 6417 |   case 339: | 
| 6418 | #line 3631 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6419 |     { | 
| 6420 |         (yyval.expr) = create(expr: new ApplyTemplate(parseInfo->modeFor(modeName: (yyvsp[-3].qName)), | 
| 6421 |                                       parseInfo->templateWithParams, | 
| 6422 |                                       parseInfo->modeFor(modeName: QXmlName(StandardNamespaces::InternalXSLT, | 
| 6423 |                                                                   StandardLocalNames::Default))), | 
| 6424 |                     sourceLocator: (yylsp[-4]), parseInfo); | 
| 6425 |         parseInfo->templateWithParametersHandled(); | 
| 6426 |     } | 
| 6427 | #line 6379 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6428 |     break; | 
| 6429 |  | 
| 6430 |   case 341: | 
| 6431 | #line 3642 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6432 |     { | 
| 6433 |         (yyval.expr) = create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo); | 
| 6434 |     } | 
| 6435 | #line 6387 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6436 |     break; | 
| 6437 |  | 
| 6438 |   case 342: | 
| 6439 | #line 3647 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6440 |     { | 
| 6441 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6442 |         (yyval.expr) = createNumericLiteral<Double>(in: (yyvsp[0].sval), sl: (yyloc), parseInfo); | 
| 6443 |     } | 
| 6444 | #line 6396 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6445 |     break; | 
| 6446 |  | 
| 6447 |   case 343: | 
| 6448 | #line 3652 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6449 |     { | 
| 6450 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6451 |         (yyval.expr) = createNumericLiteral<Numeric>(in: (yyvsp[0].sval), sl: (yyloc), parseInfo); | 
| 6452 |     } | 
| 6453 | #line 6405 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6454 |     break; | 
| 6455 |  | 
| 6456 |   case 344: | 
| 6457 | #line 3658 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6458 |     { | 
| 6459 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6460 |         (yyval.expr) = resolveVariable(name: (yyvsp[0].qName), sourceLocator: (yyloc), parseInfo, raiseErrorOnUnavailability: false); | 
| 6461 |     } | 
| 6462 | #line 6414 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6463 |     break; | 
| 6464 |  | 
| 6465 |   case 345: | 
| 6466 | #line 3664 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6467 |     { | 
| 6468 |         /* See: http://www.w3.org/TR/xpath20/#id-variables */ | 
| 6469 |         (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: QString(), localName: (yyvsp[0].sval)); | 
| 6470 |     } | 
| 6471 | #line 6423 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6472 |     break; | 
| 6473 |  | 
| 6474 |   case 346: | 
| 6475 | #line 3669 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6476 |     { | 
| 6477 |         (yyval.qName) = (yyvsp[0].qName); | 
| 6478 |     } | 
| 6479 | #line 6431 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6480 |     break; | 
| 6481 |  | 
| 6482 |   case 347: | 
| 6483 | #line 3674 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6484 |     { | 
| 6485 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6486 |         (yyval.expr) = (yyvsp[-1].expr); | 
| 6487 |     } | 
| 6488 | #line 6440 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6489 |     break; | 
| 6490 |  | 
| 6491 |   case 348: | 
| 6492 | #line 3679 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6493 |     { | 
| 6494 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6495 |         (yyval.expr) = create(expr: new EmptySequence, sourceLocator: (yyloc), parseInfo); | 
| 6496 |     } | 
| 6497 | #line 6449 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6498 |     break; | 
| 6499 |  | 
| 6500 |   case 349: | 
| 6501 | #line 3685 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6502 |     { | 
| 6503 |         (yyval.expr) = create(expr: new ContextItem(), sourceLocator: (yyloc), parseInfo); | 
| 6504 |     } | 
| 6505 | #line 6457 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6506 |     break; | 
| 6507 |  | 
| 6508 |   case 350: | 
| 6509 | #line 3690 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6510 |     { | 
| 6511 |         (yyval.expr) = (yyvsp[0].expr); | 
| 6512 |     } | 
| 6513 | #line 6465 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6514 |     break; | 
| 6515 |  | 
| 6516 |   case 351: | 
| 6517 | #line 3695 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6518 |     { | 
| 6519 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 6520 |         if(XPathHelper::isReservedNamespace(ns: (yyvsp[-3].qName).namespaceURI()) || (yyvsp[-3].qName).namespaceURI() == StandardNamespaces::InternalXSLT) | 
| 6521 |         { /* We got a call to a builtin function. */ | 
| 6522 |             const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 6523 |  | 
| 6524 |             const Expression::Ptr | 
| 6525 |                 func(parseInfo->staticContext-> | 
| 6526 |                 functionSignatures()->createFunctionCall(name: (yyvsp[-3].qName), arguments: (yyvsp[-1].expressionList), context: parseInfo->staticContext, r: &ryy)); | 
| 6527 |  | 
| 6528 |             if(func) | 
| 6529 |                 (yyval.expr) = create(expr: func, sourceLocator: (yyloc), parseInfo); | 
| 6530 |             else | 
| 6531 |             { | 
| 6532 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "No function with name %1 is available." ) | 
| 6533 |                                                    .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-3].qName))), | 
| 6534 |                                                 errorCode: ReportContext::XPST0017, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6535 |             } | 
| 6536 |         } | 
| 6537 |         else /* It's a call to a function created with 'declare function'.*/ | 
| 6538 |         { | 
| 6539 |             (yyval.expr) = create(expr: new UserFunctionCallsite((yyvsp[-3].qName), (yyvsp[-1].expressionList).count()), sourceLocator: (yyloc), parseInfo); | 
| 6540 |  | 
| 6541 |             (yyval.expr)->setOperands((yyvsp[-1].expressionList)); | 
| 6542 |             parseInfo->userFunctionCallsites.append(t: (yyval.expr)); | 
| 6543 |         } | 
| 6544 |     } | 
| 6545 | #line 6497 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6546 |     break; | 
| 6547 |  | 
| 6548 |   case 352: | 
| 6549 | #line 3724 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6550 |     { | 
| 6551 |         (yyval.expressionList) = Expression::List(); | 
| 6552 |     } | 
| 6553 | #line 6505 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6554 |     break; | 
| 6555 |  | 
| 6556 |   case 353: | 
| 6557 | #line 3729 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6558 |     { | 
| 6559 |         Expression::List list; | 
| 6560 |         list.append(t: (yyvsp[0].expr)); | 
| 6561 |         (yyval.expressionList) = list; | 
| 6562 |     } | 
| 6563 | #line 6515 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6564 |     break; | 
| 6565 |  | 
| 6566 |   case 355: | 
| 6567 | #line 3738 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6568 |     { | 
| 6569 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc)); | 
| 6570 |     } | 
| 6571 | #line 6523 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6572 |     break; | 
| 6573 |  | 
| 6574 |   case 360: | 
| 6575 | #line 3782 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6576 |     { | 
| 6577 |                         (yyval.enums.tokenizerPosition) = parseInfo->tokenizer->commenceScanOnly(); | 
| 6578 |                         parseInfo->scanOnlyStack.push(t: true); | 
| 6579 |                     } | 
| 6580 | #line 6532 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6581 |     break; | 
| 6582 |  | 
| 6583 |   case 361: | 
| 6584 | #line 3791 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6585 |     { | 
| 6586 |                         ++parseInfo->elementConstructorDepth; | 
| 6587 |                         Expression::List constructors; | 
| 6588 |  | 
| 6589 |                         parseInfo->resolvers.push(t: parseInfo->staticContext->namespaceBindings()); | 
| 6590 |  | 
| 6591 |                         /* Fix up attributes and namespace declarations. */ | 
| 6592 |                         const NamespaceResolver::Ptr resolver(new DelegatingNamespaceResolver(parseInfo->staticContext->namespaceBindings())); | 
| 6593 |                         const NamePool::Ptr namePool(parseInfo->staticContext->namePool()); | 
| 6594 |                         const int len = (yyvsp[0].attributeHolders).size(); | 
| 6595 |                         QSet<QXmlName::PrefixCode> usedDeclarations; | 
| 6596 |  | 
| 6597 |                         /* Whether xmlns="" has been encountered. */ | 
| 6598 |                         bool hasDefaultDeclaration = false; | 
| 6599 |  | 
| 6600 |                         /* For each attribute & namespace declaration, do: */ | 
| 6601 |                         for(int i = 0; i < len; ++i) | 
| 6602 |                         { | 
| 6603 |                             QString strLocalName; | 
| 6604 |                             QString strPrefix; | 
| 6605 |  | 
| 6606 |                             XPathHelper::splitQName(qName: (yyvsp[0].attributeHolders).at(i).first, prefix&: strPrefix, localName&: strLocalName); | 
| 6607 |                             const QXmlName::PrefixCode prefix = namePool->allocatePrefix(prefix: strPrefix); | 
| 6608 |  | 
| 6609 |                             /* This can seem a bit weird. However, this name is ending up in a QXmlName | 
| 6610 |                              * which consider its prefix a... prefix. So, a namespace binding name can in some cases | 
| 6611 |                              * be a local name, but that's just as the initial syntactical construct. */ | 
| 6612 |                             const QXmlName::LocalNameCode localName = namePool->allocatePrefix(prefix: strLocalName); | 
| 6613 |  | 
| 6614 |                             /* Not that localName is "foo" in "xmlns:foo" and that prefix is "xmlns". */ | 
| 6615 |  | 
| 6616 |                             if(prefix == StandardPrefixes::xmlns || | 
| 6617 |                                (prefix == StandardPrefixes::empty && localName == StandardPrefixes::xmlns)) | 
| 6618 |                             { | 
| 6619 |                                 if(localName == StandardPrefixes::xmlns) | 
| 6620 |                                     hasDefaultDeclaration = true; | 
| 6621 |  | 
| 6622 |                                 /* We have a namespace declaration. */ | 
| 6623 |  | 
| 6624 |                                 const Expression::Ptr nsExpr((yyvsp[0].attributeHolders).at(i).second); | 
| 6625 |  | 
| 6626 |                                 const QString strNamespace(nsExpr->is(i: Expression::IDEmptySequence) ? QString() : nsExpr->as<Literal>()->item().stringValue()); | 
| 6627 |  | 
| 6628 |                                 const QXmlName::NamespaceCode ns = namePool->allocateNamespace(uri: strNamespace); | 
| 6629 |  | 
| 6630 |                                 if(ns == StandardNamespaces::empty) | 
| 6631 |                                 { | 
| 6632 |                                     if(localName != StandardPrefixes::xmlns) | 
| 6633 |                                     { | 
| 6634 |                                         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The namespace URI cannot be the empty string when binding to a prefix, %1." ) | 
| 6635 |                                                                            .arg(a: formatURI(uri: strPrefix)), | 
| 6636 |                                                                         errorCode: ReportContext::XQST0085, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6637 |                                     } | 
| 6638 |                                 } | 
| 6639 |                                 else if(!AnyURI::isValid(candidate: strNamespace)) | 
| 6640 |                                 { | 
| 6641 |                                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is an invalid namespace URI." ).arg(a: formatURI(uri: strNamespace)), | 
| 6642 |                                                                     errorCode: ReportContext::XQST0022, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6643 |                                 } | 
| 6644 |  | 
| 6645 |                                 if(prefix == StandardPrefixes::xmlns && localName == StandardPrefixes::xmlns) | 
| 6646 |                                 { | 
| 6647 |                                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "It is not possible to bind to the prefix %1" ) | 
| 6648 |                                                                        .arg(a: formatKeyword(keyword: "xmlns" )), | 
| 6649 |                                                                     errorCode: ReportContext::XQST0070, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6650 |                                 } | 
| 6651 |  | 
| 6652 |                                 if(ns == StandardNamespaces::xml && localName != StandardPrefixes::xml) | 
| 6653 |                                 { | 
| 6654 |                                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Namespace %1 can only be bound to %2 (and it is, in either case, pre-declared)." ) | 
| 6655 |                                                                        .arg(a: formatURI(uri: namePool->stringForNamespace(code: StandardNamespaces::xml))) | 
| 6656 |                                                                        .arg(a: formatKeyword(keyword: "xml" )), | 
| 6657 |                                                                     errorCode: ReportContext::XQST0070, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6658 |                                 } | 
| 6659 |  | 
| 6660 |                                 if(localName == StandardPrefixes::xml && ns != StandardNamespaces::xml) | 
| 6661 |                                 { | 
| 6662 |                                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Prefix %1 can only be bound to %2 (and it is, in either case, pre-declared)." ) | 
| 6663 |                                                                        .arg(a: formatKeyword(keyword: "xml" )) | 
| 6664 |                                                                        .arg(a: formatURI(uri: namePool->stringForNamespace(code: StandardNamespaces::xml))), | 
| 6665 |                                                                     errorCode: ReportContext::XQST0070, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6666 |                                 } | 
| 6667 |  | 
| 6668 |                                 QXmlName nb; | 
| 6669 |  | 
| 6670 |                                 if(localName == StandardPrefixes::xmlns) | 
| 6671 |                                     nb = QXmlName(ns, StandardLocalNames::empty); | 
| 6672 |                                 else | 
| 6673 |                                     nb = QXmlName(ns, StandardLocalNames::empty, localName); | 
| 6674 |  | 
| 6675 |                                 if(usedDeclarations.contains(value: nb.prefix())) | 
| 6676 |                                 { | 
| 6677 |                                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "Two namespace declaration attributes have the same name: %1." ) | 
| 6678 |                                                                        .arg(a: formatKeyword(keyword: namePool->stringForPrefix(code: nb.prefix()))), | 
| 6679 |                                                                     errorCode: ReportContext::XQST0071, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6680 |  | 
| 6681 |                                 } | 
| 6682 |                                 else | 
| 6683 |                                     usedDeclarations.insert(value: nb.prefix()); | 
| 6684 |  | 
| 6685 |                                 /* If the user has bound the XML namespace correctly, we in either | 
| 6686 |                                  * case don't want to output it. | 
| 6687 |                                  * | 
| 6688 |                                  * We only have to check the namespace parts since the above checks has ensured | 
| 6689 |                                  * consistency in the prefix parts. */ | 
| 6690 |                                 if(ns != StandardNamespaces::xml) | 
| 6691 |                                 { | 
| 6692 |                                     /* We don't want default namespace declarations when the | 
| 6693 |                                      * default namespace already is empty. */ | 
| 6694 |                                     if(!(ns == StandardNamespaces::empty          && | 
| 6695 |                                          localName == StandardNamespaces::xmlns   && | 
| 6696 |                                          resolver->lookupNamespaceURI(prefix: StandardPrefixes::empty) == StandardNamespaces::empty)) | 
| 6697 |                                     { | 
| 6698 |                                         constructors.append(t: create(expr: new NamespaceConstructor(nb), sourceLocator: (yyloc), parseInfo)); | 
| 6699 |                                         resolver->addBinding(nb); | 
| 6700 |                                     } | 
| 6701 |                                 } | 
| 6702 |                             } | 
| 6703 |                         } | 
| 6704 |  | 
| 6705 |                         if(parseInfo->elementConstructorDepth == 1 && !hasDefaultDeclaration) | 
| 6706 |                         { | 
| 6707 |                             /* TODO But mostly this isn't needed, since the default element | 
| 6708 |                              * namespace is empty? How does this at all work? */ | 
| 6709 |                             const QXmlName def(resolver->lookupNamespaceURI(prefix: StandardPrefixes::empty), StandardLocalNames::empty); | 
| 6710 |                             constructors.append(t: create(expr: new NamespaceConstructor(def), sourceLocator: (yyloc), parseInfo)); | 
| 6711 |                         } | 
| 6712 |  | 
| 6713 |                         parseInfo->staticContext->setNamespaceBindings(resolver); | 
| 6714 |                         (yyval.expressionList) = constructors; | 
| 6715 |  | 
| 6716 |                         /* Resolve the name of the element, now that the namespace attributes are read. */ | 
| 6717 |                         { | 
| 6718 |                             const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 6719 |  | 
| 6720 |                             const QXmlName ele = QNameConstructor::expandQName<StaticContext::Ptr, | 
| 6721 |                                                                                ReportContext::XPST0081, | 
| 6722 |                                                                                ReportContext::XPST0081>(lexicalQName: (yyvsp[-2].sval), context: parseInfo->staticContext, nsResolver: resolver, r: &ryy); | 
| 6723 |                             parseInfo->tagStack.push(t: ele); | 
| 6724 |                         } | 
| 6725 |  | 
| 6726 |                         parseInfo->tokenizer->resumeTokenizationFrom(position: (yyvsp[-1].enums.tokenizerPosition)); | 
| 6727 |                     } | 
| 6728 | #line 6680 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6729 |     break; | 
| 6730 |  | 
| 6731 |   case 362: | 
| 6732 | #line 3937 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6733 |     { | 
| 6734 |         /* We add the content constructor after the attribute constructors. This might result | 
| 6735 |          * in nested ExpressionSequences, but it will be optimized away later on. */ | 
| 6736 |  | 
| 6737 |         Expression::List attributes((yyvsp[-3].expressionList)); | 
| 6738 |         const NamePool::Ptr namePool(parseInfo->staticContext->namePool()); | 
| 6739 |         const int len = (yyvsp[-1].attributeHolders).size(); | 
| 6740 |         QSet<QXmlName> declaredAttributes; | 
| 6741 |         declaredAttributes.reserve(asize: len); | 
| 6742 |  | 
| 6743 |         /* For each namespace, resolve its name(now that we have resolved the namespace declarations) and | 
| 6744 |          * turn it into an attribute constructor. */ | 
| 6745 |         for(int i = 0; i < len; ++i) | 
| 6746 |         { | 
| 6747 |             QString strLocalName; | 
| 6748 |             QString strPrefix; | 
| 6749 |  | 
| 6750 |             XPathHelper::splitQName(qName: (yyvsp[-1].attributeHolders).at(i).first, prefix&: strPrefix, localName&: strLocalName); | 
| 6751 |             const QXmlName::PrefixCode prefix = namePool->allocatePrefix(prefix: strPrefix); | 
| 6752 |             const QXmlName::LocalNameCode localName = namePool->allocateLocalName(ln: strLocalName); | 
| 6753 |  | 
| 6754 |             if(prefix == StandardPrefixes::xmlns || | 
| 6755 |                (prefix == StandardPrefixes::empty && localName == StandardLocalNames::xmlns)) | 
| 6756 |             { | 
| 6757 |                 const Expression::ID id = (yyvsp[-1].attributeHolders).at(i).second->id(); | 
| 6758 |  | 
| 6759 |                 if(id == Expression::IDStringValue || id == Expression::IDEmptySequence) | 
| 6760 |                 { | 
| 6761 |                     /* It's a namespace declaration, and we've already handled those above. */ | 
| 6762 |                     continue; | 
| 6763 |                 } | 
| 6764 |                 else | 
| 6765 |                 { | 
| 6766 |                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The namespace URI must be a constant and cannot "  | 
| 6767 |                                                        "use enclosed expressions." ), | 
| 6768 |                                                     errorCode: ReportContext::XQST0022, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6769 |                 } | 
| 6770 |  | 
| 6771 |             } | 
| 6772 |             else | 
| 6773 |             { | 
| 6774 |                 const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 6775 |                 const QXmlName att = QNameConstructor::expandQName<StaticContext::Ptr, | 
| 6776 |                                                                    ReportContext::XPST0081, | 
| 6777 |                                                                    ReportContext::XPST0081>(lexicalQName: (yyvsp[-1].attributeHolders).at(i).first, context: parseInfo->staticContext, | 
| 6778 |                                                                                             nsResolver: parseInfo->staticContext->namespaceBindings(), | 
| 6779 |                                                                                             r: &ryy, asForAttribute: true); | 
| 6780 |                 if(declaredAttributes.contains(value: att)) | 
| 6781 |                 { | 
| 6782 |                     parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "An attribute with name %1 has already appeared on this element." ) | 
| 6783 |                                                       .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: att)), | 
| 6784 |                                             errorCode: ReportContext::XQST0040, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6785 |  | 
| 6786 |                 } | 
| 6787 |                 else | 
| 6788 |                     declaredAttributes.insert(value: att); | 
| 6789 |  | 
| 6790 |                 /* wrapLiteral() needs the SourceLocationReflection of the AttributeConstructor, but | 
| 6791 |                  * it's unknown inside the arguments to its constructor. Hence we have to do this workaround of setting | 
| 6792 |                  * it twice. | 
| 6793 |                  * | 
| 6794 |                  * The AttributeConstructor's arguments are just dummies. */ | 
| 6795 |                 const Expression::Ptr ctor(create(expr: new AttributeConstructor((yyvsp[-1].attributeHolders).at(i).second, (yyvsp[-1].attributeHolders).at(i).second), sourceLocator: (yyloc), parseInfo)); | 
| 6796 |  | 
| 6797 |                 Expression::List ops; | 
| 6798 |                 ops.append(t: wrapLiteral(item: toItem(atomicValue: QNameValue::fromValue(np: namePool, name: att)), context: parseInfo->staticContext, r: ctor.data())); | 
| 6799 |                 ops.append(t: (yyvsp[-1].attributeHolders).at(i).second); | 
| 6800 |                 ctor->setOperands(ops); | 
| 6801 |  | 
| 6802 |                 attributes.append(t: ctor); | 
| 6803 |             } | 
| 6804 |         } | 
| 6805 |  | 
| 6806 |         Expression::Ptr contentOp; | 
| 6807 |  | 
| 6808 |         if(attributes.isEmpty()) | 
| 6809 |             contentOp = (yyvsp[0].expr); | 
| 6810 |         else | 
| 6811 |         { | 
| 6812 |             attributes.append(t: (yyvsp[0].expr)); | 
| 6813 |             contentOp = create(expr: new ExpressionSequence(attributes), sourceLocator: (yyloc), parseInfo); | 
| 6814 |         } | 
| 6815 |  | 
| 6816 |         const Expression::Ptr name(create(expr: new Literal(toItem(atomicValue: QNameValue::fromValue(np: parseInfo->staticContext->namePool(), name: parseInfo->tagStack.top()))), sourceLocator: (yyloc), parseInfo)); | 
| 6817 |         (yyval.expr) = create(expr: new ElementConstructor(name, contentOp, parseInfo->isXSLT()), sourceLocator: (yyloc), parseInfo); | 
| 6818 |  | 
| 6819 |         /* Restore the old context. We don't want the namespaces | 
| 6820 |          * to be in-scope for expressions appearing after the | 
| 6821 |          * element they appeared on. */ | 
| 6822 |         parseInfo->staticContext->setNamespaceBindings(parseInfo->resolvers.pop()); | 
| 6823 |         parseInfo->tagStack.pop(); | 
| 6824 |  | 
| 6825 |         --parseInfo->elementConstructorDepth; | 
| 6826 |     } | 
| 6827 | #line 6779 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6828 |     break; | 
| 6829 |  | 
| 6830 |   case 363: | 
| 6831 | #line 4033 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6832 |     { | 
| 6833 |         (yyval.expr) = create(expr: new EmptySequence(), sourceLocator: (yyloc), parseInfo); | 
| 6834 |     } | 
| 6835 | #line 6787 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6836 |     break; | 
| 6837 |  | 
| 6838 |   case 364: | 
| 6839 | #line 4037 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6840 |     { | 
| 6841 |         if(!(yyvsp[-1].qName).isLexicallyEqual(other: parseInfo->tagStack.top())) | 
| 6842 |         { | 
| 6843 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "A direct element constructor is not "  | 
| 6844 |                                                "well-formed. %1 is ended with %2." ) | 
| 6845 |                                                .arg(args: formatKeyword(keyword: parseInfo->staticContext->namePool()->toLexical(qName: parseInfo->tagStack.top())), | 
| 6846 |                                                     args: formatKeyword(keyword: parseInfo->staticContext->namePool()->toLexical(qName: (yyvsp[-1].qName)))), | 
| 6847 |                                             errorCode: ReportContext::XPST0003, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 6848 |         } | 
| 6849 |  | 
| 6850 |         if((yyvsp[-3].expressionList).isEmpty()) | 
| 6851 |             (yyval.expr) = create(expr: new EmptySequence(), sourceLocator: (yyloc), parseInfo); | 
| 6852 |         else if((yyvsp[-3].expressionList).size() == 1) | 
| 6853 |             (yyval.expr) = (yyvsp[-3].expressionList).first(); | 
| 6854 |         else | 
| 6855 |             (yyval.expr) = create(expr: new ExpressionSequence((yyvsp[-3].expressionList)), sourceLocator: (yyloc), parseInfo); | 
| 6856 |     } | 
| 6857 | #line 6809 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6858 |     break; | 
| 6859 |  | 
| 6860 |   case 365: | 
| 6861 | #line 4056 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6862 |     { | 
| 6863 |         (yyval.attributeHolders) = AttributeHolderVector(); | 
| 6864 |     } | 
| 6865 | #line 6817 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6866 |     break; | 
| 6867 |  | 
| 6868 |   case 366: | 
| 6869 | #line 4060 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6870 |     { | 
| 6871 |         (yyvsp[-1].attributeHolders).append(t: (yyvsp[0].attributeHolder)); | 
| 6872 |         (yyval.attributeHolders) = (yyvsp[-1].attributeHolders); | 
| 6873 |     } | 
| 6874 | #line 6826 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6875 |     break; | 
| 6876 |  | 
| 6877 |   case 367: | 
| 6878 | #line 4066 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6879 |     { | 
| 6880 |         (yyval.attributeHolder) = qMakePair(x: (yyvsp[-2].sval), y: (yyvsp[0].expr)); | 
| 6881 |     } | 
| 6882 | #line 6834 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6883 |     break; | 
| 6884 |  | 
| 6885 |   case 368: | 
| 6886 | #line 4071 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6887 |     { | 
| 6888 |         (yyval.expr) = createDirAttributeValue(content: (yyvsp[-1].expressionList), parseInfo, sourceLocator: (yyloc)); | 
| 6889 |     } | 
| 6890 | #line 6842 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6891 |     break; | 
| 6892 |  | 
| 6893 |   case 369: | 
| 6894 | #line 4076 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6895 |     { | 
| 6896 |         (yyval.expr) = createDirAttributeValue(content: (yyvsp[-1].expressionList), parseInfo, sourceLocator: (yyloc)); | 
| 6897 |     } | 
| 6898 | #line 6850 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6899 |     break; | 
| 6900 |  | 
| 6901 |   case 370: | 
| 6902 | #line 4081 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6903 |     { | 
| 6904 |         (yyval.expressionList) = Expression::List(); | 
| 6905 |     } | 
| 6906 | #line 6858 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6907 |     break; | 
| 6908 |  | 
| 6909 |   case 371: | 
| 6910 | #line 4085 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6911 |     { | 
| 6912 |         Expression::Ptr content((yyvsp[-1].expr)); | 
| 6913 |  | 
| 6914 |         if(parseInfo->isBackwardsCompat.top()) | 
| 6915 |             content = create(expr: GenericPredicate::createFirstItem(sourceExpression: content), sourceLocator: (yyloc), parseInfo); | 
| 6916 |  | 
| 6917 |         (yyvsp[0].expressionList).prepend(t: createSimpleContent(source: content, sourceLocator: (yyloc), parseInfo)); | 
| 6918 |         (yyval.expressionList) = (yyvsp[0].expressionList); | 
| 6919 |     } | 
| 6920 | #line 6872 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6921 |     break; | 
| 6922 |  | 
| 6923 |   case 372: | 
| 6924 | #line 4095 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6925 |     { | 
| 6926 |         (yyvsp[0].expressionList).prepend(t: create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[-1].sval))), sourceLocator: (yyloc), parseInfo)); | 
| 6927 |         (yyval.expressionList) = (yyvsp[0].expressionList); | 
| 6928 |     } | 
| 6929 | #line 6881 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6930 |     break; | 
| 6931 |  | 
| 6932 |   case 373: | 
| 6933 | #line 4101 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6934 |     { | 
| 6935 |         (yyval.expressionList) = Expression::List(); | 
| 6936 |         parseInfo->isPreviousEnclosedExpr = false; | 
| 6937 |     } | 
| 6938 | #line 6890 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6939 |     break; | 
| 6940 |  | 
| 6941 |   case 374: | 
| 6942 | #line 4106 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6943 |     { | 
| 6944 |         (yyvsp[-1].expressionList).append(t: (yyvsp[0].expr)); | 
| 6945 |         (yyval.expressionList) = (yyvsp[-1].expressionList); | 
| 6946 |         parseInfo->isPreviousEnclosedExpr = false; | 
| 6947 |     } | 
| 6948 | #line 6900 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6949 |     break; | 
| 6950 |  | 
| 6951 |   case 375: | 
| 6952 | #line 4112 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6953 |     { | 
| 6954 |         if(parseInfo->staticContext->boundarySpacePolicy() == StaticContext::BSPStrip && | 
| 6955 |            XPathHelper::isWhitespaceOnly(string: (yyvsp[0].sval))) | 
| 6956 |         { | 
| 6957 |             (yyval.expressionList) = (yyvsp[-1].expressionList); | 
| 6958 |         } | 
| 6959 |         else | 
| 6960 |         { | 
| 6961 |             (yyvsp[-1].expressionList).append(t: create(expr: new TextNodeConstructor(create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo)); | 
| 6962 |             (yyval.expressionList) = (yyvsp[-1].expressionList); | 
| 6963 |             parseInfo->isPreviousEnclosedExpr = false; | 
| 6964 |         } | 
| 6965 |     } | 
| 6966 | #line 6918 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6967 |     break; | 
| 6968 |  | 
| 6969 |   case 376: | 
| 6970 | #line 4126 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6971 |     { | 
| 6972 |         (yyvsp[-1].expressionList).append(t: create(expr: new TextNodeConstructor(create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo)); | 
| 6973 |         (yyval.expressionList) = (yyvsp[-1].expressionList); | 
| 6974 |         parseInfo->isPreviousEnclosedExpr = false; | 
| 6975 |     } | 
| 6976 | #line 6928 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6977 |     break; | 
| 6978 |  | 
| 6979 |   case 377: | 
| 6980 | #line 4132 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 6981 |     { | 
| 6982 |         /* We insert a text node constructor that send an empty text node between | 
| 6983 |          * the two enclosed expressions, in order to ensure that no space is inserted. | 
| 6984 |          * | 
| 6985 |          * However, we only do it when we have no node constructors. */ | 
| 6986 |         if(parseInfo->isPreviousEnclosedExpr && | 
| 6987 |            BuiltinTypes::xsAnyAtomicType->xdtTypeMatches(other: (yyvsp[0].expr)->staticType()->itemType()) && | 
| 6988 |            BuiltinTypes::xsAnyAtomicType->xdtTypeMatches(other: (yyvsp[-1].expressionList).last()->staticType()->itemType())) | 
| 6989 |             (yyvsp[-1].expressionList).append(t: create(expr: new TextNodeConstructor(create(expr: new Literal(AtomicString::fromValue(value: QString())), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo)); | 
| 6990 |         else | 
| 6991 |             parseInfo->isPreviousEnclosedExpr = true; | 
| 6992 |  | 
| 6993 |         (yyvsp[-1].expressionList).append(t: createCopyOf(operand: (yyvsp[0].expr), parseInfo, sl: (yyloc))); | 
| 6994 |         (yyval.expressionList) = (yyvsp[-1].expressionList); | 
| 6995 |     } | 
| 6996 | #line 6948 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 6997 |     break; | 
| 6998 |  | 
| 6999 |   case 378: | 
| 7000 | #line 4149 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7001 |     { | 
| 7002 |         (yyval.expr) = create(expr: new CommentConstructor(create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7003 |     } | 
| 7004 | #line 6956 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7005 |     break; | 
| 7006 |  | 
| 7007 |   case 379: | 
| 7008 | #line 4154 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7009 |     { | 
| 7010 |         const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 7011 |         NCNameConstructor::validateTargetName<StaticContext::Ptr, | 
| 7012 |                                               ReportContext::XPST0003, | 
| 7013 |                                               ReportContext::XPST0003>(lexicalTarget: (yyvsp[-1].sval), | 
| 7014 |                                                                        context: parseInfo->staticContext, r: &ryy); | 
| 7015 |  | 
| 7016 |         (yyval.expr) = create(expr: new ProcessingInstructionConstructor( | 
| 7017 |                              create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[-1].sval))), sourceLocator: (yyloc), parseInfo), | 
| 7018 |                              create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7019 |     } | 
| 7020 | #line 6972 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7021 |     break; | 
| 7022 |  | 
| 7023 |   case 387: | 
| 7024 | #line 4175 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7025 |     { | 
| 7026 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-1].enums.Bool)); | 
| 7027 |  | 
| 7028 |         (yyval.expr) = create(expr: new DocumentConstructor((yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 7029 |     } | 
| 7030 | #line 6982 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7031 |     break; | 
| 7032 |  | 
| 7033 |   case 388: | 
| 7034 | #line 4182 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7035 |     { | 
| 7036 |                         /* This value is incremented before the action below is executed. */ | 
| 7037 |                         ++parseInfo->elementConstructorDepth; | 
| 7038 |                      } | 
| 7039 | #line 6991 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7040 |     break; | 
| 7041 |  | 
| 7042 |   case 389: | 
| 7043 | #line 4187 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7044 |     { | 
| 7045 |         Q_ASSERT(5); | 
| 7046 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-3].enums.Bool)); | 
| 7047 |  | 
| 7048 |         Expression::Ptr effExpr; | 
| 7049 |  | 
| 7050 |         if((yyvsp[0].expr)) | 
| 7051 |             effExpr = createCopyOf(operand: (yyvsp[0].expr), parseInfo, sl: (yyloc)); | 
| 7052 |         else | 
| 7053 |             effExpr = create(expr: new EmptySequence(), sourceLocator: (yyloc), parseInfo); | 
| 7054 |  | 
| 7055 |         const QXmlName::NamespaceCode ns = parseInfo->resolvers.top()->lookupNamespaceURI(prefix: StandardPrefixes::empty); | 
| 7056 |  | 
| 7057 |         /* Ensure the default namespace gets counted as an in-scope binding, if such a one exists. If we're | 
| 7058 |          * a child of another constructor, it has already been done. */ | 
| 7059 |         if(parseInfo->elementConstructorDepth == 1 && ns != StandardNamespaces::empty) | 
| 7060 |         { | 
| 7061 |             Expression::List exprList; | 
| 7062 |  | 
| 7063 |             /* We append the namespace constructor before the body, in order to | 
| 7064 |              * comply with QAbstractXmlPushHandler's contract. */ | 
| 7065 |             const QXmlName def(parseInfo->resolvers.top()->lookupNamespaceURI(prefix: StandardPrefixes::empty), StandardLocalNames::empty); | 
| 7066 |             exprList.append(t: create(expr: new NamespaceConstructor(def), sourceLocator: (yyloc), parseInfo)); | 
| 7067 |  | 
| 7068 |             exprList.append(t: effExpr); | 
| 7069 |  | 
| 7070 |             effExpr = create(expr: new ExpressionSequence(exprList), sourceLocator: (yyloc), parseInfo); | 
| 7071 |         } | 
| 7072 |  | 
| 7073 |         --parseInfo->elementConstructorDepth; | 
| 7074 |         (yyval.expr) = create(expr: new ElementConstructor((yyvsp[-2].expr), effExpr, parseInfo->isXSLT()), sourceLocator: (yyloc), parseInfo); | 
| 7075 |     } | 
| 7076 | #line 7028 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7077 |     break; | 
| 7078 |  | 
| 7079 |   case 390: | 
| 7080 | #line 4221 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7081 |     { | 
| 7082 |         (yyval.enums.Bool) = false; | 
| 7083 |     } | 
| 7084 | #line 7036 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7085 |     break; | 
| 7086 |  | 
| 7087 |   case 391: | 
| 7088 | #line 4225 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7089 |     { | 
| 7090 |         (yyval.enums.Bool) = true; | 
| 7091 |     } | 
| 7092 | #line 7044 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7093 |     break; | 
| 7094 |  | 
| 7095 |   case 392: | 
| 7096 | #line 4233 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7097 |     { | 
| 7098 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-2].enums.Bool)); | 
| 7099 |  | 
| 7100 |         const Expression::Ptr name(create(expr: new AttributeNameValidator((yyvsp[-1].expr)), sourceLocator: (yyloc), parseInfo)); | 
| 7101 |  | 
| 7102 |         if((yyvsp[0].expr)) | 
| 7103 |             (yyval.expr) = create(expr: new AttributeConstructor(name, createSimpleContent(source: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7104 |         else | 
| 7105 |             (yyval.expr) = create(expr: new AttributeConstructor(name, create(expr: new EmptySequence(), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7106 |     } | 
| 7107 | #line 7059 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7108 |     break; | 
| 7109 |  | 
| 7110 |   case 393: | 
| 7111 | #line 4245 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7112 |     { | 
| 7113 |         (yyval.expr) = create(expr: new TextNodeConstructor(createSimpleContent(source: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7114 |     } | 
| 7115 | #line 7067 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7116 |     break; | 
| 7117 |  | 
| 7118 |   case 394: | 
| 7119 | #line 4250 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7120 |     { | 
| 7121 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-1].enums.Bool)); | 
| 7122 |  | 
| 7123 |         (yyval.expr) = create(expr: new CommentConstructor(createSimpleContent(source: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7124 |     } | 
| 7125 | #line 7077 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7126 |     break; | 
| 7127 |  | 
| 7128 |   case 395: | 
| 7129 | #line 4257 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7130 |     { | 
| 7131 |         allowedIn(allowedLanguages: QXmlQuery::XQuery10, parseInfo, sourceLocator: (yyloc), isInternal: (yyvsp[-1].expr)); | 
| 7132 |  | 
| 7133 |         if((yyvsp[0].expr)) | 
| 7134 |         { | 
| 7135 |             (yyval.expr) = create(expr: new ProcessingInstructionConstructor((yyvsp[-1].expr), createSimpleContent(source: (yyvsp[0].expr), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7136 |         } | 
| 7137 |         else | 
| 7138 |             (yyval.expr) = create(expr: new ProcessingInstructionConstructor((yyvsp[-1].expr), create(expr: new EmptySequence(), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7139 |     } | 
| 7140 | #line 7092 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7141 |     break; | 
| 7142 |  | 
| 7143 |   case 396: | 
| 7144 | #line 4268 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7145 |     { | 
| 7146 |                         parseInfo->nodeTestSource = BuiltinTypes::attribute; | 
| 7147 |                    } | 
| 7148 | #line 7100 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7149 |     break; | 
| 7150 |  | 
| 7151 |   case 397: | 
| 7152 | #line 4272 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7153 |     { | 
| 7154 |                         parseInfo->restoreNodeTestSource(); | 
| 7155 |                    } | 
| 7156 | #line 7108 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7157 |     break; | 
| 7158 |  | 
| 7159 |   case 398: | 
| 7160 | #line 4275 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7161 |     { | 
| 7162 |         (yyval.expr) = create(expr: new Literal(toItem(atomicValue: QNameValue::fromValue(np: parseInfo->staticContext->namePool(), name: (yyvsp[-1].qName)))), sourceLocator: (yyloc), parseInfo); | 
| 7163 |     } | 
| 7164 | #line 7116 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7165 |     break; | 
| 7166 |  | 
| 7167 |   case 400: | 
| 7168 | #line 4281 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7169 |     { | 
| 7170 |         (yyval.expr) = create(expr: new Literal(toItem(atomicValue: QNameValue::fromValue(np: parseInfo->staticContext->namePool(), name: (yyvsp[0].qName)))), sourceLocator: (yyloc), parseInfo); | 
| 7171 |     } | 
| 7172 | #line 7124 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7173 |     break; | 
| 7174 |  | 
| 7175 |   case 402: | 
| 7176 | #line 4287 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7177 |     { | 
| 7178 |         if(BuiltinTypes::xsQName->xdtTypeMatches(other: (yyvsp[0].expr)->staticType()->itemType())) | 
| 7179 |             (yyval.expr) = (yyvsp[0].expr); | 
| 7180 |         else | 
| 7181 |         { | 
| 7182 |             (yyval.expr) = create(expr: new QNameConstructor((yyvsp[0].expr), | 
| 7183 |                                              parseInfo->staticContext->namespaceBindings()), | 
| 7184 |                         sourceLocator: (yyloc), parseInfo); | 
| 7185 |         } | 
| 7186 |     } | 
| 7187 | #line 7139 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7188 |     break; | 
| 7189 |  | 
| 7190 |   case 403: | 
| 7191 | #line 4302 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7192 |     { | 
| 7193 |         (yyval.expr) = create(expr: new NCNameConstructor(create(expr: new Literal(AtomicString::fromValue(value: (yyvsp[0].sval))), sourceLocator: (yyloc), parseInfo)), sourceLocator: (yyloc), parseInfo); | 
| 7194 |     } | 
| 7195 | #line 7147 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7196 |     break; | 
| 7197 |  | 
| 7198 |   case 404: | 
| 7199 | #line 4306 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7200 |     { | 
| 7201 |         (yyval.expr) = create(expr: new NCNameConstructor((yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 7202 |     } | 
| 7203 | #line 7155 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7204 |     break; | 
| 7205 |  | 
| 7206 |   case 405: | 
| 7207 | #line 4315 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7208 |     { | 
| 7209 |     (yyval.expr) = create(expr: new ComputedNamespaceConstructor((yyvsp[-1].expr), (yyvsp[0].expr)), sourceLocator: (yyloc), parseInfo); | 
| 7210 | } | 
| 7211 | #line 7163 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7212 |     break; | 
| 7213 |  | 
| 7214 |   case 406: | 
| 7215 | #line 4320 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7216 |     { | 
| 7217 |         (yyval.sequenceType) = makeGenericSequenceType(itemType: (yyvsp[0].itemType), cardinality: Cardinality::exactlyOne()); | 
| 7218 |     } | 
| 7219 | #line 7171 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7220 |     break; | 
| 7221 |  | 
| 7222 |   case 407: | 
| 7223 | #line 4324 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7224 |     { | 
| 7225 |         (yyval.sequenceType) = makeGenericSequenceType(itemType: (yyvsp[-1].itemType), cardinality: Cardinality::zeroOrOne()); | 
| 7226 |     } | 
| 7227 | #line 7179 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7228 |     break; | 
| 7229 |  | 
| 7230 |   case 408: | 
| 7231 | #line 4329 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7232 |     { | 
| 7233 |         (yyval.sequenceType) = CommonSequenceTypes::ZeroOrMoreItems; | 
| 7234 |     } | 
| 7235 | #line 7187 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7236 |     break; | 
| 7237 |  | 
| 7238 |   case 409: | 
| 7239 | #line 4333 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7240 |     { | 
| 7241 |         (yyval.sequenceType) = (yyvsp[0].sequenceType); | 
| 7242 |     } | 
| 7243 | #line 7195 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7244 |     break; | 
| 7245 |  | 
| 7246 |   case 410: | 
| 7247 | #line 4338 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7248 |     { | 
| 7249 |         (yyval.sequenceType) = makeGenericSequenceType(itemType: (yyvsp[-1].itemType), cardinality: (yyvsp[0].cardinality)); | 
| 7250 |     } | 
| 7251 | #line 7203 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7252 |     break; | 
| 7253 |  | 
| 7254 |   case 411: | 
| 7255 | #line 4343 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7256 |     { | 
| 7257 |         (yyval.sequenceType) = CommonSequenceTypes::Empty; | 
| 7258 |     } | 
| 7259 | #line 7211 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7260 |     break; | 
| 7261 |  | 
| 7262 |   case 412: | 
| 7263 | #line 4347 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7264 |     {(yyval.cardinality) = Cardinality::exactlyOne();} | 
| 7265 | #line 7217 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7266 |     break; | 
| 7267 |  | 
| 7268 |   case 413: | 
| 7269 | #line 4348 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7270 |     {(yyval.cardinality) = Cardinality::oneOrMore();} | 
| 7271 | #line 7223 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7272 |     break; | 
| 7273 |  | 
| 7274 |   case 414: | 
| 7275 | #line 4349 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7276 |     {(yyval.cardinality) = Cardinality::zeroOrMore();} | 
| 7277 | #line 7229 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7278 |     break; | 
| 7279 |  | 
| 7280 |   case 415: | 
| 7281 | #line 4350 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7282 |     {(yyval.cardinality) = Cardinality::zeroOrOne();} | 
| 7283 | #line 7235 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7284 |     break; | 
| 7285 |  | 
| 7286 |   case 419: | 
| 7287 | #line 4356 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7288 |     { | 
| 7289 |         (yyval.itemType) = BuiltinTypes::item; | 
| 7290 |     } | 
| 7291 | #line 7243 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7292 |     break; | 
| 7293 |  | 
| 7294 |   case 420: | 
| 7295 | #line 4361 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7296 |     { | 
| 7297 |         const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType(name: (yyvsp[0].qName))); | 
| 7298 |  | 
| 7299 |         if(!t) | 
| 7300 |         { | 
| 7301 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The name %1 does not refer to any schema type." ) | 
| 7302 |                                                .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[0].qName))), errorCode: ReportContext::XPST0051, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7303 |         } | 
| 7304 |         else if(BuiltinTypes::xsAnyAtomicType->wxsTypeMatches(other: t)) | 
| 7305 |             (yyval.itemType) = AtomicType::Ptr(t); | 
| 7306 |         else | 
| 7307 |         { | 
| 7308 |             /* Try to give an intelligent message. */ | 
| 7309 |             if(t->isComplexType()) | 
| 7310 |             { | 
| 7311 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is an complex type. Casting to complex "  | 
| 7312 |                                                    "types is not possible. However, casting "  | 
| 7313 |                                                    "to atomic types such as %2 works." ) | 
| 7314 |                                                    .arg(a: formatType(np: parseInfo->staticContext->namePool(), type: t)) | 
| 7315 |                                                    .arg(a: formatType(np: parseInfo->staticContext->namePool(), type: BuiltinTypes::xsInteger)), | 
| 7316 |                                                 errorCode: ReportContext::XPST0051, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7317 |             } | 
| 7318 |             else | 
| 7319 |             { | 
| 7320 |                 parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is not an atomic type. Casting "  | 
| 7321 |                                                    "is only possible to atomic types." ) | 
| 7322 |                                                    .arg(a: formatType(np: parseInfo->staticContext->namePool(), type: t)), | 
| 7323 |                                                 errorCode: ReportContext::XPST0051, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7324 |             } | 
| 7325 |         } | 
| 7326 |     } | 
| 7327 | #line 7279 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7328 |     break; | 
| 7329 |  | 
| 7330 |   case 428: | 
| 7331 | #line 4405 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7332 |     { | 
| 7333 |         (yyval.itemType) = BuiltinTypes::node; | 
| 7334 |     } | 
| 7335 | #line 7287 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7336 |     break; | 
| 7337 |  | 
| 7338 |   case 429: | 
| 7339 | #line 4410 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7340 |     { | 
| 7341 |         (yyval.itemType) = BuiltinTypes::document; | 
| 7342 |     } | 
| 7343 | #line 7295 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7344 |     break; | 
| 7345 |  | 
| 7346 |   case 430: | 
| 7347 | #line 4415 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7348 |     { | 
| 7349 |         // TODO support for document element testing | 
| 7350 |         (yyval.itemType) = BuiltinTypes::document; | 
| 7351 |     } | 
| 7352 | #line 7304 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7353 |     break; | 
| 7354 |  | 
| 7355 |   case 433: | 
| 7356 | #line 4424 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7357 |     { | 
| 7358 |         (yyval.itemType) = BuiltinTypes::text; | 
| 7359 |     } | 
| 7360 | #line 7312 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7361 |     break; | 
| 7362 |  | 
| 7363 |   case 434: | 
| 7364 | #line 4429 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7365 |     { | 
| 7366 |         (yyval.itemType) = BuiltinTypes::comment; | 
| 7367 |     } | 
| 7368 | #line 7320 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7369 |     break; | 
| 7370 |  | 
| 7371 |   case 435: | 
| 7372 | #line 4434 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7373 |     { | 
| 7374 |         (yyval.itemType) = BuiltinTypes::pi; | 
| 7375 |     } | 
| 7376 | #line 7328 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7377 |     break; | 
| 7378 |  | 
| 7379 |   case 436: | 
| 7380 | #line 4439 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7381 |     { | 
| 7382 |         (yyval.itemType) = LocalNameTest::create(primaryType: BuiltinTypes::pi, localName: parseInfo->staticContext->namePool()->allocateLocalName(ln: (yyvsp[-1].sval))); | 
| 7383 |     } | 
| 7384 | #line 7336 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7385 |     break; | 
| 7386 |  | 
| 7387 |   case 437: | 
| 7388 | #line 4444 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7389 |     { | 
| 7390 |         if(QXmlUtils::isNCName(ncName: (yyvsp[-1].sval))) | 
| 7391 |         { | 
| 7392 |             (yyval.itemType) = LocalNameTest::create(primaryType: BuiltinTypes::pi, localName: parseInfo->staticContext->namePool()->allocateLocalName(ln: (yyvsp[-1].sval))); | 
| 7393 |         } | 
| 7394 |         else | 
| 7395 |         { | 
| 7396 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is not a valid name for a "  | 
| 7397 |                                                               "processing-instruction." ) | 
| 7398 |                                                  .arg(a: formatKeyword(keyword: (yyvsp[-1].sval))), | 
| 7399 |                                             errorCode: ReportContext::XPTY0004, | 
| 7400 |                                             sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7401 |         } | 
| 7402 |     } | 
| 7403 | #line 7355 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7404 |     break; | 
| 7405 |  | 
| 7406 |   case 440: | 
| 7407 | #line 4463 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7408 |     { | 
| 7409 |         (yyval.itemType) = BuiltinTypes::attribute; | 
| 7410 |     } | 
| 7411 | #line 7363 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7412 |     break; | 
| 7413 |  | 
| 7414 |   case 441: | 
| 7415 | #line 4468 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7416 |     { | 
| 7417 |         (yyval.itemType) = BuiltinTypes::attribute; | 
| 7418 |     } | 
| 7419 | #line 7371 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7420 |     break; | 
| 7421 |  | 
| 7422 |   case 442: | 
| 7423 | #line 4473 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7424 |     { | 
| 7425 |         (yyval.itemType) = QNameTest::create(primaryType: BuiltinTypes::attribute, qName: (yyvsp[-1].qName)); | 
| 7426 |     } | 
| 7427 | #line 7379 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7428 |     break; | 
| 7429 |  | 
| 7430 |   case 443: | 
| 7431 | #line 4477 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7432 |     { | 
| 7433 |         const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType(name: (yyvsp[-1].qName))); | 
| 7434 |  | 
| 7435 |         if(t) | 
| 7436 |             (yyval.itemType) = BuiltinTypes::attribute; | 
| 7437 |         else | 
| 7438 |         { | 
| 7439 |             parseInfo->staticContext->error(message: unknownType().arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-1].qName))), | 
| 7440 |                                             errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7441 |         } | 
| 7442 |     } | 
| 7443 | #line 7395 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7444 |     break; | 
| 7445 |  | 
| 7446 |   case 444: | 
| 7447 | #line 4489 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7448 |     { | 
| 7449 |         const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType(name: (yyvsp[-1].qName))); | 
| 7450 |  | 
| 7451 |         if(t) | 
| 7452 |             (yyval.itemType) = BuiltinTypes::attribute; | 
| 7453 |         else | 
| 7454 |         { | 
| 7455 |             parseInfo->staticContext->error(message: unknownType().arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-1].qName))), | 
| 7456 |                                             errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7457 |         } | 
| 7458 |     } | 
| 7459 | #line 7411 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7460 |     break; | 
| 7461 |  | 
| 7462 |   case 445: | 
| 7463 | #line 4502 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7464 |     { | 
| 7465 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is not in the in-scope attribute "  | 
| 7466 |                                            "declarations. Note that the schema import "  | 
| 7467 |                                            "feature is not supported." ) | 
| 7468 |                                            .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-1].qName))), | 
| 7469 |                                         errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7470 |         (yyval.itemType).reset(); | 
| 7471 |     } | 
| 7472 | #line 7424 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7473 |     break; | 
| 7474 |  | 
| 7475 |   case 446: | 
| 7476 | #line 4512 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7477 |     { | 
| 7478 |         (yyval.itemType) = BuiltinTypes::element; | 
| 7479 |     } | 
| 7480 | #line 7432 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7481 |     break; | 
| 7482 |  | 
| 7483 |   case 447: | 
| 7484 | #line 4517 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7485 |     { | 
| 7486 |         (yyval.itemType) = BuiltinTypes::element; | 
| 7487 |     } | 
| 7488 | #line 7440 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7489 |     break; | 
| 7490 |  | 
| 7491 |   case 448: | 
| 7492 | #line 4522 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7493 |     { | 
| 7494 |         (yyval.itemType) = QNameTest::create(primaryType: BuiltinTypes::element, qName: (yyvsp[-1].qName)); | 
| 7495 |     } | 
| 7496 | #line 7448 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7497 |     break; | 
| 7498 |  | 
| 7499 |   case 449: | 
| 7500 | #line 4527 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7501 |     { | 
| 7502 |         const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType(name: (yyvsp[-2].qName))); | 
| 7503 |  | 
| 7504 |         if(t) | 
| 7505 |             (yyval.itemType) = BuiltinTypes::element; | 
| 7506 |         else | 
| 7507 |         { | 
| 7508 |             parseInfo->staticContext->error(message: unknownType() | 
| 7509 |                                                .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-2].qName))), | 
| 7510 |                                             errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7511 |         } | 
| 7512 |     } | 
| 7513 | #line 7465 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7514 |     break; | 
| 7515 |  | 
| 7516 |   case 450: | 
| 7517 | #line 4541 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7518 |     { | 
| 7519 |         const SchemaType::Ptr t(parseInfo->staticContext->schemaDefinitions()->createSchemaType(name: (yyvsp[-2].qName))); | 
| 7520 |  | 
| 7521 |         if(t) | 
| 7522 |             (yyval.itemType) = BuiltinTypes::element; | 
| 7523 |         else | 
| 7524 |         { | 
| 7525 |             parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is an unknown schema type." ) | 
| 7526 |                                                .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-2].qName))), | 
| 7527 |                                             errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7528 |         } | 
| 7529 |     } | 
| 7530 | #line 7482 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7531 |     break; | 
| 7532 |  | 
| 7533 |   case 453: | 
| 7534 | #line 4558 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7535 |     { | 
| 7536 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "%1 is not in the in-scope attribute "  | 
| 7537 |                                            "declarations. Note that the schema import "  | 
| 7538 |                                            "feature is not supported." ) | 
| 7539 |                                            .arg(a: formatKeyword(np: parseInfo->staticContext->namePool(), name: (yyvsp[-1].qName))), | 
| 7540 |                                         errorCode: ReportContext::XPST0008, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7541 |         (yyval.itemType).reset(); | 
| 7542 |     } | 
| 7543 | #line 7495 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7544 |     break; | 
| 7545 |  | 
| 7546 |   case 455: | 
| 7547 | #line 4570 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7548 |     { | 
| 7549 |         (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: StandardNamespaces::empty, ln: (yyvsp[0].sval)); | 
| 7550 |     } | 
| 7551 | #line 7503 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7552 |     break; | 
| 7553 |  | 
| 7554 |   case 457: | 
| 7555 | #line 4582 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7556 |     { | 
| 7557 |         if(parseInfo->nodeTestSource == BuiltinTypes::element) | 
| 7558 |             (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: parseInfo->staticContext->namespaceBindings()->lookupNamespaceURI(prefix: StandardPrefixes::empty), ln: (yyvsp[0].sval)); | 
| 7559 |         else | 
| 7560 |             (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: StandardNamespaces::empty, ln: (yyvsp[0].sval)); | 
| 7561 |     } | 
| 7562 | #line 7514 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7563 |     break; | 
| 7564 |  | 
| 7565 |   case 462: | 
| 7566 | #line 4596 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7567 |     { | 
| 7568 |         (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: parseInfo->staticContext->defaultFunctionNamespace(), localName: (yyvsp[0].sval)); | 
| 7569 |     } | 
| 7570 | #line 7522 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7571 |     break; | 
| 7572 |  | 
| 7573 |   case 463: | 
| 7574 | #line 4600 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7575 |     { | 
| 7576 |         (yyval.qName) = parseInfo->staticContext->namePool()->allocateQName(uri: StandardNamespaces::InternalXSLT, ln: (yyvsp[0].sval)); | 
| 7577 |     } | 
| 7578 | #line 7530 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7579 |     break; | 
| 7580 |  | 
| 7581 |   case 466: | 
| 7582 | #line 4608 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7583 |     { | 
| 7584 |         parseInfo->staticContext->error(message: QtXmlPatterns::tr(sourceText: "The name of an extension expression must be in "  | 
| 7585 |                                                           "a namespace." ), | 
| 7586 |                                         errorCode: ReportContext::XPST0081, sourceLocation: fromYYLTYPE(sourceLocator: (yyloc), parseInfo)); | 
| 7587 |     } | 
| 7588 | #line 7540 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7589 |     break; | 
| 7590 |  | 
| 7591 |   case 469: | 
| 7592 | #line 4618 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7593 |     { | 
| 7594 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 7595 |     } | 
| 7596 | #line 7548 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7597 |     break; | 
| 7598 |  | 
| 7599 |   case 470: | 
| 7600 | #line 4622 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7601 |     { | 
| 7602 |         allowedIn(allowedLanguages: QueryLanguages(QXmlQuery::XQuery10 | QXmlQuery::XPath20), parseInfo, sourceLocator: (yyloc)); | 
| 7603 |     } | 
| 7604 | #line 7556 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7605 |     break; | 
| 7606 |  | 
| 7607 |   case 471: | 
| 7608 | #line 4627 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7609 |     { | 
| 7610 |  | 
| 7611 |         const ReflectYYLTYPE ryy((yyloc), parseInfo); | 
| 7612 |  | 
| 7613 |         (yyval.qName) = QNameConstructor:: | 
| 7614 |              expandQName<StaticContext::Ptr, | 
| 7615 |                          ReportContext::XPST0081, | 
| 7616 |                          ReportContext::XPST0081>(lexicalQName: (yyvsp[0].sval), context: parseInfo->staticContext, | 
| 7617 |                                                   nsResolver: parseInfo->staticContext->namespaceBindings(), r: &ryy); | 
| 7618 |  | 
| 7619 |     } | 
| 7620 | #line 7572 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7621 |     break; | 
| 7622 |  | 
| 7623 |   case 472: | 
| 7624 | #line 4639 "querytransformparser.ypp" /* yacc.c:1652  */ | 
| 7625 |     { | 
| 7626 |         (yyval.qName) = parseInfo->staticContext->namePool()->fromClarkName(clarkName: (yyvsp[0].sval)); | 
| 7627 |     } | 
| 7628 | #line 7580 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7629 |     break; | 
| 7630 |  | 
| 7631 |  | 
| 7632 | #line 7584 "qquerytransformparser.cpp" /* yacc.c:1652  */ | 
| 7633 |       default: break; | 
| 7634 |     } | 
| 7635 |   /* User semantic actions sometimes alter yychar, and that requires | 
| 7636 |      that yytoken be updated with the new translation.  We take the | 
| 7637 |      approach of translating immediately before every use of yytoken. | 
| 7638 |      One alternative is translating here after every semantic action, | 
| 7639 |      but that translation would be missed if the semantic action invokes | 
| 7640 |      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or | 
| 7641 |      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an | 
| 7642 |      incorrect destructor might then be invoked immediately.  In the | 
| 7643 |      case of YYERROR or YYBACKUP, subsequent parser actions might lead | 
| 7644 |      to an incorrect destructor call or verbose syntax error message | 
| 7645 |      before the lookahead is translated.  */ | 
| 7646 |   YY_SYMBOL_PRINT ("-> $$ =" , yyr1[yyn], &yyval, &yyloc); | 
| 7647 |  | 
| 7648 |   YYPOPSTACK (yylen); | 
| 7649 |   yylen = 0; | 
| 7650 |   YY_STACK_PRINT (yyss, yyssp); | 
| 7651 |  | 
| 7652 |   *++yyvsp = yyval; | 
| 7653 |   *++yylsp = yyloc; | 
| 7654 |  | 
| 7655 |   /* Now 'shift' the result of the reduction.  Determine what state | 
| 7656 |      that goes to, based on the state we popped back to and the rule | 
| 7657 |      number reduced by.  */ | 
| 7658 |   { | 
| 7659 |     const int yylhs = yyr1[yyn] - YYNTOKENS; | 
| 7660 |     const int yyi = yypgoto[yylhs] + *yyssp; | 
| 7661 |     yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp | 
| 7662 |                ? yytable[yyi] | 
| 7663 |                : yydefgoto[yylhs]); | 
| 7664 |   } | 
| 7665 |  | 
| 7666 |   goto yynewstate; | 
| 7667 |  | 
| 7668 |  | 
| 7669 | /*--------------------------------------. | 
| 7670 | | yyerrlab -- here on detecting error.  | | 
| 7671 | `--------------------------------------*/ | 
| 7672 | yyerrlab: | 
| 7673 |   /* Make sure we have latest lookahead translation.  See comments at | 
| 7674 |      user semantic actions for why this is necessary.  */ | 
| 7675 |   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); | 
| 7676 |  | 
| 7677 |   /* If not already recovering from an error, report this error.  */ | 
| 7678 |   if (!yyerrstatus) | 
| 7679 |     { | 
| 7680 |       ++yynerrs; | 
| 7681 | #if ! YYERROR_VERBOSE | 
| 7682 |       yyerror (&yylloc, parseInfo, YY_("syntax error" )); | 
| 7683 | #else | 
| 7684 | # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ | 
| 7685 |                                         yyssp, yytoken) | 
| 7686 |       { | 
| 7687 |         char const *yymsgp = YY_("syntax error" ); | 
| 7688 |         int yysyntax_error_status; | 
| 7689 |         yysyntax_error_status = YYSYNTAX_ERROR; | 
| 7690 |         if (yysyntax_error_status == 0) | 
| 7691 |           yymsgp = yymsg; | 
| 7692 |         else if (yysyntax_error_status == 1) | 
| 7693 |           { | 
| 7694 |             if (yymsg != yymsgbuf) | 
| 7695 |               YYSTACK_FREE (ptr: yymsg); | 
| 7696 |             yymsg = (char *) YYSTACK_ALLOC (size: yymsg_alloc); | 
| 7697 |             if (!yymsg) | 
| 7698 |               { | 
| 7699 |                 yymsg = yymsgbuf; | 
| 7700 |                 yymsg_alloc = sizeof yymsgbuf; | 
| 7701 |                 yysyntax_error_status = 2; | 
| 7702 |               } | 
| 7703 |             else | 
| 7704 |               { | 
| 7705 |                 yysyntax_error_status = YYSYNTAX_ERROR; | 
| 7706 |                 yymsgp = yymsg; | 
| 7707 |               } | 
| 7708 |           } | 
| 7709 |         yyerror (sourceLocator: &yylloc, parseInfo, msg: yymsgp); | 
| 7710 |         if (yysyntax_error_status == 2) | 
| 7711 |           goto yyexhaustedlab; | 
| 7712 |       } | 
| 7713 | # undef YYSYNTAX_ERROR | 
| 7714 | #endif | 
| 7715 |     } | 
| 7716 |  | 
| 7717 |   yyerror_range[1] = yylloc; | 
| 7718 |  | 
| 7719 |   if (yyerrstatus == 3) | 
| 7720 |     { | 
| 7721 |       /* If just tried and failed to reuse lookahead token after an | 
| 7722 |          error, discard it.  */ | 
| 7723 |  | 
| 7724 |       if (yychar <= YYEOF) | 
| 7725 |         { | 
| 7726 |           /* Return failure if at end of input.  */ | 
| 7727 |           if (yychar == YYEOF) | 
| 7728 |             YYABORT; | 
| 7729 |         } | 
| 7730 |       else | 
| 7731 |         { | 
| 7732 |           yydestruct (yymsg: "Error: discarding" , | 
| 7733 |                       yytype: yytoken, yyvaluep: &yylval, yylocationp: &yylloc, parseInfo); | 
| 7734 |           yychar = YYEMPTY; | 
| 7735 |         } | 
| 7736 |     } | 
| 7737 |  | 
| 7738 |   /* Else will try to reuse lookahead token after shifting the error | 
| 7739 |      token.  */ | 
| 7740 |   goto yyerrlab1; | 
| 7741 |  | 
| 7742 |  | 
| 7743 | /*---------------------------------------------------. | 
| 7744 | | yyerrorlab -- error raised explicitly by YYERROR.  | | 
| 7745 | `---------------------------------------------------*/ | 
| 7746 | yyerrorlab: | 
| 7747 |   /* Pacify compilers when the user code never invokes YYERROR and the | 
| 7748 |      label yyerrorlab therefore never appears in user code.  */ | 
| 7749 |   if (0) | 
| 7750 |     YYERROR; | 
| 7751 |  | 
| 7752 |   /* Do not reclaim the symbols of the rule whose action triggered | 
| 7753 |      this YYERROR.  */ | 
| 7754 |   YYPOPSTACK (yylen); | 
| 7755 |   yylen = 0; | 
| 7756 |   YY_STACK_PRINT (yyss, yyssp); | 
| 7757 |   yystate = *yyssp; | 
| 7758 |   goto yyerrlab1; | 
| 7759 |  | 
| 7760 |  | 
| 7761 | /*-------------------------------------------------------------. | 
| 7762 | | yyerrlab1 -- common code for both syntax error and YYERROR.  | | 
| 7763 | `-------------------------------------------------------------*/ | 
| 7764 | yyerrlab1: | 
| 7765 |   yyerrstatus = 3;      /* Each real token shifted decrements this.  */ | 
| 7766 |  | 
| 7767 |   for (;;) | 
| 7768 |     { | 
| 7769 |       yyn = yypact[yystate]; | 
| 7770 |       if (!yypact_value_is_default (yyn)) | 
| 7771 |         { | 
| 7772 |           yyn += YYTERROR; | 
| 7773 |           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) | 
| 7774 |             { | 
| 7775 |               yyn = yytable[yyn]; | 
| 7776 |               if (0 < yyn) | 
| 7777 |                 break; | 
| 7778 |             } | 
| 7779 |         } | 
| 7780 |  | 
| 7781 |       /* Pop the current state because it cannot handle the error token.  */ | 
| 7782 |       if (yyssp == yyss) | 
| 7783 |         YYABORT; | 
| 7784 |  | 
| 7785 |       yyerror_range[1] = *yylsp; | 
| 7786 |       yydestruct (yymsg: "Error: popping" , | 
| 7787 |                   yytype: yystos[yystate], yyvaluep: yyvsp, yylocationp: yylsp, parseInfo); | 
| 7788 |       YYPOPSTACK (1); | 
| 7789 |       yystate = *yyssp; | 
| 7790 |       YY_STACK_PRINT (yyss, yyssp); | 
| 7791 |     } | 
| 7792 |  | 
| 7793 |   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | 
| 7794 |   *++yyvsp = yylval; | 
| 7795 |   YY_IGNORE_MAYBE_UNINITIALIZED_END | 
| 7796 |  | 
| 7797 |   yyerror_range[2] = yylloc; | 
| 7798 |   /* Using YYLLOC is tempting, but would change the location of | 
| 7799 |      the lookahead.  YYLOC is available though.  */ | 
| 7800 |   YYLLOC_DEFAULT (yyloc, yyerror_range, 2); | 
| 7801 |   *++yylsp = yyloc; | 
| 7802 |  | 
| 7803 |   /* Shift the error token.  */ | 
| 7804 |   YY_SYMBOL_PRINT ("Shifting" , yystos[yyn], yyvsp, yylsp); | 
| 7805 |  | 
| 7806 |   yystate = yyn; | 
| 7807 |   goto yynewstate; | 
| 7808 |  | 
| 7809 |  | 
| 7810 | /*-------------------------------------. | 
| 7811 | | yyacceptlab -- YYACCEPT comes here.  | | 
| 7812 | `-------------------------------------*/ | 
| 7813 | yyacceptlab: | 
| 7814 |   yyresult = 0; | 
| 7815 |   goto yyreturn; | 
| 7816 |  | 
| 7817 |  | 
| 7818 | /*-----------------------------------. | 
| 7819 | | yyabortlab -- YYABORT comes here.  | | 
| 7820 | `-----------------------------------*/ | 
| 7821 | yyabortlab: | 
| 7822 |   yyresult = 1; | 
| 7823 |   goto yyreturn; | 
| 7824 |  | 
| 7825 |  | 
| 7826 | #if !defined yyoverflow || YYERROR_VERBOSE | 
| 7827 | /*-------------------------------------------------. | 
| 7828 | | yyexhaustedlab -- memory exhaustion comes here.  | | 
| 7829 | `-------------------------------------------------*/ | 
| 7830 | yyexhaustedlab: | 
| 7831 |   yyerror (sourceLocator: &yylloc, parseInfo, YY_("memory exhausted" )); | 
| 7832 |   yyresult = 2; | 
| 7833 |   /* Fall through.  */ | 
| 7834 | #endif | 
| 7835 |  | 
| 7836 |  | 
| 7837 | /*-----------------------------------------------------. | 
| 7838 | | yyreturn -- parsing is finished, return the result.  | | 
| 7839 | `-----------------------------------------------------*/ | 
| 7840 | yyreturn: | 
| 7841 |   if (yychar != YYEMPTY) | 
| 7842 |     { | 
| 7843 |       /* Make sure we have latest lookahead translation.  See comments at | 
| 7844 |          user semantic actions for why this is necessary.  */ | 
| 7845 |       yytoken = YYTRANSLATE (yychar); | 
| 7846 |       yydestruct (yymsg: "Cleanup: discarding lookahead" , | 
| 7847 |                   yytype: yytoken, yyvaluep: &yylval, yylocationp: &yylloc, parseInfo); | 
| 7848 |     } | 
| 7849 |   /* Do not reclaim the symbols of the rule whose action triggered | 
| 7850 |      this YYABORT or YYACCEPT.  */ | 
| 7851 |   YYPOPSTACK (yylen); | 
| 7852 |   YY_STACK_PRINT (yyss, yyssp); | 
| 7853 |   while (yyssp != yyss) | 
| 7854 |     { | 
| 7855 |       yydestruct (yymsg: "Cleanup: popping" , | 
| 7856 |                   yytype: yystos[*yyssp], yyvaluep: yyvsp, yylocationp: yylsp, parseInfo); | 
| 7857 |       YYPOPSTACK (1); | 
| 7858 |     } | 
| 7859 | #ifndef yyoverflow | 
| 7860 |   if (yyss != yyssa) | 
| 7861 |     YYSTACK_FREE (yyss); | 
| 7862 | #endif | 
| 7863 | #if YYERROR_VERBOSE | 
| 7864 |   if (yymsg != yymsgbuf) | 
| 7865 |     YYSTACK_FREE (ptr: yymsg); | 
| 7866 | #endif | 
| 7867 |   return yyresult; | 
| 7868 | } | 
| 7869 | #line 4643 "querytransformparser.ypp" /* yacc.c:1918  */ | 
| 7870 |  | 
| 7871 |  | 
| 7872 | QString Tokenizer::tokenToString(const Token &token) | 
| 7873 | { | 
| 7874 |     switch(token.type) | 
| 7875 |     { | 
| 7876 |         case T_NCNAME: | 
| 7877 |         case T_QNAME: | 
| 7878 |         case T_NUMBER: | 
| 7879 |         case T_XPATH2_NUMBER: | 
| 7880 |             return token.value; | 
| 7881 |         case T_STRING_LITERAL: | 
| 7882 |             return QLatin1Char('"') + token.value + QLatin1Char('"'); | 
| 7883 |         default: | 
| 7884 |         { | 
| 7885 |             const QString raw(QString::fromLatin1(str: yytname[YYTRANSLATE(token.type)])); | 
| 7886 |  | 
| 7887 |             /* Remove the quotes. */ | 
| 7888 |             if(raw.at(i: 0) == QLatin1Char('"') && raw.length() > 1) | 
| 7889 |                 return raw.mid(position: 1, n: raw.length() - 2); | 
| 7890 |             else | 
| 7891 |                 return raw; | 
| 7892 |         } | 
| 7893 |     } | 
| 7894 | } | 
| 7895 |  | 
| 7896 | } /* namespace Patternist */ | 
| 7897 |  | 
| 7898 | QT_END_NAMESPACE | 
| 7899 |  | 
| 7900 | // vim: et:ts=4:sw=4:sts=4:syntax=yacc | 
| 7901 |  |