Commit ec778973 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Merge branch 'master' of github.com:doxygen/doxygen

parents d234115b a4ef6aaa
......@@ -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}*">"
......
......@@ -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();
......
......@@ -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}
......
......@@ -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);
......
......@@ -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;
......
......@@ -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;
......
......@@ -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; }
......
......@@ -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;}
......
......@@ -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=\"";
......
......@@ -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>
......
<?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>
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......
......@@ -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>
......@@ -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>
......@@ -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>
#// 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
......@@ -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>
......
......@@ -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
......
<?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>
#// 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
<?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>
#// 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
<?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>
#// 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 {}
<?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>
<?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>
<?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>
#// 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
<?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>
<?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>
<?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>
#// 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
proc inFileB args {
array set info [info frame 0]; puts -nonewline ->$info(proc)
inFileA
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment