summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2014-07-13 18:47:54 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2014-07-13 18:47:54 (GMT)
commitec7789738e9d42f75b295a4673930e30da3c48a9 (patch)
tree54c0a51795600e3b0d095a9dc58b3b12af1699ab
parentd234115b6f387ff723cb97a4d47b2bcca7f0bc6d (diff)
parenta4ef6aaa7b044d4ad6f5a41485023c3f0913f184 (diff)
downloadDoxygen-ec7789738e9d42f75b295a4673930e30da3c48a9.zip
Doxygen-ec7789738e9d42f75b295a4673930e30da3c48a9.tar.gz
Doxygen-ec7789738e9d42f75b295a4673930e30da3c48a9.tar.bz2
Merge branch 'master' of github.com:doxygen/doxygen
-rw-r--r--src/commentscan.l4
-rw-r--r--src/context.cpp30
-rw-r--r--src/doctokenizer.l4
-rw-r--r--src/entry.h4
-rw-r--r--src/memberdef.cpp46
-rw-r--r--src/memberdef.h4
-rw-r--r--src/scanner.l4
-rw-r--r--src/tclscanner.l326
-rw-r--r--src/xmlgen.cpp16
-rw-r--r--testing/057/057__caller__graphs_8tcl.xml38
-rw-r--r--testing/057/__057__caller__graphs_8tcl.xml28
-rw-r--r--testing/057/namespace1.xml30
-rw-r--r--testing/057/namespace1_1_11.xml4
-rw-r--r--testing/057/namespace1_1_11_1_11.xml4
-rw-r--r--testing/057/namespace2.xml8
-rw-r--r--testing/057/namespace2_1_12.xml6
-rw-r--r--testing/057/namespace2_1_12_1_12.xml6
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12.xml6
-rw-r--r--testing/057/namespace2_1_12_1_12_1_12_1_12.xml8
-rw-r--r--testing/057/namespacebar.xml18
-rw-r--r--testing/057/namespacefoo.xml6
-rw-r--r--testing/057_caller_graphs.tcl17
-rw-r--r--testing/058/058__bracket__recursion_8tcl.xml30
-rw-r--r--testing/058_bracket_recursion.tcl18
-rw-r--r--testing/059/059__command__catch_8tcl.xml191
-rw-r--r--testing/059_command_catch.tcl87
-rw-r--r--testing/060/060__command__switch_8tcl.xml358
-rw-r--r--testing/060_command_switch.tcl238
-rw-r--r--testing/061/class_test.xml70
-rw-r--r--testing/061_bug_705503.tcl19
-rw-r--r--testing/062/namespacen1.xml42
-rw-r--r--testing/062/namespacen2.xml42
-rw-r--r--testing/062/namespacen3.xml42
-rw-r--r--testing/062_namespace_resolution.tcl68
-rw-r--r--testing/063/namespaceoo.xml13
-rw-r--r--testing/063/namespaceoo_1_1_helpers.xml28
-rw-r--r--testing/063/namespaceoo_1_1define.xml28
-rw-r--r--testing/063_bug_729092.tcl49
-rw-r--r--testing/_057_caller_graphs.tcl4
39 files changed, 1841 insertions, 103 deletions
diff --git a/src/commentscan.l b/src/commentscan.l
index bd20bf0..a42f6ce 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -914,7 +914,9 @@ FILEECHAR [a-z_A-Z0-9\x80-\xFF\-\+@&#]
FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]*"\"")
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
+CITESCHAR [a-z_A-Z\x80-\xFF]
+CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
+CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
SCOPEID {ID}({ID}*{BN}*"::"{BN}*)*({ID}?)
SCOPENAME "$"?(({ID}?{BN}*("::"|"."){BN}*)*)((~{BN}*)?{ID})
TMPLSPEC "<"{BN}*[^>]+{BN}*">"
diff --git a/src/context.cpp b/src/context.cpp
index 05e2a7f..541cb74 100644
--- a/src/context.cpp
+++ b/src/context.cpp
@@ -2766,7 +2766,11 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
addProperty("isExplicit", this,&Private::isExplicit);
addProperty("isMutable", this,&Private::isMutable);
addProperty("isGettable", this,&Private::isGettable);
+ addProperty("isPrivateGettable", this,&Private::isPrivateGettable);
+ addProperty("isProtectedGettable", this,&Private::isProtectedGettable);
addProperty("isSettable", this,&Private::isSettable);
+ addProperty("isPrivateSettable", this,&Private::isPrivateSettable);
+ addProperty("isProtectedSettable", this,&Private::isProtectedSettable);
addProperty("isReadable", this,&Private::isReadable);
addProperty("isWritable", this,&Private::isWritable);
addProperty("isAddable", this,&Private::isAddable);
@@ -2855,8 +2859,12 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
m_cache.propertyAttrs.reset(TemplateList::alloc());
if (md && md->isProperty())
{
- if (md->isGettable()) m_cache.propertyAttrs->append("get");
- if (md->isSettable()) m_cache.propertyAttrs->append("set");
+ if (md->isGettable()) m_cache.propertyAttrs->append("get");
+ if (md->isPrivateGettable()) m_cache.propertyAttrs->append("private get");
+ if (md->isProtectedGettable()) m_cache.propertyAttrs->append("protected get");
+ if (md->isSettable()) m_cache.propertyAttrs->append("set");
+ if (md->isPrivateSettable()) m_cache.propertyAttrs->append("private set");
+ if (md->isProtectedSettable()) m_cache.propertyAttrs->append("protected set");
}
m_cache.eventAttrs.reset(TemplateList::alloc());
if (md && md->isEvent())
@@ -2948,12 +2956,28 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
}
TemplateVariant isGettable() const
{
- return m_memberDef->isSettable();
+ return m_memberDef->isGettable();
+ }
+ TemplateVariant isPrivateGettable() const
+ {
+ return m_memberDef->isPrivateGettable();
+ }
+ TemplateVariant isProtectedGettable() const
+ {
+ return m_memberDef->isProtectedGettable();
}
TemplateVariant isSettable() const
{
return m_memberDef->isSettable();
}
+ TemplateVariant isPrivateSettable() const
+ {
+ return m_memberDef->isPrivateSettable();
+ }
+ TemplateVariant isProtectedSettable() const
+ {
+ return m_memberDef->isProtectedSettable();
+ }
TemplateVariant isReadable() const
{
return m_memberDef->isReadable();
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 7ffbbb3..3bd2058 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -333,7 +333,9 @@ BLANK [ \t\r]
ID "$"?[a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF]*
LABELID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-]*
PHPTYPE [\\:a-z_A-Z0-9\x80-\xFF\-]+
-CITEID [a-z_A-Z\x80-\xFF][a-z_A-Z0-9\x80-\xFF\-:/]*
+CITESCHAR [a-z_A-Z\x80-\xFF]
+CITEECHAR [a-z_A-Z0-9\x80-\xFF\-\+:\/]*
+CITEID {CITESCHAR}*{CITEECHAR}+("."{CITESCHAR}*{CITEECHAR}+)*
MAILADR ("mailto:")?[a-z_A-Z0-9.+-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]+
OPTSTARS ("//"{BLANK}*)?"*"*{BLANK}*
LISTITEM {BLANK}*[-]("#")?{WS}
diff --git a/src/entry.h b/src/entry.h
index a861906..3e5f3d7 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -135,6 +135,10 @@ class Entry
static const uint64 Singleton = (1ULL<<14); // UNO IDL
// member specifiers (add new items to the beginning)
+ static const uint64 PrivateGettable = (1ULL<<20); // C# private getter
+ static const uint64 ProtectedGettable = (1ULL<<21); // C# protected getter
+ static const uint64 PrivateSettable = (1ULL<<22); // C# private setter
+ static const uint64 ProtectedSettable = (1ULL<<23); // C# protected setter
static const uint64 Inline = (1ULL<<24);
static const uint64 Explicit = (1ULL<<25);
static const uint64 Mutable = (1ULL<<26);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 9ef3515..1069b3b 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1729,15 +1729,27 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.docify(" [implementation]");
ol.endTypewriter();
}
+
+ bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
- if (isProperty() && (isSettable() || isGettable()))
+ if (isProperty() && (isSettable() || isGettable() ||
+ isPrivateSettable() || isPrivateGettable() ||
+ isProtectedSettable() || isProtectedGettable()))
{
ol.writeLatexSpacing();
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
- if (isGettable()) sl.append("get");
- if (isSettable()) sl.append("set");
+
+ if (isGettable()) sl.append("get");
+ if (isProtectedGettable()) sl.append("protected get");
+ if (isSettable()) sl.append("set");
+ if (isProtectedSettable()) sl.append("protected set");
+ if (extractPrivate)
+ {
+ if (isPrivateGettable()) sl.append("private get");
+ if (isPrivateSettable()) sl.append("private set");
+ }
const char *s=sl.first();
while (s)
{
@@ -1940,6 +1952,7 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
//ol.docify(" [");
SrcLangExt lang = getLanguage();
bool optVhdl = lang==SrcLangExt_VHDL;
+ bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
if (optVhdl)
{
sl.append(VhdlDocGen::trTypeString(getMemberSpecifiers()));
@@ -1955,7 +1968,14 @@ void MemberDef::getLabels(QStrList &sl,Definition *container) const
if (isMutable()) sl.append("mutable");
if (isStatic()) sl.append("static");
if (isGettable()) sl.append("get");
+ if (isProtectedGettable()) sl.append("protected get");
if (isSettable()) sl.append("set");
+ if (isProtectedSettable()) sl.append("protected set");
+ if (extractPrivate)
+ {
+ if (isPrivateGettable()) sl.append("private get");
+ if (isPrivateSettable()) sl.append("private set");
+ }
if (isAddable()) sl.append("add");
if (!isUNOProperty() && isRemovable()) sl.append("remove");
if (isRaisable()) sl.append("raise");
@@ -4193,11 +4213,31 @@ bool MemberDef::isGettable() const
return (m_impl->memSpec&Entry::Gettable)!=0;
}
+bool MemberDef::isPrivateGettable() const
+{
+ return (m_impl->memSpec&Entry::PrivateGettable)!=0;
+}
+
+bool MemberDef::isProtectedGettable() const
+{
+ return (m_impl->memSpec&Entry::ProtectedGettable)!=0;
+}
+
bool MemberDef::isSettable() const
{
return (m_impl->memSpec&Entry::Settable)!=0;
}
+bool MemberDef::isPrivateSettable() const
+{
+ return (m_impl->memSpec&Entry::PrivateSettable)!=0;
+}
+
+bool MemberDef::isProtectedSettable() const
+{
+ return (m_impl->memSpec&Entry::ProtectedSettable)!=0;
+}
+
bool MemberDef::isAddable() const
{
return (m_impl->memSpec&Entry::Addable)!=0;
diff --git a/src/memberdef.h b/src/memberdef.h
index 3259102..b3c671f 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -123,7 +123,11 @@ class MemberDef : public Definition
bool isExplicit() const;
bool isMutable() const;
bool isGettable() const;
+ bool isPrivateGettable() const;
+ bool isProtectedGettable() const;
bool isSettable() const;
+ bool isPrivateSettable() const;
+ bool isProtectedSettable() const;
bool isReadable() const;
bool isWritable() const;
bool isAddable() const;
diff --git a/src/scanner.l b/src/scanner.l
index a39d02e..50e3b18 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -6129,6 +6129,10 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP})
BEGIN(FindMembers);
}
}
+<CSAccessorDecl>"private "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::PrivateSettable; }
+<CSAccessorDecl>"protected "{BN}*"set" { if (curlyCount==0) current->spec |= Entry::ProtectedSettable; }
+<CSAccessorDecl>"private "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::PrivateGettable; }
+<CSAccessorDecl>"protected "{BN}*"get" { if (curlyCount==0) current->spec |= Entry::ProtectedGettable; }
<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
diff --git a/src/tclscanner.l b/src/tclscanner.l
index 48e8214..88e3d1d 100644
--- a/src/tclscanner.l
+++ b/src/tclscanner.l
@@ -534,6 +534,24 @@ static void tcl_name(const QCString &ns0, const QCString &name0, QCString &ns, Q
}
}
+//! Check name. Strip namespace qualifiers from name0 if inside inlined code segment.
+// @return 'ns' and 'name' of given current 'ns0' and 'name0'
+static void tcl_name_SnippetAware(const QCString &ns0, const QCString &name0, QCString &ns, QCString &name)
+{
+ // If we are inside an inlined code snippet then ns0
+ // already containes the complete namespace path.
+ // Any namespace qualifiers in name0 are redundant.
+ int i = name0.findRev("::");
+ if (i>=0 && tcl.memberdef)
+ {
+ tcl_name(ns0, name0.mid(i+2), ns, name);
+ }
+ else
+ {
+ tcl_name(ns0, name0, ns, name);
+ }
+}
+
// Check and return namespace entry.
// @return namespace entry
Entry* tcl_entry_namespace(const QCString ns)
@@ -714,6 +732,40 @@ static void tcl_codify_cmd(const char *s,int i)
{
tcl_codify(s,(*tcl.list_commandwords.at(i)).utf8());
}
+//! codify a string token
+//
+// codifies string according to type.
+// Starts a new scan context if needed (*myScan==0 and type == "script").
+// Returns NULL or the created scan context.
+//
+static tcl_scan *tcl_codify_token(tcl_scan *myScan, const QCString type, const QCString string)
+{
+ if (myScan != NULL)
+ {
+ if (type != NULL)
+ {
+ myScan->after << type << string;
+ }
+ else
+ {
+ myScan->after << "NULL" << string;
+ }
+ }
+ else
+ {
+ if (qstrcmp(type, "script") == 0)
+ {
+ myScan = tcl.scan.at(0);
+ myScan = tcl_scan_start('?', string,
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+ }
+ else
+ {
+ tcl_codify((const char*)type, string);
+ }
+ }
+ return myScan;
+}
//-----------------------------------------------------------------------------
#undef YY_INPUT
@@ -1716,14 +1768,7 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
if (i%2 != 0)
{
// handle white space
- if (myScan!=NULL)
- {
- myScan->after << "NULL" << myName;
- }
- else
- {
- tcl_codify(NULL,myName);
- }
+ myScan = tcl_codify_token(myScan, "NULL", myName);
}
else
{
@@ -1766,29 +1811,13 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
{
// the first opening bracket, output what we have so far
myStr+=c;
- if (myScan!=NULL)
- {
- myScan->after << "NULL" << myStr;
- }
- else
- {
- tcl_codify(NULL,myStr);
- }
+ myScan = tcl_codify_token(myScan, "NULL", myStr);
myStr="";
}
else if (c==']' && !backslashed && insideBrackets==0 && insideBraces==0)
{
// the last closing bracket, start recursion, switch to deferred
- if (myScan!=NULL)
- {
- myScan->after << "script" << myStr;
- }
- else
- {
- myScan=tcl.scan.at(0);
- myScan = tcl_scan_start('?',myStr,
- myScan->ns,myScan->entry_cl,myScan->entry_fn);
- }
+ myScan = tcl_codify_token(myScan, "script", myStr);
myStr="";
myStr+=c;
}
@@ -1797,23 +1826,174 @@ static tcl_scan *tcl_command_ARG(tcl_scan *myScan, unsigned int i, bool ignoreOu
myStr+=c;
}
}
- if (myScan!=NULL)
+ if (i == 0 && myScan == NULL)
{
- myScan->after << "NULL" << myStr;
+ tcl_codify_link(myStr);
}
else
{
- if (i==0)
+ myScan = tcl_codify_token(myScan, "NULL", myStr);
+ }
+ }
+ return (myScan);
+}
+
+//! Handle internal tcl commands.
+// "eval arg ?arg ...?"
+static void tcl_command_EVAL()
+{
+D
+ tcl_codify_cmd("keyword", 0);
+ tcl_scan *myScan = tcl.scan.at(0);
+ QCString myString = "";
+ // we simply rescan the line without the eval
+ // we include leading whitespace because tcl_scan_start will examine
+ // the first char. If it finds a bracket it will assume one expression in brackets.
+ // Example: eval [list set] [list NotInvoked] [Invoked NotInvoked]
+ for (unsigned int i = 1; i < tcl.list_commandwords.count(); i++)
+ {
+ myString += (*tcl.list_commandwords.at(i)).utf8();
+ }
+ myScan = tcl_scan_start('?', myString,
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+}
+
+//! Handle internal tcl commands.
+// switch ?options? string pattern body ?pattern body ...?
+// switch ?options? string {pattern body ?pattern body ...?}
+static void tcl_command_SWITCH()
+{
+D
+ tcl_codify_cmd("keyword",0);
+ tcl_codify_cmd(NULL,1);
+ tcl_scan *myScan=NULL;
+ unsigned int i;
+ QCString token;
+ // first: find the last option token
+ unsigned int lastOptionIndex = 0;
+ for (i = 2; i<tcl.list_commandwords.count(); i += 2)
+ {
+ token = (*tcl.list_commandwords.at(i)).utf8();
+ if (token == "--")
+ {
+ lastOptionIndex = i;
+ break;
+ }
+ if (token[0] == '-' && i - lastOptionIndex == 2)
+ {
+ // options start with dash and should form a continuous chain
+ lastOptionIndex = i;
+ }
+ }
+ // second: eat up options
+ for (i = 2; i <= lastOptionIndex; i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
+ // third: how many tokens are left?
+ if (tcl.list_commandwords.count() - lastOptionIndex == 5)
+ {
+ //printf("syntax: switch ?options? string {pattern body ?pattern body ...?}\n");
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 1, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 2, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 3, false);
+ // walk trough the list step by step
+ // this way we can preserve whitespace
+ bool inBraces = false;
+ bool nextIsPattern = true;
+ int size;
+ const char *elem;
+ const char *next;
+ token = (*tcl.list_commandwords.at(lastOptionIndex + 4)).utf8();
+ if (token[0] == '{')
+ {
+ inBraces = true;
+ token = token.mid(1, token.length() - 2);
+ myScan = tcl_codify_token(myScan, "NULL", QCString("{"));
+ }
+ // ToDo: check if multibyte chars are handled correctly
+ while (token.length() > 0)
+ {
+ TclFindElement((const char*)token, token.length(), &elem, &next, &size, NULL);
+ //printf("%s\nstart=%d, elem=%d, next=%d, size=%d, brace=%d\n",
+ // (const char*) token, (const char*) token, elem, next, size, brace);
+ //
+ // handle leading whitespace/opening brace/double quotes
+ if (elem - token > 0)
{
- tcl_codify_link(myStr);
+ myScan = tcl_codify_token(myScan, "NULL", token.left(elem - token));
}
- else
+ // handle actual element without braces/double quotes
+ if (nextIsPattern)
+ {
+ myScan = tcl_codify_token(myScan, "NULL", token.mid(elem - token,size));
+ //printf("pattern=%s\n",(const char*) token.mid(elem - token, size));
+ }
+ else {
+ myScan = tcl_codify_token(myScan, "script", token.mid(elem - token, size));
+ //printf("script =%s\n", (const char*) token.mid(elem - token, size));
+ }
+ // handle trailing whitespace/closing brace/double quotes
+ if (next - elem - size > 0)
{
- tcl_codify(NULL,myStr);
+ myScan = tcl_codify_token(myScan, "NULL", token.mid(elem - token + size, next - elem - size));
}
+ nextIsPattern = !nextIsPattern;
+ token = token.mid(next - token);
+ }
+ if (inBraces)
+ {
+ myScan = tcl_codify_token(myScan, "NULL", QCString("}"));
+ }
+ if (!nextIsPattern)
+ {
+ tcl_war("Invalid switch syntax: last token is not a list of even elements.\n");
+ //tcl_war("%s\n", tcl.list_commandwords.join(" ").ascii());
}
}
- return (myScan);
+ else if ((tcl.list_commandwords.count() - lastOptionIndex > 6) &&
+ ((tcl.list_commandwords.count() - lastOptionIndex-3) % 4 == 0))
+ {
+ //printf("detected: switch ?options? string pattern body ?pattern body ...?\n");
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 1, false);
+ myScan = tcl_command_ARG(myScan, lastOptionIndex + 2, false);
+ //printf("value=%s\n",(const char*) (*tcl.list_commandwords.at(lastOptionIndex + 2)).utf8());
+ for (i = lastOptionIndex + 3; i < tcl.list_commandwords.count(); i += 4)
+ {
+ myScan = tcl_command_ARG(myScan, i + 0, false); // whitespace
+ myScan = tcl_command_ARG(myScan, i + 1, false); // pattern
+ myScan = tcl_command_ARG(myScan, i + 2, false); // whitespace
+ myScan = tcl_codify_token(myScan, "script", (*tcl.list_commandwords.at(i+3)).utf8()); // script
+ //printf("pattern=%s\n",(const char*) (*tcl.list_commandwords.at(i+1)).utf8());
+ //printf("script=%s\n",(const char*) (*tcl.list_commandwords.at(i+3)).utf8());
+ }
+ }
+ else
+ {
+ // not properly detected syntax
+ tcl_war("Invalid switch syntax: %d options followed by %d tokens.\n",
+ lastOptionIndex / 2, (tcl.list_commandwords.count() - 1) / 2 - lastOptionIndex / 2);
+ for (i = lastOptionIndex + 1; i <= tcl.list_commandwords.count(); i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
+ }
+}
+
+//! Handle internal tcl commands.
+// "catch script ?resultVarName? ?optionsVarName?"
+static void tcl_command_CATCH()
+{
+D
+ tcl_codify_cmd("keyword", 0);
+ tcl_codify_cmd(NULL, 1);
+ tcl_scan *myScan = tcl.scan.at(0);
+ myScan = tcl_scan_start('?', *tcl.list_commandwords.at(2),
+ myScan->ns, myScan->entry_cl, myScan->entry_fn);
+ for (unsigned int i = 3; i < tcl.list_commandwords.count(); i++)
+ {
+ myScan = tcl_command_ARG(myScan, i, false);
+ }
}
//! Handle internal tcl commands.
@@ -1937,7 +2117,7 @@ D
tcl_codify_cmd(NULL,3);
tcl_codify_cmd(NULL,4);
tcl_codify_cmd(NULL,5);
- tcl_name(myScan->ns,(*tcl.list_commandwords.at(2)).utf8(),myNs,myName);
+ tcl_name_SnippetAware(myScan->ns,(*tcl.list_commandwords.at(2)).utf8(),myNs,myName);
if (myNs.length())
{
myEntryNs = tcl_entry_namespace(myNs);
@@ -2195,15 +2375,62 @@ D
}
myEntryCl = tcl_entry_class(myName);
myStr = (*tcl.list_commandwords.at(4)).utf8();
- if (tcl.list_commandwords.count() > 5)
+ //
+ // special cases first
+ // oo::define classname method methodname args script
+ // oo::define classname constructor argList bodyScript
+ // oo::define classname destructor bodyScript
+ unsigned int n =tcl.list_commandwords.count();
+ if ((myStr == "method" && n == 11) ||
+ (myStr == "constructor" && n == 9) ||
+ (myStr == "destructor" && n == 7))
+ {
+ for (unsigned int i = 4; i < n-1; i++)
+ {
+ tcl_codify_cmd("NULL",i);
+ }
+ Entry *myEntry;
+ QCString myMethod;
+ tcl_name(myScan->ns,(*tcl.list_commandwords.at(n==11?6:4)).utf8(),myNs,myMethod);
+ // code snippet taken from tcl_command_METHOD()/tcl_command_CONSTRUCTOR
+ tcl.fn.remove(myMethod);
+ tcl.entry_current->section = Entry::FUNCTION_SEC;
+ tcl.entry_current->mtype = Method;
+ tcl.entry_current->name = myMethod;
+ tcl.entry_current->startLine = tcl.line_command;
+ tcl.entry_current->bodyLine = tcl.line_body0;
+ tcl.entry_current->endBodyLine = tcl.line_body1;
+ tcl_protection(tcl.entry_current);
+ if (n==11)
+ {
+ tcl_command_ARGLIST(*tcl.list_commandwords.at(8));
+ }
+ else if (n==9)
+ {
+ tcl_command_ARGLIST(*tcl.list_commandwords.at(6));
+ }
+ if (myEntryCl) myEntryCl->addSubEntry(tcl.entry_current);
+ tcl.fn.insert(myMethod,tcl.entry_current);
+ myEntry = tcl.entry_current;
+ myScan = tcl_scan_start('?',*tcl.list_commandwords.at(n-1),
+ myNs, myEntryCl, myEntry);
+ }
+ else
{
- for (uint i=5;i<tcl.list_commandwords.count();i++)
+ // The general case
+ // Simply concat all arguments into a script.
+ // Note: all documentation collected just before the
+ // oo::define command is lost
+ if (tcl.list_commandwords.count() > 5)
{
- myStr.append((*tcl.list_commandwords.at(i)).utf8());
+ for (uint i=5;i<tcl.list_commandwords.count();i++)
+ {
+ myStr.append((*tcl.list_commandwords.at(i)).utf8());
+ }
+ tcl.word_is=' ';
}
- tcl.word_is=' ';
+ myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
}
- myScan = tcl_scan_start(tcl.word_is,myStr,myName,myEntryCl,NULL);
}
//! Handle \c variable statements.
@@ -2458,9 +2685,26 @@ tcl_inf("->\n");
}
/*
* Start of internal tcl keywords
- * Ready: if, for, foreach, while
- * TODO: switch, eval, ?
+ * Ready: switch, eval, catch, if, for, foreach, while
*/
+ if (myStr=="switch")
+ {
+ if (tcl.list_commandwords.count() < 5) {myLine=__LINE__;goto command_warn;}
+ tcl_command_SWITCH();
+ goto command_end;
+ }
+ if (myStr=="eval")
+ {
+ if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
+ tcl_command_EVAL();
+ goto command_end;
+ }
+ if (myStr=="catch")
+ {
+ if (tcl.list_commandwords.count() < 3) {myLine=__LINE__;goto command_warn;}
+ tcl_command_CATCH();
+ goto command_end;
+ }
if (myStr=="for")
{
if (tcl.list_commandwords.count() != 9) {myLine=__LINE__;goto command_warn;}
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index efddcd4..2bb5734 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -727,10 +727,26 @@ static void generateXMLForMember(MemberDef *md,FTextStream &ti,FTextStream &t,De
if (md->isGettable()) t << "yes"; else t << "no";
t << "\"";
+ t << " privategettable=\"";
+ if (md->isPrivateGettable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " protectedgettable=\"";
+ if (md->isProtectedGettable()) t << "yes"; else t << "no";
+ t << "\"";
+
t << " settable=\"";
if (md->isSettable()) t << "yes"; else t << "no";
t << "\"";
+ t << " privatesettable=\"";
+ if (md->isPrivateSettable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " protectedsettable=\"";
+ if (md->isProtectedSettable()) t << "yes"; else t << "no";
+ t << "\"";
+
if (md->isAssign() || md->isCopy() || md->isRetain() || md->isStrong() || md->isWeak())
{
t << " accessor=\"";
diff --git a/testing/057/057__caller__graphs_8tcl.xml b/testing/057/057__caller__graphs_8tcl.xml
index d2e3d84..4c54e1c 100644
--- a/testing/057/057__caller__graphs_8tcl.xml
+++ b/testing/057/057__caller__graphs_8tcl.xml
@@ -24,7 +24,7 @@
</detaileddescription>
<inbodydescription>
</inbodydescription>
- <location file="057_caller_graphs.tcl" bodystart="57" bodyend="59"/>
+ <location file="057_caller_graphs.tcl" bodystart="59" bodyend="61"/>
</memberdef>
<memberdef kind="function" id="057__caller__graphs_8tcl_1ae4e1c2bb3adfdfbb71f52de84a8285b0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -37,8 +37,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="65" bodyend="67"/>
+ <referencedby refid="namespace1_1a9722420639306872cea2593b83028a45" compoundref="057__caller__graphs_8tcl" startline="85" endline="88">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/>
@@ -51,8 +51,36 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="102" bodyend="105"/>
+ <references refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="106" endline="114">2::next</references>
+ </memberdef>
+ <memberdef kind="function" id="057__caller__graphs_8tcl_1a12acb916374f925e7b7ba302a1ca4efb" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>master</definition>
+ <argsstring>args</argsstring>
+ <name>master</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="057_caller_graphs.tcl" bodystart="136" bodyend="140"/>
+ <references refid="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" compoundref="__057__caller__graphs_8tcl" startline="1" endline="4">inFileB</references>
+ </memberdef>
+ <memberdef kind="function" id="057__caller__graphs_8tcl_1a7482c00c17357cf4846b0c1bd715979c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>inFileA</definition>
+ <argsstring>args</argsstring>
+ <name>inFileA</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="057_caller_graphs.tcl" bodystart="141" bodyend="144"/>
+ <referencedby refid="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" compoundref="__057__caller__graphs_8tcl" startline="1" endline="4">inFileB</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/__057__caller__graphs_8tcl.xml b/testing/057/__057__caller__graphs_8tcl.xml
new file mode 100644
index 0000000..2fdcf6a
--- /dev/null
+++ b/testing/057/__057__caller__graphs_8tcl.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="__057__caller__graphs_8tcl" kind="file">
+ <compoundname>_057_caller_graphs.tcl</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="__057__caller__graphs_8tcl_1a7c3c8acee94bf61ba9e911dafe35adac" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>inFileB</definition>
+ <argsstring>args</argsstring>
+ <name>inFileB</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="_057_caller_graphs.tcl" bodystart="1" bodyend="4"/>
+ <references refid="057__caller__graphs_8tcl_1a7482c00c17357cf4846b0c1bd715979c" compoundref="057__caller__graphs_8tcl" startline="141" endline="144">inFileA</references>
+ <referencedby refid="057__caller__graphs_8tcl_1a12acb916374f925e7b7ba302a1ca4efb" compoundref="057__caller__graphs_8tcl" startline="136" endline="140">master</referencedby>
+ </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
index e40300d..e74d8fe 100644
--- a/testing/057/namespace1.xml
+++ b/testing/057/namespace1.xml
@@ -15,9 +15,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="62" bodyend="64"/>
+ <referencedby refid="namespace1_1a4a8285288ee1994ac886e2039777339e" compoundref="057__caller__graphs_8tcl" startline="77" endline="80">test1</referencedby>
+ <referencedby refid="namespace1_1a11615154d3c207ed4106dd0bcb0639e8" compoundref="057__caller__graphs_8tcl" startline="93" endline="96">test5</referencedby>
</memberdef>
<memberdef kind="function" id="namespace1_1ad58c8f16ad5f12178c71ca988865bb58" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -30,8 +30,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="68" bodyend="70"/>
+ <referencedby refid="namespace1_1ae1e88bb7ddd332348d7e29ac4a211b00" compoundref="057__caller__graphs_8tcl" startline="81" endline="84">test2</referencedby>
</memberdef>
<memberdef kind="function" id="namespace1_1a4a8285288ee1994ac886e2039777339e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -44,8 +44,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="77" bodyend="80"/>
+ <references refid="namespace1_1a5024a7bc323958c7230615f2fcaeaef8" compoundref="057__caller__graphs_8tcl" startline="62" endline="64">baz</references>
</memberdef>
<memberdef kind="function" id="namespace1_1ae1e88bb7ddd332348d7e29ac4a211b00" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -58,8 +58,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="81" bodyend="84"/>
+ <references refid="namespace1_1ad58c8f16ad5f12178c71ca988865bb58" compoundref="057__caller__graphs_8tcl" startline="68" endline="70">bar</references>
</memberdef>
<memberdef kind="function" id="namespace1_1a9722420639306872cea2593b83028a45" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -72,8 +72,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="85" bodyend="88"/>
+ <references refid="057__caller__graphs_8tcl_1ae4e1c2bb3adfdfbb71f52de84a8285b0" compoundref="057__caller__graphs_8tcl" startline="65" endline="67">bar</references>
</memberdef>
<memberdef kind="function" id="namespace1_1addc9b30656419de5e2651e27a013db29" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -86,8 +86,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="89" bodyend="92"/>
+ <references refid="namespace1_1_11_1acebecc4cb718010d00c3c150158b75ab" compoundref="057__caller__graphs_8tcl" startline="71" endline="73">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/>
@@ -100,8 +100,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="93" bodyend="96"/>
+ <references refid="namespace1_1a5024a7bc323958c7230615f2fcaeaef8" compoundref="057__caller__graphs_8tcl" startline="62" endline="64">baz</references>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/namespace1_1_11.xml b/testing/057/namespace1_1_11.xml
index 157ab5e..e5c5596 100644
--- a/testing/057/namespace1_1_11.xml
+++ b/testing/057/namespace1_1_11.xml
@@ -15,8 +15,8 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="71" bodyend="73"/>
+ <referencedby refid="namespace1_1addc9b30656419de5e2651e27a013db29" compoundref="057__caller__graphs_8tcl" startline="89" endline="92">1::test4</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/namespace1_1_11_1_11.xml b/testing/057/namespace1_1_11_1_11.xml
index 2f5a685..caccbe4 100644
--- a/testing/057/namespace1_1_11_1_11.xml
+++ b/testing/057/namespace1_1_11_1_11.xml
@@ -14,13 +14,13 @@
</detaileddescription>
<inbodydescription>
</inbodydescription>
- <location file="057_caller_graphs.tcl" bodystart="72" bodyend="74"/>
+ <location file="057_caller_graphs.tcl" bodystart="74" bodyend="76"/>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
- <location file="057_caller_graphs.tcl" line="56" column="1"/>
+ <location file="057_caller_graphs.tcl" line="58" column="1"/>
</compounddef>
</doxygen>
diff --git a/testing/057/namespace2.xml b/testing/057/namespace2.xml
index 47a9fcf..6ea122c 100644
--- a/testing/057/namespace2.xml
+++ b/testing/057/namespace2.xml
@@ -15,10 +15,10 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="106" bodyend="114"/>
+ <references refid="namespace2_1_12_1aceefa876cf364f44da1f523d3f7b0649" compoundref="057__caller__graphs_8tcl" startline="115" endline="118">2::2::next</references>
+ <referencedby refid="057__caller__graphs_8tcl_1a3f808a00e1b937978455d707851ab33a" compoundref="057__caller__graphs_8tcl" startline="102" endline="105">next</referencedby>
+ <referencedby refid="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" compoundref="057__caller__graphs_8tcl" startline="127" endline="130">2::2::2::2::2::next</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/namespace2_1_12.xml b/testing/057/namespace2_1_12.xml
index 3338473..d2a589a 100644
--- a/testing/057/namespace2_1_12.xml
+++ b/testing/057/namespace2_1_12.xml
@@ -15,9 +15,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="115" bodyend="118"/>
+ <references refid="namespace2_1_12_1_12_1a85524e2015e377d433cd8384335c11d6" compoundref="057__caller__graphs_8tcl" startline="119" endline="122">2::2::2::next</references>
+ <referencedby refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="106" endline="114">2::next</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/namespace2_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12.xml
index 259ef25..d04a73c 100644
--- a/testing/057/namespace2_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12.xml
@@ -15,9 +15,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="119" bodyend="122"/>
+ <references refid="namespace2_1_12_1_12_1_12_1a3ea6e2ce66f4a9c30009852e4c7da2fe" compoundref="057__caller__graphs_8tcl" startline="123" endline="126">2::2::2::2::next</references>
+ <referencedby refid="namespace2_1_12_1aceefa876cf364f44da1f523d3f7b0649" compoundref="057__caller__graphs_8tcl" startline="115" endline="118">2::2::next</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
diff --git a/testing/057/namespace2_1_12_1_12_1_12.xml b/testing/057/namespace2_1_12_1_12_1_12.xml
index cea3062..980906d 100644
--- a/testing/057/namespace2_1_12_1_12_1_12.xml
+++ b/testing/057/namespace2_1_12_1_12_1_12.xml
@@ -15,9 +15,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="123" bodyend="126"/>
+ <references refid="namespace2_1_12_1_12_1_12_1_12_1ac07f64c62783fd8b44317389b4a711f8" compoundref="057__caller__graphs_8tcl" startline="127" endline="130">2::2::2::2::2::next</references>
+ <referencedby refid="namespace2_1_12_1_12_1a85524e2015e377d433cd8384335c11d6" compoundref="057__caller__graphs_8tcl" startline="119" endline="122">2::2::2::next</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
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
index 65bfa00..0c6957b 100644
--- 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
@@ -14,15 +14,15 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="127" bodyend="130"/>
+ <references refid="namespace2_1a2839d9dea7f0d08f48958c3fc0cd00d3" compoundref="057__caller__graphs_8tcl" startline="106" endline="114">2::next</references>
+ <referencedby refid="namespace2_1_12_1_12_1_12_1a3ea6e2ce66f4a9c30009852e4c7da2fe" compoundref="057__caller__graphs_8tcl" startline="123" endline="126">2::2::2::2::next</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
- <location file="057_caller_graphs.tcl" line="99" column="1"/>
+ <location file="057_caller_graphs.tcl" line="101" column="1"/>
</compounddef>
</doxygen>
diff --git a/testing/057/namespacebar.xml b/testing/057/namespacebar.xml
index 642986b..3c0f6e9 100644
--- a/testing/057/namespacebar.xml
+++ b/testing/057/namespacebar.xml
@@ -14,9 +14,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="29" bodyend="35"/>
+ <references refid="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" compoundref="057__caller__graphs_8tcl" startline="36" endline="39">baz</references>
+ <referencedby refid="namespacefoo_1a265acdcaea6da32c3bbd9afb5d0e32a4" compoundref="057__caller__graphs_8tcl" startline="44" endline="48">foo::master</referencedby>
</memberdef>
<memberdef kind="function" id="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -29,9 +29,9 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="36" bodyend="39"/>
+ <references refid="namespacebar_1a88879545dee287d377e638b87cdf6dd7" compoundref="057__caller__graphs_8tcl" startline="40" endline="42">bazbaz</references>
+ <referencedby refid="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" compoundref="057__caller__graphs_8tcl" startline="29" endline="35">slave</referencedby>
</memberdef>
<memberdef kind="function" id="namespacebar_1a88879545dee287d377e638b87cdf6dd7" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -44,14 +44,14 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="40" bodyend="42"/>
+ <referencedby refid="namespacebar_1a3426cd3a2eebcffa0dc333bcf5e2fe5e" compoundref="057__caller__graphs_8tcl" startline="36" endline="39">baz</referencedby>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
- <location file="057_caller_graphs.tcl" line="26" column="1"/>
+ <location file="057_caller_graphs.tcl" line="28" column="1"/>
</compounddef>
</doxygen>
diff --git a/testing/057/namespacefoo.xml b/testing/057/namespacefoo.xml
index 11f8053..2aae8ea 100644
--- a/testing/057/namespacefoo.xml
+++ b/testing/057/namespacefoo.xml
@@ -14,14 +14,14 @@
</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>
+ <location file="057_caller_graphs.tcl" bodystart="44" bodyend="48"/>
+ <references refid="namespacebar_1aa1678a9adb588c0b91b118de7cc38ddb" compoundref="057__caller__graphs_8tcl" startline="29" endline="35">bar::slave</references>
</memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
<detaileddescription>
</detaileddescription>
- <location file="057_caller_graphs.tcl" line="41" column="1"/>
+ <location file="057_caller_graphs.tcl" line="43" column="1"/>
</compounddef>
</doxygen>
diff --git a/testing/057_caller_graphs.tcl b/testing/057_caller_graphs.tcl
index 25bf1e7..f6e0e77 100644
--- a/testing/057_caller_graphs.tcl
+++ b/testing/057_caller_graphs.tcl
@@ -1,5 +1,6 @@
#// objective: test for completeness and correctness of references/referencedby relations
#// check: 057__caller__graphs_8tcl.xml
+#// check: __057__caller__graphs_8tcl.xml
#// check: namespacebar.xml
#// check: namespacefoo.xml
#// check: namespace1.xml
@@ -14,6 +15,7 @@
#// config: INLINE_SOURCES = no
#// config: REFERENCED_BY_RELATION = yes
#// config: REFERENCES_RELATION = yes
+#// config: INPUT = 057_caller_graphs.tcl _057_caller_graphs.tcl
# config: HAVE_DOT = yes
# config: CALLER_GRAPH = yes
# config: CALL_GRAPH = yes
@@ -126,6 +128,20 @@ proc ::2::2::2::2::2::next args {
array set info [info frame 0]; puts $info(proc)
2::next
}
+#
+# cross check with two files
+# If doxygen did not do two passes, then xrefs would depend on file order
+# and would be incomplete.
+source _057_caller_graphs.tcl
+proc master args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ inFileB
+ return
+}
+proc inFileA args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+}
# now, check with tcl what is called
foo::master
puts ""
@@ -134,5 +150,6 @@ foreach proc [lsort [info procs ::1::test?]] {
puts ""
}
::next
+master
exit
diff --git a/testing/058/058__bracket__recursion_8tcl.xml b/testing/058/058__bracket__recursion_8tcl.xml
index da0168d..fd36cee 100644
--- a/testing/058/058__bracket__recursion_8tcl.xml
+++ b/testing/058/058__bracket__recursion_8tcl.xml
@@ -36,6 +36,8 @@
<referencedby refid="058__bracket__recursion_8tcl_1a0a0bd3dc69dd06934c4e6362155e0ace" compoundref="058__bracket__recursion_8tcl" startline="115" endline="120">r</referencedby>
<referencedby refid="058__bracket__recursion_8tcl_1a011c73f2dbb87635a3b4206c72355f6e" compoundref="058__bracket__recursion_8tcl" startline="121" endline="126">s</referencedby>
<referencedby refid="058__bracket__recursion_8tcl_1a69e959f6901827e4d8271aeaa5fba0fc" compoundref="058__bracket__recursion_8tcl" startline="128" endline="131">t</referencedby>
+ <referencedby refid="058__bracket__recursion_8tcl_1a2fb1c5cf58867b5bbc9a1b145a86f3a0" compoundref="058__bracket__recursion_8tcl" startline="137" endline="142">y</referencedby>
+ <referencedby refid="058__bracket__recursion_8tcl_1a25ed1bcb423b0b7200f485fc5ff71c8e" compoundref="058__bracket__recursion_8tcl" startline="143" endline="148">z</referencedby>
</memberdef>
<memberdef kind="function" id="058__bracket__recursion_8tcl_1a3f55465410c57ed00ab28827a741b1c3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
<type/>
@@ -344,6 +346,34 @@
<location file="058_bracket_recursion.tcl" bodystart="128" bodyend="131"/>
<references refid="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="058__bracket__recursion_8tcl" startline="10" endline="13">Invoked</references>
</memberdef>
+ <memberdef kind="function" id="058__bracket__recursion_8tcl_1a2fb1c5cf58867b5bbc9a1b145a86f3a0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>y</definition>
+ <argsstring/>
+ <name>y</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="058_bracket_recursion.tcl" bodystart="137" bodyend="142"/>
+ <references refid="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="058__bracket__recursion_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="058__bracket__recursion_8tcl_1a25ed1bcb423b0b7200f485fc5ff71c8e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>z</definition>
+ <argsstring/>
+ <name>z</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="058_bracket_recursion.tcl" bodystart="143" bodyend="148"/>
+ <references refid="058__bracket__recursion_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="058__bracket__recursion_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
</sectiondef>
<briefdescription>
</briefdescription>
diff --git a/testing/058_bracket_recursion.tcl b/testing/058_bracket_recursion.tcl
index 0a07087..2ecd673 100644
--- a/testing/058_bracket_recursion.tcl
+++ b/testing/058_bracket_recursion.tcl
@@ -129,7 +129,23 @@ proc t args {
set foo ]]]][Invoked]
return
}
-
+# Example according to
+# https://bugzilla.gnome.org/show_bug.cgi?id=729135
+# |
+# Note the subtle difference in this | whitespace
+# V
+proc y {} {
+ set classifier_state {{bphy} }
+ if { ($classifier_state == {{bphy} }) } {
+ Invoked
+ }
+}
+proc z {} {
+ set classifier_state {{bphy} }
+ if { ($classifier_state == {{bphy} } ) } {
+ Invoked
+ }
+}
#
# call all single letter procs
# let tcl check what is called and what is not called
diff --git a/testing/059/059__command__catch_8tcl.xml b/testing/059/059__command__catch_8tcl.xml
new file mode 100644
index 0000000..6604413
--- /dev/null
+++ b/testing/059/059__command__catch_8tcl.xml
@@ -0,0 +1,191 @@
+<?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="059__command__catch_8tcl" kind="file">
+ <compoundname>059_command_catch.tcl</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Invoked</definition>
+ <argsstring>args</argsstring>
+ <name>Invoked</name>
+ <briefdescription>
+ <para>should be reference by every proc below </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="10" bodyend="13"/>
+ <referencedby refid="059__command__catch_8tcl_1ab08ae027fc5777bc4f0629f1b60b35db" compoundref="059__command__catch_8tcl" startline="22" endline="25">a</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1a68bdb74c144118d936931c46f75d4b3e" compoundref="059__command__catch_8tcl" startline="29" endline="32">b</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1ab14f56bc3bd7680490ece4ad7815465f" compoundref="059__command__catch_8tcl" startline="33" endline="36">c</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1af43f4b1f0064a33b2d662af9f06d3a00" compoundref="059__command__catch_8tcl" startline="37" endline="40">d</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1aff65a51a703804e0ad1adbcfd76c86f8" compoundref="059__command__catch_8tcl" startline="41" endline="44">e</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1af6830d2c644b45088ea8f1f74a46b778" compoundref="059__command__catch_8tcl" startline="45" endline="48">f</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1af08b4b5bfa9edf0b0a7dee1c2b2c29e0" compoundref="059__command__catch_8tcl" startline="49" endline="54">g</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1af96fd0966e32a310a0778d2e5c357700" compoundref="059__command__catch_8tcl" startline="56" endline="59">h</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1a8c90afd4641b25be86bd09983c3cbee0" compoundref="059__command__catch_8tcl" startline="60" endline="63">i</referencedby>
+ <referencedby refid="059__command__catch_8tcl_1a2aaa92757686acea102cba3475f0c13b" compoundref="059__command__catch_8tcl" startline="75" endline="78">j</referencedby>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1a3f55465410c57ed00ab28827a741b1c3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>NotInvoked</definition>
+ <argsstring>args</argsstring>
+ <name>NotInvoked</name>
+ <briefdescription>
+ <para>must not be reference by every proc below </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="16" bodyend="19"/>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1ab08ae027fc5777bc4f0629f1b60b35db" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>a</definition>
+ <argsstring>args</argsstring>
+ <name>a</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="22" bodyend="25"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1a68bdb74c144118d936931c46f75d4b3e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>b</definition>
+ <argsstring>args</argsstring>
+ <name>b</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="29" bodyend="32"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1ab14f56bc3bd7680490ece4ad7815465f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>c</definition>
+ <argsstring>args</argsstring>
+ <name>c</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="33" bodyend="36"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1af43f4b1f0064a33b2d662af9f06d3a00" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>d</definition>
+ <argsstring>args</argsstring>
+ <name>d</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="37" bodyend="40"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1aff65a51a703804e0ad1adbcfd76c86f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>e</definition>
+ <argsstring>args</argsstring>
+ <name>e</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="41" bodyend="44"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1af6830d2c644b45088ea8f1f74a46b778" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>f</definition>
+ <argsstring>args</argsstring>
+ <name>f</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="45" bodyend="48"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1af08b4b5bfa9edf0b0a7dee1c2b2c29e0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>g</definition>
+ <argsstring>args</argsstring>
+ <name>g</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="49" bodyend="54"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1af96fd0966e32a310a0778d2e5c357700" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>h</definition>
+ <argsstring>args</argsstring>
+ <name>h</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="56" bodyend="59"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1a8c90afd4641b25be86bd09983c3cbee0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>i</definition>
+ <argsstring>args</argsstring>
+ <name>i</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="60" bodyend="63"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="059__command__catch_8tcl_1a2aaa92757686acea102cba3475f0c13b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>j</definition>
+ <argsstring>args</argsstring>
+ <name>j</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="059_command_catch.tcl" bodystart="75" bodyend="78"/>
+ <references refid="059__command__catch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="059__command__catch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="059_command_catch.tcl"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/059_command_catch.tcl b/testing/059_command_catch.tcl
new file mode 100644
index 0000000..4227da7
--- /dev/null
+++ b/testing/059_command_catch.tcl
@@ -0,0 +1,87 @@
+#// objective: tests processing of catch/eval, only references/referencedby relations are relevant
+#// check: 059__command__catch_8tcl.xml
+#// config: REFERENCED_BY_RELATION = yes
+#// config: REFERENCES_RELATION = yes
+#// config: EXTRACT_ALL = yes
+#// config: INLINE_SOURCES = no
+
+##
+# \brief should be reference by every proc below
+proc Invoked args {
+ puts "Procedure \"Invoked\" is invoked indeed. Ok."
+ return $args
+}
+##
+# \brief must not be reference by every proc below
+proc NotInvoked args {
+ puts "Procedure \"NotInvoked\" is invoked. Not Ok!"
+ return $args
+}
+#
+# check if call references work at all
+proc a args {
+ Invoked NotInvoked
+ return
+}
+#
+# catch command
+# Tcl8.5: catch script ?resultVarName? ?optionsVarName?
+proc b args {
+ catch Invoked
+ return
+}
+proc c args {
+ catch Invoked NotInvoked
+ return
+}
+proc d args {
+ catch Invoked NotInvoked NotInvoked
+ return
+}
+proc e args {
+ set r [catch Invoked NotInvoked NotInvoked]
+ return
+}
+proc f args {
+ set r [catch {Invoked} NotInvoked NotInvoked]
+ return
+}
+proc g args {
+ set r [catch {
+ set x [Invoked]
+ } NotInvoked NotInvoked]
+ return
+}
+# eval arg ?arg ...?
+proc h args {
+ eval Invoked NotInvoked
+ return
+}
+proc i args {
+ eval set NotInvoked [Invoked NotInvoked]
+ return
+}
+# This is a striped down example. Original:
+#
+# jpeg.tcl --
+#
+# Querying and modifying JPEG image files.
+#
+# Copyright (c) 2004 Aaron Faupell <afaupell@users.sourceforge.net>
+#
+# ...
+# eval [list addComment $file] [lreplace $com 0 0 $comment]
+# ...
+proc j args {
+ eval [list set] [list NotInvoked] [Invoked NotInvoked]
+ return
+}
+#
+# call all single letter procs
+# let tcl check what is called and what is not called
+foreach p [info procs ?] {
+ puts "Check procedure \"$p\""
+ $p
+}
+exit
+
diff --git a/testing/060/060__command__switch_8tcl.xml b/testing/060/060__command__switch_8tcl.xml
new file mode 100644
index 0000000..d9424ef
--- /dev/null
+++ b/testing/060/060__command__switch_8tcl.xml
@@ -0,0 +1,358 @@
+<?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="060__command__switch_8tcl" kind="file">
+ <compoundname>060_command_switch.tcl</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Invoked</definition>
+ <argsstring>args</argsstring>
+ <name>Invoked</name>
+ <briefdescription>
+ <para>should be reference by every proc below </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="10" bodyend="13"/>
+ <referencedby refid="060__command__switch_8tcl_1ab08ae027fc5777bc4f0629f1b60b35db" compoundref="060__command__switch_8tcl" startline="22" endline="25">a</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a68bdb74c144118d936931c46f75d4b3e" compoundref="060__command__switch_8tcl" startline="29" endline="36">b</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1ab14f56bc3bd7680490ece4ad7815465f" compoundref="060__command__switch_8tcl" startline="37" endline="43">c</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1af43f4b1f0064a33b2d662af9f06d3a00" compoundref="060__command__switch_8tcl" startline="44" endline="50">d</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1aff65a51a703804e0ad1adbcfd76c86f8" compoundref="060__command__switch_8tcl" startline="51" endline="57">e</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1af6830d2c644b45088ea8f1f74a46b778" compoundref="060__command__switch_8tcl" startline="58" endline="65">f</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1af08b4b5bfa9edf0b0a7dee1c2b2c29e0" compoundref="060__command__switch_8tcl" startline="66" endline="73">g</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1af96fd0966e32a310a0778d2e5c357700" compoundref="060__command__switch_8tcl" startline="74" endline="81">h</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a8c90afd4641b25be86bd09983c3cbee0" compoundref="060__command__switch_8tcl" startline="83" endline="94">i</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a2aaa92757686acea102cba3475f0c13b" compoundref="060__command__switch_8tcl" startline="95" endline="106">j</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a20363f854eb4098a446733d63d34dbc1" compoundref="060__command__switch_8tcl" startline="107" endline="118">k</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1aff56f84b49947b84b2a304f51cf8e678" compoundref="060__command__switch_8tcl" startline="119" endline="129">l</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a78d127e8bda64d4471ac811ad512fbd9" compoundref="060__command__switch_8tcl" startline="130" endline="141">m</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1acdde3cd86eb2421ce8dbb2e85227d368" compoundref="060__command__switch_8tcl" startline="142" endline="153">n</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a495e7a4ede0831107e9d435080a7c268" compoundref="060__command__switch_8tcl" startline="154" endline="165">o</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a15229b450f26d8fa1c10bea4f3279f4d" compoundref="060__command__switch_8tcl" startline="166" endline="175">p</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1ab678a0a9a7e94bce5b17141f40220d88" compoundref="060__command__switch_8tcl" startline="176" endline="185">q</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a0a0bd3dc69dd06934c4e6362155e0ace" compoundref="060__command__switch_8tcl" startline="186" endline="195">r</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a011c73f2dbb87635a3b4206c72355f6e" compoundref="060__command__switch_8tcl" startline="196" endline="205">s</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a429306927a4581ad93fac620e605eec5" compoundref="060__command__switch_8tcl" startline="207" endline="210">x</referencedby>
+ <referencedby refid="060__command__switch_8tcl_1a32b6e5206a2cc75dbb8ed2eff74f5ce4" compoundref="060__command__switch_8tcl" startline="215" endline="229">y</referencedby>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a3f55465410c57ed00ab28827a741b1c3" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>NotInvoked</definition>
+ <argsstring>args</argsstring>
+ <name>NotInvoked</name>
+ <briefdescription>
+ <para>must not be reference by every proc below </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="16" bodyend="19"/>
+ <referencedby refid="060__command__switch_8tcl_1a32b6e5206a2cc75dbb8ed2eff74f5ce4" compoundref="060__command__switch_8tcl" startline="215" endline="229">y</referencedby>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1ab08ae027fc5777bc4f0629f1b60b35db" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>a</definition>
+ <argsstring>args</argsstring>
+ <name>a</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="22" bodyend="25"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a68bdb74c144118d936931c46f75d4b3e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>b</definition>
+ <argsstring>args</argsstring>
+ <name>b</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="29" bodyend="36"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1ab14f56bc3bd7680490ece4ad7815465f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>c</definition>
+ <argsstring>args</argsstring>
+ <name>c</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="37" bodyend="43"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1af43f4b1f0064a33b2d662af9f06d3a00" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>d</definition>
+ <argsstring>args</argsstring>
+ <name>d</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="44" bodyend="50"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1aff65a51a703804e0ad1adbcfd76c86f8" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>e</definition>
+ <argsstring>args</argsstring>
+ <name>e</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="51" bodyend="57"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1af6830d2c644b45088ea8f1f74a46b778" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>f</definition>
+ <argsstring>args</argsstring>
+ <name>f</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="58" bodyend="65"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1af08b4b5bfa9edf0b0a7dee1c2b2c29e0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>g</definition>
+ <argsstring>args</argsstring>
+ <name>g</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="66" bodyend="73"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1af96fd0966e32a310a0778d2e5c357700" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>h</definition>
+ <argsstring>args</argsstring>
+ <name>h</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="74" bodyend="81"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a8c90afd4641b25be86bd09983c3cbee0" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>i</definition>
+ <argsstring>args</argsstring>
+ <name>i</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="83" bodyend="94"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a2aaa92757686acea102cba3475f0c13b" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>j</definition>
+ <argsstring>args</argsstring>
+ <name>j</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="95" bodyend="106"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a20363f854eb4098a446733d63d34dbc1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>k</definition>
+ <argsstring>args</argsstring>
+ <name>k</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="107" bodyend="118"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1aff56f84b49947b84b2a304f51cf8e678" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>l</definition>
+ <argsstring>args</argsstring>
+ <name>l</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="119" bodyend="129"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a78d127e8bda64d4471ac811ad512fbd9" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>m</definition>
+ <argsstring>args</argsstring>
+ <name>m</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="130" bodyend="141"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1acdde3cd86eb2421ce8dbb2e85227d368" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n</definition>
+ <argsstring>args</argsstring>
+ <name>n</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="142" bodyend="153"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a495e7a4ede0831107e9d435080a7c268" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>o</definition>
+ <argsstring>args</argsstring>
+ <name>o</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="154" bodyend="165"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a15229b450f26d8fa1c10bea4f3279f4d" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>p</definition>
+ <argsstring>args</argsstring>
+ <name>p</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="166" bodyend="175"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1ab678a0a9a7e94bce5b17141f40220d88" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>q</definition>
+ <argsstring>args</argsstring>
+ <name>q</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="176" bodyend="185"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a0a0bd3dc69dd06934c4e6362155e0ace" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>r</definition>
+ <argsstring>args</argsstring>
+ <name>r</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="186" bodyend="195"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a011c73f2dbb87635a3b4206c72355f6e" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>s</definition>
+ <argsstring>args</argsstring>
+ <name>s</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="196" bodyend="205"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a429306927a4581ad93fac620e605eec5" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>x</definition>
+ <argsstring>args</argsstring>
+ <name>x</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="207" bodyend="210"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ </memberdef>
+ <memberdef kind="function" id="060__command__switch_8tcl_1a32b6e5206a2cc75dbb8ed2eff74f5ce4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>y</definition>
+ <argsstring>args</argsstring>
+ <name>y</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="060_command_switch.tcl" bodystart="215" bodyend="229"/>
+ <references refid="060__command__switch_8tcl_1aa889853547f65a22ae133cd57ff89601" compoundref="060__command__switch_8tcl" startline="10" endline="13">Invoked</references>
+ <references refid="060__command__switch_8tcl_1a3f55465410c57ed00ab28827a741b1c3" compoundref="060__command__switch_8tcl" startline="16" endline="19">NotInvoked</references>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="060_command_switch.tcl"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/060_command_switch.tcl b/testing/060_command_switch.tcl
new file mode 100644
index 0000000..ab556d0
--- /dev/null
+++ b/testing/060_command_switch.tcl
@@ -0,0 +1,238 @@
+#// objective: tests processing of switch, only references/referencedby relations are relevant
+#// check: 060__command__switch_8tcl.xml
+#// config: REFERENCED_BY_RELATION = yes
+#// config: REFERENCES_RELATION = yes
+#// config: EXTRACT_ALL = yes
+#// config: INLINE_SOURCES = no
+
+##
+# \brief should be reference by every proc below
+proc Invoked args {
+ puts "Procedure \"Invoked\" is invoked indeed. Ok."
+ return $args
+}
+##
+# \brief must not be reference by every proc below
+proc NotInvoked args {
+ puts "Procedure \"NotInvoked\" is invoked. Not Ok!"
+ return $args
+}
+#
+# check if call references work at all
+proc a args {
+ Invoked NotInvoked
+ return
+}
+#
+# switch command
+# switch ?options? string pattern body ?pattern body ...?
+proc b args {
+ switch value NotInvoked {
+ } NotInvoked {
+ } default {
+ Invoked
+ }
+ return
+}
+proc c args {
+ switch value NotInvoked {
+ } [Invoked] {
+ } default {
+ }
+ return
+}
+proc d args {
+ switch NotInvoked pattern {
+ } [Invoked] {
+ } default {
+ }
+ return
+}
+proc e args {
+ switch [Invoked] pattern {
+ } NotInvoked {
+ } default {
+ }
+ return
+}
+proc f args {
+ switch -exact value pattern {
+ } NotInvoked {
+ } default {
+ Invoked
+ }
+ return
+}
+proc g args {
+ switch -exact -- value pattern {
+ } NotInvoked {
+ } default {
+ Invoked
+ }
+ return
+}
+proc h args {
+ switch -exact -- -value pattern {
+ } NotInvoked {
+ } default {
+ Invoked
+ }
+ return
+}
+# switch ?options? string {pattern body ?pattern body ...?}
+proc i args {
+ switch value {
+ NotInvoked {
+ }
+ NotInvoked {
+ }
+ default {
+ Invoked
+ }
+ }
+ return
+}
+proc j args {
+ switch vale {
+ NotInvoked {
+ }
+ [NotInvoked] {
+ }
+ default {
+ Invoked
+ }
+ }
+ return
+}
+proc k args {
+ switch NotInvoked {
+ [NotInvoked] {
+ }
+ NotInvoked {
+ Invoked
+ }
+ default {
+ }
+ }
+ return
+}
+proc l args {
+ switch [Invoked] {
+ pattern {
+ }
+ NotInvoked {
+ }
+ default {
+ }
+ }
+ return
+}
+proc m args {
+ switch -exact value {
+ pattern {
+ }
+ NotInvoked {
+ }
+ default {
+ Invoked
+ }
+ }
+ return
+}
+proc n args {
+ switch -exact -- value {
+ pattern {
+ }
+ NotInvoked {
+ }
+ default {
+ Invoked
+ }
+ }
+ return
+}
+proc o args {
+ switch -exact -- -value {
+ pattern {
+ }
+ NotInvoked {
+ }
+ default {
+ Invoked
+ }
+ }
+ return
+}
+proc p args {
+ switch -exact -- inquotes {
+ "inquotes" {
+ Invoked
+ }
+ default {
+ }
+ }
+ return
+}
+proc q args {
+ switch -exact -- "in quotes" {
+ "in quotes" {
+ Invoked
+ }
+ default {
+ }
+ }
+ return
+}
+proc r args {
+ switch -exact -- inbraces {
+ {inbraces} {
+ Invoked
+ }
+ default {
+ }
+ }
+ return
+}
+proc s args {
+ switch -exact -- {in braces} {
+ {in braces} {
+ Invoked
+ }
+ default {
+ }
+ }
+ return
+}
+# wrong syntax
+proc x args {
+ catch {switch -exact -- [Invoked] pattern1 NotInvoked pattern2}
+ return
+}
+# The current version does not check the last argument beforehand.
+# Therefore, all script elements are evaluated as scripts before
+# the parser detects the dangling pattern. It throws a warning, at the very least.
+# Anyway, for working code the documentation will be correct.
+proc y args {
+ catch {switch -exact -- [Invoked] {
+ pattern {
+ NotInvoked
+ }
+ NotInvoked {
+ NotInvoked
+ }
+ default {
+ NotInvoked
+ }
+ pattern
+ }}
+ return
+}
+#
+# call all single letter procs
+# let tcl check what is called and what is not called
+foreach p [info procs ?] {
+ puts "Check procedure \"$p\""
+ $p
+}
+exit
+
diff --git a/testing/061/class_test.xml b/testing/061/class_test.xml
new file mode 100644
index 0000000..0922539
--- /dev/null
+++ b/testing/061/class_test.xml
@@ -0,0 +1,70 @@
+<?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="class_test" kind="class" prot="public">
+ <compoundname>Test</compoundname>
+ <sectiondef kind="public-func">
+ <memberdef kind="function" id="class_test_1af863c78bca81b4e276dcbb30f12e8ec6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Test::testmethod_one</definition>
+ <argsstring>args</argsstring>
+ <name>testmethod_one</name>
+ <briefdescription>
+ <para><ref refid="class_test" kindref="compound">Test</ref> method 1. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="061_bug_705503.tcl" bodystart="12" bodyend="12"/>
+ </memberdef>
+ <memberdef kind="function" id="class_test_1ac7148d2852b30d157e078fe0fe58a350" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Test::constructor</definition>
+ <argsstring>args</argsstring>
+ <name>constructor</name>
+ <briefdescription>
+ <para>Construction of class. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="061_bug_705503.tcl" bodystart="16" bodyend="16"/>
+ </memberdef>
+ <memberdef kind="function" id="class_test_1abdf3375950ec49e29f4bae947b7e3f26" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>Test::testmethod_two</definition>
+ <argsstring>args</argsstring>
+ <name>testmethod_two</name>
+ <briefdescription>
+ <para><ref refid="class_test" kindref="compound">Test</ref> method 2. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="061_bug_705503.tcl" bodystart="19" bodyend="19"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ <para>Testclass. </para>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="061_bug_705503.tcl" bodystart="10" bodyend="13"/>
+ <listofallmembers>
+ <member refid="class_test_1ac7148d2852b30d157e078fe0fe58a350" prot="public" virt="non-virtual">
+ <scope>Test</scope>
+ <name>constructor</name>
+ </member>
+ <member refid="class_test_1af863c78bca81b4e276dcbb30f12e8ec6" prot="public" virt="non-virtual">
+ <scope>Test</scope>
+ <name>testmethod_one</name>
+ </member>
+ <member refid="class_test_1abdf3375950ec49e29f4bae947b7e3f26" prot="public" virt="non-virtual">
+ <scope>Test</scope>
+ <name>testmethod_two</name>
+ </member>
+ </listofallmembers>
+ </compounddef>
+</doxygen>
diff --git a/testing/061_bug_705503.tcl b/testing/061_bug_705503.tcl
new file mode 100644
index 0000000..ce25d6e
--- /dev/null
+++ b/testing/061_bug_705503.tcl
@@ -0,0 +1,19 @@
+#// objective: test for bug 705503 - TCL: Documentation of oo::define is not working
+#// check: class_test.xml
+#// config: EXTRACT_ALL = yes
+
+# taken from
+# https://bugzilla.gnome.org/show_bug.cgi?id=705503
+
+## @class Test
+# @brief Testclass
+oo::class create Test {
+ ## @brief Test method 1.
+ method testmethod_one args {}
+}
+
+## @brief Construction of class
+oo::define Test constructor args {}
+
+## @brief Test method 2
+oo::define Test method testmethod_two args {}
diff --git a/testing/062/namespacen1.xml b/testing/062/namespacen1.xml
new file mode 100644
index 0000000..0ef31ff
--- /dev/null
+++ b/testing/062/namespacen1.xml
@@ -0,0 +1,42 @@
+<?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="namespacen1" kind="namespace">
+ <compoundname>n1</compoundname>
+ <innernamespace refid="namespacen1_1_1n1">n1::n1</innernamespace>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespacen1_1a9f23d7a7f141915457e8e26023d70cb4" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n1::p1</definition>
+ <argsstring>args</argsstring>
+ <name>p1</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="12" bodyend="16"/>
+ <references refid="namespacen1_1a0bff29f718fa43e49b7ca79985afb5fa" compoundref="062__namespace__resolution_8tcl" startline="17" endline="20">p2</references>
+ </memberdef>
+ <memberdef kind="function" id="namespacen1_1a0bff29f718fa43e49b7ca79985afb5fa" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n1::p2</definition>
+ <argsstring>args</argsstring>
+ <name>p2</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="17" bodyend="20"/>
+ <referencedby refid="namespacen1_1a9f23d7a7f141915457e8e26023d70cb4" compoundref="062__namespace__resolution_8tcl" startline="12" endline="16">p1</referencedby>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="062_namespace_resolution.tcl" line="11" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/062/namespacen2.xml b/testing/062/namespacen2.xml
new file mode 100644
index 0000000..39c21d2
--- /dev/null
+++ b/testing/062/namespacen2.xml
@@ -0,0 +1,42 @@
+<?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="namespacen2" kind="namespace">
+ <compoundname>n2</compoundname>
+ <innernamespace refid="namespacen2_1_1n2">n2::n2</innernamespace>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespacen2_1a74950c0185232e374220a0707b4903c6" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n2::p1</definition>
+ <argsstring>args</argsstring>
+ <name>p1</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="31" bodyend="35"/>
+ <references refid="namespacen2_1a49fadfbefa795204a3c566ec76ff632f" compoundref="062__namespace__resolution_8tcl" startline="36" endline="39">p2</references>
+ </memberdef>
+ <memberdef kind="function" id="namespacen2_1a49fadfbefa795204a3c566ec76ff632f" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n2::p2</definition>
+ <argsstring>args</argsstring>
+ <name>p2</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="36" bodyend="39"/>
+ <referencedby refid="namespacen2_1a74950c0185232e374220a0707b4903c6" compoundref="062__namespace__resolution_8tcl" startline="31" endline="35">p1</referencedby>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="062_namespace_resolution.tcl" line="29" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/062/namespacen3.xml b/testing/062/namespacen3.xml
new file mode 100644
index 0000000..25c803c
--- /dev/null
+++ b/testing/062/namespacen3.xml
@@ -0,0 +1,42 @@
+<?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="namespacen3" kind="namespace">
+ <compoundname>n3</compoundname>
+ <innernamespace refid="namespacen3_1_1n3">n3::n3</innernamespace>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespacen3_1ae7e87e49507bd56dad087cffecd35b29" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n3::p1</definition>
+ <argsstring>args</argsstring>
+ <name>p1</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="47" bodyend="51"/>
+ <references refid="namespacen3_1a14e9fe1b27a6d36db9ace2eef4509979" compoundref="062__namespace__resolution_8tcl" startline="52" endline="55">p2</references>
+ </memberdef>
+ <memberdef kind="function" id="namespacen3_1a14e9fe1b27a6d36db9ace2eef4509979" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>n3::p2</definition>
+ <argsstring>args</argsstring>
+ <name>p2</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="062_namespace_resolution.tcl" bodystart="52" bodyend="55"/>
+ <referencedby refid="namespacen3_1ae7e87e49507bd56dad087cffecd35b29" compoundref="062__namespace__resolution_8tcl" startline="47" endline="51">p1</referencedby>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="062_namespace_resolution.tcl" line="45" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/062_namespace_resolution.tcl b/testing/062_namespace_resolution.tcl
new file mode 100644
index 0000000..dcc6701
--- /dev/null
+++ b/testing/062_namespace_resolution.tcl
@@ -0,0 +1,68 @@
+#// objective: tests correct namespace resolution, only references/referencedby relations are relevant
+#// check: namespacen1.xml
+#// check: namespacen2.xml
+#// check: namespacen3.xml
+#// config: REFERENCED_BY_RELATION = yes
+#// config: REFERENCES_RELATION = yes
+#// config: EXTRACT_ALL = yes
+#// config: INLINE_SOURCES = yes
+
+# now: combine namespace eval and qualified names
+namespace eval n1 {
+ proc p1 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ p2
+ return
+ }
+ proc p2 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+ }
+ namespace eval n1 {
+ proc p1 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+ }
+ }
+}
+# same thing, but fully qualified proc names
+namespace eval ::n2 {}
+namespace eval ::n2::n2 {}
+proc ::n2::p1 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ p2
+ return
+}
+proc ::n2::p2 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+}
+proc ::n2::n2::p2 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+}
+# same thing, without leading ::
+namespace eval n3 {}
+namespace eval n3::n3 {}
+proc n3::p1 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ p2
+ return
+}
+proc n3::p2 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+}
+proc n3::n3::p2 args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ return
+}
+# now, check with tcl what is called
+n1::p1
+puts ""
+n2::p1
+puts ""
+n3::p1
+puts ""
+exit
+
diff --git a/testing/063/namespaceoo.xml b/testing/063/namespaceoo.xml
new file mode 100644
index 0000000..eb0c93c
--- /dev/null
+++ b/testing/063/namespaceoo.xml
@@ -0,0 +1,13 @@
+<?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="namespaceoo" kind="namespace">
+ <compoundname>oo</compoundname>
+ <innernamespace refid="namespaceoo_1_1define">oo::define</innernamespace>
+ <innernamespace refid="namespaceoo_1_1_helpers">oo::Helpers</innernamespace>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="[generated]" line="1" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/063/namespaceoo_1_1_helpers.xml b/testing/063/namespaceoo_1_1_helpers.xml
new file mode 100644
index 0000000..5f157c8
--- /dev/null
+++ b/testing/063/namespaceoo_1_1_helpers.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="namespaceoo_1_1_helpers" kind="namespace">
+ <compoundname>oo::Helpers</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespaceoo_1_1_helpers_1a96c5b755588beb2e930cff23ce811d6c" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>oo::Helpers::classvar</definition>
+ <argsstring>args</argsstring>
+ <name>classvar</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>Extension to TclOO to add static variables. Defines variables on the class instead of on the object. Can be used to enforce a limited number of instantiations. <simplesect kind="warning"><para>Do not modify! (unless you're waaay smarter than the writer of the below Tcl/Tk book). flynt2012tcl </para></simplesect>
+</para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="063_bug_729092.tcl" bodystart="40" bodyend="49"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="063_bug_729092.tcl" line="1" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/063/namespaceoo_1_1define.xml b/testing/063/namespaceoo_1_1define.xml
new file mode 100644
index 0000000..50891e6
--- /dev/null
+++ b/testing/063/namespaceoo_1_1define.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="namespaceoo_1_1define" kind="namespace">
+ <compoundname>oo::define</compoundname>
+ <sectiondef kind="func">
+ <memberdef kind="function" id="namespaceoo_1_1define_1a89e7ea222a316f1926c1f9f30f2cc5c1" prot="public" static="no" const="no" explicit="no" inline="no" virt="non-virtual">
+ <type/>
+ <definition>oo::define::classmethod</definition>
+ <argsstring>name?args??body?</argsstring>
+ <name>classmethod</name>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ <para>Extension to TclOO to add static methods. Defines the method on the class instead of on the object. Can be used for the creation of megawidgets using TclOO by overriding the unknown method to detect if the user is trying to instantiate a widget (because the method will be unknown and start with a dot). <simplesect kind="warning"><para>Do not modify! (unless you're waaay smarter than the writer of the below Tcl/Tk book). flynt2012tcl </para></simplesect>
+</para>
+ </detaileddescription>
+ <inbodydescription>
+ </inbodydescription>
+ <location file="063_bug_729092.tcl" bodystart="21" bodyend="30"/>
+ </memberdef>
+ </sectiondef>
+ <briefdescription>
+ </briefdescription>
+ <detaileddescription>
+ </detaileddescription>
+ <location file="063_bug_729092.tcl" line="1" column="1"/>
+ </compounddef>
+</doxygen>
diff --git a/testing/063_bug_729092.tcl b/testing/063_bug_729092.tcl
new file mode 100644
index 0000000..7c35f95
--- /dev/null
+++ b/testing/063_bug_729092.tcl
@@ -0,0 +1,49 @@
+#// objective: test for bug 729092 - TCL: Full documentation not shown for procs in namespaces.
+#// check: namespaceoo.xml
+#// check: namespaceoo_1_1_helpers.xml
+#// check: namespaceoo_1_1define.xml
+#// config: EXTRACT_ALL = yes
+#// config: GENERATE_HTML = yes
+
+# taken from
+# https://bugzilla.gnome.org/show_bug.cgi?id=729092
+
+##
+# Extension to TclOO to add static methods.
+# Defines the method on the class instead of on the object. Can be used for
+# the creation of megawidgets using TclOO by overriding the unknown method to
+# detect if the user is trying to instantiate a widget (because the method
+# will be unknown and start with a dot).
+# @warning Do not modify! (unless you're waaay smarter than the writer of the
+# below Tcl/Tk book).
+# @cite flynt2012tcl
+#
+proc ::oo::define::classmethod {name {args ""} {body ""}} {
+ # Create the method on the class if the caller gave arguments and body.
+ if {[llength [info level 0]] == 4} {
+ uplevel 1 [list self method $name $args $body]
+ }
+ # Get the name of the class being defined.
+ set cls [lindex [info level -1] 1]
+ # Make connection to private class "my" command by forwarding.
+ uplevel forward $name [info object namespace $cls]::my $name
+}
+
+##
+# Extension to TclOO to add static variables.
+# Defines variables on the class instead of on the object. Can be used to
+# enforce a limited number of instantiations.
+# @warning Do not modify! (unless you're waaay smarter than the writer of the
+# below Tcl/Tk book).
+# @cite flynt2012tcl
+#
+proc ::oo::Helpers::classvar {args} {
+ # Get reference to class's namespace.
+ set nsCl [info object namespace [uplevel 1 {self class}]]
+ set nsObj [uplevel 1 {namespace current}]
+ # Link variables into local (caller's) scope.
+ foreach v $args {
+ uplevel "my variable $v"
+ upvar #0 ${nsCl}::$v ${nsObj}::$v
+ }
+} \ No newline at end of file
diff --git a/testing/_057_caller_graphs.tcl b/testing/_057_caller_graphs.tcl
new file mode 100644
index 0000000..24b9c20
--- /dev/null
+++ b/testing/_057_caller_graphs.tcl
@@ -0,0 +1,4 @@
+proc inFileB args {
+ array set info [info frame 0]; puts -nonewline ->$info(proc)
+ inFileA
+}