summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwtschueller <wtschueller@users.noreply.github.com>2014-06-10 19:41:33 (GMT)
committerwtschueller <wtschueller@users.noreply.github.com>2014-06-10 19:41:33 (GMT)
commit6245ef410358f332330195f9f2bfa458cfb6a2b8 (patch)
tree18fd167ba16756d6bce30e435bc5da3201d794e9
parent7edbf2b2e705eccc0d99cce86149228473bc7f3e (diff)
downloadDoxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.zip
Doxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.tar.gz
Doxygen-6245ef410358f332330195f9f2bfa458cfb6a2b8.tar.bz2
Tcl: collect XRefs also if INLINE_SOURCES = no
-rw-r--r--src/tclscanner.l36
-rw-r--r--testing/057/057__caller__graphs_8tcl.xml64
-rw-r--r--testing/057/namespace1.xml113
-rw-r--r--testing/057/namespace1_1_11.xml28
-rw-r--r--testing/057/namespace1_1_11_1_11.xml26
-rw-r--r--testing/057/namespace2.xml30
-rw-r--r--testing/057/namespace2_1_12.xml29
-rw-r--r--testing/057/namespace2_1_12_1_12.xml29
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12.xml29
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12_1_12.xml28
-rw-r--r--testing/057/namespacebar.xml57
-rw-r--r--testing/057/namespacefoo.xml27
-rw-r--r--testing/057_caller_graphs.tcl138
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
+