diff options
author | Alan Alpert <alan.alpert@nokia.com> | 2009-05-05 03:18:24 (GMT) |
---|---|---|
committer | Alan Alpert <alan.alpert@nokia.com> | 2009-05-05 03:18:24 (GMT) |
commit | eb80cce5bb3d5360fa30e7bacad4210f6ce86e10 (patch) | |
tree | fe389ddeee1831e441761b67a026f27a2ef91b93 /src | |
parent | ca737861c5b6459a3f5f33cafbbe371da5c113c4 (diff) | |
parent | caa1832f8dd6012ed3d44d7b822c500485ffb5ec (diff) | |
download | Qt-eb80cce5bb3d5360fa30e7bacad4210f6ce86e10.zip Qt-eb80cce5bb3d5360fa30e7bacad4210f6ce86e10.tar.gz Qt-eb80cce5bb3d5360fa30e7bacad4210f6ce86e10.tar.bz2 |
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src')
37 files changed, 1185 insertions, 797 deletions
diff --git a/src/3rdparty/easing/legal.qdoc b/src/3rdparty/easing/legal.qdoc index 25f67e1..1be5f66 100644 --- a/src/3rdparty/easing/legal.qdoc +++ b/src/3rdparty/easing/legal.qdoc @@ -1,7 +1,7 @@ /*! \page legal-easing.html \title Easing Equations by Robert Penner -\ingroup animation +\ingroup group_animation \legalese \code diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp index 6c55a77..f2d8668 100644 --- a/src/corelib/animation/qabstractanimation.cpp +++ b/src/corelib/animation/qabstractanimation.cpp @@ -41,7 +41,7 @@ /*! \class QAbstractAnimation - \ingroup animation + \ingroup group_animation \brief The QAbstractAnimation class provides an abstract base class for animations. \since 4.5 \preliminary diff --git a/src/corelib/animation/qanimationgroup.cpp b/src/corelib/animation/qanimationgroup.cpp index c4066ce..8c9f358 100644 --- a/src/corelib/animation/qanimationgroup.cpp +++ b/src/corelib/animation/qanimationgroup.cpp @@ -43,7 +43,7 @@ \class QAnimationGroup \brief The QAnimationGroup class is an abstract base class for group of animations. \since 4.5 - \ingroup animation + \ingroup group_animation \preliminary QAnimationGroup represents a group of animations, such as parallel or sequential, diff --git a/src/corelib/animation/qparallelanimationgroup.cpp b/src/corelib/animation/qparallelanimationgroup.cpp index 407ffde..a75f85c 100644 --- a/src/corelib/animation/qparallelanimationgroup.cpp +++ b/src/corelib/animation/qparallelanimationgroup.cpp @@ -43,7 +43,7 @@ \class QParallelAnimationGroup \brief The QParallelAnimationGroup class provides a parallel group of animations. \since 4.5 - \ingroup animation + \ingroup group_animation \preliminary The animations are all started at the same time, and run in parallel. The animation group diff --git a/src/corelib/animation/qpauseanimation.cpp b/src/corelib/animation/qpauseanimation.cpp index 30ea92c..86c3049 100644 --- a/src/corelib/animation/qpauseanimation.cpp +++ b/src/corelib/animation/qpauseanimation.cpp @@ -43,7 +43,7 @@ \class QPauseAnimation \brief The QPauseAnimation class provides a pause for QSequentialAnimationGroup. \since 4.5 - \ingroup animation + \ingroup group_animation \preliminary */ diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp index 9a0c5bc..6b03c33 100644 --- a/src/corelib/animation/qpropertyanimation.cpp +++ b/src/corelib/animation/qpropertyanimation.cpp @@ -42,7 +42,7 @@ /*! \class QPropertyAnimation \brief The QPropertyAnimation class animates properties for QObject(and QWidget) - \ingroup animation + \ingroup group_animation \preliminary This class is part of {The Animation Framework}. You can use QPropertyAnimation diff --git a/src/corelib/animation/qsequentialanimationgroup.cpp b/src/corelib/animation/qsequentialanimationgroup.cpp index 61ff98d..45673c2 100644 --- a/src/corelib/animation/qsequentialanimationgroup.cpp +++ b/src/corelib/animation/qsequentialanimationgroup.cpp @@ -43,7 +43,7 @@ \class QSequentialAnimationGroup \brief The QSequentialAnimationGroup class provides a sequential group of animations. \since 4.5 - \ingroup animation + \ingroup group_animation \preliminary The first animation in the group is started first, and when it finishes, the next animation diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp index 9f8cbf0..29819e5 100644 --- a/src/corelib/animation/qvariantanimation.cpp +++ b/src/corelib/animation/qvariantanimation.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE /*! \class QVariantAnimation - \ingroup animation + \ingroup group_animation \brief The QVariantAnimation class provides an abstract base class for animations. \since 4.5 \preliminary diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index 4b4dfe5..efd0938 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -291,7 +291,7 @@ QEvent::~QEvent() /*! \property QEvent::accepted - the accept flag of the event object + \brief The accept flag of the event object Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent diff --git a/src/declarative/fx/qfxitem.cpp b/src/declarative/fx/qfxitem.cpp index 53e198f..84dc484 100644 --- a/src/declarative/fx/qfxitem.cpp +++ b/src/declarative/fx/qfxitem.cpp @@ -1604,12 +1604,20 @@ void QFxItem::setKeepMouseGrab(bool keep) d->_keepMouse = keep; } -void QFxItem::activeFocusChanged(bool) +/*! + This function emits the \e activeFocusChanged signal. + \a flag is not used. + */ +void QFxItem::activeFocusChanged(bool flag) { emit activeFocusChanged(); } -void QFxItem::focusChanged(bool) +/*! + This function emits the \e focusChanged signal. + \a flag is not used. + */ +void QFxItem::focusChanged(bool flag) { emit focusChanged(); } diff --git a/src/declarative/qml/parser/javascript.g b/src/declarative/qml/parser/javascript.g index f1d8826..5482392 100644 --- a/src/declarative/qml/parser/javascript.g +++ b/src/declarative/qml/parser/javascript.g @@ -45,7 +45,7 @@ %parser JavaScriptGrammar %decl javascriptparser_p.h %impl javascriptparser.cpp -%expect 8 +%expect 2 %expect-rr 1 %token T_AND "&" T_AND_AND "&&" T_AND_EQ "&=" @@ -86,7 +86,7 @@ %token T_IMPORT "import" %nonassoc SHIFT_THERE -%nonassoc T_IDENTIFIER T_COLON +%nonassoc T_IDENTIFIER T_COLON T_SIGNAL T_PROPERTY %nonassoc REDUCE_HERE %start UiProgram @@ -688,7 +688,8 @@ UiObjectMember: T_DEFAULT T_PROPERTY UiPropertyType T_IDENTIFIER ; case $rule_number: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval); node->isDefaultMember = true; - node->propertyToken = loc(1); + node->defaultToken = loc(1); + node->propertyToken = loc(2); node->typeToken = loc(3); node->identifierToken = loc(4); sym(1).Node = node; @@ -714,7 +715,8 @@ case $rule_number: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval, sym(6).Expression); node->isDefaultMember = true; - node->propertyToken = loc(1); + node->defaultToken = loc(1); + node->propertyToken = loc(2); node->typeToken = loc(3); node->identifierToken = loc(4); node->colonToken = loc(5); @@ -737,9 +739,8 @@ case $rule_number: { ./ UiQualifiedId: T_RESERVED_WORD ; -/. -case $rule_number: -./ +/.case $rule_number: ./ + UiQualifiedId: T_RETURN ; /. case $rule_number: @@ -751,6 +752,7 @@ case $rule_number: ./ JsIdentifier: T_IDENTIFIER; + JsIdentifier: T_PROPERTY ; /. case $rule_number: { @@ -759,6 +761,7 @@ case $rule_number: { break; } ./ + JsIdentifier: T_SIGNAL ; /. case $rule_number: { @@ -1043,6 +1046,8 @@ case $rule_number: { ./ PropertyName: T_SIGNAL ; +/.case $rule_number:./ + PropertyName: T_PROPERTY ; /. case $rule_number: { @@ -2445,6 +2450,8 @@ case $rule_number: { ./ LabelledStatement: T_SIGNAL T_COLON Statement ; +/.case $rule_number:./ + LabelledStatement: T_PROPERTY T_COLON Statement ; /. case $rule_number: { @@ -2535,22 +2542,7 @@ case $rule_number: { } break; ./ -FunctionDeclaration: T_FUNCTION T_SIGNAL T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; -FunctionDeclaration: T_FUNCTION T_PROPERTY T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; -/. -case $rule_number: { - AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()), sym(4).FormalParameterList, sym(7).FunctionBody); - node->functionToken = loc(1); - node->identifierToken = loc(2); - node->lparenToken = loc(3); - node->rparenToken = loc(5); - node->lbraceToken = loc(6); - node->rbraceToken = loc(8); - sym(1).Node = node; -} break; -./ - -FunctionDeclaration: T_FUNCTION T_IDENTIFIER T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; +FunctionDeclaration: T_FUNCTION JsIdentifier T_LPAREN FormalParameterListOpt T_RPAREN T_LBRACE FunctionBodyOpt T_RBRACE ; /. case $rule_number: { AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); diff --git a/src/declarative/qml/parser/javascriptast_p.h b/src/declarative/qml/parser/javascriptast_p.h index 3a22fff..ad317e8 100644 --- a/src/declarative/qml/parser/javascriptast_p.h +++ b/src/declarative/qml/parser/javascriptast_p.h @@ -2336,7 +2336,12 @@ public: { kind = K; } virtual SourceLocation firstSourceLocation() const - { return propertyToken; } + { + if (defaultToken.isValid()) + return defaultToken; + + return propertyToken; + } virtual SourceLocation lastSourceLocation() const { @@ -2359,6 +2364,7 @@ public: JavaScriptNameIdImpl *name; ExpressionNode *expression; bool isDefaultMember; + SourceLocation defaultToken; SourceLocation propertyToken; SourceLocation typeToken; SourceLocation identifierToken; diff --git a/src/declarative/qml/parser/javascriptgrammar.cpp b/src/declarative/qml/parser/javascriptgrammar.cpp index b42f419..a33f343 100644 --- a/src/declarative/qml/parser/javascriptgrammar.cpp +++ b/src/declarative/qml/parser/javascriptgrammar.cpp @@ -84,9 +84,9 @@ const int JavaScriptGrammar::lhs [] = { 157, 157, 157, 157, 157, 158, 158, 158, 158, 159, 159, 159, 159, 160, 160, 161, 163, 178, 178, 181, 181, 179, 179, 182, 180, 162, 162, 162, 164, 164, - 165, 165, 165, 183, 184, 166, 166, 107, 107, 107, - 121, 188, 188, 185, 185, 186, 186, 189, 190, 190, - 191, 191, 187, 187, 113, 113, 192}; + 165, 165, 165, 183, 184, 166, 166, 107, 121, 188, + 188, 185, 185, 186, 186, 189, 190, 190, 191, 191, + 187, 187, 113, 113, 192}; const int JavaScriptGrammar:: rhs[] = { 2, 1, 1, 1, 2, 3, 3, 0, 1, 2, @@ -118,9 +118,9 @@ const int JavaScriptGrammar:: rhs[] = { 5, 9, 10, 7, 8, 2, 2, 3, 3, 2, 2, 3, 3, 3, 3, 5, 5, 3, 5, 1, 2, 0, 1, 4, 3, 3, 3, 3, 3, 3, - 3, 3, 4, 5, 2, 2, 2, 8, 8, 8, - 8, 1, 3, 0, 1, 0, 1, 1, 1, 2, - 1, 1, 0, 1, 0, 1, 2}; + 3, 3, 4, 5, 2, 2, 2, 8, 8, 1, + 3, 0, 1, 0, 1, 1, 1, 2, 1, 1, + 0, 1, 0, 1, 2}; const int JavaScriptGrammar::action_default [] = { 8, 2, 0, 4, 3, 0, 0, 0, 6, 7, @@ -128,8 +128,8 @@ const int JavaScriptGrammar::action_default [] = { 41, 241, 9, 1, 0, 0, 36, 0, 29, 28, 27, 0, 32, 0, 143, 210, 174, 182, 178, 122, 194, 170, 34, 107, 45, 123, 186, 190, 111, 140, - 121, 126, 106, 160, 147, 0, 51, 52, 48, 313, - 39, 315, 63, 0, 0, 0, 0, 0, 46, 49, + 121, 126, 106, 160, 147, 0, 51, 52, 48, 311, + 39, 313, 63, 0, 0, 0, 0, 0, 46, 49, 0, 0, 40, 41, 50, 44, 0, 47, 0, 0, 136, 0, 0, 123, 142, 125, 124, 0, 0, 0, 138, 139, 137, 141, 0, 171, 0, 0, 0, 0, @@ -143,12 +143,12 @@ const int JavaScriptGrammar::action_default [] = { 0, 120, 114, 0, 207, 200, 198, 205, 206, 204, 203, 209, 202, 201, 199, 208, 195, 0, 183, 0, 0, 187, 0, 0, 191, 0, 0, 117, 109, 0, - 108, 0, 113, 127, 0, 314, 304, 305, 0, 302, - 0, 303, 0, 306, 218, 225, 224, 232, 220, 0, - 221, 307, 0, 312, 222, 223, 228, 226, 309, 308, - 311, 229, 0, 0, 0, 0, 0, 313, 39, 0, - 315, 40, 212, 254, 41, 0, 0, 0, 0, 0, - 230, 231, 219, 227, 255, 256, 301, 310, 0, 270, + 108, 0, 113, 127, 0, 312, 302, 303, 0, 300, + 0, 301, 0, 304, 218, 225, 224, 232, 220, 0, + 221, 305, 0, 310, 222, 223, 228, 226, 307, 306, + 309, 229, 0, 0, 0, 0, 0, 311, 39, 0, + 313, 40, 212, 254, 41, 0, 0, 0, 0, 0, + 230, 231, 219, 227, 255, 256, 299, 308, 0, 270, 271, 272, 273, 0, 266, 267, 268, 269, 296, 297, 0, 0, 0, 0, 0, 259, 260, 216, 214, 176, 184, 180, 196, 172, 217, 0, 123, 188, 192, 165, @@ -158,612 +158,589 @@ const int JavaScriptGrammar::action_default [] = { 197, 212, 213, 0, 212, 0, 0, 262, 0, 0, 0, 264, 0, 185, 0, 0, 189, 0, 0, 193, 252, 0, 244, 253, 247, 0, 251, 0, 212, 245, - 0, 212, 0, 0, 263, 0, 0, 0, 265, 39, - 40, 41, 304, 0, 0, 306, 0, 300, 304, 0, - 0, 306, 0, 299, 304, 0, 0, 306, 0, 298, - 0, 288, 0, 0, 0, 258, 0, 257, 0, 316, - 0, 72, 234, 237, 0, 73, 240, 76, 101, 78, - 79, 48, 83, 84, 39, 85, 88, 46, 49, 40, - 212, 41, 50, 91, 44, 93, 47, 95, 96, 241, - 98, 99, 103, 0, 65, 0, 0, 67, 71, 69, - 57, 68, 70, 0, 66, 56, 235, 233, 111, 112, - 117, 0, 110, 0, 287, 0, 274, 275, 0, 286, - 0, 0, 0, 277, 282, 280, 283, 0, 0, 281, - 282, 0, 278, 0, 279, 236, 285, 0, 236, 284, - 0, 289, 290, 0, 236, 291, 292, 0, 0, 293, - 0, 0, 0, 294, 295, 129, 128, 0, 0, 0, - 261, 0, 0, 0, 276, 0, 64, 0, 61, 63, - 54, 0, 60, 55, 62, 59, 53, 0, 58, 133, - 131, 135, 132, 130, 134, 0, 0, 0, 0, 18, - 13, 0, 14, 10, 0, 31, 0, 33, 30, 0, - 0, 26, 39, 63, 21, 0, 24, 16, 39, 0, - 11, 0, 17, 0, 20, 12, 0, 25, 39, 63, - 15, 0, 19, 22, 23, 43, 249, 242, 0, 250, - 246, 0, 248, 238, 0, 239, 243, 317}; + 0, 212, 0, 0, 263, 0, 0, 0, 265, 312, + 302, 0, 0, 304, 0, 298, 0, 288, 0, 0, + 0, 258, 0, 257, 0, 314, 0, 72, 234, 237, + 0, 73, 240, 76, 101, 78, 79, 48, 83, 84, + 39, 85, 88, 46, 49, 40, 212, 41, 50, 91, + 44, 93, 47, 95, 96, 241, 98, 99, 103, 0, + 65, 0, 0, 67, 71, 69, 57, 68, 70, 0, + 66, 56, 235, 233, 111, 112, 117, 0, 110, 0, + 287, 0, 274, 275, 0, 286, 0, 0, 0, 277, + 282, 280, 283, 0, 0, 281, 282, 0, 278, 0, + 279, 236, 285, 0, 236, 284, 0, 289, 290, 0, + 236, 291, 292, 0, 0, 293, 0, 0, 0, 294, + 295, 129, 128, 0, 0, 0, 261, 0, 0, 0, + 276, 0, 64, 0, 61, 63, 54, 0, 60, 55, + 62, 59, 53, 0, 58, 133, 131, 135, 132, 130, + 134, 0, 0, 18, 13, 0, 14, 10, 0, 31, + 0, 33, 30, 0, 0, 26, 39, 63, 21, 0, + 24, 16, 39, 0, 11, 0, 17, 0, 20, 12, + 0, 25, 39, 63, 15, 0, 19, 22, 23, 43, + 249, 242, 0, 250, 246, 0, 248, 238, 0, 239, + 243, 315}; const int JavaScriptGrammar::goto_default [] = { - 6, 5, 23, 1, 4, 3, 22, 539, 540, 519, - 24, 535, 536, 230, 524, 219, 223, 252, 44, 52, - 497, 495, 390, 389, 35, 496, 388, 391, 130, 48, + 6, 5, 23, 1, 4, 3, 22, 523, 524, 503, + 24, 519, 520, 378, 508, 219, 11, 252, 44, 52, + 483, 481, 376, 375, 35, 482, 374, 377, 130, 48, 43, 168, 50, 39, 167, 45, 51, 80, 49, 34, 54, 53, 289, 41, 283, 36, 279, 38, 281, 37, - 280, 46, 287, 47, 288, 40, 282, 278, 319, 445, + 280, 46, 287, 47, 288, 40, 282, 278, 319, 431, 284, 285, 214, 218, 220, 224, 225, 216, 215, 227, - 253, 226, 231, 250, 251, 217, 394, 393, 25, 558, - 557, 341, 342, 560, 344, 559, 343, 453, 457, 460, - 456, 455, 475, 476, 208, 222, 204, 207, 221, 229, + 253, 226, 231, 250, 251, 217, 380, 379, 25, 542, + 541, 341, 342, 544, 344, 543, 343, 439, 443, 446, + 442, 441, 461, 462, 208, 222, 204, 207, 221, 229, 228, 0}; const int JavaScriptGrammar::action_index [] = { - -13, -91, 64, -91, 63, 406, 96, 108, -91, -91, - -91, -91, -91, -91, 60, 146, 68, 189, -91, -91, - 71, -91, -91, 383, 151, 178, -91, 208, -91, -91, - -91, 44, 62, 686, 101, -91, 81, 41, 10, 261, - -91, 288, 70, -91, -91, 527, 95, 86, 265, 235, - -91, -91, -91, 439, 237, 686, -91, -91, -91, 173, - -91, 1184, 98, 686, 686, 686, 606, 686, -91, -91, - 686, 686, -91, -91, -91, -91, 686, -91, 686, 686, - -91, 686, 686, 74, 147, -91, -91, 686, 686, 686, - -91, -91, -91, 203, 686, 290, 686, 686, 686, 686, - 365, 686, 686, 686, 686, 686, 686, 237, 686, 686, - 686, 82, 79, 77, 303, 231, 198, 197, 237, 439, - 355, 439, 686, 65, 686, 92, 1097, 686, 686, -91, + 62, -91, -18, -91, -40, 362, 44, 117, -91, -91, + -91, -91, -91, -91, -12, 144, 20, 130, -91, -91, + 14, -91, -91, 356, 127, 195, -91, 158, -91, -91, + -91, 11, 34, 678, 125, -91, 41, -9, -27, 204, + -91, 263, 58, -91, -91, 519, 61, 63, 220, 131, + -91, -91, -91, 330, 159, 678, -91, -91, -91, 154, + -91, 1176, 53, 678, 678, 678, 598, 678, -91, -91, + 678, 678, -91, -91, -91, -91, 678, -91, 678, 678, + -91, 678, 678, 118, 221, -91, -91, 678, 678, 678, + -91, -91, -91, 217, 678, 269, 678, 678, 678, 678, + 311, 678, 678, 678, 678, 678, 678, 228, 678, 678, + 678, 104, 65, 64, 187, 164, 214, 295, 295, 431, + 431, 345, 678, -7, 678, 90, 1089, 678, 678, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, -91, - -91, -91, -91, 124, 686, -91, -91, 171, 61, -91, - 686, -91, -91, 686, -91, -91, -91, -91, -91, -91, - -91, -91, -91, -91, -91, -91, -91, 686, 66, 686, - 686, 97, 91, 686, -91, 1097, 686, 686, -91, 117, - -91, 14, -91, -91, 40, -91, 182, 69, 43, -91, - 236, -91, 47, 1445, -91, -91, -91, -91, -91, 209, - -91, -91, 32, -91, -91, -91, -91, -91, -91, 1445, - -91, -91, 310, 308, 83, 1358, 35, 217, 72, 58, - 1706, 85, 686, -91, 76, 59, 686, 51, 50, 55, - -91, -91, -91, -91, -91, -91, -91, -91, 120, -91, - -91, -91, -91, 125, -91, -91, -91, -91, -91, -91, - 42, 49, 686, 148, 127, -91, -91, 766, -91, 80, - 54, -14, -91, 267, 57, 11, 507, 88, 114, 371, - 303, 164, 686, 271, 686, 686, 686, 686, 371, 686, - 686, 686, 686, 686, 237, 237, 230, 303, 234, 371, - 371, 371, 686, -40, 686, -1, 686, -91, 527, 686, - -91, 686, -4, -51, 686, -57, 1358, -91, 686, 139, - 1358, -91, 686, -39, 686, 686, 88, -2, 686, -91, - 0, 134, -18, -91, -91, 686, -91, 221, 686, -91, - -50, 686, -45, 1358, -91, 686, 149, 1358, -91, -30, - -29, -28, 162, -48, -31, 1445, -54, -91, 176, -42, - 12, 1445, -5, -91, 238, -6, 23, 1445, 3, -91, - 1358, -91, 686, 105, 1358, 33, 1358, -91, 36, 38, - -7, -91, -91, 1358, 7, 285, 56, 292, 93, 686, - 1358, 9, 31, 282, 53, 30, 606, 46, 48, 52, - 930, 37, 17, -10, 21, 686, 20, -8, 686, 16, - 686, -17, -16, 686, -91, 1271, 15, -91, -91, -91, - -91, -91, -91, 686, -91, -91, -91, -91, 156, -91, - 686, 8, -91, 1358, -91, 99, -91, -91, 1358, -91, - 686, 102, 2, -91, 27, -91, 26, 94, 686, -91, - 24, 29, -91, -15, -91, 1358, -91, 100, 1358, -91, - 192, -91, -91, 103, 1358, 19, -91, 5, 4, -91, - 185, -27, 1, -91, -91, -91, -91, 686, 112, 1358, - -91, 686, 123, 1358, -91, 107, 22, 846, -91, 13, - -91, 1010, -91, -91, -91, -91, -91, 116, -91, -91, - -91, -91, -91, -91, -91, 6, 25, 34, 429, -91, - -91, 426, -91, -91, 28, 45, 686, 39, -91, 1619, - 212, -91, 104, 356, -91, 73, -91, -91, 18, 145, - -91, 131, -91, 296, -91, -91, 1532, -91, 141, 332, - -91, 142, -91, -91, -91, -91, -3, -91, 159, -91, - -91, 686, -91, -91, 167, -91, -91, -91, + -91, -91, -91, 113, 678, -91, -91, 42, -8, -91, + 678, -91, -91, 678, -91, -91, -91, -91, -91, -91, + -91, -91, -91, -91, -91, -91, -91, 678, 22, 678, + 678, 29, 5, 678, -91, 1089, 678, 678, -91, 110, + -91, 51, -91, -91, 36, -91, 184, 85, 60, -91, + 151, -91, 56, 1437, -91, -91, -91, -91, -91, 166, + -91, -91, 28, -91, -91, -91, -91, -91, -91, 1437, + -91, -91, 290, 244, 102, 1350, 49, 178, 73, 39, + 1698, 70, 678, -91, 72, 46, 678, 43, 37, 38, + -91, -91, -91, -91, -91, -91, -91, -91, 68, -91, + -91, -91, -91, 71, -91, -91, -91, -91, -91, -91, + 50, 54, 678, 88, 66, -91, -91, 842, -91, 87, + 47, 45, -91, 257, 59, 26, 486, 84, 146, 363, + 295, 205, 678, 249, 678, 678, 678, 678, 363, 678, + 678, 678, 678, 678, 295, 295, 295, 295, 295, 293, + 363, 363, 678, -21, 678, 18, 678, -91, 519, 678, + -91, 678, 13, -37, 678, -38, 1350, -91, 678, 98, + 1350, -91, 678, -28, 678, 678, 16, 8, 678, -91, + 0, 229, -15, -91, -91, 678, -91, 219, 678, -91, + -34, 678, -32, 1350, -91, 678, 89, 1350, -91, -6, + 197, -24, 1, 1437, -23, -91, 1350, -91, 678, 94, + 1350, 17, 1350, -91, 6, 15, -26, -91, -91, 1350, + -30, 231, 7, 278, 76, 678, 1350, -5, -36, 260, + -3, -29, 598, -4, -1, -91, 762, -91, 3, 19, + 4, 678, -2, -25, 678, 2, 678, -35, -10, 678, + -91, 1263, 52, -91, -91, -91, -91, -91, -91, 678, + -91, -91, -91, -91, 167, -91, 678, 21, -91, 1350, + -91, 74, -91, -91, 1350, -91, 678, 91, 25, -91, + 105, -91, 105, 97, 678, -91, 105, 55, -91, 23, + -91, 1350, -91, 101, 1350, -91, 208, -91, -91, 92, + 1350, 40, -91, 33, 35, -91, 180, 24, 31, -91, + -91, -91, -91, 678, 86, 1350, -91, 678, 93, 1350, + -91, 106, 57, 922, -91, 48, -91, 1002, -91, -91, + -91, -91, -91, 132, -91, -91, -91, -91, -91, -91, + -91, 10, 424, -91, -91, 421, -91, -91, 9, 30, + 678, 27, -91, 1611, 156, -91, 134, 342, -91, 95, + -91, -91, 12, 116, -91, 124, -91, 270, -91, -91, + 1524, -91, 112, 352, -91, 114, -91, -91, -91, -91, + 32, -91, 169, -91, -91, 678, -91, -91, 139, -91, + -91, -91, - -102, -102, -102, -102, -4, 194, -102, -102, -102, -102, + -102, -102, -102, -102, 34, 63, -102, -102, -102, -102, + -102, -102, -102, -102, -102, 53, -102, -102, -102, -102, + -102, -102, -102, 235, -102, 9, -102, 4, -102, -102, + -102, -102, -102, -5, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -51, -102, -102, -102, -102, + -102, -102, -102, -102, -102, 156, -102, -102, -102, 18, + -102, -102, -102, -11, 95, 88, 90, 79, -102, -102, + 80, 100, -102, -102, -102, -102, 114, -102, 101, 107, + -102, 73, 131, -102, -102, -102, -102, 108, 111, 115, + -102, -102, -102, -102, 165, -102, 83, 85, 118, 71, + -102, 120, 144, 145, 143, 147, 159, -102, 122, 129, + 66, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, 41, -102, 65, -102, 77, 26, 19, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, -102, 345, -102, 2, -102, 3, -102, -102, - -102, -102, -102, -7, -102, -102, -102, -102, -102, -102, - -102, -102, -102, -102, -102, -49, -102, -102, -102, -102, - -102, -102, -102, -102, -102, 154, -102, -102, -102, 6, - -102, -102, -102, 7, 143, 140, 141, 155, -102, -102, - 97, 101, -102, -102, -102, -102, 79, -102, 83, 108, - -102, 133, 125, -102, -102, -102, -102, 118, 111, 59, - -102, -102, -102, -102, 104, -102, 115, 123, 126, 124, - -102, 122, 102, 89, 82, 95, 165, -102, 80, 146, - 148, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, 149, -102, 153, -102, 249, 43, 35, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, 27, -102, -102, -102, -102, -102, + 28, -102, -102, 42, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, 139, -102, 138, + -1, -102, -102, 1, -102, 230, -10, 55, -102, -102, + -102, -102, -102, -102, -102, -102, -3, -102, -102, -102, + -4, -102, -102, 86, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, -102, -102, -102, -102, 254, + -102, -102, 56, 50, -102, 46, -102, -6, -102, -102, + -102, -102, -2, -102, -102, -102, 17, -28, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, -102, -102, 16, -102, -102, -102, -102, -102, - 21, -102, -102, 17, -102, -102, -102, -102, -102, -102, - -102, -102, -102, -102, -102, -102, -102, 74, -102, 34, - 48, -102, -102, 44, -102, 220, 49, 81, -102, -102, - -102, -102, -102, -102, -102, -102, 55, -102, -102, -102, - 52, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, -102, -102, -102, -102, -102, -102, -102, -43, - -102, -102, 56, 20, -102, 15, -102, 57, -102, -102, - 65, -102, 46, -102, -102, -102, 50, -6, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, + -102, -102, 5, -102, -102, -102, -102, 146, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, 51, -102, -102, -102, -102, 60, -102, -102, + -102, 43, 225, -102, 237, 226, 197, 196, -102, 127, + 136, 137, 135, 93, -102, -102, -102, -102, -102, -102, + -102, -102, 174, -102, 180, -102, 170, -102, -102, 183, + -102, 68, -102, -102, 70, -102, 49, -102, 48, -102, + 47, -102, 193, -102, 161, 219, -102, -102, 189, -102, + -102, -102, -102, -102, -102, 190, -102, 59, 72, -102, + -102, 75, -102, 57, -102, 58, -102, 51, -102, -102, + 64, -102, -102, 203, -102, -102, 44, -102, 32, -102, + 31, -102, 29, -102, -102, -102, -102, -102, -102, 40, + -102, 37, -102, 38, -102, 61, 36, -102, -102, 30, + -102, -102, 62, -102, -102, -102, 35, -102, -102, -102, + -102, 39, -102, 3, 128, -102, 155, -102, -102, 22, + -102, 14, -102, -102, -102, -102, -102, -102, -102, 13, + -102, -102, -102, -102, -102, -102, 123, -102, -102, 45, + -102, -102, -102, -102, 25, -102, 52, -102, -102, -102, + -102, -102, -80, -102, 54, -102, -72, -102, -102, -102, + -102, -73, -102, -102, -76, -102, -102, -102, -102, -102, + -102, -87, -102, -102, -45, -102, 12, -102, -31, -102, + -102, -102, -102, 20, -102, 15, -102, 98, -102, 6, + -102, -102, -102, 0, -102, 2, -102, -16, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, 58, 219, -102, 216, 191, 201, 182, -102, 62, - 63, 71, 73, 64, -102, -102, -102, -102, -102, -102, - -102, -102, 181, -102, 199, -102, 200, -102, -102, 192, - -102, 68, -102, -102, 69, -102, 31, -102, 27, -102, - 22, -102, 159, -102, 167, 166, -102, -102, 173, -102, - -102, -102, -102, -102, -102, 180, -102, 72, 67, -102, - -102, 66, -102, 42, -102, 45, -102, 38, -102, -102, - -102, -102, 75, -102, -102, -65, -102, -102, 92, -102, - -102, -62, -102, -102, 103, -102, -102, -61, -102, -102, - 36, -102, 33, -102, 39, -102, 41, -102, -102, -102, - -102, -102, -102, 40, -102, 32, -102, 29, -102, 137, - 18, -102, -102, 19, -102, -102, 147, -102, -102, -102, - 24, -102, -102, -102, -102, 28, -102, -16, 158, -102, - 96, -102, -102, 53, -102, 37, -102, -102, -102, -102, - -102, -102, -102, 47, -102, -102, -102, -102, -102, -102, - 120, -102, -102, 54, -102, -102, -102, -102, -1, -102, - -10, -102, -102, -102, -102, -102, -91, -102, -13, -102, - -77, -102, -102, -102, -102, 76, -102, -102, 127, -102, - -102, -102, -102, -102, 13, -78, -102, -102, -35, -102, - 14, -102, -48, -102, -102, -102, -102, 4, -102, 8, - -102, 1, -102, 0, -102, -102, -102, 12, -102, 5, - -102, -17, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -102, -102, -102, -102, -102, -102, -102, 253, -102, - -102, 345, -102, -102, -102, -102, -9, -102, -102, 10, - 11, -102, 98, 70, -102, -102, -102, -102, 9, -102, - -102, -102, -102, 234, -102, -102, -3, -102, -5, 243, - -102, -102, -102, -102, -102, -102, -102, -102, -102, -102, - -102, -21, -102, -102, 61, -102, -102, -102}; + -102, -102, 232, -102, -102, 238, -102, -102, -102, -102, + 11, -102, -102, 16, -9, -102, -7, 74, -102, -102, + -102, -102, 24, -102, -102, -102, -102, 194, -102, -102, + 8, -102, -8, 188, -102, -102, -102, -102, -102, -102, + -102, -102, -102, -102, -102, 21, -102, -102, 60, -102, + -102, -102}; const int JavaScriptGrammar::action_info [] = { - 292, 367, 365, 326, 164, 338, 362, 368, 374, 312, - 324, 351, 364, 355, 561, 353, -81, 345, 370, 487, - 491, 498, 433, -97, -70, 474, 450, -94, -92, 458, - 504, 458, 458, 482, 474, 454, 465, 474, 314, 478, - 464, 480, 362, 423, 448, 371, 425, 164, 435, 386, - 373, 518, 526, -89, 376, -71, 377, 525, 379, 443, - -67, 368, 437, -100, 314, 316, 382, 277, 442, 33, - 374, 277, 321, 32, 202, 2, 206, 210, 164, 380, - 213, 292, 94, 448, 474, 272, 487, 256, 124, 122, - 332, 491, 443, 94, 382, 450, 567, 187, 193, 187, - 528, 518, 312, 212, 461, 0, 498, 468, 164, 477, - 164, 380, 0, 164, 122, 499, 85, 81, 271, 81, - 164, 172, 81, 478, 164, 164, 27, 86, 82, 7, - 82, 164, 164, 82, 554, 553, 189, 518, 546, 0, - 190, 81, 347, 124, 269, 268, 530, 164, 380, 462, - 543, 2, 82, 543, 269, 268, 164, 164, 529, 87, - 447, 446, 452, 500, 334, 384, 530, 564, 335, 9, - 8, 195, 489, 200, 518, 515, 508, 0, 0, 170, - 165, 262, 261, 493, 0, 0, 267, 266, 276, 275, - 196, 60, 440, 60, 0, 348, 60, 0, 552, 330, - 164, 544, 60, 0, 88, 60, 0, 60, 274, 357, - 89, 60, 516, 517, 60, 87, 0, 164, 28, 0, - 565, 563, 108, 108, 109, 109, 0, 0, 72, 73, - 72, 73, 0, 72, 73, 110, 110, 28, 0, 72, - 73, 60, 72, 73, 72, 73, 359, 87, 72, 73, - 60, 72, 73, 472, 471, 108, 108, 109, 109, 108, - 88, 109, 108, 30, 109, 60, 89, 60, 110, 110, - 255, 254, 110, 0, 29, 110, 126, 0, 72, 73, - 195, 0, 30, 360, 361, 294, 295, 72, 73, 294, - 295, 0, 88, 29, 0, 127, 0, 128, 89, 196, - 0, 197, 72, 73, 72, 73, 96, 97, 96, 97, - 0, 60, 296, 297, 60, 0, 296, 297, -313, 0, - 0, 60, 0, 0, 0, 538, 0, 0, 108, 0, - 109, 0, 0, 98, 99, 98, 99, 60, 0, 60, - 498, 110, 0, 0, 0, 0, 260, 259, 72, 73, - 0, 72, 73, 265, 264, 19, 0, 0, 72, 73, - 0, 538, 72, 73, 498, 0, 0, 0, 0, 265, - 264, 260, 259, 0, 72, 73, 72, 73, 101, 102, - 0, 18, 0, 0, 0, 538, 103, 104, 101, 102, - 105, 19, 106, 14, 299, 300, 103, 104, 72, 73, - 105, 0, 106, 301, 0, 15, 302, 0, 303, 0, - 0, 0, 16, 0, 0, 19, 14, 18, 0, 0, - 0, 0, 72, 73, 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 16, 14, 0, 0, 14, - 0, 18, 19, 0, 0, 0, 0, 0, 15, 17, - 20, 15, 0, 0, 0, 16, 0, 21, 16, 0, - 0, 0, 101, 102, 0, 19, 13, 0, 18, 0, - 103, 104, 17, 20, 105, 0, 106, 0, 0, 0, - 21, 522, 0, 0, 520, 19, 0, 0, 19, 13, - 0, 18, 17, 20, 0, 17, 20, 0, 0, 0, - 21, 0, 0, 21, 0, 0, 0, 0, 0, 13, - 174, 18, 13, 0, 18, 0, 0, 0, 0, 0, - 175, 0, 0, 0, 176, 0, 0, 0, 0, 0, - 174, 0, 0, 177, 0, 178, 0, 0, 328, 0, - 175, 0, 0, 0, 176, 0, 179, 0, 180, 85, - 0, 0, 0, 177, 0, 178, 181, 0, 0, 182, - 86, 0, 0, 0, 0, 183, 179, 0, 180, 85, - 0, 184, 0, 0, 0, 0, 181, 0, 0, 182, - 86, 0, 0, 0, 0, 183, 185, 0, 0, 0, - 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, - 62, 0, 63, 0, 0, 0, 0, 0, 0, 66, - 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 72, 73, 0, 75, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 68, 77, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, - 62, 0, 63, 0, 0, 0, 64, 0, 65, 66, - 67, 0, 0, 69, 0, 0, 0, 70, 0, 71, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 72, 73, 0, 75, 0, 76, 0, 78, - 0, 79, 0, 0, 0, 0, 68, 77, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, - 62, 0, 63, 0, 0, 0, 64, 0, 65, 66, - 67, 0, 0, 69, 0, 0, 0, 70, 0, 71, + 277, 473, -81, -89, -67, -94, -71, 368, 460, -97, + -70, -92, 193, 409, -100, 338, 355, 345, 332, 292, + 312, 164, 326, 411, 324, 423, 477, 351, 353, 421, + 360, 187, 365, 372, 363, 164, 362, 510, 509, 122, + 32, 33, 94, 512, 551, 502, 360, 7, 2, 545, + 170, 124, 172, 502, 27, 436, 484, 314, 440, 419, + 464, 484, 451, 187, 460, 490, 164, 316, 460, 466, + 122, 124, 206, 473, 477, 368, 460, 429, 450, 434, + 366, 428, 436, 256, 468, 277, 332, 321, 292, 213, + 272, 94, 0, 210, 164, 312, 164, 164, 463, 164, + 0, 164, 164, 0, 81, 81, 164, 447, 454, 164, + 444, 202, 464, 189, 485, 82, 82, 190, 164, 366, + 212, 164, 527, 314, 527, 0, 271, 276, 275, 262, + 261, 530, 267, 266, 513, 433, 432, 269, 268, 514, + 164, 366, 514, 87, 81, 502, 475, 0, 274, 357, + 2, 438, 448, 479, 370, 82, 538, 537, 330, 28, + 85, 0, 486, 269, 268, 81, 200, 502, 60, 165, + 536, 86, 528, 60, 164, 0, 82, 548, 9, 8, + 60, 0, 195, 60, 108, 60, 109, 28, 88, 108, + 0, 109, 494, 0, 89, 0, 334, 110, 0, 0, + 335, 196, 110, 426, 30, 72, 73, 60, 0, 60, + 72, 73, 108, 60, 109, 29, 164, 72, 73, 126, + 72, 73, 72, 73, 60, 110, 60, 255, 254, 87, + 549, 547, 30, 87, 60, 195, 0, 347, 127, 108, + 128, 109, 0, 29, 72, 73, 72, 73, 60, 0, + 72, 73, 110, 108, 196, 109, 197, 0, 0, 0, + 60, 72, 73, 72, 73, 0, 110, 294, 295, 458, + 457, 72, 73, 60, 88, 294, 295, 0, 88, 0, + 89, 96, 97, 0, 89, 72, 73, 96, 97, 60, + 348, 0, 260, 259, 296, 297, -311, 72, 73, 522, + 0, 0, 296, 297, 0, 265, 264, 60, 98, 99, + 72, 73, 0, 0, 98, 99, 299, 300, 0, 60, + 108, 0, 109, 0, 0, 301, 72, 73, 302, 19, + 303, 0, 0, 110, 101, 102, 72, 73, 0, 265, + 264, 0, 103, 104, 72, 73, 105, 0, 106, 0, + 484, 260, 259, 101, 102, 18, 72, 73, 0, 0, + 484, 103, 104, 0, 0, 105, 14, 106, 101, 102, + 0, 522, 14, 0, 0, 0, 103, 104, 15, 0, + 105, 522, 106, 0, 15, 16, 299, 300, 0, 0, + 0, 16, 0, 0, 0, 301, 0, 0, 302, 0, + 303, 19, 0, 0, 0, 0, 0, 0, 72, 73, + 0, 19, 0, 0, 0, 19, 0, 0, 72, 73, + 0, 19, 17, 20, 0, 0, 0, 18, 17, 20, + 21, 14, 0, 0, 14, 0, 21, 18, 0, 13, + 0, 18, 0, 15, 0, 13, 15, 18, 0, 0, + 16, 0, 0, 16, 101, 102, 0, 0, 0, 0, + 0, 0, 103, 104, 0, 0, 105, 0, 106, 0, + 0, 0, 0, 0, 0, 0, 506, 0, 0, 504, + 19, 0, 0, 19, 0, 0, 0, 17, 20, 174, + 17, 20, 0, 0, 0, 21, 0, 0, 21, 175, + 0, 0, 0, 176, 13, 0, 18, 13, 0, 18, + 0, 0, 177, 0, 178, 0, 0, 328, 0, 0, + 0, 0, 174, 0, 0, 179, 0, 180, 85, 0, + 0, 0, 175, 0, 0, 181, 176, 0, 182, 86, + 0, 0, 0, 0, 183, 177, 0, 178, 0, 0, + 184, 0, 0, 0, 0, 0, 0, 0, 179, 0, + 180, 85, 0, 0, 0, 185, 0, 0, 181, 0, + 0, 182, 86, 0, 0, 0, 0, 183, 0, 0, + 0, 0, 0, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 72, 73, 0, 75, 0, 76, 0, 78, - 291, 79, 0, 0, 0, 0, 68, 77, 58, 0, - 0, 0, 0, 0, 0, 0, 0, 55, 56, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 0, 0, 0, 0, 60, 0, 0, 0, 61, - 62, 0, 63, 0, 0, 0, 64, 0, 65, 66, - 67, 0, 0, 69, 0, 0, 0, 70, 0, 71, - 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 74, 72, 73, 0, 75, 0, 76, 0, 78, - 0, 79, 0, 0, 0, 0, 68, 77, 58, 0, - 0, 0, 0, 0, 0, 0, 0, -90, 0, 0, - 0, 55, 56, 57, 0, 0, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 61, 62, 0, 63, 0, 0, 0, - 64, 0, 65, 66, 67, 0, 0, 69, 0, 0, - 0, 70, 0, 71, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 72, 73, 0, 75, - 0, 76, 0, 78, 0, 79, 0, 0, 0, 0, - 68, 77, 58, 0, 0, 0, 0, 0, 0, 0, - 0, 55, 56, 57, 0, 0, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 0, 0, 0, 0, 60, - 0, 0, 0, 61, 62, 0, 63, 0, 0, 0, - 64, 0, 65, 66, 67, 0, 0, 69, 0, 0, - 0, 70, 0, 71, 0, 0, 503, 0, 0, 0, - 0, 0, 0, 0, 0, 74, 72, 73, 0, 75, - 0, 76, 0, 78, 0, 79, 0, 0, 0, 0, - 68, 77, 58, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 133, 134, 0, 0, 136, 138, 139, 0, - 0, 140, 0, 141, 0, 0, 0, 143, 144, 145, - 0, 0, 0, 0, 0, 0, 60, 146, 147, 148, + 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, + 0, 61, 62, 0, 63, 0, 0, 0, 0, 0, + 0, 66, 0, 0, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 0, 0, 0, 72, 73, 153, 154, 155, 0, 157, - 158, 159, 160, 161, 162, 0, 0, 150, 156, 142, - 135, 137, 151, 0, 0, 0, 0, 0, 132, 133, - 134, 0, 0, 136, 138, 139, 0, 0, 140, 0, - 141, 0, 0, 0, 143, 144, 145, 0, 0, 0, - 0, 0, 0, 427, 146, 147, 148, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, - 0, 428, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 152, 0, 0, 0, 0, 0, 432, - 429, 431, 153, 154, 155, 0, 157, 158, 159, 160, - 161, 162, 0, 0, 150, 156, 142, 135, 137, 151, - 0, 0, 0, 0, 0, 132, 133, 134, 0, 0, - 136, 138, 139, 0, 0, 140, 0, 141, 0, 0, - 0, 143, 144, 145, 0, 0, 0, 0, 0, 0, - 427, 146, 147, 148, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 149, 0, 0, 0, 428, 0, - 0, 0, 0, 0, 0, 0, 430, 0, 0, 0, - 152, 0, 0, 0, 0, 0, 432, 429, 431, 153, - 154, 155, 0, 157, 158, 159, 160, 161, 162, 0, - 0, 150, 156, 142, 135, 137, 151, 0, 0, 0, - 0, 0, 232, 0, 0, 0, 0, 233, 0, 55, - 56, 57, 235, 0, 0, 0, 0, 0, 0, 236, - 59, 0, 0, 0, 0, 0, 0, 238, 239, 0, - 0, 240, 62, 0, 63, 0, 0, 0, 64, 0, + 0, 0, 0, 74, 72, 73, 0, 75, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 68, 77, + 58, 0, 0, 0, 0, 0, 0, 0, 0, 55, + 56, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 0, 60, 0, 0, + 0, 61, 62, 0, 63, 0, 0, 0, 64, 0, 65, 66, 67, 0, 0, 69, 0, 0, 0, 70, - 0, 71, 0, 0, 0, 0, 0, 242, 0, 243, - 0, 0, 0, 74, 241, 244, 245, 75, 246, 76, - 247, 78, 21, 79, 248, 249, 0, 0, 68, 77, - 58, 13, 234, 0, 0, 0, 0, 0, 0, 232, - 0, 0, 0, 0, 233, 0, 55, 56, 57, 235, - 0, 0, 0, 0, 0, 0, 236, 237, 0, 0, - 0, 0, 0, 0, 238, 239, 0, 0, 240, 62, - 0, 63, 0, 0, 0, 64, 0, 65, 66, 67, - 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, - 0, 0, 0, 0, 242, 0, 243, 0, 0, 0, - 74, 241, 244, 245, 75, 246, 76, 247, 78, 21, - 79, 248, 249, 0, 0, 68, 77, 58, 13, 234, - 0, 0, 0, 0, 0, 0, 232, 0, 0, 0, - 0, 233, 0, 55, 56, 57, 235, 0, 0, 0, - 0, 0, 0, 236, 59, 0, 0, 0, 0, 0, - 0, 548, 239, 0, 0, 240, 549, 0, 63, 0, + 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 74, 72, 73, 0, 75, 0, 76, + 0, 78, 0, 79, 0, 0, 0, 0, 68, 77, + 58, 0, 0, 0, 0, 0, 0, 0, 0, -90, + 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 60, 0, 0, 0, 61, 62, 0, 63, 0, 0, 0, 64, 0, 65, 66, 67, 0, 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, - 0, 242, 0, 243, 0, 0, 0, 74, 241, 244, - 245, 75, 246, 76, 247, 78, 21, 79, 248, 249, - 0, 0, 68, 77, 58, 13, 234, 0, 0, 0, - 0, 0, 0, 232, 0, 0, 0, 0, 233, 0, - 55, 56, 57, 235, 0, 0, 0, 0, 0, 0, - 236, 59, 0, 0, 0, 0, 0, 0, 532, 239, - 0, 0, 240, 533, 0, 63, 0, 0, 0, 64, - 0, 65, 66, 67, 0, 0, 69, 0, 0, 0, - 70, 0, 71, 0, 0, 0, 0, 0, 242, 0, - 243, 0, 0, 0, 74, 241, 244, 245, 75, 246, - 76, 247, 78, 21, 79, 248, 249, 0, 0, 68, - 77, 58, 13, 234, 0, 534, 0, 0, 0, 0, - 395, 133, 134, 0, 0, 397, 138, 399, 56, 57, - 400, 0, 141, 0, 0, 0, 143, 402, 403, 0, - 0, 0, 0, 0, 0, 404, 405, 147, 148, 240, - 62, 0, 63, 0, 0, 0, 64, 0, 65, 406, - 67, 0, 0, 408, 0, 0, 0, 70, 0, 71, - 0, -236, 0, 0, 0, 410, 0, 243, 0, 0, - 0, 412, 409, 411, 413, 414, 415, 76, 417, 418, - 419, 420, 421, 422, 0, 0, 407, 416, 401, 396, - 398, 151, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 72, 73, + 0, 75, 0, 76, 0, 78, 0, 79, 0, 0, + 0, 0, 68, 77, 58, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 60, 0, 0, 0, 61, 62, 0, 63, 0, + 0, 0, 64, 0, 65, 66, 67, 0, 0, 69, + 0, 0, 0, 70, 0, 71, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 72, 73, + 0, 75, 0, 76, 0, 78, 291, 79, 0, 0, + 0, 0, 68, 77, 58, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 60, 0, 0, 0, 61, 62, 0, 63, 0, + 0, 0, 64, 0, 65, 66, 67, 0, 0, 69, + 0, 0, 0, 70, 0, 71, 0, 0, 492, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 72, 73, + 0, 75, 0, 76, 0, 78, 0, 79, 0, 0, + 0, 0, 68, 77, 58, 0, 0, 0, 0, 0, + 0, 0, 0, 55, 56, 57, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, + 0, 60, 0, 0, 0, 61, 62, 0, 63, 0, + 0, 0, 64, 0, 65, 66, 67, 0, 0, 69, + 0, 0, 0, 70, 0, 71, 0, 0, 489, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 72, 73, + 0, 75, 0, 76, 0, 78, 0, 79, 0, 0, + 0, 0, 68, 77, 58, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 133, 134, 0, 0, 136, 138, + 139, 0, 0, 140, 0, 141, 0, 0, 0, 143, + 144, 145, 0, 0, 0, 0, 0, 0, 60, 146, + 147, 148, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, + 0, 0, 0, 0, 0, 72, 73, 153, 154, 155, + 0, 157, 158, 159, 160, 161, 162, 0, 0, 150, + 156, 142, 135, 137, 151, 0, 0, 0, 0, 0, + 132, 133, 134, 0, 0, 136, 138, 139, 0, 0, + 140, 0, 141, 0, 0, 0, 143, 144, 145, 0, + 0, 0, 0, 0, 0, 413, 146, 147, 148, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, + 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, + 0, 418, 415, 417, 153, 154, 155, 0, 157, 158, + 159, 160, 161, 162, 0, 0, 150, 156, 142, 135, + 137, 151, 0, 0, 0, 0, 0, 132, 133, 134, + 0, 0, 136, 138, 139, 0, 0, 140, 0, 141, + 0, 0, 0, 143, 144, 145, 0, 0, 0, 0, + 0, 0, 413, 146, 147, 148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, + 414, 0, 0, 0, 0, 0, 0, 0, 416, 0, + 0, 0, 152, 0, 0, 0, 0, 0, 418, 415, + 417, 153, 154, 155, 0, 157, 158, 159, 160, 161, + 162, 0, 0, 150, 156, 142, 135, 137, 151, 0, + 0, 0, 0, 0, 232, 0, 0, 0, 0, 233, + 0, 55, 56, 57, 235, 0, 0, 0, 0, 0, + 0, 236, 59, 0, 0, 0, 0, 0, 0, 238, + 239, 0, 0, 240, 62, 0, 63, 0, 0, 0, + 64, 0, 65, 66, 67, 0, 0, 69, 0, 0, + 0, 70, 0, 71, 0, 0, 0, 0, 0, 242, + 0, 243, 0, 0, 0, 74, 241, 244, 245, 75, + 246, 76, 247, 78, 21, 79, 248, 249, 0, 0, + 68, 77, 58, 13, 234, 0, 0, 0, 0, 0, + 0, 232, 0, 0, 0, 0, 233, 0, 55, 56, + 57, 235, 0, 0, 0, 0, 0, 0, 236, 237, + 0, 0, 0, 0, 0, 0, 238, 239, 0, 0, + 240, 62, 0, 63, 0, 0, 0, 64, 0, 65, + 66, 67, 0, 0, 69, 0, 0, 0, 70, 0, + 71, 0, 0, 0, 0, 0, 242, 0, 243, 0, + 0, 0, 74, 241, 244, 245, 75, 246, 76, 247, + 78, 21, 79, 248, 249, 0, 0, 68, 77, 58, + 13, 234, 0, 0, 0, 0, 0, 0, 232, 0, + 0, 0, 0, 233, 0, 55, 56, 57, 235, 0, + 0, 0, 0, 0, 0, 236, 59, 0, 0, 0, + 0, 0, 0, 532, 239, 0, 0, 240, 533, 0, + 63, 0, 0, 0, 64, 0, 65, 66, 67, 0, + 0, 69, 0, 0, 0, 70, 0, 71, 0, 0, + 0, 0, 0, 242, 0, 243, 0, 0, 0, 74, + 241, 244, 245, 75, 246, 76, 247, 78, 21, 79, + 248, 249, 0, 0, 68, 77, 58, 13, 234, 0, + 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, + 233, 0, 55, 56, 57, 235, 0, 0, 0, 0, + 0, 0, 236, 59, 0, 0, 0, 0, 0, 0, + 516, 239, 0, 0, 240, 517, 0, 63, 0, 0, + 0, 64, 0, 65, 66, 67, 0, 0, 69, 0, + 0, 0, 70, 0, 71, 0, 0, 0, 0, 0, + 242, 0, 243, 0, 0, 0, 74, 241, 244, 245, + 75, 246, 76, 247, 78, 21, 79, 248, 249, 0, + 0, 68, 77, 58, 13, 234, 0, 518, 0, 0, + 0, 0, 381, 133, 134, 0, 0, 383, 138, 385, + 56, 57, 386, 0, 141, 0, 0, 0, 143, 388, + 389, 0, 0, 0, 0, 0, 0, 390, 391, 147, + 148, 240, 62, 0, 63, 0, 0, 0, 64, 0, + 65, 392, 67, 0, 0, 394, 0, 0, 0, 70, + 0, 71, 0, -236, 0, 0, 0, 396, 0, 243, + 0, 0, 0, 398, 395, 397, 399, 400, 401, 76, + 403, 404, 405, 406, 407, 408, 0, 0, 393, 402, + 387, 382, 384, 151, 0, 0, 0, 0, 0, - 459, 10, 467, 562, 550, 451, 527, 502, 42, 173, - 547, 463, 449, 494, 483, 479, 492, 31, 542, 488, - 556, 490, 507, 531, 205, 501, 392, 484, 270, 555, - 366, 270, 481, 372, 378, 331, 505, 205, 263, 322, - 166, 186, 329, 470, 327, 171, 473, 263, 383, 381, - 258, 358, 385, 436, 387, 354, 473, 257, 163, 169, - 356, 322, 0, 426, 199, 470, 273, 444, 194, 83, - 211, 434, 192, 209, 258, 205, 340, 424, 392, 556, - 541, 322, 322, 322, 322, 191, 0, 0, 12, 392, - 340, 0, 0, 209, 83, 286, 92, 83, 83, 83, - 290, 0, 304, 305, 308, 169, 83, 537, 83, 83, - 209, 306, 201, 307, 83, 83, 514, 83, 83, 111, - 485, 209, 116, 188, 83, 352, 350, 323, 325, 115, - 83, 83, 83, 486, 512, 117, 83, 83, 513, 83, - 392, 566, 114, 83, 169, 486, 83, 95, 91, 0, - 83, 441, 466, 83, 349, 90, 100, 83, 83, 83, - 83, 83, 107, 93, 119, 121, 0, 120, 83, 363, - 438, 84, 83, 439, 203, 83, 438, 510, 83, 439, - 509, 83, 0, 83, 83, 112, 369, 113, 83, 83, - 83, 203, 511, 83, 83, 485, 123, 375, 125, 290, - 83, 318, 83, 469, 0, 118, 290, 290, 318, 333, - 11, 26, 12, 290, 0, 318, 83, 83, 0, 336, - 290, 290, 290, 337, 311, 0, 83, 318, 0, 313, - 339, 290, 290, 309, 83, 318, 83, 346, 129, 290, - 290, 290, 545, 310, 541, 315, 0, 131, 198, 320, - 551, 83, 12, 541, 83, 521, 290, 317, 298, 290, - 0, 12, 0, 293, 0, 0, 0, 129, 0, 11, - 26, 12, 0, 0, 0, 0, 131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 455, 534, 521, 452, 493, 199, 465, 173, 488, 539, + 42, 445, 359, 322, 211, 209, 449, 470, 31, 480, + 273, 531, 487, 192, 491, 194, 511, 540, 476, 515, + 467, 469, 456, 526, 459, 474, 205, 420, 435, 10, + 412, 163, 373, 169, 371, 546, 410, 369, 205, 270, + 322, 166, 171, 422, 456, 258, 263, 367, 430, 270, + 331, 340, 327, 329, 358, 459, 186, 437, 263, 453, + 354, 501, 0, 356, 258, 0, 83, 340, 540, 169, + 26, 12, 209, 322, 525, 322, 201, 322, 123, 0, + 322, 424, 12, 0, 425, 129, 83, 0, 203, 230, + 83, 83, 223, 0, 131, 113, 83, 0, 83, 0, + 125, 84, 121, 478, 83, 83, 497, 498, 83, 424, + 83, 0, 425, 83, 100, 496, 119, 323, 83, 325, + 83, 350, 495, 308, 352, 83, 83, 499, 471, 0, + 550, 349, 83, 83, 472, 90, 83, 169, 91, 83, + 83, 500, 92, 83, 427, 83, 0, 83, 361, 120, + 107, 111, 83, 83, 83, 471, 83, 304, 112, 93, + 83, 83, 83, 83, 83, 307, 305, 306, 83, 83, + 83, 286, 83, 116, 114, 115, 290, 117, 188, 191, + 83, 83, 472, 203, 83, 535, 83, 0, 525, 118, + 83, 290, 529, 0, 525, 318, 12, 0, 95, 83, + 290, 0, 12, 336, 290, 83, 230, 0, 318, 223, + 290, 0, 313, 290, 318, 318, 315, 317, 83, 290, + 290, 83, 83, 290, 505, 0, 290, 290, 311, 310, + 320, 507, 0, 333, 507, 0, 339, 346, 129, 26, + 12, 0, 26, 12, 318, 26, 12, 131, 198, 290, + 83, 83, 0, 0, 0, 290, 290, 230, 309, 293, + 223, 0, 83, 0, 0, 0, 337, 290, 0, 298, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 11, 26, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0}; + 0, 0, 0, 0, 257, 0}; const int JavaScriptGrammar::action_check [] = { - 1, 55, 33, 60, 8, 7, 36, 36, 36, 48, - 61, 61, 60, 31, 17, 60, 7, 17, 60, 36, - 36, 8, 7, 7, 7, 33, 36, 7, 7, 5, - 8, 5, 5, 60, 33, 33, 7, 33, 78, 20, - 55, 36, 36, 7, 7, 33, 8, 8, 55, 16, - 55, 33, 7, 7, 60, 7, 33, 29, 55, 7, - 7, 36, 55, 7, 78, 8, 36, 36, 60, 7, - 36, 36, 61, 29, 60, 88, 36, 8, 8, 7, - 33, 1, 1, 7, 33, 36, 36, 55, 78, 48, - 2, 36, 7, 1, 36, 36, 0, 2, 7, 2, - 29, 33, 48, 60, 10, -1, 8, 7, 8, 6, - 8, 7, -1, 8, 48, 8, 42, 40, 76, 40, - 8, 60, 40, 20, 8, 8, 66, 53, 51, 65, - 51, 8, 8, 51, 61, 62, 50, 33, 7, -1, - 54, 40, 8, 78, 61, 62, 15, 8, 7, 55, - 8, 88, 51, 8, 61, 62, 8, 8, 7, 12, - 61, 62, 60, 56, 50, 60, 15, 8, 54, 61, - 62, 15, 60, 56, 33, 29, 60, -1, -1, 8, - 56, 61, 62, 60, -1, -1, 61, 62, 61, 62, - 34, 29, 36, 29, -1, 61, 29, -1, 56, 60, - 8, 56, 29, -1, 57, 29, -1, 29, 60, 60, - 63, 29, 66, 67, 29, 12, -1, 8, 29, -1, - 61, 62, 25, 25, 27, 27, -1, -1, 66, 67, - 66, 67, -1, 66, 67, 38, 38, 29, -1, 66, - 67, 29, 66, 67, 66, 67, 29, 12, 66, 67, - 29, 66, 67, 61, 62, 25, 25, 27, 27, 25, - 57, 27, 25, 74, 27, 29, 63, 29, 38, 38, - 61, 62, 38, -1, 85, 38, 15, -1, 66, 67, - 15, -1, 74, 66, 67, 18, 19, 66, 67, 18, - 19, -1, 57, 85, -1, 34, -1, 36, 63, 34, - -1, 36, 66, 67, 66, 67, 18, 19, 18, 19, - -1, 29, 45, 46, 29, -1, 45, 46, 36, -1, - -1, 29, -1, -1, -1, 29, -1, -1, 25, -1, - 27, -1, -1, 45, 46, 45, 46, 29, -1, 29, - 8, 38, -1, -1, -1, -1, 61, 62, 66, 67, - -1, 66, 67, 61, 62, 59, -1, -1, 66, 67, - -1, 29, 66, 67, 8, -1, -1, -1, -1, 61, - 62, 61, 62, -1, 66, 67, 66, 67, 23, 24, - -1, 85, -1, -1, -1, 29, 31, 32, 23, 24, - 35, 59, 37, 10, 23, 24, 31, 32, 66, 67, - 35, -1, 37, 32, -1, 22, 35, -1, 37, -1, - -1, -1, 29, -1, -1, 59, 10, 85, -1, -1, - -1, -1, 66, 67, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, 10, -1, -1, 10, - -1, 85, 59, -1, -1, -1, -1, -1, 22, 66, - 67, 22, -1, -1, -1, 29, -1, 74, 29, -1, - -1, -1, 23, 24, -1, 59, 83, -1, 85, -1, - 31, 32, 66, 67, 35, -1, 37, -1, -1, -1, - 74, 55, -1, -1, 55, 59, -1, -1, 59, 83, - -1, 85, 66, 67, -1, 66, 67, -1, -1, -1, - 74, -1, -1, 74, -1, -1, -1, -1, -1, 83, - 3, 85, 83, -1, 85, -1, -1, -1, -1, -1, - 13, -1, -1, -1, 17, -1, -1, -1, -1, -1, - 3, -1, -1, 26, -1, 28, -1, -1, 31, -1, - 13, -1, -1, -1, 17, -1, 39, -1, 41, 42, - -1, -1, -1, 26, -1, 28, 49, -1, -1, 52, - 53, -1, -1, -1, -1, 58, 39, -1, 41, 42, - -1, 64, -1, -1, -1, -1, 49, -1, -1, 52, - 53, -1, -1, -1, -1, 58, 79, -1, -1, -1, - -1, 64, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 79, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, -1, -1, -1, 43, - -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, -1, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 80, 81, 82, -1, - -1, -1, -1, -1, -1, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, + 36, 36, 7, 7, 7, 7, 7, 36, 33, 7, + 7, 7, 7, 7, 7, 7, 31, 17, 2, 1, + 48, 8, 60, 8, 61, 55, 36, 61, 60, 55, + 36, 2, 55, 16, 33, 8, 60, 7, 29, 48, + 29, 7, 1, 29, 0, 33, 36, 65, 88, 17, + 8, 78, 60, 33, 66, 36, 8, 78, 33, 7, + 20, 8, 7, 2, 33, 8, 8, 8, 33, 36, + 48, 78, 36, 36, 36, 36, 33, 7, 55, 7, + 7, 60, 36, 55, 60, 36, 2, 61, 1, 33, + 36, 1, -1, 8, 8, 48, 8, 8, 6, 8, + -1, 8, 8, -1, 40, 40, 8, 10, 7, 8, + 5, 60, 20, 50, 8, 51, 51, 54, 8, 7, + 60, 8, 8, 78, 8, -1, 76, 61, 62, 61, + 62, 7, 61, 62, 7, 61, 62, 61, 62, 15, + 8, 7, 15, 12, 40, 33, 60, -1, 60, 60, + 88, 60, 55, 60, 60, 51, 61, 62, 60, 29, + 42, -1, 56, 61, 62, 40, 56, 33, 29, 56, + 56, 53, 56, 29, 8, -1, 51, 8, 61, 62, + 29, -1, 15, 29, 25, 29, 27, 29, 57, 25, + -1, 27, 60, -1, 63, -1, 50, 38, -1, -1, + 54, 34, 38, 36, 74, 66, 67, 29, -1, 29, + 66, 67, 25, 29, 27, 85, 8, 66, 67, 15, + 66, 67, 66, 67, 29, 38, 29, 61, 62, 12, + 61, 62, 74, 12, 29, 15, -1, 8, 34, 25, + 36, 27, -1, 85, 66, 67, 66, 67, 29, -1, + 66, 67, 38, 25, 34, 27, 36, -1, -1, -1, + 29, 66, 67, 66, 67, -1, 38, 18, 19, 61, + 62, 66, 67, 29, 57, 18, 19, -1, 57, -1, + 63, 18, 19, -1, 63, 66, 67, 18, 19, 29, + 61, -1, 61, 62, 45, 46, 36, 66, 67, 29, + -1, -1, 45, 46, -1, 61, 62, 29, 45, 46, + 66, 67, -1, -1, 45, 46, 23, 24, -1, 29, + 25, -1, 27, -1, -1, 32, 66, 67, 35, 59, + 37, -1, -1, 38, 23, 24, 66, 67, -1, 61, + 62, -1, 31, 32, 66, 67, 35, -1, 37, -1, + 8, 61, 62, 23, 24, 85, 66, 67, -1, -1, + 8, 31, 32, -1, -1, 35, 10, 37, 23, 24, + -1, 29, 10, -1, -1, -1, 31, 32, 22, -1, + 35, 29, 37, -1, 22, 29, 23, 24, -1, -1, + -1, 29, -1, -1, -1, 32, -1, -1, 35, -1, + 37, 59, -1, -1, -1, -1, -1, -1, 66, 67, + -1, 59, -1, -1, -1, 59, -1, -1, 66, 67, + -1, 59, 66, 67, -1, -1, -1, 85, 66, 67, + 74, 10, -1, -1, 10, -1, 74, 85, -1, 83, + -1, 85, -1, 22, -1, 83, 22, 85, -1, -1, + 29, -1, -1, 29, 23, 24, -1, -1, -1, -1, + -1, -1, 31, 32, -1, -1, 35, -1, 37, -1, + -1, -1, -1, -1, -1, -1, 55, -1, -1, 55, + 59, -1, -1, 59, -1, -1, -1, 66, 67, 3, + 66, 67, -1, -1, -1, 74, -1, -1, 74, 13, + -1, -1, -1, 17, 83, -1, 85, 83, -1, 85, + -1, -1, 26, -1, 28, -1, -1, 31, -1, -1, + -1, -1, 3, -1, -1, 39, -1, 41, 42, -1, + -1, -1, 13, -1, -1, 49, 17, -1, 52, 53, + -1, -1, -1, -1, 58, 26, -1, 28, -1, -1, + 64, -1, -1, -1, -1, -1, -1, -1, 39, -1, + 41, 42, -1, -1, -1, 79, -1, -1, 49, -1, + -1, 52, 53, -1, -1, -1, -1, 58, -1, -1, + -1, -1, -1, 64, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, - -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, - -1, -1, -1, -1, -1, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, - 74, 75, -1, -1, -1, -1, 80, 81, 82, -1, - -1, -1, -1, -1, -1, -1, -1, 11, 12, 13, - -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, - -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, - -1, 65, 66, 67, -1, 69, -1, 71, -1, 73, - -1, 75, -1, -1, -1, -1, 80, 81, 82, -1, - -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, - -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, - -1, -1, 22, -1, -1, -1, -1, -1, -1, 29, - -1, -1, -1, 33, 34, -1, 36, -1, -1, -1, - 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, - -1, 51, -1, 53, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 65, 66, 67, -1, 69, - -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, - 80, 81, 82, -1, -1, -1, -1, -1, -1, -1, - -1, 11, 12, 13, -1, -1, -1, -1, -1, -1, - -1, -1, 22, -1, -1, -1, -1, -1, -1, 29, - -1, -1, -1, 33, 34, -1, 36, -1, -1, -1, - 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, - -1, 51, -1, 53, -1, -1, 56, -1, -1, -1, - -1, -1, -1, -1, -1, 65, 66, 67, -1, 69, - -1, 71, -1, 73, -1, 75, -1, -1, -1, -1, - 80, 81, 82, -1, -1, -1, -1, -1, -1, -1, - -1, 4, 5, 6, -1, -1, 9, 10, 11, -1, - -1, 14, -1, 16, -1, -1, -1, 20, 21, 22, - -1, -1, -1, -1, -1, -1, 29, 30, 31, 32, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, + -1, 33, 34, -1, 36, -1, -1, -1, -1, -1, + -1, 43, -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, -1, -1, 66, 67, 68, 69, 70, -1, 72, - 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, - 83, 84, 85, -1, -1, -1, -1, -1, 4, 5, - 6, -1, -1, 9, 10, 11, -1, -1, 14, -1, - 16, -1, -1, -1, 20, 21, 22, -1, -1, -1, - -1, -1, -1, 29, 30, 31, 32, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 43, -1, -1, - -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, 65, - 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, - 76, 77, -1, -1, 80, 81, 82, 83, 84, 85, - -1, -1, -1, -1, -1, 4, 5, 6, -1, -1, - 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, - -1, 20, 21, 22, -1, -1, -1, -1, -1, -1, - 29, 30, 31, 32, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 43, -1, -1, -1, 47, -1, - -1, -1, -1, -1, -1, -1, 55, -1, -1, -1, - 59, -1, -1, -1, -1, -1, 65, 66, 67, 68, - 69, 70, -1, 72, 73, 74, 75, 76, 77, -1, - -1, 80, 81, 82, 83, 84, 85, -1, -1, -1, - -1, -1, 4, -1, -1, -1, -1, 9, -1, 11, - 12, 13, 14, -1, -1, -1, -1, -1, -1, 21, - 22, -1, -1, -1, -1, -1, -1, 29, 30, -1, + -1, -1, -1, 65, 66, 67, -1, 69, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 80, 81, + 82, -1, -1, -1, -1, -1, -1, -1, -1, 11, + 12, 13, -1, -1, -1, -1, -1, -1, -1, -1, + 22, -1, -1, -1, -1, -1, -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, - -1, 53, -1, -1, -1, -1, -1, 59, -1, 61, - -1, -1, -1, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, - 82, 83, 84, -1, -1, -1, -1, -1, -1, 4, - -1, -1, -1, -1, 9, -1, 11, 12, 13, 14, - -1, -1, -1, -1, -1, -1, 21, 22, -1, -1, - -1, -1, -1, -1, 29, 30, -1, -1, 33, 34, - -1, 36, -1, -1, -1, 40, -1, 42, 43, 44, - -1, -1, 47, -1, -1, -1, 51, -1, 53, -1, - -1, -1, -1, -1, 59, -1, 61, -1, -1, -1, - 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, -1, -1, 80, 81, 82, 83, 84, - -1, -1, -1, -1, -1, -1, 4, -1, -1, -1, - -1, 9, -1, 11, 12, 13, 14, -1, -1, -1, - -1, -1, -1, 21, 22, -1, -1, -1, -1, -1, - -1, 29, 30, -1, -1, 33, 34, -1, 36, -1, + -1, 53, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 65, 66, 67, -1, 69, -1, 71, + -1, 73, -1, 75, -1, -1, -1, -1, 80, 81, + 82, -1, -1, -1, -1, -1, -1, -1, -1, 7, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, + -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, + -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, + -1, -1, -1, 51, -1, 53, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, + -1, -1, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, + -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, -1, -1, -1, -1, - -1, 59, -1, 61, -1, -1, -1, 65, 66, 67, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - -1, -1, 80, 81, 82, 83, 84, -1, -1, -1, - -1, -1, -1, 4, -1, -1, -1, -1, 9, -1, - 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + -1, 69, -1, 71, -1, 73, 74, 75, -1, -1, + -1, -1, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, + -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, + -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, + -1, -1, -1, 51, -1, 53, -1, -1, 56, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, + -1, -1, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, -1, 11, 12, 13, -1, -1, -1, -1, + -1, -1, -1, -1, 22, -1, -1, -1, -1, -1, + -1, 29, -1, -1, -1, 33, 34, -1, 36, -1, + -1, -1, 40, -1, 42, 43, 44, -1, -1, 47, + -1, -1, -1, 51, -1, 53, -1, -1, 56, -1, + -1, -1, -1, -1, -1, -1, -1, 65, 66, 67, + -1, 69, -1, 71, -1, 73, -1, 75, -1, -1, + -1, -1, 80, 81, 82, -1, -1, -1, -1, -1, + -1, -1, -1, 4, 5, 6, -1, -1, 9, 10, + 11, -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, 22, -1, -1, -1, -1, -1, -1, 29, 30, - -1, -1, 33, 34, -1, 36, -1, -1, -1, 40, - -1, 42, 43, 44, -1, -1, 47, -1, -1, -1, - 51, -1, 53, -1, -1, -1, -1, -1, 59, -1, - 61, -1, -1, -1, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, -1, -1, 80, - 81, 82, 83, 84, -1, 86, -1, -1, -1, -1, - 4, 5, 6, -1, -1, 9, 10, 11, 12, 13, + 31, 32, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 43, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, 66, 67, 68, 69, 70, + -1, 72, 73, 74, 75, 76, 77, -1, -1, 80, + 81, 82, 83, 84, 85, -1, -1, -1, -1, -1, + 4, 5, 6, -1, -1, 9, 10, 11, -1, -1, 14, -1, 16, -1, -1, -1, 20, 21, 22, -1, - -1, -1, -1, -1, -1, 29, 30, 31, 32, 33, - 34, -1, 36, -1, -1, -1, 40, -1, 42, 43, - 44, -1, -1, 47, -1, -1, -1, 51, -1, 53, - -1, 55, -1, -1, -1, 59, -1, 61, -1, -1, - -1, 65, 66, 67, 68, 69, 70, 71, 72, 73, + -1, -1, -1, -1, -1, 29, 30, 31, 32, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 43, + -1, -1, -1, 47, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, 65, 66, 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, 83, - 84, 85, -1, -1, -1, -1, -1, + 84, 85, -1, -1, -1, -1, -1, 4, 5, 6, + -1, -1, 9, 10, 11, -1, -1, 14, -1, 16, + -1, -1, -1, 20, 21, 22, -1, -1, -1, -1, + -1, -1, 29, 30, 31, 32, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 43, -1, -1, -1, + 47, -1, -1, -1, -1, -1, -1, -1, 55, -1, + -1, -1, 59, -1, -1, -1, -1, -1, 65, 66, + 67, 68, 69, 70, -1, 72, 73, 74, 75, 76, + 77, -1, -1, 80, 81, 82, 83, 84, 85, -1, + -1, -1, -1, -1, 4, -1, -1, -1, -1, 9, + -1, 11, 12, 13, 14, -1, -1, -1, -1, -1, + -1, 21, 22, -1, -1, -1, -1, -1, -1, 29, + 30, -1, -1, 33, 34, -1, 36, -1, -1, -1, + 40, -1, 42, 43, 44, -1, -1, 47, -1, -1, + -1, 51, -1, 53, -1, -1, -1, -1, -1, 59, + -1, 61, -1, -1, -1, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, -1, -1, + 80, 81, 82, 83, 84, -1, -1, -1, -1, -1, + -1, 4, -1, -1, -1, -1, 9, -1, 11, 12, + 13, 14, -1, -1, -1, -1, -1, -1, 21, 22, + -1, -1, -1, -1, -1, -1, 29, 30, -1, -1, + 33, 34, -1, 36, -1, -1, -1, 40, -1, 42, + 43, 44, -1, -1, 47, -1, -1, -1, 51, -1, + 53, -1, -1, -1, -1, -1, 59, -1, 61, -1, + -1, -1, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, -1, -1, 80, 81, 82, + 83, 84, -1, -1, -1, -1, -1, -1, 4, -1, + -1, -1, -1, 9, -1, 11, 12, 13, 14, -1, + -1, -1, -1, -1, -1, 21, 22, -1, -1, -1, + -1, -1, -1, 29, 30, -1, -1, 33, 34, -1, + 36, -1, -1, -1, 40, -1, 42, 43, 44, -1, + -1, 47, -1, -1, -1, 51, -1, 53, -1, -1, + -1, -1, -1, 59, -1, 61, -1, -1, -1, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, -1, -1, 80, 81, 82, 83, 84, -1, + -1, -1, -1, -1, -1, 4, -1, -1, -1, -1, + 9, -1, 11, 12, 13, 14, -1, -1, -1, -1, + -1, -1, 21, 22, -1, -1, -1, -1, -1, -1, + 29, 30, -1, -1, 33, 34, -1, 36, -1, -1, + -1, 40, -1, 42, 43, 44, -1, -1, 47, -1, + -1, -1, 51, -1, 53, -1, -1, -1, -1, -1, + 59, -1, 61, -1, -1, -1, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, -1, + -1, 80, 81, 82, 83, 84, -1, 86, -1, -1, + -1, -1, 4, 5, 6, -1, -1, 9, 10, 11, + 12, 13, 14, -1, 16, -1, -1, -1, 20, 21, + 22, -1, -1, -1, -1, -1, -1, 29, 30, 31, + 32, 33, 34, -1, 36, -1, -1, -1, 40, -1, + 42, 43, 44, -1, -1, 47, -1, -1, -1, 51, + -1, 53, -1, 55, -1, -1, -1, 59, -1, 61, + -1, -1, -1, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, -1, -1, 80, 81, + 82, 83, 84, 85, -1, -1, -1, -1, -1, - 91, 5, 15, 24, 9, 15, 15, 24, 15, 58, - 13, 88, 13, 13, 62, 93, 15, 14, 9, 15, - 18, 13, 15, 13, 18, 20, 13, 62, 13, 18, - 95, 13, 18, 95, 95, 13, 24, 18, 18, 15, - 24, 24, 15, 15, 13, 24, 62, 18, 15, 13, - 18, 13, 13, 13, 13, 13, 62, 100, 15, 24, - 15, 15, -1, 26, 15, 15, 15, 13, 24, 35, - 18, 24, 24, 18, 18, 18, 18, 24, 13, 18, - 10, 15, 15, 15, 15, 51, -1, -1, 18, 13, - 18, -1, -1, 18, 35, 35, 37, 35, 35, 35, - 40, -1, 40, 40, 40, 24, 35, 9, 35, 35, - 18, 40, 31, 40, 35, 35, 37, 35, 35, 39, - 37, 18, 40, 49, 35, 59, 59, 59, 59, 40, - 35, 35, 35, 37, 37, 40, 35, 35, 37, 35, - 13, 80, 40, 35, 24, 37, 35, 43, 37, -1, - 35, 31, 76, 35, 82, 37, 41, 35, 35, 35, - 35, 35, 40, 38, 41, 41, -1, 41, 35, 94, - 29, 38, 35, 32, 37, 35, 29, 37, 35, 32, - 37, 35, -1, 35, 35, 39, 94, 39, 35, 35, - 35, 37, 37, 35, 35, 37, 47, 94, 45, 40, - 35, 35, 35, 76, -1, 40, 40, 40, 35, 50, - 16, 17, 18, 40, -1, 35, 35, 35, -1, 52, - 40, 40, 40, 57, 42, -1, 35, 35, -1, 48, - 57, 40, 40, 42, 35, 35, 35, 57, 18, 40, - 40, 40, 8, 42, 10, 46, -1, 27, 28, 57, - 7, 35, 18, 10, 35, 2, 40, 57, 42, 40, - -1, 18, -1, 44, -1, -1, -1, 18, -1, 16, - 17, 18, -1, -1, -1, -1, 27, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 6, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 16, 17, 18, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 76, 9, 9, 76, 15, 15, 93, 58, 24, 18, + 15, 91, 18, 15, 18, 18, 88, 62, 14, 13, + 15, 13, 20, 24, 24, 24, 15, 18, 13, 13, + 18, 62, 15, 9, 62, 15, 18, 24, 13, 5, + 26, 15, 13, 24, 13, 24, 24, 15, 18, 13, + 15, 24, 24, 13, 15, 18, 18, 13, 13, 13, + 13, 18, 13, 15, 13, 62, 24, 15, 18, 15, + 13, 18, -1, 15, 18, -1, 35, 18, 18, 24, + 17, 18, 18, 15, 10, 15, 31, 15, 47, -1, + 15, 29, 18, -1, 32, 18, 35, -1, 37, 13, + 35, 35, 16, -1, 27, 39, 35, -1, 35, -1, + 45, 38, 41, 15, 35, 35, 37, 37, 35, 29, + 35, -1, 32, 35, 41, 37, 41, 59, 35, 59, + 35, 59, 37, 40, 59, 35, 35, 37, 37, -1, + 80, 82, 35, 35, 37, 37, 35, 24, 37, 35, + 35, 37, 37, 35, 31, 35, -1, 35, 94, 41, + 40, 39, 35, 35, 35, 37, 35, 40, 39, 38, + 35, 35, 35, 35, 35, 40, 40, 40, 35, 35, + 35, 35, 35, 40, 40, 40, 40, 40, 49, 51, + 35, 35, 37, 37, 35, 7, 35, -1, 10, 40, + 35, 40, 8, -1, 10, 35, 18, -1, 43, 35, + 40, -1, 18, 52, 40, 35, 13, -1, 35, 16, + 40, -1, 48, 40, 35, 35, 46, 57, 35, 40, + 40, 35, 35, 40, 2, -1, 40, 40, 42, 42, + 57, 6, -1, 50, 6, -1, 57, 57, 18, 17, + 18, -1, 17, 18, 35, 17, 18, 27, 28, 40, + 35, 35, -1, -1, -1, 40, 40, 13, 42, 44, + 16, -1, 35, -1, -1, -1, 57, 40, -1, 42, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1}; + -1, -1, -1, -1, 100, -1}; diff --git a/src/declarative/qml/parser/javascriptgrammar_p.h b/src/declarative/qml/parser/javascriptgrammar_p.h index 58e73f6..c01d1cc 100644 --- a/src/declarative/qml/parser/javascriptgrammar_p.h +++ b/src/declarative/qml/parser/javascriptgrammar_p.h @@ -150,15 +150,15 @@ public: T_XOR = 78, T_XOR_EQ = 79, - ACCEPT_STATE = 567, - RULE_COUNT = 317, - STATE_COUNT = 568, + ACCEPT_STATE = 551, + RULE_COUNT = 315, + STATE_COUNT = 552, TERMINAL_COUNT = 91, NON_TERMINAL_COUNT = 102, - GOTO_INDEX_OFFSET = 568, - GOTO_INFO_OFFSET = 1797, - GOTO_CHECK_OFFSET = 1797 + GOTO_INDEX_OFFSET = 552, + GOTO_INFO_OFFSET = 1789, + GOTO_CHECK_OFFSET = 1789 }; static const char *const spell []; diff --git a/src/declarative/qml/parser/javascriptparser.cpp b/src/declarative/qml/parser/javascriptparser.cpp index f0b1f10..185a824 100644 --- a/src/declarative/qml/parser/javascriptparser.cpp +++ b/src/declarative/qml/parser/javascriptparser.cpp @@ -298,7 +298,8 @@ case 30: { case 31: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval); node->isDefaultMember = true; - node->propertyToken = loc(1); + node->defaultToken = loc(1); + node->propertyToken = loc(2); node->typeToken = loc(3); node->identifierToken = loc(4); sym(1).Node = node; @@ -318,7 +319,8 @@ case 33: { AST::UiPublicMember *node = makeAstNode<AST::UiPublicMember> (driver->nodePool(), sym(3).sval, sym(4).sval, sym(6).Expression); node->isDefaultMember = true; - node->propertyToken = loc(1); + node->defaultToken = loc(1); + node->propertyToken = loc(2); node->typeToken = loc(3); node->identifierToken = loc(4); node->colonToken = loc(5); @@ -332,9 +334,7 @@ case 34: { case 35: { sym(1).Node = makeAstNode<AST::UiSourceElement>(driver->nodePool(), sym(1).Node); } break; - -case 36: - +case 36: case 37: { AST::UiQualifiedId *node = makeAstNode<AST::UiQualifiedId> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount())); @@ -531,7 +531,7 @@ case 66: { node->propertyNameToken = loc(1); sym(1).Node = node; } break; - +case 67: case 68: { AST::IdentifierPropertyName *node = makeAstNode<AST::IdentifierPropertyName> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount())); node->propertyNameToken = loc(1); @@ -1394,7 +1394,7 @@ case 284: { node->colonToken = loc(2); sym(1).Node = node; } break; - +case 285: case 286: { AST::LabelledStatement *node = makeAstNode<AST::LabelledStatement> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()), sym(3).Statement); node->identifierToken = loc(1); @@ -1456,18 +1456,7 @@ case 296: { sym(1).Node = node; } break; -case 298: { - AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), driver->intern(lexer->characterBuffer(), lexer->characterCount()), sym(4).FormalParameterList, sym(7).FunctionBody); - node->functionToken = loc(1); - node->identifierToken = loc(2); - node->lparenToken = loc(3); - node->rparenToken = loc(5); - node->lbraceToken = loc(6); - node->rbraceToken = loc(8); - sym(1).Node = node; -} break; - -case 299: { +case 297: { AST::FunctionDeclaration *node = makeAstNode<AST::FunctionDeclaration> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); node->identifierToken = loc(2); @@ -1478,7 +1467,7 @@ case 299: { sym(1).Node = node; } break; -case 300: { +case 298: { AST::FunctionExpression *node = makeAstNode<AST::FunctionExpression> (driver->nodePool(), sym(2).sval, sym(4).FormalParameterList, sym(7).FunctionBody); node->functionToken = loc(1); if (sym(2).sval) @@ -1490,56 +1479,56 @@ case 300: { sym(1).Node = node; } break; -case 301: { +case 299: { AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).sval); node->identifierToken = loc(1); sym(1).Node = node; } break; -case 302: { +case 300: { AST::FormalParameterList *node = makeAstNode<AST::FormalParameterList> (driver->nodePool(), sym(1).FormalParameterList, sym(3).sval); node->commaToken = loc(2); node->identifierToken = loc(3); sym(1).Node = node; } break; -case 303: { +case 301: { sym(1).Node = 0; } break; -case 304: { +case 302: { sym(1).Node = sym(1).FormalParameterList->finish (); } break; -case 305: { +case 303: { sym(1).Node = 0; } break; -case 307: { +case 305: { sym(1).Node = makeAstNode<AST::FunctionBody> (driver->nodePool(), sym(1).SourceElements->finish ()); } break; -case 308: { +case 306: { sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElement); } break; -case 309: { +case 307: { sym(1).Node = makeAstNode<AST::SourceElements> (driver->nodePool(), sym(1).SourceElements, sym(2).SourceElement); } break; -case 310: { +case 308: { sym(1).Node = makeAstNode<AST::StatementSourceElement> (driver->nodePool(), sym(1).Statement); } break; -case 311: { +case 309: { sym(1).Node = makeAstNode<AST::FunctionSourceElement> (driver->nodePool(), sym(1).FunctionDeclaration); } break; -case 312: { +case 310: { sym(1).sval = 0; } break; -case 314: { +case 312: { sym(1).Node = 0; } break; diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri index 9067039..69a1461 100644 --- a/src/declarative/qml/qml.pri +++ b/src/declarative/qml/qml.pri @@ -22,7 +22,8 @@ SOURCES += qml/qmlparser.cpp \ qml/qmlclassfactory.cpp \ qml/qmlparserstatus.cpp \ qml/qmlcompositetypemanager.cpp \ - qml/qmlinfo.cpp + qml/qmlinfo.cpp \ + qml/qmlerror.cpp HEADERS += qml/qmlparser_p.h \ qml/qmlinstruction_p.h \ @@ -58,7 +59,8 @@ HEADERS += qml/qmlparser_p.h \ qml/qmlcontext_p.h \ qml/qmlcompositetypemanager_p.h \ qml/qmllist.h \ - qml/qmldeclarativedata_p.h + qml/qmldeclarativedata_p.h \ + qml/qmlerror.h # for qtscript debugger QT += scripttools diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index c9bdfec..37d7fa1 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -147,7 +147,7 @@ int QmlCompiledData::indexForInt(int *data, int count) } QmlCompiler::QmlCompiler() -: exceptionLine(-1), output(0) +: exceptionLine(-1), exceptionColumn(-1), output(0) { } @@ -156,14 +156,19 @@ bool QmlCompiler::isError() const return exceptionLine != -1; } -qint64 QmlCompiler::errorLine() const +QList<QmlError> QmlCompiler::errors() const { - return exceptionLine; -} + QList<QmlError> rv; + + if(isError()) { + QmlError error; + error.setDescription(exceptionDescription); + error.setLine(exceptionLine); + error.setColumn(exceptionColumn); + rv << error; + } -QString QmlCompiler::errorDescription() const -{ - return exceptionDescription; + return rv; } bool QmlCompiler::isValidId(const QString &val) @@ -437,9 +442,19 @@ void QmlCompiler::reset(QmlCompiledComponent *cc, bool deleteMemory) cc->bytecode.clear(); } +#define COMPILE_EXCEPTION2(token, desc) \ + { \ + exceptionLine = token->line; \ + exceptionColumn = token->column; \ + QDebug d(&exceptionDescription); \ + d << desc; \ + return false; \ + } + #define COMPILE_EXCEPTION(desc) \ { \ exceptionLine = obj->line; \ + exceptionColumn = obj->column; \ QDebug d(&exceptionDescription); \ d << desc; \ return false; \ @@ -1215,10 +1230,10 @@ bool QmlCompiler::compilePropertyLiteralAssignment(QmlParser::Property *prop, //### we are restricted to a rather generic message here. If we can find a way to move // the exception into generateStoreInstruction we could potentially have better messages. // (the problem is that both compile and run exceptions can be generated, though) - COMPILE_EXCEPTION("Cannot assign value" << v->primitive << "to property" << obj->metaObject()->property(prop->index).name()); + COMPILE_EXCEPTION2(v, "Cannot assign value" << v->primitive << "to property" << obj->metaObject()->property(prop->index).name()); doassign = false; } else if (r == ReadOnly) { - COMPILE_EXCEPTION("Cannot assign value" << v->primitive << "to the read-only property" << obj->metaObject()->property(prop->index).name()); + COMPILE_EXCEPTION2(v, "Cannot assign value" << v->primitive << "to the read-only property" << obj->metaObject()->property(prop->index).name()); } else { doassign = true; } diff --git a/src/declarative/qml/qmlcompiler_p.h b/src/declarative/qml/qmlcompiler_p.h index 9a0ce1c..cc1a9e9 100644 --- a/src/declarative/qml/qmlcompiler_p.h +++ b/src/declarative/qml/qmlcompiler_p.h @@ -45,6 +45,7 @@ #include <QtCore/qbytearray.h> #include <QtCore/qset.h> #include <qml.h> +#include <qmlerror.h> #include <private/qmlinstruction_p.h> #include <private/qmlcompositetypemanager_p.h> class QStringList; @@ -115,8 +116,7 @@ public: bool compile(QmlEngine *, QmlCompositeTypeData *, QmlCompiledComponent *); bool isError() const; - qint64 errorLine() const; - QString errorDescription() const; + QList<QmlError> errors() const; static bool isValidId(const QString &); static bool isBinding(const QString &); @@ -176,6 +176,7 @@ private: QSet<QString> ids; qint64 exceptionLine; + qint64 exceptionColumn; QString exceptionDescription; QmlCompiledData *output; }; diff --git a/src/declarative/qml/qmlcomponent.cpp b/src/declarative/qml/qmlcomponent.cpp index c316f03..66440f5 100644 --- a/src/declarative/qml/qmlcomponent.cpp +++ b/src/declarative/qml/qmlcomponent.cpp @@ -137,9 +137,7 @@ void QmlComponentPrivate::fromTypeData(QmlCompositeTypeData *data) if (!c) { Q_ASSERT(data->status == QmlCompositeTypeData::Error); - errorDescription = data->errorDescription; - qWarning().nospace() << "QmlComponent: " - << data->errorDescription.toLatin1().constData(); + errors = data->errors; } else { @@ -194,7 +192,7 @@ QmlComponent::Status QmlComponent::status() const return Loading; else if (d->engine && d->cc) return Ready; - else if (!d->errorDescription.isEmpty()) + else if (!d->errors.isEmpty()) return Error; else return Null; @@ -353,13 +351,17 @@ void QmlComponent::loadUrl(const QUrl &url) emit statusChanged(status()); } -QString QmlComponent::errorDescription() const +/*! + Return the list of errors that occured during the last compile or create + operation. An empty list is returned if isError() is not set. +*/ +QList<QmlError> QmlComponent::errors() const { Q_D(const QmlComponent); if (isError()) - return d->errorDescription; + return d->errors; else - return QString(); + return QList<QmlError>(); } /*! @@ -448,7 +450,7 @@ QObject *QmlComponent::beginCreate(QmlContext *context) } if (!isReady()) { - qWarning("QmlComponent: Cannot create un-ready component"); + qWarning("QmlComponent: Component is not ready"); return 0; } @@ -466,15 +468,9 @@ QObject *QmlComponent::beginCreate(QmlContext *context) QmlVME vme; QObject *rv = vme.run(ctxt, d->cc, d->start, d->count); - if (vme.isError()) { - qWarning().nospace() -#ifdef QML_VERBOSEERRORS_ENABLED - << "QmlComponent: " -#endif - << vme.errorDescription().toLatin1().constData() << " @" - << d->url.toString().toLatin1().constData() << ":" << vme.errorLine(); - } + if (vme.isError()) + d->errors = vme.errors(); ctxt->deactivate(); diff --git a/src/declarative/qml/qmlcomponent.h b/src/declarative/qml/qmlcomponent.h index 0493c1f..90f7467 100644 --- a/src/declarative/qml/qmlcomponent.h +++ b/src/declarative/qml/qmlcomponent.h @@ -46,7 +46,7 @@ #include <QtCore/qstring.h> #include <QtDeclarative/qfxglobal.h> #include <QtDeclarative/qml.h> - +#include <QtDeclarative/qmlerror.h> QT_BEGIN_HEADER @@ -77,7 +77,8 @@ public: bool isReady() const; bool isError() const; bool isLoading() const; - QString errorDescription() const; + + QList<QmlError> errors() const; QUrl url() const; diff --git a/src/declarative/qml/qmlcomponent_p.h b/src/declarative/qml/qmlcomponent_p.h index bb5f7bb..0507958 100644 --- a/src/declarative/qml/qmlcomponent_p.h +++ b/src/declarative/qml/qmlcomponent_p.h @@ -47,6 +47,7 @@ #include <QList> #include "private/qobject_p.h" #include "private/qmlcompositetypemanager_p.h" +#include <qmlerror.h> #include "qmlcomponent.h" class QmlComponent; class QmlEngine; @@ -68,7 +69,7 @@ public: void fromTypeData(QmlCompositeTypeData *data); - QString errorDescription; + QList<QmlError> errors; QUrl url; int start; diff --git a/src/declarative/qml/qmlcompositetypemanager.cpp b/src/declarative/qml/qmlcompositetypemanager.cpp index 7f2cc58..fbe40bf 100644 --- a/src/declarative/qml/qmlcompositetypemanager.cpp +++ b/src/declarative/qml/qmlcompositetypemanager.cpp @@ -105,10 +105,9 @@ QmlCompositeTypeData::toCompiledComponent(QmlEngine *engine) QmlCompiler compiler; if (!compiler.compile(engine, this, compiledComponent)) { status = Error; - errorDescription = compiler.errorDescription() + - QLatin1String("@") + - url + QLatin1String(":") + - QString::number(compiler.errorLine()); + errors = compiler.errors(); + for(int ii = 0; ii < errors.count(); ++ii) + errors[ii].setUrl(url); compiledComponent->release(); compiledComponent = 0; } @@ -188,7 +187,10 @@ void QmlCompositeTypeManager::replyFinished() reply->url().toString(); unit->status = QmlCompositeTypeData::Error; - unit->errorDescription = errorDescription; + // ### FIXME + QmlError error; + error.setDescription(errorDescription); + unit->errors << error; doComplete(unit); } else { @@ -215,7 +217,10 @@ void QmlCompositeTypeManager::loadSource(QmlCompositeTypeData *unit) // ### - Fill in error errorDescription = QLatin1String("File error for URL ") + url.toString(); unit->status = QmlCompositeTypeData::Error; - unit->errorDescription = errorDescription; + // ### FIXME + QmlError error; + error.setDescription(errorDescription); + unit->errors << error; doComplete(unit); } @@ -234,7 +239,7 @@ void QmlCompositeTypeManager::setData(QmlCompositeTypeData *unit, if (!unit->data.parse(data, url)) { unit->status = QmlCompositeTypeData::Error; - unit->errorDescription = unit->data.errorDescription(); + unit->errors << unit->data.errors(); doComplete(unit); } else { @@ -273,7 +278,7 @@ void QmlCompositeTypeManager::checkComplete(QmlCompositeTypeData *unit) if (u->status == QmlCompositeTypeData::Error) { unit->status = QmlCompositeTypeData::Error; - unit->errorDescription = u->errorDescription; + unit->errors = u->errors; doComplete(unit); return; } else if (u->status == QmlCompositeTypeData::Waiting) { @@ -334,7 +339,7 @@ void QmlCompositeTypeManager::compile(QmlCompositeTypeData *unit) case QmlCompositeTypeData::Invalid: case QmlCompositeTypeData::Error: unit->status = QmlCompositeTypeData::Error; - unit->errorDescription = urlUnit->errorDescription; + unit->errors = urlUnit->errors; doComplete(unit); return; diff --git a/src/declarative/qml/qmlcompositetypemanager_p.h b/src/declarative/qml/qmlcompositetypemanager_p.h index bc86fcf..e4028d5 100644 --- a/src/declarative/qml/qmlcompositetypemanager_p.h +++ b/src/declarative/qml/qmlcompositetypemanager_p.h @@ -45,6 +45,7 @@ #include <qglobal.h> #include <private/qmlscriptparser_p.h> #include <private/qmlrefcount_p.h> +#include <qmlerror.h> QT_BEGIN_NAMESPACE @@ -65,7 +66,8 @@ struct QmlCompositeTypeData : public QmlRefCount Waiting }; Status status; - QString errorDescription; + + QList<QmlError> errors; QString url; QList<QmlCompositeTypeData *> dependants; diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp index c1acdc7..30857ad 100644 --- a/src/declarative/qml/qmlcontext.cpp +++ b/src/declarative/qml/qmlcontext.cpp @@ -261,10 +261,10 @@ QmlContext *QmlContext::parentContext() const Add a default \a object to this context. The object will be added after any existing default objects. */ -void QmlContext::addDefaultObject(QObject *defaultObject) +void QmlContext::addDefaultObject(QObject *object) { Q_D(QmlContext); - d->addDefaultObject(defaultObject, QmlContextPrivate::NormalPriority); + d->addDefaultObject(object, QmlContextPrivate::NormalPriority); } /*! @@ -340,13 +340,11 @@ QmlContext *QmlContext::activeContext() /*! Resolves the URL \a src relative to the URL of the - containing component. + containing component. If \a src is absolute, it is + simply returned. If there is no containing component, + an empty URL is returned. - If \a src is absolute, it is simply returned. - - If there is no containing component, an empty URL is returned. - - \sa componentUrl + \sa QmlEngine::componentUrl() */ QUrl QmlContext::resolvedUrl(const QUrl &src) { @@ -372,10 +370,10 @@ QUrl QmlContext::resolvedUrl(const QUrl &src) /*! Resolves the component URI \a src relative to the URL of the containing component, and according to the - \link QmlEngine::nameSpacePaths() namespace paths\endlink of the + \l {QmlEngine::nameSpacePaths()} {namespace paths} of the context's engine, returning the resolved URL. - \sa componentUrl + \sa QmlEngine::componentUrl() */ QUrl QmlContext::resolvedUri(const QUrl &src) { diff --git a/src/declarative/qml/qmldom.cpp b/src/declarative/qml/qmldom.cpp index cf0a2fb..08755b1 100644 --- a/src/declarative/qml/qmldom.cpp +++ b/src/declarative/qml/qmldom.cpp @@ -70,6 +70,7 @@ QmlDomDocumentPrivate::~QmlDomDocumentPrivate() /*! \class QmlDomDocument + \internal \brief The QmlDomDocument class represents the root of a QML document A QML document is a self-contained snippet of QML, usually contained in a @@ -152,13 +153,7 @@ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data) { Q_UNUSED(engine); - d->error = QString(); - - QmlScriptParser parser; - if (!parser.parse(data)) { - d->error = parser.errorDescription(); - return false; - } + d->errors.clear(); QmlCompiledComponent component; QmlCompiler compiler; @@ -166,11 +161,13 @@ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data) QmlCompositeTypeData *td = ((QmlEnginePrivate *)QmlEnginePrivate::get(engine))->typeManager.getImmediate(data, QUrl());; if(td->status == QmlCompositeTypeData::Error) { - d->error = td->errorDescription; + d->errors = td->errors; td->release(); return false; } else if(td->status == QmlCompositeTypeData::Waiting) { - d->error = QLatin1String("QmlDomDocument supports local types only"); + QmlError error; + error.setDescription(QLatin1String("QmlDomDocument supports local types only")); + d->errors << error; td->release(); return false; } @@ -178,14 +175,14 @@ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data) compiler.compile(engine, td, &component); if (compiler.isError()) { - d->error = compiler.errorDescription(); + d->errors = compiler.errors(); td->release(); return false; } if (td->data.tree()) { - component.dump(0, parser.tree()); - d->root = parser.tree(); + component.dump(0, td->data.tree()); + d->root = td->data.tree(); d->root->addref(); } @@ -194,14 +191,14 @@ bool QmlDomDocument::load(QmlEngine *engine, const QByteArray &data) /*! - Returns the last load error. The load error will be reset after a + Returns the last load errors. The load errors will be reset after a successful call to load(). \sa load() */ -QString QmlDomDocument::loadError() const +QList<QmlError> QmlDomDocument::errors() const { - return d->error; + return d->errors; } /*! @@ -255,6 +252,7 @@ QmlDomPropertyPrivate::~QmlDomPropertyPrivate() /*! \class QmlDomProperty + \internal \brief The QmlDomProperty class represents one property assignment in the QML DOM tree @@ -456,6 +454,7 @@ QmlDomObjectPrivate::properties(QmlParser::Property *property) const /*! \class QmlDomObject + \internal \brief The QmlDomObject class represents an object instantiation. Each object instantiated in a QML file has a corresponding QmlDomObject @@ -618,11 +617,11 @@ QList<QmlDomProperty> QmlDomObject::properties() const Returns the object's \a name property if a value has been assigned to it, or an invalid QmlDomProperty otherwise. - In the example below, \c {object.property("src")} would return a valid + In the example below, \c {object.property("source")} would return a valid QmlDomProperty, and \c {object.property("tile")} an invalid QmlDomProperty. \qml -Image { src: "sample.jpg" } +Image { source: "sample.jpg" } \endqml */ QmlDomProperty QmlDomObject::property(const QByteArray &name) const @@ -740,6 +739,7 @@ QmlDomBasicValuePrivate::~QmlDomBasicValuePrivate() /*! \class QmlDomValueLiteral + \internal \brief The QmlDomValueLiteral class represents a literal value. A literal value is a simple value, written inline with the QML. In the @@ -812,6 +812,7 @@ void QmlDomValueLiteral::setLiteral(const QString &value) /*! \class QmlDomValueBinding + \internal \brief The QmlDomValueBinding class represents a property binding. A property binding is an ECMAScript expression assigned to a property. In @@ -825,7 +826,8 @@ Rect { x: Other.x } /*! Construct an empty QmlDomValueBinding. */ -QmlDomValueBinding::QmlDomValueBinding() +QmlDomValueBinding::QmlDomValueBinding(): + d(new QmlDomBasicValuePrivate) { } @@ -880,6 +882,7 @@ void QmlDomValueBinding::setBinding(const QString &expression) /*! \class QmlDomValueValueSource + \internal \brief The QmlDomValueValueSource class represents a value source assignment value. In QML, value sources are special value generating types that may be @@ -902,7 +905,8 @@ Rect { /*! Construct an empty QmlDomValueValueSource. */ -QmlDomValueValueSource::QmlDomValueValueSource() +QmlDomValueValueSource::QmlDomValueValueSource(): + d(new QmlDomBasicValuePrivate) { } @@ -953,7 +957,7 @@ QmlDomObject QmlDomValueValueSource::object() const rv.d->object = d->value->object; rv.d->object->addref(); } - return QmlDomObject(); + return rv; } /*! @@ -987,6 +991,7 @@ QmlDomValuePrivate::~QmlDomValuePrivate() /*! \class QmlDomValue + \internal \brief The QmlDomValue class represents a generic Qml value. QmlDomValue's can be assigned to QML \l {QmlDomProperty}{properties}. In @@ -1238,6 +1243,7 @@ QmlDomList QmlDomValue::toList() const /*! \class QmlDomList + \internal \brief The QmlDomList class represents a list of values assigned to a QML property. Lists of values can be assigned to properties. For example, the following @@ -1327,6 +1333,7 @@ void QmlDomList::setValues(const QList<QmlDomValue> &values) /*! \class QmlDomComponent + \internal \brief The QmlDomComponent class represents sub-component within a QML document. Sub-components are QmlComponents defined within a QML document. The diff --git a/src/declarative/qml/qmldom.h b/src/declarative/qml/qmldom.h index 47a89d9..74ed27c 100644 --- a/src/declarative/qml/qmldom.h +++ b/src/declarative/qml/qmldom.h @@ -44,6 +44,7 @@ #include <QtCore/qlist.h> #include <QtCore/qshareddata.h> +#include <QtDeclarative/qmlerror.h> QT_BEGIN_HEADER @@ -71,6 +72,7 @@ public: int version() const; + QList<QmlError> errors() const; QString loadError() const; bool load(QmlEngine *, const QByteArray &); QByteArray save() const; diff --git a/src/declarative/qml/qmldom_p.h b/src/declarative/qml/qmldom_p.h index 8ea56bf..4c3ca44 100644 --- a/src/declarative/qml/qmldom_p.h +++ b/src/declarative/qml/qmldom_p.h @@ -57,7 +57,7 @@ public: QmlDomDocumentPrivate(const QmlDomDocumentPrivate &); ~QmlDomDocumentPrivate(); - QString error; + QList<QmlError> errors; QmlParser::Object *root; }; diff --git a/src/declarative/qml/qmlerror.cpp b/src/declarative/qml/qmlerror.cpp new file mode 100644 index 0000000..2ed3500 --- /dev/null +++ b/src/declarative/qml/qmlerror.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qmlerror.h" +#include <QtCore/qdebug.h> +#include <QtCore/qfile.h> +#include <QtCore/qstringlist.h> + +QT_BEGIN_NAMESPACE + +/*! + \class QmlError + \brief The QmlError class encapsulates a QML error +*/ +class QmlErrorPrivate +{ +public: + QmlErrorPrivate(); + + QUrl url; + QString description; + int line; + int column; +}; + +QmlErrorPrivate::QmlErrorPrivate() +: line(-1), column(-1) +{ +} + +/*! + Create an empty error object. +*/ +QmlError::QmlError() +: d(new QmlErrorPrivate) +{ +} + +/*! + Create a copy of \a other. +*/ +QmlError::QmlError(const QmlError &other) +: d(new QmlErrorPrivate) +{ + *this = other; +} + +/*! + Assign \a other to this error object. +*/ +QmlError &QmlError::operator=(const QmlError &other) +{ + d->url = other.d->url; + d->description = other.d->description; + d->line = other.d->line; + d->column = other.d->column; + return *this; +} + +/*! + \internal +*/ +QmlError::~QmlError() +{ + delete d; d = 0; +} + +/*! + Return the url for the file that caused this error. +*/ +QUrl QmlError::url() const +{ + return d->url; +} + +/*! + Set the \a url for the file that caused this error. +*/ +void QmlError::setUrl(const QUrl &url) +{ + d->url = url; +} + +/*! + Return the error description. +*/ +QString QmlError::description() const +{ + return d->description; +} + +/*! + Set the error \a description. +*/ +void QmlError::setDescription(const QString &description) +{ + d->description = description; +} + +/*! + Return the error line number. +*/ +int QmlError::line() const +{ + return d->line; +} + +/*! + Set the error \a line number. +*/ +void QmlError::setLine(int line) +{ + d->line = line; +} + +/*! + Return the error column number. +*/ +int QmlError::column() const +{ + return d->column; +} + +/*! + Set the error \a column number. +*/ +void QmlError::setColumn(int column) +{ + d->column = column; +} + +/*! + \relates QmlError + \fn QDebug operator<<(QDebug debug, const QmlError &error) + + Output a human readable version of \a error to \a debug. +*/ + +QDebug operator<<(QDebug debug, const QmlError &error) +{ + QUrl url = error.url(); + + QString output; + + output = url.toString() + QLatin1String(":") + + QString::number(error.line()); + + if(error.column() != -1) + output += QLatin1String(":") + QString::number(error.column()); + + output += QLatin1String(": ") + error.description(); + + debug << qPrintable(output) << "\n"; + + if (error.line() > 0 && error.column() > 0 && + url.scheme() == QLatin1String("file")) { + QString file = url.toLocalFile(); + QFile f(file); + if (f.open(QIODevice::ReadOnly)) { + QByteArray data = f.readAll(); + QTextStream stream(data, QIODevice::ReadOnly); + const QString code = stream.readAll(); + const QStringList lines = code.split(QLatin1Char('\n')); + + if (lines.count() >= error.line()) { + const QString &line = lines.at(error.line() - 1); + debug << qPrintable(line) << "\n"; + + int column = qMax(0, error.column() - 1); + column = qMin(column, line.length()); + + QByteArray ind; + ind.reserve(column); + for (int i = 0; i < column; ++i) { + const QChar ch = line.at(i); + if (ch.isSpace()) + ind.append(ch.unicode()); + else + ind.append(' '); + } + ind.append('^'); + debug << ind.constData(); + } + } + } + return debug; +} + +QT_END_NAMESPACE diff --git a/src/declarative/qml/qmlerror.h b/src/declarative/qml/qmlerror.h new file mode 100644 index 0000000..57d2f8f --- /dev/null +++ b/src/declarative/qml/qmlerror.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtDeclarative module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QMLERROR_H +#define QMLERROR_H + +#include <QtCore/qurl.h> +#include <QtCore/qstring.h> + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Declarative) + +class QDebug; +class QmlErrorPrivate; +class Q_DECLARATIVE_EXPORT QmlError +{ +public: + QmlError(); + QmlError(const QmlError &); + QmlError &operator=(const QmlError &); + ~QmlError(); + + QUrl url() const; + void setUrl(const QUrl &); + QString description() const; + void setDescription(const QString &); + int line() const; + void setLine(int); + int column() const; + void setColumn(int); +private: + QmlErrorPrivate *d; +}; + +QDebug Q_DECLARATIVE_EXPORT operator<<(QDebug debug, const QmlError &error); + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QMLERROR_H diff --git a/src/declarative/qml/qmlparser.cpp b/src/declarative/qml/qmlparser.cpp index ecb6f0b..87c8434 100644 --- a/src/declarative/qml/qmlparser.cpp +++ b/src/declarative/qml/qmlparser.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE using namespace QmlParser; QmlParser::Object::Object() -: type(-1), metatype(0), extObject(0), defaultProperty(0), line(-1), +: type(-1), metatype(0), extObject(0), defaultProperty(0), line(-1), column(-1), dynamicPropertiesProperty(0), dynamicSignalsProperty(0) { } @@ -127,12 +127,12 @@ QmlParser::Object::DynamicSignal::DynamicSignal(const DynamicSignal &o) } QmlParser::Property::Property() -: type(0), index(-1), value(0), isDefault(true), line(-1) +: type(0), index(-1), value(0), isDefault(true), line(-1), column(-1) { } QmlParser::Property::Property(const QByteArray &n) -: type(0), index(-1), value(0), name(n), isDefault(false), line(-1) +: type(0), index(-1), value(0), name(n), isDefault(false), line(-1), column(-1) { } @@ -161,7 +161,7 @@ void QmlParser::Property::addValue(Value *v) } QmlParser::Value::Value() -: type(Unknown), object(0), line(-1) +: type(Unknown), object(0), line(-1), column(-1) { } diff --git a/src/declarative/qml/qmlparser_p.h b/src/declarative/qml/qmlparser_p.h index e29cdbf..17b367d6 100644 --- a/src/declarative/qml/qmlparser_p.h +++ b/src/declarative/qml/qmlparser_p.h @@ -103,6 +103,7 @@ namespace QmlParser QHash<QByteArray, Property *> properties; qint64 line; + qint64 column; struct DynamicProperty { DynamicProperty(); @@ -167,6 +168,7 @@ namespace QmlParser Object *object; qint64 line; + qint64 column; }; class Property : public QmlRefCount @@ -197,6 +199,7 @@ namespace QmlParser bool isDefault; qint64 line; + qint64 column; }; } diff --git a/src/declarative/qml/qmlscriptparser.cpp b/src/declarative/qml/qmlscriptparser.cpp index 8039b5c..618eb2e 100644 --- a/src/declarative/qml/qmlscriptparser.cpp +++ b/src/declarative/qml/qmlscriptparser.cpp @@ -65,10 +65,12 @@ protected: Object *defineObjectBinding(int line, AST::UiQualifiedId *propertyName, const QString &objectType, + AST::SourceLocation typeLocation, AST::UiObjectInitializer *initializer = 0); Object *defineObjectBinding_helper(int line, AST::UiQualifiedId *propertyName, const QString &objectType, + AST::SourceLocation typeLocation, AST::UiObjectInitializer *initializer = 0); QString getPrimitive(const QByteArray &propertyName, AST::ExpressionNode *expr); void defineProperty(const QString &propertyName, int line, const QString &primitive); @@ -194,11 +196,17 @@ QString ProcessAST::asString(AST::UiQualifiedId *node) const Object *ProcessAST::defineObjectBinding_helper(int line, AST::UiQualifiedId *propertyName, const QString &objectType, + AST::SourceLocation typeLocation, AST::UiObjectInitializer *initializer) { bool isType = !objectType.isEmpty() && objectType.at(0).isUpper() && !objectType.contains(QLatin1Char('.')); + if (!isType) { - qWarning() << "bad name for a class"; // ### FIXME + QmlError error; + error.setDescription("Expected type name"); + error.setLine(typeLocation.startLine); + error.setColumn(typeLocation.startColumn); + _parser->_errors << error; return false; } @@ -235,7 +243,7 @@ Object *ProcessAST::defineObjectBinding_helper(int line, if (!_parser->scriptFile().isEmpty()) { _stateStack.pushObject(obj); - Object *scriptObject= defineObjectBinding(line, 0, QLatin1String("Script")); + Object *scriptObject= defineObjectBinding(line, 0, QLatin1String("Script"), AST::SourceLocation()); _stateStack.pushObject(scriptObject); defineProperty(QLatin1String("src"), line, _parser->scriptFile()); _stateStack.pop(); // scriptObject @@ -264,11 +272,12 @@ Object *ProcessAST::defineObjectBinding_helper(int line, Object *ProcessAST::defineObjectBinding(int line, AST::UiQualifiedId *qualifiedId, const QString &objectType, + AST::SourceLocation typeLocation, AST::UiObjectInitializer *initializer) { if (objectType == QLatin1String("Connection")) { - Object *obj = defineObjectBinding_helper(line, 0, QLatin1String("Connection")); + Object *obj = defineObjectBinding_helper(line, 0, objectType, typeLocation); _stateStack.pushObject(obj); @@ -297,7 +306,7 @@ Object *ProcessAST::defineObjectBinding(int line, return obj; } - return defineObjectBinding_helper(line, qualifiedId, objectType, initializer); + return defineObjectBinding_helper(line, qualifiedId, objectType, typeLocation, initializer); } void ProcessAST::defineProperty(const QString &propertyName, int line, const QString &primitive) @@ -372,7 +381,11 @@ bool ProcessAST::visit(AST::UiPublicMember *node) } if(!typeFound) { - qWarning() << "Unknown property type" << memberType; // ### FIXME + QmlError error; + error.setDescription("Expected property type"); + error.setLine(node->typeToken.startLine); + error.setColumn(node->typeToken.startColumn); + _parser->_errors << error; return false; } @@ -402,6 +415,7 @@ bool ProcessAST::visit(AST::UiObjectDefinition *node) defineObjectBinding(node->identifierToken.startLine, 0, node->name->asString(), + node->identifierToken, node->initializer); return false; @@ -414,6 +428,7 @@ bool ProcessAST::visit(AST::UiObjectBinding *node) defineObjectBinding(node->identifierToken.startLine, node->qualifiedId, node->name->asString(), + node->identifierToken, node->initializer); return false; @@ -476,7 +491,8 @@ bool ProcessAST::visit(AST::UiScriptBinding *node) Value *v = new Value; v->primitive = primitive; - v->line = node->colonToken.startLine; + v->line = node->statement->firstSourceLocation().startLine; + v->column = node->statement->firstSourceLocation().startColumn; prop->addValue(v); while (propertyCount--) @@ -535,7 +551,7 @@ bool ProcessAST::visit(AST::UiSourceElement *node) QmlScriptParser::QmlScriptParser() - : root(0), _errorLine(-1) +: root(0) { } @@ -556,8 +572,11 @@ bool QmlScriptParser::parse(const QByteArray &data, const QUrl &url) return true; } - _error = xmlParser.errorDescription(); - _errorLine = 0; // ### FIXME + QmlError error; + error.setUrl(url); + error.setDescription(xmlParser.errorDescription()); + _errors << error; + return false; } @@ -576,61 +595,34 @@ bool QmlScriptParser::parse(const QByteArray &data, const QUrl &url) lexer.setCode(code, /*line = */ 1); driver.setLexer(&lexer); - if (! parser.parse(&driver)) { - _error = parser.errorMessage(); - _errorLine = parser.errorLineNumber(); - - const QStringList lines = code.split(QLatin1Char('\n')); + if (! parser.parse(&driver) || !_errors.isEmpty()) { + // Extract errors from the parser foreach (const JavaScriptParser::DiagnosticMessage &m, parser.diagnosticMessages()) { if (m.isWarning()) continue; - qWarning().nospace() << qPrintable(fileName) << ":" - << m.line << ":" - << m.column << ": " - << "error: " - << qPrintable(m.message); - - const QString textLine = lines.at(m.line - 1); - - qWarning() << qPrintable(textLine); + QmlError error; + error.setUrl(url); + error.setDescription(m.message); + error.setLine(m.line); + error.setColumn(m.column); + _errors << error; - int column = qMax(0, m.column - 1); - column = qMin(column, textLine.length()); // paranoia check - - QByteArray ind; - ind.reserve(column); - - for (int i = 0; i < column; ++i) { - const QChar ch = textLine.at(i); - if (ch.isSpace()) - ind.append(ch.unicode()); - else - ind.append(' '); - } - ind.append('^'); - qWarning() << ind.constData(); } - - return false; } - ProcessAST process(this); - process(code, parser.ast()); + if (_errors.isEmpty()) { + ProcessAST process(this); + process(code, parser.ast()); - return true; -} - -QString QmlScriptParser::errorDescription() const -{ - return _error; -} + // Set the url for process errors + for(int ii = 0; ii < _errors.count(); ++ii) + _errors[ii].setUrl(url); + } -int QmlScriptParser::errorLine() const -{ - return _errorLine; + return _errors.isEmpty(); } QMap<QString,QString> QmlScriptParser::nameSpacePaths() const @@ -648,6 +640,11 @@ Object *QmlScriptParser::tree() const return root; } +QList<QmlError> QmlScriptParser::errors() const +{ + return _errors; +} + void QmlScriptParser::clear() { if (root) { @@ -656,9 +653,8 @@ void QmlScriptParser::clear() } _nameSpacePaths.clear(); _typeNames.clear(); - _error.clear(); + _errors.clear(); _scriptFile.clear(); - _errorLine = 0; } int QmlScriptParser::findOrCreateTypeId(const QString &name) diff --git a/src/declarative/qml/qmlscriptparser_p.h b/src/declarative/qml/qmlscriptparser_p.h index 0d89268..4155bba 100644 --- a/src/declarative/qml/qmlscriptparser_p.h +++ b/src/declarative/qml/qmlscriptparser_p.h @@ -3,6 +3,7 @@ #include <QtCore/QList> #include <QtCore/QUrl> +#include <QtDeclarative/qmlerror.h> #include <qml.h> QT_BEGIN_HEADER @@ -23,8 +24,6 @@ public: ~QmlScriptParser(); bool parse(const QByteArray &data, const QUrl &url = QUrl()); - QString errorDescription() const; - int errorLine() const; QMap<QString,QString> nameSpacePaths() const; QStringList types() const; @@ -33,6 +32,8 @@ public: void clear(); + QList<QmlError> errors() const; + // ### private: int findOrCreateTypeId(const QString &name); void setTree(QmlParser::Object *tree); @@ -42,12 +43,12 @@ public: void addNamespacePath(const QString &path); -private: +// ### private: + QList<QmlError> _errors; + QMap<QString,QString> _nameSpacePaths; QmlParser::Object *root; QStringList _typeNames; - QString _error; - int _errorLine; QString _scriptFile; }; diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp index e6235e4..a3bfd62 100644 --- a/src/declarative/qml/qmlvme.cpp +++ b/src/declarative/qml/qmlvme.cpp @@ -176,9 +176,14 @@ QmlVME::QmlVME() #define VME_EXCEPTION(desc) \ { \ - exceptionLine = instr.line; \ - QDebug d(&exceptionDescription); \ - d << desc; \ + QString str; \ + QDebug d(&str); \ + d << desc; \ + QmlError error; \ + error.setDescription(str); \ + error.setLine(instr.line); \ + error.setUrl(comp->url); \ + vmeErrors << error; \ break; \ } @@ -224,6 +229,8 @@ QObject *QmlVME::run(QmlContext *ctxt, QmlCompiledComponent *comp, int start, in QStack<QmlMetaProperty> pushedProperties; QObject **savedObjects = 0; + vmeErrors.clear(); + if (start == -1) start = 0; if (count == -1) count = comp->bytecode.count(); @@ -1072,17 +1079,12 @@ QObject *QmlVME::run(QmlContext *ctxt, QmlCompiledComponent *comp, int start, in bool QmlVME::isError() const { - return exceptionLine != -1; -} - -qint64 QmlVME::errorLine() const -{ - return exceptionLine; + return !vmeErrors.isEmpty(); } -QString QmlVME::errorDescription() const +QList<QmlError> QmlVME::errors() const { - return exceptionDescription; + return vmeErrors; } void QmlVME::runStoreInstruction(QStack<QObject *> &stack, diff --git a/src/declarative/qml/qmlvme_p.h b/src/declarative/qml/qmlvme_p.h index 2a3be06..86cd040 100644 --- a/src/declarative/qml/qmlvme_p.h +++ b/src/declarative/qml/qmlvme_p.h @@ -44,6 +44,7 @@ #include <QString> #include <QStack> +#include <qmlerror.h> class QObject; QT_BEGIN_NAMESPACE @@ -60,13 +61,13 @@ public: QObject *run(QmlContext *, QmlCompiledComponent *, int start = -1, int end = -1); bool isError() const; - qint64 errorLine() const; - QString errorDescription() const; + QList<QmlError> errors() const; private: void runStoreInstruction(QStack<QObject *> &stack, QmlInstruction &, QmlCompiledData *); + QList<QmlError> vmeErrors; qint64 exceptionLine; QString exceptionDescription; }; diff --git a/src/declarative/util/qfxview.cpp b/src/declarative/util/qfxview.cpp index cac73a0..f71b87e 100644 --- a/src/declarative/util/qfxview.cpp +++ b/src/declarative/util/qfxview.cpp @@ -233,8 +233,6 @@ QmlContext* QFxView::rootContext() */ void QFxView::execute() { - rootContext()->activate(); - if (d->qml.isEmpty()) { d->component = new QmlComponent(&d->engine, d->source, this); } else { @@ -249,6 +247,45 @@ void QFxView::execute() } /*! + \internal +*/ +void QFxView::printErrorLine(const QmlError &error) +{ + QUrl url = error.url(); + if (error.line() > 0 && error.column() > 0 && + url.scheme() == QLatin1String("file")) { + QString file = url.toLocalFile(); + QFile f(file); + if (f.open(QIODevice::ReadOnly)) { + QByteArray data = f.readAll(); + QTextStream stream(data, QIODevice::ReadOnly); + const QString code = stream.readAll(); + const QStringList lines = code.split(QLatin1Char('\n')); + + if (lines.count() >= error.line()) { + const QString &line = lines.at(error.line() - 1); + qWarning() << qPrintable(line); + + int column = qMax(0, error.column() - 1); + column = qMin(column, line.length()); + + QByteArray ind; + ind.reserve(column); + for (int i = 0; i < column; ++i) { + const QChar ch = line.at(i); + if (ch.isSpace()) + ind.append(ch.unicode()); + else + ind.append(' '); + } + ind.append('^'); + qWarning() << ind.constData(); + } + } + } +} + +/*! \internal */ void QFxView::continueExecute() @@ -260,8 +297,26 @@ void QFxView::continueExecute() return; } + if(d->component->isError()) { + QList<QmlError> errors = d->component->errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + + return; + } + QObject *obj = d->component->create(); - rootContext()->deactivate(); + + if(d->component->isError()) { + QList<QmlError> errors = d->component->errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + + return; + } + if (obj) { if (QFxItem *item = qobject_cast<QFxItem *>(obj)) { item->QSimpleCanvasItem::setParent(QSimpleCanvas::root()); @@ -330,7 +385,25 @@ QFxItem* QFxView::addItem(const QString &qml, QFxItem* parent) return 0; QmlComponent component(&d->engine, qml.toUtf8(), QUrl()); + if(d->component->isError()) { + QList<QmlError> errors = d->component->errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + + return 0; + } + QObject *obj = component.create(); + if(d->component->isError()) { + QList<QmlError> errors = d->component->errors(); + foreach (const QmlError &error, errors) { + qWarning() << error; + } + + return 0; + } + if (obj){ QFxItem *item = static_cast<QFxItem *>(obj); if (!parent) diff --git a/src/declarative/util/qfxview.h b/src/declarative/util/qfxview.h index d2cacf4..f575f27 100644 --- a/src/declarative/util/qfxview.h +++ b/src/declarative/util/qfxview.h @@ -57,7 +57,7 @@ QT_MODULE(Declarative) class QFxItem; class QmlEngine; class QmlContext; -class Canvas; +class QmlError; class QFxViewPrivate; class Q_DECLARATIVE_EXPORT QFxView : public QSimpleCanvas @@ -84,6 +84,7 @@ public: void dumpRoot(); + static void printErrorLine(const QmlError &); Q_SIGNALS: void sceneResized(QSize size); |