diff options
author | Topi Reinio <topi.reinio@qt.io> | 2020-03-25 21:52:49 +0100 |
---|---|---|
committer | Topi Reiniƶ <topi.reinio@qt.io> | 2020-03-26 08:56:40 +0000 |
commit | 9a3c1a3ef004bdd948524afc37050a617a6e4823 (patch) | |
tree | 72ac7beb2cceda6c7cd38773a1613dbdc010eb8d | |
parent | 4e35093ea7f6be6caf34b0627fbaffab984a5e0f (diff) |
qdoc: Ensure macros as a macro parameter are expanded
QDoc allows macros to be nested, and macro parameters can also be
other macros, but in one code path the parameter was read verbatim,
i.e. not expanded. This is an unnecessary restriction so remove it.
Fixes: QTBUG-83085
Change-Id: I6dc7c2f7586a65bee78096fb50685262dad2ffe3
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
5 files changed, 65 insertions, 1 deletions
diff --git a/src/qdoc/doc.cpp b/src/qdoc/doc.cpp index 5b52e9e1a..23d5205ff 100644 --- a/src/qdoc/doc.cpp +++ b/src/qdoc/doc.cpp @@ -2086,7 +2086,7 @@ void DocParser::expandMacro(const QString &name, const QString &def, int numPara for (int i = 0; i < numParams; ++i) { if (numParams == 1 || isLeftBraceAhead()) { - args << getArgument(true); + args << getArgument(); } else { location().warning(tr("Macro '\\%1' invoked with too few" " arguments (expected %2, got %3)") diff --git a/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html new file mode 100644 index 000000000..6ab4d245b --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/expected_output/nestedmacro/testcpp-module.html @@ -0,0 +1,43 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> +<!-- testcpp.cpp --> + <title>QDoc Test C++ Classes | TestCPP</title> +</head> +<body> +<div class="sidebar"> +<div class="toc"> +<h3><a name="toc">Contents</a></h3> +<ul> +<li class="level1"><a href="#namespaces">Namespaces</a></li> +<li class="level1"><a href="#classes">Classes</a></li> +<li class="level1"><a href="#details">Detailed Description</a></li> +</ul> +</div> +<div class="sidebar-content" id="sidebar-content"></div></div> +<h1 class="title">QDoc Test C++ Classes</h1> +<span class="subtitle"></span> +<!-- $$$TestCPP-brief --> +<p>A test module page. <a href="#details">More...</a></p> +<!-- @@@TestCPP --> +<a name="namespaces"></a> +<h2 id="namespaces">Namespaces</h2> +<div class="table"><table class="annotated"> +<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc.html">TestQDoc</a></p></td><td class="tblDescr"><p>A namespace</p></td></tr> +</table></div> +<a name="classes"></a> +<h2 id="classes">Classes</h2> +<div class="table"><table class="annotated"> +<tr class="odd topAlign"><td class="tblName"><p><a href="testqdoc-test.html">TestQDoc::Test</a></p></td><td class="tblDescr"><p>A class in a namespace</p></td></tr> +<tr class="even topAlign"><td class="tblName"><p><a href="testqdoc-testderived.html">TestQDoc::TestDerived</a></p></td><td class="tblDescr"><p>A derived class in a namespace</p></td></tr> +</table></div> +<!-- $$$TestCPP-description --> +<a name="details"></a> +<div class="descr"> +<h2 id="details">Detailed Description</h2> +<p><b>This module was introduced in version 5.15.</b></p> +</div> +<!-- @@@TestCPP --> +</body> +</html> diff --git a/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf new file mode 100644 index 000000000..64475be7e --- /dev/null +++ b/tests/auto/qdoc/generatedoutput/testdata/configs/nestedmacro.qdocconf @@ -0,0 +1,9 @@ +include(testcpp.qdocconf) +defines += test_nestedmacro + +macro.ver = "5.15.0" +macro.ver.match = "^(\\d+\\.\\d+)" +macro.versionnote.HTML = "<p><b>This \1 was introduced in version \2.</b></p>\n" + +HTML.nosubdirs = true +HTML.outputsubdir = nestedmacro diff --git a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp index 8422494ac..17045eed5 100644 --- a/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp +++ b/tests/auto/qdoc/generatedoutput/testdata/testcpp/testcpp.cpp @@ -36,6 +36,10 @@ namespace TestQDoc { \brief A test module page. \testnoautolist + +\if defined(test_nestedmacro) + \versionnote {module} {\ver} +\endif */ /*! diff --git a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp index b3c69af71..7bf8b3210 100644 --- a/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp +++ b/tests/auto/qdoc/generatedoutput/tst_generatedoutput.cpp @@ -68,6 +68,7 @@ private slots: void preparePhase(); void generatePhase(); void noAutoList(); + void nestedMacro(); private: QScopedPointer<QTemporaryDir> m_outputDir; @@ -391,6 +392,13 @@ void tst_generatedOutput::noAutoList() "noautolist-docbook/qdoc-test-qmlmodule.xml"); } + +void tst_generatedOutput::nestedMacro() +{ + testAndCompare("testdata/configs/nestedmacro.qdocconf", + "nestedmacro/testcpp-module.html"); +} + QTEST_APPLESS_MAIN(tst_generatedOutput) #include "tst_generatedoutput.moc" |