diff options
author | wtschueller <wtschueller@users.noreply.github.com> | 2014-06-10 19:41:33 (GMT) |
---|---|---|
committer | wtschueller <wtschueller@users.noreply.github.com> | 2014-06-10 19:41:33 (GMT) |
commit | 6245ef410358f332330195f9f2bfa458cfb6a2b8 (patch) | |
tree | 18fd167ba16756d6bce30e435bc5da3201d794e9 | |
parent | 7edbf2b2e705eccc0d99cce86149228473bc7f3e (diff) | |
download | Doxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.zip Doxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.tar.gz Doxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.tar.bz2 |
Tcl: collect XRefs also if INLINE_SOURCES = no
-rw-r--r-- | src/tclscanner.l | 36 | ||||
-rw-r--r-- | testing/057/057__caller__graphs_8tcl.xml | 64 | ||||
-rw-r--r-- | testing/057/namespace1.xml | 113 | ||||
-rw-r--r-- | testing/057/namespace1_1_11.xml | 28 | ||||
-rw-r--r-- | testing/057/namespace1_1_11_1_11.xml | 26 | ||||
-rw-r--r-- | testing/057/namespace2.xml | 30 | ||||
-rw-r--r-- | testing/057/namespace2_1_12.xml | 29 | ||||
-rw-r--r-- | testing/057/namespace2_1_12_1_12.xml | 29 | ||||
-rw-r--r-- | testing/057/namespace2_1_12_1_12_1_12.xml | 29 | ||||
-rw-r--r-- | testing/057/namespace2_1_12_1_12_1_12_1_12.xml | 28 | ||||
-rw-r--r-- | testing/057/namespacebar.xml | 57 | ||||
-rw-r--r-- | testing/057/namespacefoo.xml | 27 | ||||
-rw-r--r-- | testing/057_caller_graphs.tcl | 138 |
13 files changed, 634 insertions, 0 deletions
diff --git a/src/tclscanner.l b/src/tclscanner.l index 1fd20cd..7201088 100644 --- a/src/tclscanner.l +++ b/src/tclscanner.l @@ -451,6 +451,7 @@ static struct QList<Entry> entry; // list of all created entries, will be deleted after codifying Protection protection; // current protections state MemberDef *memberdef; // contain current MemberDef when codifying + bool collectXRefs; } tcl; // scanner functions @@ -1652,6 +1653,40 @@ static void tcl_codify_link(QCString name) { myDef->addSourceReferencedBy(tcl.memberdef); tcl.memberdef->addSourceReferences(myDef); + } else { + Entry* callerEntry; + unsigned int i; + // walk the stack of scan contexts and find the enclosing method or proc + for (i=0;i<tcl.scan.count();i++) + { + callerEntry=tcl.scan.at(i)->entry_scan; + if (callerEntry->mtype==Method && !callerEntry->name.isEmpty()) + { + break; + } + } + if (i<tcl.scan.count()) + { + // enclosing method found + QCString callerName = callerEntry->name; + if (callerName.mid(0,2)=="::") // fully qualified global command + { + callerName = callerName.mid(2); + } + else + { + if (!(tcl.scan.at(0)->ns.stripWhiteSpace().isEmpty())) + { + callerName = tcl.scan.at(0)->ns + "::" + callerEntry->name; + } + } + MemberDef *callerDef=NULL; + callerDef = fn.find(callerName); + if (callerDef!=NULL && myDef!= NULL && tcl.collectXRefs) + { + addDocCrossReference(callerDef,myDef); + } + } } } else if (tcl_keyword(myName)) // check keyword @@ -2634,6 +2669,7 @@ tcl_inf("%s (%d,%d) %d %d\n",myStr.ascii(),startLine,endLine,isExampleBlock,inli return; } tcl_init(); + tcl.collectXRefs = collectXRefs; tcl.memberdef = memberDef; tcl.code = &codeOutIntf; if (startLine<0) diff --git a/testing/057/057__caller__graphs_8tcl.xml b/testing/057/057__caller__graphs_8tcl.xml new file mode 100644 index 0000000..d2e3d84 --- /dev/null +++ b/testing/057/057__caller__graphs_8tcl.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="057__caller__graphs_8tcl" kind="file"> + <compoundname>057_caller_graphs.tcl</compoundname> + <innernamespace refid="namespacebar">bar</innernamespace> + <innernamespace refid="namespacefoo">foo</innernamespace> + <innernamespace refid="namespace1_1_11_1_11">1::1::1</innernamespace> + <innernamespace refid="namespace1">1</innernamespace> + <innernamespace refid="namespace1_1_11">1::1</innernamespace> + <innernamespace refid="namespace2_1_12_1_12_1_12_1_12">2::2::2::2::2</innernamespace> + <innernamespace refid="namespace2">2</innernamespace> + <innernamespace refid="namespace2_1_12">2::2</innernamespace> + <innernamespace refid="namespace2_1_12_1_12">2::2::2</innernamespace> + <innernamespace refid="namespace2_1_12_1_12_1_12">2::2::2::2</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="057__caller__graphs_8tcl_1a85c692c418fec91930cfc7b3e82857d7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>baz</definition> + <argsstring>args</argsstring> + <name>baz</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="57" bodyend="59"/> + </memberdef> + <memberdef kind="function" id="057__caller__graphs_8tcl_1ae4e1c2bb3adfdfbb71f52de84a8285b0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>bar</definition> + <argsstring>args</argsstring> + <name>bar</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="63" bodyend="65"/> + <referencedby refid="namespace1_1a9722420639306872cea2593b83028a45" compoundref="057__caller__graphs_8tcl" startline="83" endline="86">1::test3</referencedby> + </memberdef> + <memberdef kind="function" id="057__caller__graphs_8tcl_1a3f808a00e1b937978455d707851ab33a" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="100" bodyend="103"/> + <references refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="104" endline="112">2::next</references> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="057_caller_graphs.tcl"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace1.xml b/testing/057/namespace1.xml new file mode 100644 index 0000000..e40300d --- /dev/null +++ b/testing/057/namespace1.xml @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace1" kind="namespace"> + <compoundname>1</compoundname> + <innernamespace refid="namespace1_1_11">1::1</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace1_1a5024a7bc323958c7230615f2fcaeaef8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::baz</definition> + <argsstring>args</argsstring> + <name>baz</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="60" bodyend="62"/> + <referencedby refid="namespace1_1a4a8285288ee1994ac886e2039777339e" compoundref="057__caller__graphs_8tcl" startline="75" endline="78">test1</referencedby> + <referencedby refid="namespace1_1a11615154d3c207ed4106dd0bcb0639e8" compoundref="057__caller__graphs_8tcl" startline="91" endline="94">test5</referencedby> + </memberdef> + <memberdef kind="function" id="namespace1_1ad58c8f16ad5f12178c71ca988865bb58" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::bar</definition> + <argsstring>args</argsstring> + <name>bar</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="66" bodyend="68"/> + <referencedby refid="namespace1_1ae1e88bb7ddd332348d7e29ac4a211b00" compoundref="057__caller__graphs_8tcl" startline="79" endline="82">test2</referencedby> + </memberdef> + <memberdef kind="function" id="namespace1_1a4a8285288ee1994ac886e2039777339e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::test1</definition> + <argsstring>args</argsstring> + <name>test1</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="75" bodyend="78"/> + <references refid="namespace1_1a5024a7bc323958c7230615f2fcaeaef8" compoundref="057__caller__graphs_8tcl" startline="60" endline="62">baz</references> + </memberdef> + <memberdef kind="function" id="namespace1_1ae1e88bb7ddd332348d7e29ac4a211b00" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::test2</definition> + <argsstring>args</argsstring> + <name>test2</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="79" bodyend="82"/> + <references refid="namespace1_1ad58c8f16ad5f12178c71ca988865bb58" compoundref="057__caller__graphs_8tcl" startline="66" endline="68">bar</references> + </memberdef> + <memberdef kind="function" id="namespace1_1a9722420639306872cea2593b83028a45" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::test3</definition> + <argsstring>args</argsstring> + <name>test3</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="83" bodyend="86"/> + <references refid="057__caller__graphs_8tcl_1ae4e1c2bb3adfdfbb71f52de84a8285b0" compoundref="057__caller__graphs_8tcl" startline="63" endline="65">bar</references> + </memberdef> + <memberdef kind="function" id="namespace1_1addc9b30656419de5e2651e27a013db29" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::test4</definition> + <argsstring>args</argsstring> + <name>test4</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="87" bodyend="90"/> + <references refid="namespace1_1_11_1acebecc4cb718010d00c3c150158b75ab" compoundref="057__caller__graphs_8tcl" startline="69" endline="71">1::1::bar</references> + </memberdef> + <memberdef kind="function" id="namespace1_1a11615154d3c207ed4106dd0bcb0639e8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::test5</definition> + <argsstring>args</argsstring> + <name>test5</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="91" bodyend="94"/> + <references refid="namespace1_1a5024a7bc323958c7230615f2fcaeaef8" compoundref="057__caller__graphs_8tcl" startline="60" endline="62">baz</references> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace1_1_11.xml b/testing/057/namespace1_1_11.xml new file mode 100644 index 0000000..157ab5e --- /dev/null +++ b/testing/057/namespace1_1_11.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace1_1_11" kind="namespace"> + <compoundname>1::1</compoundname> + <innernamespace refid="namespace1_1_11_1_11">1::1::1</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace1_1_11_1acebecc4cb718010d00c3c150158b75ab" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::1::bar</definition> + <argsstring>args</argsstring> + <name>bar</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="69" bodyend="71"/> + <referencedby refid="namespace1_1addc9b30656419de5e2651e27a013db29" compoundref="057__caller__graphs_8tcl" startline="87" endline="90">1::test4</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace1_1_11_1_11.xml b/testing/057/namespace1_1_11_1_11.xml new file mode 100644 index 0000000..2f5a685 --- /dev/null +++ b/testing/057/namespace1_1_11_1_11.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace1_1_11_1_11" kind="namespace"> + <compoundname>1::1::1</compoundname> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace1_1_11_1_11_1aa604df053f7ebe36205d1a5675459b96" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>1::1::1::bar</definition> + <argsstring>args</argsstring> + <name>bar</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="72" bodyend="74"/> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="057_caller_graphs.tcl" line="56" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace2.xml b/testing/057/namespace2.xml new file mode 100644 index 0000000..47a9fcf --- /dev/null +++ b/testing/057/namespace2.xml @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace2" kind="namespace"> + <compoundname>2</compoundname> + <innernamespace refid="namespace2_1_12">2::2</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>2::next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="104" bodyend="112"/> + <references refid="namespace2_1_12_1aceefa876cf364f44da1f523d3f7b0649" compoundref="057__caller__graphs_8tcl" startline="113" endline="116">2::2::next</references> + <referencedby refid="057__caller__graphs_8tcl_1a3f808a00e1b937978455d707851ab33a" compoundref="057__caller__graphs_8tcl" startline="100" endline="103">next</referencedby> + <referencedby refid="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" compoundref="057__caller__graphs_8tcl" startline="125" endline="128">2::2::2::2::2::next</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace2_1_12.xml b/testing/057/namespace2_1_12.xml new file mode 100644 index 0000000..3338473 --- /dev/null +++ b/testing/057/namespace2_1_12.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace2_1_12" kind="namespace"> + <compoundname>2::2</compoundname> + <innernamespace refid="namespace2_1_12_1_12">2::2::2</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace2_1_12_1aceefa876cf364f44da1f523d3f7b0649" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>2::2::next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="113" bodyend="116"/> + <references refid="namespace2_1_12_1_12_1a85524e2015e377d433cd8384335c11d6" compoundref="057__caller__graphs_8tcl" startline="117" endline="120">2::2::2::next</references> + <referencedby refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="104" endline="112">2::next</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace2_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12.xml new file mode 100644 index 0000000..259ef25 --- /dev/null +++ b/testing/057/namespace2_1_12_1_12.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace2_1_12_1_12" kind="namespace"> + <compoundname>2::2::2</compoundname> + <innernamespace refid="namespace2_1_12_1_12_1_12">2::2::2::2</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace2_1_12_1_12_1a85524e2015e377d433cd8384335c11d6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>2::2::2::next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="117" bodyend="120"/> + <references refid="namespace2_1_12_1_12_1_12_1a3ea6e2ce66f4a9c30009852e4c7da2fe" compoundref="057__caller__graphs_8tcl" startline="121" endline="124">2::2::2::2::next</references> + <referencedby refid="namespace2_1_12_1aceefa876cf364f44da1f523d3f7b0649" compoundref="057__caller__graphs_8tcl" startline="113" endline="116">2::2::next</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace2_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12.xml new file mode 100644 index 0000000..cea3062 --- /dev/null +++ b/testing/057/namespace2_1_12_1_12_1_12.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace2_1_12_1_12_1_12" kind="namespace"> + <compoundname>2::2::2::2</compoundname> + <innernamespace refid="namespace2_1_12_1_12_1_12_1_12">2::2::2::2::2</innernamespace> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace2_1_12_1_12_1_12_1a3ea6e2ce66f4a9c30009852e4c7da2fe" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>2::2::2::2::next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="121" bodyend="124"/> + <references refid="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" compoundref="057__caller__graphs_8tcl" startline="125" endline="128">2::2::2::2::2::next</references> + <referencedby refid="namespace2_1_12_1_12_1a85524e2015e377d433cd8384335c11d6" compoundref="057__caller__graphs_8tcl" startline="117" endline="120">2::2::2::next</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="[generated]" line="1" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespace2_1_12_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml new file mode 100644 index 0000000..65bfa00 --- /dev/null +++ b/testing/057/namespace2_1_12_1_12_1_12_1_12.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespace2_1_12_1_12_1_12_1_12" kind="namespace"> + <compoundname>2::2::2::2::2</compoundname> + <sectiondef kind="func"> + <memberdef kind="function" id="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>2::2::2::2::2::next</definition> + <argsstring>args</argsstring> + <name>next</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="125" bodyend="128"/> + <references refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="104" endline="112">2::next</references> + <referencedby refid="namespace2_1_12_1_12_1_12_1a3ea6e2ce66f4a9c30009852e4c7da2fe" compoundref="057__caller__graphs_8tcl" startline="121" endline="124">2::2::2::2::next</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="057_caller_graphs.tcl" line="99" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespacebar.xml b/testing/057/namespacebar.xml new file mode 100644 index 0000000..642986b --- /dev/null +++ b/testing/057/namespacebar.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespacebar" kind="namespace"> + <compoundname>bar</compoundname> + <sectiondef kind="func"> + <memberdef kind="function" id="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>bar::slave</definition> + <argsstring/> + <name>slave</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="27" bodyend="33"/> + <references refid="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" compoundref="057__caller__graphs_8tcl" startline="34" endline="37">baz</references> + <referencedby refid="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" compoundref="057__caller__graphs_8tcl" startline="42" endline="46">foo::master</referencedby> + </memberdef> + <memberdef kind="function" id="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>bar::baz</definition> + <argsstring/> + <name>baz</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="34" bodyend="37"/> + <references refid="namespacebar_1a88879545dee287d377e638b87cdf6dd7" compoundref="057__caller__graphs_8tcl" startline="38" endline="40">bazbaz</references> + <referencedby refid="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" compoundref="057__caller__graphs_8tcl" startline="27" endline="33">slave</referencedby> + </memberdef> + <memberdef kind="function" id="namespacebar_1a88879545dee287d377e638b87cdf6dd7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>bar::bazbaz</definition> + <argsstring/> + <name>bazbaz</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="38" bodyend="40"/> + <referencedby refid="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" compoundref="057__caller__graphs_8tcl" startline="34" endline="37">baz</referencedby> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="057_caller_graphs.tcl" line="26" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057/namespacefoo.xml b/testing/057/namespacefoo.xml new file mode 100644 index 0000000..11f8053 --- /dev/null +++ b/testing/057/namespacefoo.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version=""> + <compounddef id="namespacefoo" kind="namespace"> + <compoundname>foo</compoundname> + <sectiondef kind="func"> + <memberdef kind="function" id="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual"> + <type/> + <definition>foo::master</definition> + <argsstring/> + <name>master</name> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <inbodydescription> + </inbodydescription> + <location file="057_caller_graphs.tcl" bodystart="42" bodyend="46"/> + <references refid="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" compoundref="057__caller__graphs_8tcl" startline="27" endline="33">bar::slave</references> + </memberdef> + </sectiondef> + <briefdescription> + </briefdescription> + <detaileddescription> + </detaileddescription> + <location file="057_caller_graphs.tcl" line="41" column="1"/> + </compounddef> +</doxygen> diff --git a/testing/057_caller_graphs.tcl b/testing/057_caller_graphs.tcl new file mode 100644 index 0000000..25bf1e7 --- /dev/null +++ b/testing/057_caller_graphs.tcl @@ -0,0 +1,138 @@ +#// objective: test for completeness and correctness of references/referencedby relations +#// check: 057__caller__graphs_8tcl.xml +#// check: namespacebar.xml +#// check: namespacefoo.xml +#// check: namespace1.xml +#// check: namespace1_1_11.xml +#// check: namespace1_1_11_1_11.xml +#// check: namespace2.xml +#// check: namespace2_1_12.xml +#// check: namespace2_1_12_1_12.xml +#// check: namespace2_1_12_1_12_1_12.xml +#// check: namespace2_1_12_1_12_1_12_1_12.xml +#// config: EXTRACT_ALL = yes +#// config: INLINE_SOURCES = no +#// config: REFERENCED_BY_RELATION = yes +#// config: REFERENCES_RELATION = yes +# config: HAVE_DOT = yes +# config: CALLER_GRAPH = yes +# config: CALL_GRAPH = yes +# config: GENERATE_HTML = yes + +# This is a stripped down example from my code. +# Doxygen 1.8.7 generates the correct relations (xml) +# but caller graphs will be incomplete. +# It does not generate any relations at all if INLINE_SOURCES = no. +namespace eval bar {} +proc bar::slave { } { + array set info [info frame 0]; puts -nonewline ->$info(proc) + if {1} then { + bar::baz + } + return +} +proc bar::baz {} { + array set info [info frame 0]; puts -nonewline ->$info(proc) + bar::bazbaz +} +proc bar::bazbaz {} { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +namespace eval foo {} +proc foo::master { } { + array set info [info frame 0]; puts -nonewline $info(proc) + bar::slave + return +} +# +# now we check tcl's rules: from the help +# NAME RESOLUTION +#... Command names are also always resolved by looking in the current +#namespace first. If not found there, they are searched for in every namespace on +#the current namespace's command path (which is empty by default). If not found +#there, command names are looked up in the global namespace (or, failing that, +#are processed by the unknown command.) ... +# +namespace eval ::1::1::1 {} +proc ::baz args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::baz args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::1::1::bar args { + array set info [info frame 0]; puts -nonewline ->$info(proc) +} +proc ::1::test1 args { + array set info [info frame 0]; puts -nonewline $info(proc) + baz +} +proc ::1::test2 args { + array set info [info frame 0]; puts -nonewline $info(proc) + bar +} +proc ::1::test3 args { + array set info [info frame 0]; puts -nonewline $info(proc) + ::bar +} +proc ::1::test4 args { + array set info [info frame 0]; puts -nonewline $info(proc) + 1::bar +} +proc ::1::test5 args { + array set info [info frame 0]; puts -nonewline $info(proc) + 1::baz +} +# +# funny example, do you see the infinite loop? +# we stop before the interpreter crashes +set ::countdown 10 +namespace eval ::2::2::2::2::2 {} +proc ::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::next args { + array set info [info frame 0]; puts $info(proc) + incr ::countdown -1 + if {$::countdown>0} then { + 2::next + } else { + puts "stop after 10 rounds." + } +} +proc ::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +proc ::2::2::2::2::2::next args { + array set info [info frame 0]; puts $info(proc) + 2::next +} +# now, check with tcl what is called +foo::master +puts "" +foreach proc [lsort [info procs ::1::test?]] { + $proc + puts "" +} +::next +exit + |