diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2019-12-22 17:48:17 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-22 17:48:17 (GMT) |
commit | d244b46490a6c5e1d9179c46683811ad56557809 (patch) | |
tree | 696d43a393d5a2785448e0dcb0566f57a000b70c /vhdlparser/vhdlparser.jj | |
parent | a6da9a48ad520206462632496fc4c83d72bffe5a (diff) | |
parent | 786f8c9d2b55ebcde9e2702fc9dfc8ab1e4609b6 (diff) | |
download | Doxygen-d244b46490a6c5e1d9179c46683811ad56557809.zip Doxygen-d244b46490a6c5e1d9179c46683811ad56557809.tar.gz Doxygen-d244b46490a6c5e1d9179c46683811ad56557809.tar.bz2 |
Merge branch 'master' into feature/bug_550158
Diffstat (limited to 'vhdlparser/vhdlparser.jj')
-rw-r--r-- | vhdlparser/vhdlparser.jj | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj index af1bd34..3151528 100644 --- a/vhdlparser/vhdlparser.jj +++ b/vhdlparser/vhdlparser.jj @@ -31,7 +31,7 @@ static Entry* current_root; static Entry* tempEntry; static Entry* lastEntity ; static Entry* lastCompound ; -static Entry* current; +static std::shared_ptr<Entry> current; static QCString compSpec; static QCString currName; static int levelCounter; @@ -42,7 +42,6 @@ static QCString forL; static int param_sec ; static int parse_sec; static int currP; -static Entry* currentCompound; //---------------------------------------- @@ -108,17 +107,17 @@ SKIP: // VHDL 2008 doxygen comment /*! .... */ SKIP : { - <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!" (~[])* "*/" > + <MULT_DOXYGEN_VHDL_COMMENT_2008 : "/*!" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> { { - QCString q(image.data()); - q.stripPrefix("/*!"); - q.resize(q.length()-2); + QCString q = filter2008VhdlComment(image.data()); ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear(); } } - | <MULT_VHDL_2008_COMMENT : "/*" (~[])* "*/" > {::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();} -} + | <MULT_VHDL_2008_COMMENT : "/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> + { + ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();} + } /* KEYWORDS */ @@ -134,7 +133,7 @@ TOKEN [IGNORE_CASE] : | <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);} | <ASSERT_T: "assert"> | <ASSUME_T: "assume"> -| <ASSUME_GUARANTEE_T: "assume_guarentee"> +| <ASSUME_GUARANTEE_T: "assume_guarantee"> | <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);} | <BEGIN_T: "begin"> | <BLOCK_T: "block"> @@ -409,7 +408,7 @@ void architecture_body() : {QCString s,s1;} QCString t=s1+"::"+s; genLabels.resize(0); pushLabel(genLabels,s1); - lastCompound=current; + lastCompound=current.get(); addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private); } try{ @@ -1012,7 +1011,7 @@ void entity_declaration() : {QCString s;} // try{ <ENTITY_T> s=identifier() <IS_T> { - lastEntity=current; + lastEntity=current.get(); lastCompound=0; addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public); } @@ -1209,7 +1208,7 @@ QCString full_type_declaration() : {Entry *tmpEntry;QCString s,s1,s2;} { <TYPE_T> s=identifier() <IS_T> { - tmpEntry=current; + tmpEntry=current.get(); addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,0,Public); } try{ @@ -1614,6 +1613,9 @@ QCString name_ext1() : {QCString s,s1,s2;} { ( + LOOKAHEAD(<APOSTROPHE_T><SUBTYPE_T>) + <APOSTROPHE_T><SUBTYPE_T>{s+="'subtype";} +| LOOKAHEAD(<DOT_T> suffix()) <DOT_T> s1=suffix(){s+=".";s+=s1;} | @@ -1693,7 +1695,7 @@ void package_body() : {QCString s;} { <PACKAGE_T> <BODY_T> s=name() <IS_T> { - lastCompound=current; + lastCompound=current.get(); s.prepend("_"); addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected); } @@ -1729,15 +1731,15 @@ void package_declaration(): {QCString s;} <PACKAGE_T> s=identifier() <IS_T> { - lastCompound=current; - Entry *clone=new Entry(*current); + lastCompound=current.get(); + std::shared_ptr<Entry> clone=std::make_shared<Entry>(*current); clone->section=Entry::NAMESPACE_SEC; clone->spec=VhdlDocGen::PACKAGE; clone->name=s; clone->startLine=getLine(PACKAGE_T); clone->bodyLine=getLine(PACKAGE_T); clone->protection=Package; - current_root->addSubEntry(clone); + current_root->moveToSubEntryAndKeep(clone); addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package); } package_declarative_part() @@ -1932,7 +1934,7 @@ void process_statement() : {QCString s,s1,s2;Token *tok=0;} currName=s; current->name=currName; - tempEntry=current; + tempEntry=current.get(); current->endBodyLine=getLine(); currP=0; if(tok) @@ -2292,7 +2294,7 @@ void subprogram_specification() : {QCString s;Token *tok=0;Token *t;} { currP=VhdlDocGen::PROCEDURE; createFunction(s.data(),currP,0); - tempEntry=current; + tempEntry=current.get(); current->startLine=getLine(PROCEDURE_T); current->bodyLine=getLine(PROCEDURE_T); @@ -2309,14 +2311,14 @@ void subprogram_specification() : {QCString s;Token *tok=0;Token *t;} createFunction(tok->image.c_str(),currP,s.data()); else createFunction(0,currP,s.data()); - tempEntry=current; + tempEntry=current.get(); current->startLine=getLine(FUNCTION_T); current->bodyLine=getLine(FUNCTION_T); } [{ param_sec=PARAM_SEC; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { param_sec=0; }] <RETURN_T> s=type_mark() { - tempEntry=current; + tempEntry=current.get(); current->type=s; newEntry(); } |