diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-11-26 22:30:27 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2013-11-26 22:35:48 +0100 |
commit | 4a8273a6fc2e741e811cf5dabc9a3c240306cf7f (patch) | |
tree | 2148abc88f8543eecdc0b97b2dd92594836af9b2 /src/tools/qdoc/qmlparser/qqmljs.g | |
parent | 036c5db468164297d213764c59a4b59daa76d90a (diff) | |
parent | 1c2be58fecaff1de5f2849192eb712984ebd59bd (diff) |
Merge remote-tracking branch 'origin/stable' into dev
For the conflicts in msvc_nmake.cpp the ifdefs are extended since we
need to support windows phone in the target branch while it is not there
in the current stable branch (as of Qt 5.2).
Conflicts:
configure
qmake/generators/win32/msvc_nmake.cpp
src/3rdparty/angle/src/libEGL/Surface.cpp
src/angle/src/common/common.pri
src/corelib/global/qglobal.h
src/corelib/io/qstandardpaths.cpp
src/plugins/platforms/qnx/qqnxintegration.cpp
src/plugins/platforms/qnx/qqnxscreeneventhandler.h
src/plugins/platforms/xcb/qglxintegration.h
src/widgets/kernel/win.pri
tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
tools/configure/configureapp.cpp
Change-Id: I00b579eefebaf61d26ab9b00046d2b5bd5958812
Diffstat (limited to 'src/tools/qdoc/qmlparser/qqmljs.g')
-rw-r--r-- | src/tools/qdoc/qmlparser/qqmljs.g | 84 |
1 files changed, 74 insertions, 10 deletions
diff --git a/src/tools/qdoc/qmlparser/qqmljs.g b/src/tools/qdoc/qmlparser/qqmljs.g index 7ba6859534..de4fec4d56 100644 --- a/src/tools/qdoc/qmlparser/qqmljs.g +++ b/src/tools/qdoc/qmlparser/qqmljs.g @@ -65,6 +65,7 @@ --- context keywords. %token T_PUBLIC "public" %token T_IMPORT "import" +%token T_PRAGMA "pragma" %token T_AS "as" %token T_ON "on" %token T_GET "get" @@ -253,7 +254,8 @@ public: AST::VariableDeclarationList *VariableDeclarationList; AST::UiProgram *UiProgram; - AST::UiImportList *UiImportList; + AST::UiHeaderItemList *UiHeaderItemList; + AST::UiPragma *UiPragma; AST::UiImport *UiImport; AST::UiParameterList *UiParameterList; AST::UiPublicMember *UiPublicMember; @@ -266,6 +268,7 @@ public: AST::UiObjectMemberList *UiObjectMemberList; AST::UiArrayMemberList *UiArrayMemberList; AST::UiQualifiedId *UiQualifiedId; + AST::UiQualifiedPragmaId *UiQualifiedPragmaId; }; public: @@ -347,6 +350,7 @@ protected: { return location_stack [tos + index - 1]; } AST::UiQualifiedId *reparseAsQualifiedId(AST::ExpressionNode *expr); + AST::UiQualifiedPragmaId *reparseAsQualifiedPragmaId(AST::ExpressionNode *expr); protected: Engine *driver; @@ -486,6 +490,19 @@ AST::UiQualifiedId *Parser::reparseAsQualifiedId(AST::ExpressionNode *expr) return 0; } +AST::UiQualifiedPragmaId *Parser::reparseAsQualifiedPragmaId(AST::ExpressionNode *expr) +{ + if (AST::IdentifierExpression *idExpr = AST::cast<AST::IdentifierExpression *>(expr)) { + AST::UiQualifiedPragmaId *q = new (pool) AST::UiQualifiedPragmaId(idExpr->name); + q->identifierToken = idExpr->identifierToken; + + return q->finish(); + } + + return 0; +} + + bool Parser::parse(int startToken) { Lexer *lexer = driver->lexer(); @@ -594,38 +611,62 @@ case $rule_number: { } break; ./ -UiProgram: UiImportListOpt UiRootMember ; +UiProgram: UiHeaderItemListOpt UiRootMember; /. case $rule_number: { - sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiImportList, + sym(1).UiProgram = new (pool) AST::UiProgram(sym(1).UiHeaderItemList, sym(2).UiObjectMemberList->finish()); } break; ./ -UiImportListOpt: Empty ; -UiImportListOpt: UiImportList ; +UiHeaderItemListOpt: Empty ; +UiHeaderItemListOpt: UiHeaderItemList ; /. case $rule_number: { - sym(1).Node = sym(1).UiImportList->finish(); + sym(1).Node = sym(1).UiHeaderItemList->finish(); } break; ./ -UiImportList: UiImport ; +UiHeaderItemList: UiPragma ; /. case $rule_number: { - sym(1).Node = new (pool) AST::UiImportList(sym(1).UiImport); + sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiPragma); } break; ./ -UiImportList: UiImportList UiImport ; +UiHeaderItemList: UiImport ; /. case $rule_number: { - sym(1).Node = new (pool) AST::UiImportList(sym(1).UiImportList, sym(2).UiImport); + sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiImport); } break; ./ +UiHeaderItemList: UiHeaderItemList UiPragma ; +/. +case $rule_number: { + sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiPragma); +} break; +./ + +UiHeaderItemList: UiHeaderItemList UiImport ; +/. +case $rule_number: { + sym(1).Node = new (pool) AST::UiHeaderItemList(sym(1).UiHeaderItemList, sym(2).UiImport); +} break; +./ + +PragmaId: MemberExpression ; + ImportId: MemberExpression ; +UiPragma: UiPragmaHead T_AUTOMATIC_SEMICOLON ; +UiPragma: UiPragmaHead T_SEMICOLON ; +/. +case $rule_number: { + sym(1).UiPragma->semicolonToken = loc(2); +} break; +./ + UiImport: UiImportHead T_AUTOMATIC_SEMICOLON ; UiImport: UiImportHead T_SEMICOLON ; /. @@ -666,6 +707,28 @@ case $rule_number: { } break; ./ +UiPragmaHead: T_PRAGMA PragmaId ; +/. +case $rule_number: { + AST::UiPragma *node = 0; + + if (AST::UiQualifiedPragmaId *qualifiedId = reparseAsQualifiedPragmaId(sym(2).Expression)) { + node = new (pool) AST::UiPragma(qualifiedId); + } + + sym(1).Node = node; + + if (node) { + node->pragmaToken = loc(1); + } else { + diagnostic_messages.append(DiagnosticMessage(DiagnosticMessage::Error, loc(1), + QLatin1String("Expected a qualified name id"))); + + return false; // ### remove me + } +} break; +./ + UiImportHead: T_IMPORT ImportId ; /. @@ -1261,6 +1324,7 @@ case $rule_number: { } break; ./ + UiQualifiedId: MemberExpression ; /. case $rule_number: { |