summaryrefslogtreecommitdiffstats
path: root/vhdlparser/vhdlparser.jj
diff options
context:
space:
mode:
Diffstat (limited to 'vhdlparser/vhdlparser.jj')
-rw-r--r--vhdlparser/vhdlparser.jj817
1 files changed, 420 insertions, 397 deletions
diff --git a/vhdlparser/vhdlparser.jj b/vhdlparser/vhdlparser.jj
index 3151528..7b3f5e7 100644
--- a/vhdlparser/vhdlparser.jj
+++ b/vhdlparser/vhdlparser.jj
@@ -25,56 +25,68 @@ options {
PARSER_BEGIN(VhdlParser)
-typedef unsigned long long uint64;
-
-static Entry* current_root;
-static Entry* tempEntry;
-static Entry* lastEntity ;
-static Entry* lastCompound ;
-static std::shared_ptr<Entry> current;
-static QCString compSpec;
-static QCString currName;
-static int levelCounter;
-static QCString confName;
-static QCString genLabels;
-static QCString lab;
-static QCString forL;
-static int param_sec ;
-static int parse_sec;
-static int currP;
+
+struct SharedState
+{
+ std::shared_ptr<Entry> current_root;
+ std::shared_ptr<Entry> tempEntry;
+ std::shared_ptr<Entry> lastEntity;
+ std::shared_ptr<Entry> lastCompound;
+ std::shared_ptr<Entry> current;
+ QCString compSpec;
+ QCString currName;
+ int levelCounter = 0;
+ QCString confName;
+ QCString genLabels;
+ QCString lab;
+ int param_sec = 0;
+ int parse_sec = 0;
+ int currP = 0;
+};
+
+VHDLOutlineParser *m_outlineParser;
+SharedState *m_sharedState;
+
+void setOutlineParser(VHDLOutlineParser* p) { m_outlineParser=p; }
+VHDLOutlineParser *outlineParser() const { return m_outlineParser; }
+void setSharedState(SharedState *s) { m_sharedState=s; }
+void clearError() { hasError = false; }
+
+//typedef unsigned long long uint64;
//----------------------------------------
-static void setLineParsed(int tok);
-static int getLine(int tok);
-static int getLine();
-static void lineCount(const char*);
-static void lineCount();
-static void addProto(const char *s1,const char *s2,const char *s3,const char *s4,const char *s5,const char *s6);
-static void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf);
-static void createFunction(const char *impure,uint64 spec,const char *fname);
-static void addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot);
-static void addCompInst(const char *n, const char* instName, const char* comp,int iLine);
-static void handleCommentBlock(const char* doc,bool brief);
-static void handleFlowComment(const char*);
-static void initEntry(Entry *e);
-static void newEntry();
-static bool isFuncProcProced();
-static void pushLabel(QCString &,QCString&);
-static QCString popLabel(QCString & q);
-static bool addLibUseClause(const QCString &type);
-static void mapLibPackage( Entry* root);
-static void createFlow();
-static void error_skipto(int kind);
-static void oneLineComment(QCString qcs);
-static void setMultCommentLine();
+//void setLineParsed(int tok);
+//int getLine(int tok);
+//int getLine();
+//void lineCount(const char*);
+//void lineCount();
+//void outlineParser()->addProto(const char *s1,const char *s2,const char *s3,const char *s4,const char *s5,const char *s6);
+//void addConfigureNode(const char* a,const char*b, bool,bool isLeaf,bool inlineConf);
+//void createFunction(const char *impure,uint64 spec,const char *fname);
+//void outlineParser()->addVhdlType(const char *n,int startLine,int section, uint64 spec,const char* args,const char* type,Protection prot);
+//void outlineParser()->addCompInst(const char *n, const char* instName, const char* comp,int iLine);
+//void handleCommentBlock(const char* doc,bool brief);
+//void handleFlowComment(const char*);
+//void initEntry(Entry *e);
+//void outlineParser()->newEntry();
+//bool isFuncProcProced();
+//void pushLabel(QCString &,QCString&);
+//QCString popLabel(QCString & q);
+//bool addLibUseClause(const QCString &type);
+//void mapLibPackage( Entry* root);
+//void createFlow();
+//void outlineParser()->error_skipto(int kind);
+//void oneLineComment(QCString qcs);
+//void setMultCommentLine();
+
PARSER_END(VhdlParser)
SKIP :
{
" "
| "\t"
-| "\n" {::vhdl::parser::VhdlParser::lineCount();}
+| "\n" {parser->outlineParser()->lineCount();}
| "\r"
}
@@ -88,19 +100,19 @@ SKIP:
{
QCString doc(image.data());
int count=doc.contains("--!");
- ::vhdl::parser::VhdlParser::setMultCommentLine();
- ::vhdl::parser::VhdlParser::lineCount(image.data());
+ parser->outlineParser()->setMultCommentLine();
+ parser->outlineParser()->lineCount(image.data());
if (count == 1)
- ::vhdl::parser::VhdlParser::oneLineComment(doc);
+ parser->outlineParser()->oneLineComment(doc);
else
- ::vhdl::parser::VhdlParser::handleCommentBlock(image.data(),FALSE); ;
+ parser->outlineParser()->handleCommentBlock(image.data(),FALSE); ;
}
}
- |<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { ::vhdl::parser::VhdlParser::handleFlowComment(image.data());}
+ |<VHDL_FLOWCHART_COMMENT: "--#" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?> { parser->outlineParser()->handleFlowComment(image.data());}
|<VHDL_COMMENT: "--" (~["\n", "\r"])* ("\n" | "\r" | "\r\n")?>
{
- ::vhdl::parser::VhdlParser::lineCount(image.data());}
+ parser->outlineParser()->lineCount(image.data());}
}
// VHDL 2008 comment /* .... */
@@ -111,12 +123,12 @@ SKIP :
{
{
QCString q = filter2008VhdlComment(image.data());
- ::vhdl::parser::VhdlParser::handleCommentBlock(q.data(),TRUE);image.clear();
+ parser->outlineParser()->handleCommentBlock(q.data(),TRUE);image.clear();
}
}
| <MULT_VHDL_2008_COMMENT : "/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
{
- ::vhdl::parser::VhdlParser::lineCount(image.data());image.clear();}
+ parser->outlineParser()->lineCount(image.data());image.clear();}
}
/* KEYWORDS */
@@ -129,39 +141,39 @@ TOKEN [IGNORE_CASE] :
| <ALIAS_T: "alias">
| <ALL_T: "all">
| <AND_T: "and">
-| <ARCHITECTURE_T: "architecture"> {::vhdl::parser::VhdlParser::setLineParsed(ARCHITECTURE_T);}
-| <ARRAY_T: "array"> {VhdlParser::setLineParsed(ARRAY_T);}
+| <ARCHITECTURE_T: "architecture"> {parser->outlineParser()->setLineParsed(ARCHITECTURE_T);}
+| <ARRAY_T: "array"> {parser->outlineParser()->setLineParsed(ARRAY_T);}
| <ASSERT_T: "assert">
| <ASSUME_T: "assume">
| <ASSUME_GUARANTEE_T: "assume_guarantee">
-| <ATTRIBUTE_T: "attribute"> {::vhdl::parser::VhdlParser::setLineParsed(ATTRIBUTE_T);}
+| <ATTRIBUTE_T: "attribute"> {parser->outlineParser()->setLineParsed(ATTRIBUTE_T);}
| <BEGIN_T: "begin">
| <BLOCK_T: "block">
-| <BODY_T: "body"> {::vhdl::parser::VhdlParser::setLineParsed(BODY_T);}
+| <BODY_T: "body"> {parser->outlineParser()->setLineParsed(BODY_T);}
| <BUFFER_T: "buffer">
| <BUS_T: "bus">
-| <COMPONENT_T: "component"> {VhdlParser::setLineParsed(COMPONENT_T);}
+| <COMPONENT_T: "component"> {parser->outlineParser()->setLineParsed(COMPONENT_T);}
| <CASE_T: "case">
-| <CONFIGURATION_T: "configuration"> {VhdlParser::setLineParsed(CONFIGURATION_T);}
-| <CONSTANT_T: "constant"> {VhdlParser::setLineParsed(CONSTANT_T);}
-| <CONTEXT_T: "context"> {VhdlParser::setLineParsed(CONTEXT_T);}
+| <CONFIGURATION_T: "configuration"> {parser->outlineParser()->setLineParsed(CONFIGURATION_T);}
+| <CONSTANT_T: "constant"> {parser->outlineParser()->setLineParsed(CONSTANT_T);}
+| <CONTEXT_T: "context"> {parser->outlineParser()->setLineParsed(CONTEXT_T);}
| <COVER_T: "cover">
| <DEFAULT_T: "default">
| <DISCONNECT_T: "disconnect">
| <DOWNTO_T: "downto">
| <ELSE_T: "else">
| <ELSIF_T: "elsif">
-| <END_T: "end"> {VhdlParser::setLineParsed(END_T);}
-| <ENTITY_T: "entity"> {VhdlParser::setLineParsed(ENTITY_T);}
+| <END_T: "end"> {parser->outlineParser()->setLineParsed(END_T);}
+| <ENTITY_T: "entity"> {parser->outlineParser()->setLineParsed(ENTITY_T);}
| <EXIT_T: "exit">
| <FAIRNESS_T: "fairness">
-| <FILE_T: "file"> {VhdlParser::setLineParsed(FILE_T);}
+| <FILE_T: "file"> {parser->outlineParser()->setLineParsed(FILE_T);}
| <FOR_T: "for">
| <FORCE_T: "force">
-| <FUNCTION_T: "function"> {VhdlParser::setLineParsed(FUNCTION_T);}
+| <FUNCTION_T: "function"> {parser->outlineParser()->setLineParsed(FUNCTION_T);}
| <GENERATE_T: "generate">
| <GENERIC_T: "generic">
-| <GROUP_T: "group"> {VhdlParser::setLineParsed(GROUP_T);}
+| <GROUP_T: "group"> {parser->outlineParser()->setLineParsed(GROUP_T);}
| <GUARDED_T: "guarded">
| <IF_T: "if">
| <IMPURE_T: "impure">
@@ -170,7 +182,7 @@ TOKEN [IGNORE_CASE] :
| <INOUT_T: "inout">
| <IS_T: "is">
| <LABEL_T: "label">
-| <LIBRARY_T: "library"> {VhdlParser::setLineParsed(LIBRARY_T);}
+| <LIBRARY_T: "library"> {parser->outlineParser()->setLineParsed(LIBRARY_T);}
| <LINKAGE_T: "linkage">
| <LITERAL_T: "literal">
| <LOOP_T: "loop">
@@ -188,17 +200,17 @@ TOKEN [IGNORE_CASE] :
| <OR_T: "or">
| <OTHER_T: "others">
| <OUT_T: "out">
-| <PACKAGE_T: "package"> {::vhdl::parser::VhdlParser::setLineParsed(PACKAGE_T);}
+| <PACKAGE_T: "package"> {parser->outlineParser()->setLineParsed(PACKAGE_T);}
| <PARAMETER_T: "parameter">
-| <PORT_T: "port"> {::vhdl::parser::VhdlParser::setLineParsed(PORT_T);}
+| <PORT_T: "port"> {parser->outlineParser()->setLineParsed(PORT_T);}
| <POSTPONED_T: "postponed">
-| <PROCEDURE_T: "procedure"> {::vhdl::parser::VhdlParser::setLineParsed(PROCEDURE_T);}
-| <PROCESS_T: "process"> {::vhdl::parser::VhdlParser::setLineParsed(PROCESS_T);}
+| <PROCEDURE_T: "procedure"> {parser->outlineParser()->setLineParsed(PROCEDURE_T);}
+| <PROCESS_T: "process"> {parser->outlineParser()->setLineParsed(PROCESS_T);}
| <PROPERTY_T: "property">
| <PROTECTED_T: "protected">
| <PURE_T: "pure">
| <RANGE_T: "range">
-| <RECORD_T: "record"> {::vhdl::parser::VhdlParser::setLineParsed(RECORD_T);}
+| <RECORD_T: "record"> {parser->outlineParser()->setLineParsed(RECORD_T);}
| <REGISTER_T: "register">
| <REJECT_T: "reject">
| <RELEASE_T: "release">
@@ -212,20 +224,20 @@ TOKEN [IGNORE_CASE] :
| <SELECT_T: "select">
| <SEQUENCE_T: "sequence">
| <SEVERITY_T: "severity">
-| <SIGNAL_T: "signal"> {::vhdl::parser::VhdlParser::setLineParsed(SIGNAL_T);}
+| <SIGNAL_T: "signal"> {parser->outlineParser()->setLineParsed(SIGNAL_T);}
| <SHARED_T: "shared">
| <SLA_T: "sla">
| <SLL_T: "sll">
| <SRA_T: "sra">
| <SRL_T: "srl">
| <STRONG_T: "strong">
-| <SUBTYPE_T: "subtype"> {::vhdl::parser::VhdlParser::setLineParsed(SUBTYPE_T);}
+| <SUBTYPE_T: "subtype"> {parser->outlineParser()->setLineParsed(SUBTYPE_T);}
| <THEN_T: "then">
| <TO_T: "to">
| <TRANSPORT_T: "transport">
-| <TYPE_T: "type"> {::vhdl::parser::VhdlParser::setLineParsed(TYPE_T);}
+| <TYPE_T: "type"> {parser->outlineParser()->setLineParsed(TYPE_T);}
| <UNAFFECTED_T: "unaffected">
-| <UNITS_T: "units"> {::vhdl::parser::VhdlParser::setLineParsed(UNITS_T);}
+| <UNITS_T: "units"> {parser->outlineParser()->setLineParsed(UNITS_T);}
| <UNTIL_T: "until">
| <USE_T: "use">
| <VARIABLE_T: "variable">
@@ -255,7 +267,7 @@ TOKEN :
| < COMMA_T: "," >
| < VARASSIGN_T: ":=" >
| < COLON_T: ":" >
-| < SEMI_T: ";" >{::vhdl::parser::VhdlParser::setLineParsed(SEMI_T);}
+| < SEMI_T: ";" >{parser->outlineParser()->setLineParsed(SEMI_T);}
| < LESSTHAN_T: "<=" >
| < GREATERTHAN_T: ">=" >
| < LT_T: "<" >
@@ -380,7 +392,7 @@ QCString alias_declaration() : {QCString s,s1,s2;}
<IS_T> { s+=" is "; } s1=name() {s+=s1;} [s1=signature() {s+=s1;}]
<SEMI_T>
{
- addVhdlType(s2.data(),getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
+ outlineParser()->addVhdlType(s2.data(),outlineParser()->getLine(ALIAS_T),Entry::VARIABLE_SEC,VhdlDocGen::ALIAS,0,s.data(),Public);
return s2+" "+s+";";
}
@@ -395,29 +407,34 @@ QCString alias_designator() : {Token *tok=0;QCString s;}
void allocator() :{}
{
- LOOKAHEAD(3)
- <NEW_T> qualified_expression()
- | <NEW_T> subtype_indication()
+ LOOKAHEAD(3)
+ <NEW_T> qualified_expression()
+ | <NEW_T> subtype_indication()
}
void architecture_body() : {QCString s,s1;}
{
- <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
- {
- QCString t=s1+"::"+s;
- genLabels.resize(0);
- pushLabel(genLabels,s1);
- lastCompound=current.get();
- addVhdlType(t,getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
- }
- try{
- architecture_declarative_part()
- }catch(...){error_skipto(BEGIN_T);}
- <BEGIN_T>
- architecture_statement_part()
+ <ARCHITECTURE_T> s=identifier() <OF_T> s1=name() <IS_T>
+ {
+ QCString t=s1+"::"+s;
+ m_sharedState->genLabels.resize(0);
+ outlineParser()->pushLabel(m_sharedState->genLabels,s1);
+ m_sharedState->lastCompound=m_sharedState->current;
+ outlineParser()->addVhdlType(t,outlineParser()->getLine(ARCHITECTURE_T),Entry::CLASS_SEC,VhdlDocGen::ARCHITECTURE,0,0,Private);
+ }
+ try
+ {
+ architecture_declarative_part()
+ }
+ catch(...)
+ {
+ outlineParser()->error_skipto(BEGIN_T);
+ }
+ <BEGIN_T>
+ architecture_statement_part()
<END_T> [<ARCHITECTURE_T>] [name()] <SEMI_T>
- { lastEntity=0;lastCompound=0; genLabels.resize(0); }
+ { m_sharedState->lastEntity=0;m_sharedState->lastCompound=0; m_sharedState->genLabels.resize(0); }
}
void architecture_declarative_part() : {}
@@ -476,7 +493,7 @@ QCString attribute_declaration() : {QCString s,s1;}
{
<ATTRIBUTE_T> s=identifier() <COLON_T> s1=type_mark() <SEMI_T>
{
- addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,s1.data(),Public);
return " attribute "+s+":"+s1+";";
}
}
@@ -498,7 +515,7 @@ QCString attribute_specification(): {QCString s,s1,s2;}
<ATTRIBUTE_T> s=attribute_designator() <OF_T> s1=entity_specification() <IS_T> s2=expression() <SEMI_T>
{
QCString t= s1+" is "+s2;
- addVhdlType(s.data(),getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(ATTRIBUTE_T),Entry::VARIABLE_SEC,VhdlDocGen::ATTRIBUTE,0,t.data(),Public);
return " attribute "+s+" of "+s1+ " is "+s2+";";
}
}
@@ -605,14 +622,14 @@ void block_specification() : {}
void block_statement() : {QCString s;}
{
s=identifier() <COLON_T>
- <BLOCK_T> { pushLabel(genLabels,s); }[ <LPAREN_T> expression() <RPAREN_T> ] [ <IS_T> ]
+ <BLOCK_T> { outlineParser()->pushLabel(m_sharedState->genLabels,s); }[ <LPAREN_T> expression() <RPAREN_T> ] [ <IS_T> ]
block_header()
block_declarative_part()
<BEGIN_T>
block_statement_part()
<END_T> <BLOCK_T> [ identifier() ] <SEMI_T>
{
- genLabels=popLabel(genLabels);
+ m_sharedState->genLabels=outlineParser()->popLabel(m_sharedState->genLabels);
}
}
@@ -683,12 +700,12 @@ void component_configuration () :{}
void component_declaration() : {QCString s;}
{
<COMPONENT_T> s=identifier() [ <IS_T> ]
- { currP=VhdlDocGen::COMPONENT; }
+ { m_sharedState->currP=VhdlDocGen::COMPONENT; }
[ generic_clause() ]
[ port_clause() ]
{
- addVhdlType(s.data(),getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public);
- currP=0;
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(COMPONENT_T),Entry::VARIABLE_SEC,VhdlDocGen::COMPONENT,0,0,Public);
+ m_sharedState->currP=0;
}
<END_T> <COMPONENT_T> [ identifier() ] <SEMI_T>
@@ -706,7 +723,7 @@ s=identifier() <COLON_T>
s1=VhdlDocGen::getIndexWord(s1.data(),1);
}
- addCompInst(s.lower().data(),s1.lower().data(),s3.data(),getLine());
+ outlineParser()->addCompInst(s.lower().data(),s1.lower().data(),s3.data(),outlineParser()->getLine());
}
[ LOOKAHEAD(generic_map_aspect()) generic_map_aspect() ]
[ port_map_aspect() ] <SEMI_T>
@@ -774,7 +791,7 @@ concurrent_procedure_call_statement()
/*
catch( ParseException e )
{
- error_skipto(SEMI_T, "syntax error in declarative item");
+ outlineParser()->error_skipto(SEMI_T, "syntax error in declarative item");
}
*/
}
@@ -819,13 +836,13 @@ void configuration_declaration() : {QCString s,s1;}
<CONFIGURATION_T> s=identifier() <OF_T> s1=name() <IS_T>
{
- confName=s+"::"+s1;
- addVhdlType(s.data(),getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
+ m_sharedState->confName=s+"::"+s1;
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(CONFIGURATION_T),Entry::VARIABLE_SEC,VhdlDocGen::CONFIG,"configuration",s1.data(),Public);
}
configuration_declarative_part()
block_configuration()
<END_T> [ <CONFIGURATION_T> ] [ name() ] <SEMI_T>
- { genLabels.resize(0); confName="";}
+ { m_sharedState->genLabels.resize(0); m_sharedState->confName="";}
}
void configuration_declarative_item() : {}
@@ -860,7 +877,7 @@ QCString constant_declaration() : {QCString s,s1,s2;Token *t=0;}
if(t)
s2.prepend(":=");
QCString it=s1+s2;
- addVhdlType(s.data(),getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(CONSTANT_T),Entry::VARIABLE_SEC,VhdlDocGen::CONSTANT,0,it.data(),Public);
it.prepend("constant ");
return it;
}
@@ -961,8 +978,8 @@ QCString element_declaration() : {QCString s,s1;}
s=identifier_list() <COLON_T> s1=subtype_indication() <SEMI_T>
{
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s1.data(),Public);
- //addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s1.data(),Public);
+ //outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
return s+":"+s1;
}
}
@@ -1011,17 +1028,17 @@ void entity_declaration() : {QCString s;}
// try{
<ENTITY_T> s=identifier() <IS_T>
{
- lastEntity=current.get();
- lastCompound=0;
- addVhdlType(s.data(),getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
+ m_sharedState->lastEntity=m_sharedState->current;
+ m_sharedState->lastCompound=0;
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(ENTITY_T),Entry::CLASS_SEC,VhdlDocGen::ENTITY,0,0,Public);
}
entity_header()
entity_declarative_part ()
[ <BEGIN_T> entity_statement_part() ]
<END_T> [ <ENTITY_T> ] [ name() ]
- // }catch(...){error_skipto(SEMI_T);}
+ // }catch(...){outlineParser()->error_skipto(SEMI_T);}
<SEMI_T>
- { lastEntity=0;lastCompound=0; genLabels.resize(0); }
+ { m_sharedState->lastEntity=0;m_sharedState->lastCompound=0; m_sharedState->genLabels.resize(0); }
}
void entity_declarative_item() : {}
@@ -1064,8 +1081,8 @@ s=entity_tag() [ s1=signature() ] { return s+s1;}
void entity_header() : {}
{
- [ { currP=VhdlDocGen::GENERIC;parse_sec=GEN_SEC; } generic_clause()]
- [ { currP=VhdlDocGen::PORT; } port_clause()]
+ [ { m_sharedState->currP=VhdlDocGen::GENERIC;m_sharedState->parse_sec=GEN_SEC; } generic_clause()]
+ [ { m_sharedState->currP=VhdlDocGen::PORT; } port_clause()]
}
QCString entity_name_list() : {QCString s,s1;}
@@ -1120,7 +1137,7 @@ QCString exit_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
[ s=identifier() t=<COLON_T> ] <EXIT_T> [ s1=identifier() ]
[ t1=<WHEN_T> s2=condition() ] <SEMI_T>
{
- lab.resize(0);
+ m_sharedState->lab.resize(0);
if(t) s+=":";
if(t1) s2.prepend(" when ");
FlowChart::addFlowChart(FlowChart::EXIT_NO,"exit",s2.data(),s1.data());
@@ -1162,7 +1179,7 @@ QCString file_declaration() : {QCString s,s1,s2,s3;}
<FILE_T> s=identifier_list() <COLON_T> s2=subtype_indication() [ s3=file_open_information() ] <SEMI_T>
{
QCString t1=s2+" "+s3;
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,t1.data(),Public);
return " file "+s+":"+s2+" "+s3+";";
}
}
@@ -1204,38 +1221,41 @@ QCString formal_part() : {QCString s,s1;}
s=name() [<LPAREN_T> formal_designator() <RPAREN_T> {s+"("+s1+")";}] {return s;}
}
-QCString full_type_declaration() : {Entry *tmpEntry;QCString s,s1,s2;}
+QCString full_type_declaration() : { std::shared_ptr<Entry> tmpEntry;QCString s,s1,s2; }
{
-<TYPE_T> s=identifier() <IS_T>
-{
- tmpEntry=current.get();
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,0,Public);
-}
- try{
- s2=type_definition()
- }catch(...){error_skipto(SEMI_T);}
- <SEMI_T>
- {
- if (s2.contains("#")) {
- VhdlDocGen::deleteAllChars(s2,'#');
- tmpEntry->spec=VhdlDocGen::RECORD;
- tmpEntry->type=s2.data();
- //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s2.data(),Public);
- }
- else if (s2.contains("%")) {
- VhdlDocGen::deleteAllChars(s2,'%');
- tmpEntry->spec=VhdlDocGen::UNITS;
- tmpEntry->type=s2.data();
- //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,s2.data(),s2.data(),Public);
- }
- else {
- tmpEntry->spec=VhdlDocGen::TYPE;
- tmpEntry->type=s2.data();
- //addVhdlType(s.data(),getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
- }
- tmpEntry=0;
- return "type "+s+" is "+s2+";";
- }
+ <TYPE_T> s=identifier() <IS_T>
+ {
+ tmpEntry=m_sharedState->current;
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,0,Public);
+ }
+ try
+ {
+ s2=type_definition()
+ }
+ catch(...)
+ { outlineParser()->error_skipto(SEMI_T); }
+ <SEMI_T>
+ {
+ if (s2.contains("#")) {
+ VhdlDocGen::deleteAllChars(s2,'#');
+ tmpEntry->spec=VhdlDocGen::RECORD;
+ tmpEntry->type=s2.data();
+ //outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::RECORD,0,s2.data(),Public);
+ }
+ else if (s2.contains("%")) {
+ VhdlDocGen::deleteAllChars(s2,'%');
+ tmpEntry->spec=VhdlDocGen::UNITS;
+ tmpEntry->type=s2.data();
+ //outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,s2.data(),s2.data(),Public);
+ }
+ else {
+ tmpEntry->spec=VhdlDocGen::TYPE;
+ tmpEntry->type=s2.data();
+ //outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(TYPE_T),Entry::VARIABLE_SEC,VhdlDocGen::TYPE,0,s2.data(),Public);
+ }
+ tmpEntry.reset();
+ return "type "+s+" is "+s2+";";
+ }
}
QCString function_call() : {QCString s,s1;}
@@ -1248,11 +1268,11 @@ void generate_statement() : {QCString s;}
s=identifier() <COLON_T>
try{
generate_scheme() <GENERATE_T>
- { pushLabel(genLabels,s); }
+ { outlineParser()->pushLabel(m_sharedState->genLabels,s); }
generate_statement_body1()
<END_T>
- }catch(...){error_skipto(GENERATE_T);}
- <GENERATE_T> [ identifier() ] <SEMI_T> {genLabels=popLabel(genLabels); }
+ }catch(...){outlineParser()->error_skipto(GENERATE_T);}
+ <GENERATE_T> [ identifier() ] <SEMI_T> {m_sharedState->genLabels=outlineParser()->popLabel(m_sharedState->genLabels); }
}
void generate_scheme() : {}
@@ -1263,7 +1283,7 @@ void generate_scheme() : {}
void generic_clause() : {QCString s;}
{
- <GENERIC_T> <LPAREN_T> { parse_sec=GEN_SEC; } s=generic_list() <RPAREN_T> <SEMI_T> { parse_sec=0; }
+ <GENERIC_T> <LPAREN_T> { m_sharedState->parse_sec=GEN_SEC; } s=generic_list() <RPAREN_T> <SEMI_T> { m_sharedState->parse_sec=0; }
}
QCString generic_list() : {QCString s;}
@@ -1321,30 +1341,30 @@ QCString identifier_list() : {QCString str,str1;}
void if_statement() : {QCString s,s1;}
{
-[LOOKAHEAD(1) identifier() <COLON_T> ]
+ [LOOKAHEAD(1) identifier() <COLON_T> ]
<IF_T> s=condition() <THEN_T>
{
- s.prepend("if ");
- FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
+ s.prepend("if ");
+ FlowChart::addFlowChart(FlowChart::IF_NO,0,s);
+ }
+ sequence_of_statement()
+ (
+ <ELSIF_T> s1=condition() <THEN_T>
+ {
+ s1.prepend("elsif ");
+ FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
+ }
+ sequence_of_statement()
+ )*
+ [LOOKAHEAD(1) <ELSE_T>
+ {
+ FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
+ }
+ sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
+ {
+ FlowChart::moveToPrevLevel();
+ FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
}
- sequence_of_statement()
- (
- <ELSIF_T> s1=condition() <THEN_T>
- {
- s1.prepend("elsif ");
- FlowChart::addFlowChart(FlowChart::ELSIF_NO,0,s1.data());
- }
- sequence_of_statement()
- )*
- [LOOKAHEAD(1) <ELSE_T>
- {
- FlowChart::addFlowChart(FlowChart::ELSE_NO,0,0);
- }
- sequence_of_statement() ] <END_T> <IF_T> [ identifier() ] <SEMI_T>
- {
- FlowChart::moveToPrevLevel();
- FlowChart::addFlowChart(FlowChart::ENDIF_NO,0,0);
- }
}
QCString incomplete_type_declaration() : {QCString s;}
@@ -1359,7 +1379,7 @@ QCString index_constraint() : {QCString s="("; QCString s1,s2;}
{
//try{
<LPAREN_T> s2=discrete_range(){s+=s2;}(LOOKAHEAD(1)<COMMA_T> s1=discrete_range(){s+=",";s+=s1;})* <RPAREN_T> {return s+")";}
-//}catch(...){ error_skipto(SEMI_T);hasError=false;return "";}
+//}catch(...){ outlineParser()->error_skipto(SEMI_T);hasError=false;return "";}
}
QCString index_specification() : {QCString s;}
@@ -1417,68 +1437,67 @@ subprogram_declaration() { return s;}
|
s=object_class() s1=identifier()
{
- if (parse_sec==GEN_SEC)
-
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,s1.data(),0,Public);
- return s;
- }
+ if (m_sharedState->parse_sec==GEN_SEC)
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,m_sharedState->currP,s1.data(),0,Public);
+ return s;
+ }
}
QCString interface_element() : {QCString s;}
{
-s=interface_declaration(){ return s;}
+ s=interface_declaration(){ return s;}
}
QCString interface_file_declaration() : {QCString s,s1;}
{
-<FILE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
-{
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
- return " file "+s+":"+s1;
-}
+ <FILE_T> s=identifier_list() <COLON_T> s1=subtype_indication()
+ {
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::VFILE,0,s1.data(),Public);
+ return " file "+s+":"+s1;
+ }
}
QCString interface_list() : {QCString s,s1,s2;}
{
-s=interface_element() (LOOKAHEAD(1) <SEMI_T> s1=interface_element(){s2+=";";s2+=s1;})* { return s+s2;}
+ s=interface_element() (LOOKAHEAD(1) <SEMI_T> s1=interface_element(){s2+=";";s2+=s1;})* { return s+s2;}
}
QCString interface_variable_declaration() : {Token *tok=0;Token *tok1=0;Token *tok2=0;QCString s,s1,s2,s3,s4,s5;}
{
-[( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
- s=identifier_list() <COLON_T> [ s1=mode() ]
- s2=subtype_indication() [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
-{
- if(tok)
- s5=tok->image.c_str();
+[ ( tok=<VARIABLE_T> | tok=<SIGNAL_T> | tok=<CONSTANT_T>|tok=<SHARED_T>) ]
+ s=identifier_list() <COLON_T> [ s1=mode() ]
+ s2=subtype_indication() [ tok1=<BUS_T> ] [ tok2=<VARASSIGN_T> s4=expression() ]
+ {
+ if(tok)
+ s5=tok->image.c_str();
- if(tok1)
- s3=tok1->image.data();
+ if(tok1)
+ s3=tok1->image.data();
- if(tok2)
- s3+=":=";
+ if(tok2)
+ s3+=":=";
- QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
- if (currP!=VhdlDocGen::COMPONENT)
- {
- if (currP==VhdlDocGen::FUNCTION || currP==VhdlDocGen::PROCEDURE)
- {
- addProto(s5.data(),s.data(),s1.data(),s2.data(),s3.data(),s4.data());
- }
- else
- {
- QCString i=s2+s3+s4;
- if (currP==VhdlDocGen::GENERIC && param_sec==0)
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public);
- else if(parse_sec != GEN_SEC)
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,currP,i.data(),s1.data(),Public);
- }
- // fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
- } // if component
- return it;
- }
+ QCString it=s+":"+s1+" "+s2+" "+s3+" "+s4;
+ if (m_sharedState->currP!=VhdlDocGen::COMPONENT)
+ {
+ if (m_sharedState->currP==VhdlDocGen::FUNCTION || m_sharedState->currP==VhdlDocGen::PROCEDURE)
+ {
+ outlineParser()->addProto(s5.data(),s.data(),s1.data(),s2.data(),s3.data(),s4.data());
+ }
+ else
+ {
+ QCString i=s2+s3+s4;
+ if (m_sharedState->currP==VhdlDocGen::GENERIC && m_sharedState->param_sec==0)
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,m_sharedState->currP,i.data(),s1.data(),Public);
+ else if(m_sharedState->parse_sec != GEN_SEC)
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,m_sharedState->currP,i.data(),s1.data(),Public);
+ }
+ // fprintf(stderr,"\n\n <<port %s >>\n",$$.data());
+ } // if component
+ return it;
+ }
}
QCString iteration_scheme() : {QCString s;}
@@ -1486,15 +1505,15 @@ QCString iteration_scheme() : {QCString s;}
<WHILE_T> s=condition()
{
s.prepend("while ");
- FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),lab.data());
- lab="";
+ FlowChart::addFlowChart(FlowChart::WHILE_NO,0,s.data(),m_sharedState->lab.data());
+ m_sharedState->lab="";
return s;
}
| <FOR_T> s=parameter_specification()
{
- QCString q=lab+" for "+s;
- FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),lab.data());
- lab="";
+ QCString q=m_sharedState->lab+" for "+s;
+ FlowChart::addFlowChart(FlowChart::FOR_NO,0,q.data(),m_sharedState->lab.data());
+ m_sharedState->lab="";
return q;
}
}
@@ -1509,9 +1528,9 @@ QCString library_clause() : {QCString s;}
(<LIBRARY_T> s=identifier_list() <SEMI_T>
)
{
- if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
+ if ( m_sharedState->parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
{
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,s.data(),"_library_",Public);
}
QCString s1="library "+s;
return s1;
@@ -1652,7 +1671,7 @@ QCString next_statement() : {QCString s,s1,s2;Token *t=0;Token *t1=0;}
{
if(t) s+=":";
FlowChart::addFlowChart(FlowChart::NEXT_NO,"next ",s2.data(),s1.data());
- lab.resize(0);
+ m_sharedState->lab.resize(0);
if(t1) s2.prepend("when ");
return s+s1+s2+";";
}
@@ -1695,13 +1714,13 @@ void package_body() : {QCString s;}
{
<PACKAGE_T> <BODY_T> s=name() <IS_T>
{
- lastCompound=current.get();
+ m_sharedState->lastCompound=m_sharedState->current;
s.prepend("_");
- addVhdlType(s,getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
+ outlineParser()->addVhdlType(s,outlineParser()->getLine(),Entry::CLASS_SEC,VhdlDocGen::PACKAGE_BODY,0,0,Protected);
}
package_body_declarative_part()
-<END_T> [<PACKAGE_T> <BODY_T> ] [ name() ] <SEMI_T> { lastCompound=0; genLabels.resize(0); }
+<END_T> [<PACKAGE_T> <BODY_T> ] [ name() ] <SEMI_T> { m_sharedState->lastCompound=0; m_sharedState->genLabels.resize(0); }
}
void package_body_declarative_item() : {}
@@ -1731,20 +1750,20 @@ void package_declaration(): {QCString s;}
<PACKAGE_T> s=identifier() <IS_T>
{
- lastCompound=current.get();
- std::shared_ptr<Entry> clone=std::make_shared<Entry>(*current);
+ m_sharedState->lastCompound=m_sharedState->current;
+ std::shared_ptr<Entry> clone=std::make_shared<Entry>(*m_sharedState->current);
clone->section=Entry::NAMESPACE_SEC;
clone->spec=VhdlDocGen::PACKAGE;
clone->name=s;
- clone->startLine=getLine(PACKAGE_T);
- clone->bodyLine=getLine(PACKAGE_T);
+ clone->startLine=outlineParser()->getLine(PACKAGE_T);
+ clone->bodyLine=outlineParser()->getLine(PACKAGE_T);
clone->protection=Package;
- current_root->moveToSubEntryAndKeep(clone);
- addVhdlType(s,getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
+ m_sharedState->current_root->moveToSubEntryAndKeep(clone);
+ outlineParser()->addVhdlType(s,outlineParser()->getLine(PACKAGE_T),Entry::CLASS_SEC,VhdlDocGen::PACKAGE,0,0,Package);
}
package_declarative_part()
<END_T> [ <PACKAGE_T>] [ name() ] <SEMI_T>
-{ lastEntity=0;lastCompound=0; genLabels.resize(0); }
+{ m_sharedState->lastEntity=0;m_sharedState->lastCompound=0; m_sharedState->genLabels.resize(0); }
}
void geninter():{}
@@ -1800,7 +1819,7 @@ QCString physical_literal() : {QCString s,s1;}
QCString physical_type_definition() : {QCString s,s1,s2;}
{
<UNITS_T>
- s=identifier()<SEMI_T> { addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public);}
+ s=identifier()<SEMI_T> { outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,0,Public);}
(
s1=secondary_unit_declaration()
)*
@@ -1811,7 +1830,7 @@ QCString physical_type_definition() : {QCString s,s1,s2;}
void port_clause() : {}
{
- <PORT_T> <LPAREN_T> port_list()<RPAREN_T> <SEMI_T>{ currP=0; }
+ <PORT_T> <LPAREN_T> port_list()<RPAREN_T> <SEMI_T>{ m_sharedState->currP=0; }
}
QCString port_list() : {QCString s;}
@@ -1909,9 +1928,9 @@ void process_statement() : {QCString s,s1,s2;Token *tok=0;}
[ s=identifier() <COLON_T> ]
[ <POSTPONED_T> ]
{
- currP=VhdlDocGen::PROCESS;
- current->startLine=getLine();
- current->bodyLine=getLine();
+ m_sharedState->currP=VhdlDocGen::PROCESS;
+ m_sharedState->current->startLine=outlineParser()->getLine();
+ m_sharedState->current->bodyLine=outlineParser()->getLine();
}
<PROCESS_T>
//try{
@@ -1925,25 +1944,25 @@ void process_statement() : {QCString s,s1,s2;Token *tok=0;}
<BEGIN_T>
process_statement_part()
<END_T> [ <POSTPONED_T> ]
- // }catch(...){error_skipto(PROCESS_T);}
+ // }catch(...){outlineParser()->error_skipto(PROCESS_T);}
<PROCESS_T> [ identifier() ] <SEMI_T>
- {
- if(s.isEmpty())
- currName=VhdlDocGen::getProcessNumber();
- else
- currName=s;
-
- current->name=currName;
- tempEntry=current.get();
- current->endBodyLine=getLine();
- currP=0;
- if(tok)
- s1=tok->image.data();
- createFunction(currName,VhdlDocGen::PROCESS,s1.data());
- createFlow();
- currName="";
- newEntry();
-}
+ {
+ if(s.isEmpty())
+ m_sharedState->currName=VhdlDocGen::getProcessNumber();
+ else
+ m_sharedState->currName=s;
+
+ m_sharedState->current->name=m_sharedState->currName;
+ m_sharedState->tempEntry=m_sharedState->current;
+ m_sharedState->current->endBodyLine=outlineParser()->getLine();
+ m_sharedState->currP=0;
+ if(tok)
+ s1=tok->image.data();
+ outlineParser()->createFunction(m_sharedState->currName,VhdlDocGen::PROCESS,s1.data());
+ outlineParser()->createFlow();
+ m_sharedState->currName="";
+ outlineParser()->newEntry();
+ }
}
void process_statement_part() : {}
@@ -1981,7 +2000,7 @@ void record_type_definition() : {}
<RECORD_T>
// try{
(element_declaration())+
- // }catch(...){error_skipto(END_T);}
+ // }catch(...){outlineParser()->error_skipto(END_T);}
<END_T>
<RECORD_T> [ name()]
}
@@ -2038,8 +2057,8 @@ QCString secondary_unit_declaration() : {QCString s,s1;}
{
s=identifier() <EQU_T> s1=physical_literal() <SEMI_T>
{
- //printf("\n %s %s [%d]",s.data(),s1.data(),getLine());
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,s1.data(),Public);
+ //printf("\n %s %s [%d]",s.data(),s1.data(),outlineParser()->getLine());
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::UNITS,0,s1.data(),Public);
return s+"="+s1; }
}
@@ -2172,7 +2191,7 @@ void signal_declaration() : { Token* tok=0;QCString s,s1,s2,s3,s4;}
if(tok)
s3.prepend(":=");
s4=s1+s2+s3;
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SIGNAL,0,s4.data(),Public);
}
}
QCString signal_kind() : {}
@@ -2230,14 +2249,14 @@ tok=<STRINGLITERAL> {return tok->image.c_str();}
}
FlowChart::addFlowChart(FlowChart::BEGIN_NO,"BEGIN",0);
}
- // }catch(...){error_skipto(BEGIN_T);}
+ // }catch(...){outlineParser()->error_skipto(BEGIN_T);}
<BEGIN_T>
subprogram_statement_part()
<END_T> [ subprogram_kind() ] [ designator() ] <SEMI_T>
{
- tempEntry->endBodyLine=getLine(END_T);
- createFlow();
- currP=0;
+ m_sharedState->tempEntry->endBodyLine=outlineParser()->getLine(END_T);
+ outlineParser()->createFlow();
+ m_sharedState->currP=0;
}
}
@@ -2246,7 +2265,7 @@ void subprogram_declaration() : {}
LOOKAHEAD(subprogram_instantiation_declaration())
subprogram_instantiation_declaration()
|
-subprogram_specification()subprogram_1(){currP=0;}
+subprogram_specification()subprogram_1(){m_sharedState->currP=0;}
}
void subprogram_1() : {}
@@ -2292,35 +2311,35 @@ void subprogram_specification() : {QCString s;Token *tok=0;Token *t;}
{
<PROCEDURE_T> s=designator()
{
- currP=VhdlDocGen::PROCEDURE;
- createFunction(s.data(),currP,0);
- tempEntry=current.get();
- current->startLine=getLine(PROCEDURE_T);
- current->bodyLine=getLine(PROCEDURE_T);
-
- } [LOOKAHEAD(1) <LPAREN_T> { param_sec=PARAM_SEC; } interface_list() { param_sec=0; }<RPAREN_T> ]
- [LOOKAHEAD(2) gen_interface_list()]
- [ LOOKAHEAD(2) gen_assoc_list()]
- param()
- { newEntry(); }
-|
+ m_sharedState->currP=VhdlDocGen::PROCEDURE;
+ outlineParser()->createFunction(s.data(),m_sharedState->currP,0);
+ m_sharedState->tempEntry=m_sharedState->current;
+ m_sharedState->current->startLine=outlineParser()->getLine(PROCEDURE_T);
+ m_sharedState->current->bodyLine=outlineParser()->getLine(PROCEDURE_T);
+
+ } [LOOKAHEAD(1) <LPAREN_T> { m_sharedState->param_sec=PARAM_SEC; } interface_list() { m_sharedState->param_sec=0; }<RPAREN_T> ]
+ [LOOKAHEAD(2) gen_interface_list()]
+ [ LOOKAHEAD(2) gen_assoc_list()]
+ param()
+ { outlineParser()->newEntry(); }
+ |
[ (tok=<PURE_T> | tok=<IMPURE_T>) ] t=<FUNCTION_T> s=designator()
- {
- currP=VhdlDocGen::FUNCTION;
- if(tok)
- createFunction(tok->image.c_str(),currP,s.data());
- else
- createFunction(0,currP,s.data());
- 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; }]
+ {
+ m_sharedState->currP=VhdlDocGen::FUNCTION;
+ if(tok)
+ outlineParser()->createFunction(tok->image.c_str(),m_sharedState->currP,s.data());
+ else
+ outlineParser()->createFunction(0,m_sharedState->currP,s.data());
+ m_sharedState->tempEntry=m_sharedState->current;
+ m_sharedState->current->startLine=outlineParser()->getLine(FUNCTION_T);
+ m_sharedState->current->bodyLine=outlineParser()->getLine(FUNCTION_T);
+ }
+ [{ m_sharedState->param_sec=PARAM_SEC; } <LPAREN_T> formal_parameter_list() <RPAREN_T> { m_sharedState->param_sec=0; }]
<RETURN_T> s=type_mark()
{
- tempEntry=current.get();
- current->type=s;
- newEntry();
+ m_sharedState->tempEntry=m_sharedState->current;
+ m_sharedState->current->type=s;
+ outlineParser()->newEntry();
}
}
@@ -2332,20 +2351,20 @@ void subprogram_statement_part() : {}
QCString subtype_declaration() : {QCString s,s1;}
{
<SUBTYPE_T> s=identifier() <IS_T> s1=subtype_indication() <SEMI_T>
- {
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public);
+{
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::SUBTYPE,0,s1.data(),Public);
return " subtype "+s+" is "+s1+";";
- }
+}
}
QCString subtype_indication() : {QCString s,s1,s2;}
{
s=name()
[LOOKAHEAD (name()) s1=name()] [LOOKAHEAD(constraint() ) s2=constraint()]
- {return s+" "+s1+" "+s2;}
+ { return s+" "+s1+" "+s2; }
}
-QCString suffix() : {QCString s;}
+QCString suffix() : { QCString s; }
{
LOOKAHEAD(name())
s=name() { return s;}
@@ -2354,18 +2373,18 @@ s=name() { return s;}
| <ALL_T> {return " all ";}
}
-QCString target() : {QCString s;}
+QCString target() : { QCString s; }
{
s=name(){ return s;}
| s=aggregate() { return s;}
}
-QCString term() : {QCString s,s1,s2;}
+QCString term() : { QCString s,s1,s2; }
{
s=factor() ( LOOKAHEAD(2) s1=multiplying_operation() s2=factor(){s+=s1;s+=s2;} )* { return s;}
}
-QCString timeout_clause() : {QCString s;}
+QCString timeout_clause() : { QCString s; }
{
<FOR_T> s=expression()
{
@@ -2396,7 +2415,7 @@ s=scalar_type_definition(){ return s;}
LOOKAHEAD(2)
protected_type_body() { return ""; }
| protected_type_declaration() { return ""; }
-//}catch(...){error_skipto(SEMI_T); return "";}
+//}catch(...){outlineParser()->error_skipto(SEMI_T); return "";}
}
QCString type_mark() : {QCString s; }
@@ -2419,9 +2438,9 @@ QCString unconstraint_array_definition() : {QCString s,s1,s2,s3;}
{
QCStringList ql=QCStringList::split(".",ql1[j]);
QCString it=ql[1];
- if ( parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
+ if ( m_sharedState->parse_sec==0 && Config_getBool(SHOW_INCLUDE_FILES) )
{
- VhdlParser::addVhdlType(it.data(),getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
+ outlineParser()->addVhdlType(it.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,VhdlDocGen::USE,it.data(),"_use_",Public);
}
}
s1="use "+s;
@@ -2444,27 +2463,28 @@ QCString variable_declaration() : {Token *tok=0;Token *t1=0;QCString s,s1,s2;}
[ t1=<VARASSIGN_T> s2=expression() ] <SEMI_T>
{
- int spec;
- if(t1)
- s2.prepend(":=");
- QCString val=" variable "+s+":"+s1+s2+";";
- QCString it=s1;
- if(tok != 0)
- {
- it.prepend(" shared ");
- val.prepend(" shared");
- spec=VhdlDocGen::SHAREDVARIABLE;
- }
- else
- spec=VhdlDocGen::SHAREDVARIABLE;
+ int spec;
+ if(t1)
+ s2.prepend(":=");
+ QCString val=" variable "+s+":"+s1+s2+";";
+ QCString it=s1;
+ if(tok != 0)
+ {
+ it.prepend(" shared ");
+ val.prepend(" shared");
+ spec=VhdlDocGen::SHAREDVARIABLE;
+ }
+ else
+ spec=VhdlDocGen::SHAREDVARIABLE;
- if(t1){
- it+=":=";
- it+=s2;
- }
- addVhdlType(s.data(),getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
- return val;
- }
+ if(t1)
+ {
+ it+=":=";
+ it+=s2;
+ }
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(),Entry::VARIABLE_SEC,spec,0,it.data(),Public);
+ return val;
+}
}
@@ -2502,7 +2522,7 @@ QCString protected_type_body() :{ }
<PROTECTED_T> <BODY_T>
protected_type_body_declarative_part()
- //}catch(...){error_skipto(END_T);}
+ //}catch(...){outlineParser()->error_skipto(END_T);}
<END_T><PROTECTED_T> <BODY_T> [identifier()] {return "";}
}
@@ -2538,7 +2558,7 @@ QCString protected_type_declaration() : { }
<PROTECTED_T>
try{
protected_type_declarative_part()
- }catch(...){error_skipto(END_T);}
+ }catch(...){outlineParser()->error_skipto(END_T);}
<END_T><PROTECTED_T> [ identifier() ] { return "";}
}
@@ -2569,10 +2589,10 @@ QCString context_ref() : {QCString s;}
void context_declaration(): {QCString s,s1;}
{
- <CONTEXT_T> s=identifier() <IS_T> { parse_sec=CONTEXT_SEC; } (s1=libustcont_stats())* <END_T> [ <CONTEXT_T> ][identifier()] <SEMI_T>
+ <CONTEXT_T> s=identifier() <IS_T> { m_sharedState->parse_sec=CONTEXT_SEC; } (s1=libustcont_stats())* <END_T> [ <CONTEXT_T> ][identifier()] <SEMI_T>
{
- parse_sec=0;
- addVhdlType(s.data(),getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public);
+ m_sharedState->parse_sec=0;
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(LIBRARY_T),Entry::VARIABLE_SEC,VhdlDocGen::LIBRARY,"context",s1.data(),Public);
}
}
@@ -2588,7 +2608,7 @@ QCString libustcont_stats(): {QCString s;}
<PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
{
QCString q=" is new "+s1+s2;
- addVhdlType(s.data(),getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(PACKAGE_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"package",q.data(),Public);
}
}
@@ -2596,7 +2616,7 @@ QCString interface_package_declaration(): {QCString s,s1;}
{
<PACKAGE_T> s=identifier() <IS_T> <NEW_T> s1=name() [gen_assoc_list()]
{
- current->name=s;
+ m_sharedState->current->name=s;
return "package "+s+" is new "+s1;
}
}
@@ -2606,7 +2626,7 @@ QCString subprogram_instantiation_declaration():{QCString s,s1,s2;}
<FUNCTION_T> s=identifier() <IS_T> <NEW_T> s1=name() s2=signature() [gen_assoc_list()] <SEMI_T>
{
QCString q= " is new "+s1+s2;
- addVhdlType(s.data(),getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
+ outlineParser()->addVhdlType(s.data(),outlineParser()->getLine(FUNCTION_T),Entry::VARIABLE_SEC,VhdlDocGen::INSTANTIATION,"function ",q.data(),Public);
return q;
}
}
@@ -2622,12 +2642,12 @@ void gen_interface_list() : {}
<GENERIC_T><LPAREN_T>
{
//int u=s_str.iLine;
- parse_sec=GEN_SEC;
+ m_sharedState->parse_sec=GEN_SEC;
}
interface_list()
{
// QCString vo=$3;
- parse_sec=0;
+ m_sharedState->parse_sec=0;
}
<RPAREN_T>
}
@@ -2719,86 +2739,93 @@ QCString pathname_element ():{QCString s,s1;}
QCString pathname_element_list():{QCString s,s1,s2;}
{
- ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
- { return s+s2; }
+ ( s=pathname_element() <DOT_T> ) {s+=".";} (LOOKAHEAD(pathname_element() <DOT_T>) s1=pathname_element() <DOT_T> {s2+=s1;s2+="."; })*
+ { return s+s2; }
}
QCString package_path_name():{QCString s;}
{
- <AT_T> s=name() { return "@"+s; }
+ <AT_T> s=name() { return "@"+s; }
}
void conditional_signal_assignment_wave(): {}
{
LOOKAHEAD(conditional_force_assignment())
- conditional_force_assignment()
- |conditional_waveform_assignment()
+ conditional_force_assignment() |
+ conditional_waveform_assignment()
}
void conditional_waveform_assignment():{}
{
- target() <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element() <WHEN_T> expression() [else_wave_list()] <SEMI_T>
- }
+ target()
+ <LESSTHAN_T> [LOOKAHEAD(1) delay_mechanism() ] waveform_element()
+ <WHEN_T> expression() [else_wave_list()]
+ <SEMI_T>
+}
void else_wave_list(): {}
{
-<ELSE_T> expression() [ <WHEN_T> expression()]
+ <ELSE_T> expression() [ <WHEN_T> expression()]
}
void conditional_force_assignment(): {}
{
- target() <LESSTHAN_T> <FORCE_T> [inout_stat()] expression() <WHEN_T> [expression() else_stat()] <SEMI_T>
+ target()
+ <LESSTHAN_T>
+ <FORCE_T> [inout_stat()] expression()
+ <WHEN_T> [expression() else_stat()]
+ <SEMI_T>
}
void selected_signal_assignment_wave() : {}
{
- LOOKAHEAD(selected_force_assignment() )
- selected_force_assignment()
-| selected_waveform_assignment()
+ LOOKAHEAD(selected_force_assignment() )
+ selected_force_assignment() |
+ selected_waveform_assignment()
}
void selected_variable_assignment():{}
{
- <WITH_T> expression() <SELECT_T> [<Q_T>] select_name() <VARASSIGN_T> sel_var_list() // { $$=""; }
+ <WITH_T> expression()
+ <SELECT_T> [<Q_T>] select_name()
+ <VARASSIGN_T> sel_var_list() // { $$=""; }
}
void select_name(): {}
{
- LOOKAHEAD(aggregate())
- aggregate()
- | name()
-
+ LOOKAHEAD(aggregate())
+ aggregate() |
+ name()
}
void selected_waveform_assignment():{}
{
- <WITH_T> expression() <SELECT_T> [<Q_T>]
- target() <LESSTHAN_T> [delay_mechanism()] sel_wave_list()
+ <WITH_T> expression()
+ <SELECT_T> [<Q_T>] target()
+ <LESSTHAN_T> [delay_mechanism()] sel_wave_list()
}
void selected_force_assignment():{}
{
-<WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
+ <WITH_T> expression() <SELECT_T> [<Q_T>] target() <LESSTHAN_T> <FORCE_T>
[inout_stat()] sel_var_list()
}
void sel_var_list(): {}
{
(expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))(LOOKAHEAD(expression() <WHEN_T>) expression() <WHEN_T> choices() (<COMMA_T>|<SEMI_T>))*
-
}
void sel_wave_list() : {}
{
waveform_element() <WHEN_T> choices() (LOOKAHEAD(1) <COMMA_T> sel_wave_list())* <SEMI_T>
- // | sel_wave_list_1()
}
void inout_stat(): {}
{
- <IN_T>
- | <OUT_T>
+ <IN_T> |
+ <OUT_T>
}
void else_stat(): {}
@@ -2810,68 +2837,64 @@ void else_stat(): {}
QCString interface_subprogram_declaration(): {QCString s;}
{
- s=iproc() { return s;}
+ s=iproc() { return s;}
| s=ifunc() { return s; }
}
QCString iproc(): {QCString s,s1;}
- {
+{
<PROCEDURE_T> s=identifier() s1=param()
{
- current->name=s;
- return "procedure "+s+s1;
+ m_sharedState->current->name=s;
+ return "procedure "+s+s1;
}
- }
+}
QCString ifunc():{QCString s,s1,s2,s3;Token *t=0;Token *t1=0;Token *t2=0;}
{
-
[t=<PURE_T> | t=<IMPURE_T> ] <FUNCTION_T> s=name() s1=param() <RETURN_T> s2=name() [t1=<IS_T> (s3=identifier() | t2=<BOX_T>)]
- {
- QCString q;
- if(t) q=t->image.data();
- if(t2) s3="<>";
- if (!s3.isEmpty())
- {
- s3.prepend(" is ");
- }
- current->name=s;
- if (parse_sec==GEN_SEC)
- {
- QCString ss=q+" function "+s1+" return "+s2+s3;
- int a=getLine(FUNCTION_T);
- int b=getLine(PROCEDURE_T);
-
- if (a>b) b=a;
- addVhdlType(current->name.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,ss.data(),0,Public);
- }
- currP=0;return "";
- }
+ {
+ QCString q;
+ if(t) q=t->image.data();
+ if(t2) s3="<>";
+ if (!s3.isEmpty())
+ {
+ s3.prepend(" is ");
+ }
+ m_sharedState->current->name=s;
+ if (m_sharedState->parse_sec==GEN_SEC)
+ {
+ QCString ss=q+" function "+s1+" return "+s2+s3;
+ int a=outlineParser()->getLine(FUNCTION_T);
+ int b=outlineParser()->getLine(PROCEDURE_T);
- }
+ if (a>b) b=a;
+ outlineParser()->addVhdlType(m_sharedState->current->name.data(),b,Entry::VARIABLE_SEC,VhdlDocGen::GENERIC,ss.data(),0,Public);
+ }
+ m_sharedState->currP=0;return "";
+ }
+}
QCString param(): {QCString s,s1;Token *tok=0;}
{
-[ tok=<PARAMETER_T> ] { param_sec=PARAM_SEC; }
- [ <LPAREN_T> s1=interface_list() <RPAREN_T>]
- {
- if(tok)
- {
- s = tok->image.data();
-
- }
- param_sec=0;
- return s+"("+s1+")";
- }
-
- }
+ [ tok=<PARAMETER_T> ] { m_sharedState->param_sec=PARAM_SEC; }
+ [ <LPAREN_T> s1=interface_list() <RPAREN_T>]
+ {
+ if(tok)
+ {
+ s = tok->image.data();
+ }
+ m_sharedState->param_sec=0;
+ return s+"("+s1+")";
+ }
+}
// -----------------------------------------------------------------
// needed for inline (function/process/procedure) parsing
void parseInline() : {}
{
- process_statement()
- | subprogram_declaration()
- }
+ process_statement() |
+ subprogram_declaration()
+}