Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
D
doxverilog
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
doxverilog
Commits
d652c8c8
Commit
d652c8c8
authored
Dec 20, 2014
by
Dimitri van Heesch
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #247 from hansec/FORTRAN_moduleNS
Convert FORTRAN modules to namespaces
parents
553a7bf7
238b7332
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
38 additions
and
5 deletions
+38
-5
fortrancode.l
src/fortrancode.l
+37
-4
fortranscanner.l
src/fortranscanner.l
+1
-1
No files found.
src/fortrancode.l
View file @
d652c8c8
...
...
@@ -114,6 +114,7 @@ class Scope
static QCString docBlock; //!< contents of all lines of a documentation block
static QCString currentModule=0; //!< name of the current enclosing module
static QCString currentClass=0; //!< name of the current enclosing class
static UseSDict *useMembers= new UseSDict; //!< info about used modules
static UseEntry *useEntry = 0; //!< current use statement info
static QList<Scope> scopeStack;
...
...
@@ -386,8 +387,23 @@ static void writeMultiLineCodeLink(CodeOutputInterface &ol,
}
}
}
//-------------------------------------------------------------------------------
/**
searches for definition of a module (Namespace)
@param mname the name of the module
@param cd the entry, if found or null
@returns true, if module is found
*/
static bool getFortranNamespaceDefs(const QCString &mname,
NamespaceDef *&cd)
{
if (mname.isEmpty()) return FALSE; /* empty name => nothing to link */
// search for module
if ((cd=Doxygen::namespaceSDict->find(mname))) return TRUE;
return FALSE;
}
//-------------------------------------------------------------------------------
/**
searches for definition of a type
...
...
@@ -467,6 +483,7 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
{
FileDef *fd=md->getFileDef();
GroupDef *gd=md->getGroupDef();
ClassDef *cd=md->getClassDef();
//cout << "found link with same name: " << fd->fileName() << " " << memberName;
//if (md->getNamespaceDef() != 0) cout << " in namespace " << md->getNamespaceDef()->name();cout << endl;
...
...
@@ -477,7 +494,9 @@ static bool getFortranDefs(const QCString &memberName, const QCString &moduleNam
if (nspace == 0)
{ // found function in global scope
return TRUE;
if(cd == 0) { // Skip if bound to type
return TRUE;
}
}
else if (moduleName == nspace->name())
{ // found in local scope
...
...
@@ -534,7 +553,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
CodeOutputInterface &ol,
const char *text)
{
MemberDef *md;
MemberDef *md
=0
;
QCString memberName= removeRedundantWhiteSpace(memberText);
if (getFortranDefs(memberName, currentModule, md, usedict) && md->isLinkable())
...
...
@@ -563,6 +582,7 @@ static bool getLink(UseSDict *usedict, // dictonary with used modules
static void generateLink(CodeOutputInterface &ol, char *lname)
{
ClassDef *cd=0;
NamespaceDef *nsd=0;
QCString tmp = lname;
tmp = removeRedundantWhiteSpace(tmp.lower());
...
...
@@ -580,6 +600,12 @@ static void generateLink(CodeOutputInterface &ol, char *lname)
addToSearchIndex(tmp.data());
}
}
// check for module
else if ( (getFortranNamespaceDefs(tmp, nsd)) && nsd->isLinkable() )
{ // write module link
writeMultiLineCodeLink(ol,nsd,tmp);
addToSearchIndex(tmp.data());
}
// check for function/variable
else if (getLink(useMembers, tmp, ol, tmp))
{
...
...
@@ -806,10 +832,12 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
<UseOnly,Import>{BS},{BS} { codifyLines(yytext); }
<UseOnly,Import>{BS}&{BS}"\n" { codifyLines(yytext); YY_FTN_RESET}
<UseOnly>{ID} {
QCString tmp = yytext;
tmp = tmp.lower();
useEntry->onlyNames.append(tmp);
g_insideBody=TRUE;
generateLink(*g_code, yytext);
g_insideBody=FALSE;
useEntry->onlyNames.append(yytext);
}
<Use,UseOnly,Import>"\n" {
unput(*yytext);
...
...
@@ -844,6 +872,7 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
endFontClass();
yy_push_state(YY_START);
BEGIN(ClassName);
currentClass="class";
}
<ClassName>{ID} {
if (currentModule == "module")
...
...
@@ -863,7 +892,11 @@ PREFIX (RECURSIVE{BS_}|IMPURE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,3}(RECURSIVE|I
yy_pop_state();
YY_FTN_REJECT;
}
<Start>"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
<Start>^{BS}"end"({BS_}"type").* { // just reset currentClass, rest is done in following rule
currentClass=0;
YY_FTN_REJECT;
}
<Start>^{BS}"end"({BS_}"module").* { // just reset currentModule, rest is done in following rule
currentModule=0;
YY_FTN_REJECT;
}
...
...
src/fortranscanner.l
View file @
d652c8c8
...
...
@@ -2043,7 +2043,7 @@ static void addModule(const char *name, bool isModule)
DBG_CTX((stderr, "0=========> got module %s\n", name));
if (isModule)
current->section = Entry::
CLASS
_SEC;
current->section = Entry::
NAMESPACE
_SEC;
else
current->section = Entry::FUNCTION_SEC;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment