Commit f138b8f3 authored by Oleg Batrashev's avatar Oleg Batrashev

Prototype scan for function, does not yet catch parameter types.

parent 3e8a7fbd
...@@ -187,6 +187,7 @@ static InterfaceType ifType = IF_NONE; ...@@ -187,6 +187,7 @@ static InterfaceType ifType = IF_NONE;
static bool functionLine = FALSE; static bool functionLine = FALSE;
static char stringStartSymbol; // single or double quote static char stringStartSymbol; // single or double quote
static bool parsingPrototype = FALSE; // see parsePrototype()
//! Accumulated modifiers of current statement, eg variable declaration. //! Accumulated modifiers of current statement, eg variable declaration.
static SymbolModifiers currentModifiers; static SymbolModifiers currentModifiers;
...@@ -307,6 +308,12 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA ...@@ -307,6 +308,12 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA
%x EndDoc %x EndDoc
%x BlockData %x BlockData
/** prototype parsing */
%x Prototype
%x PrototypeSubprog
%x PrototypeArgs
%% %%
/*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/
...@@ -1099,6 +1106,23 @@ private { ...@@ -1099,6 +1106,23 @@ private {
yy_pop_state(); yy_pop_state();
} }
/*-----Prototype parsing -------------------------------------------------------------------------*/
<Prototype>{BS}{SUBPROG}{BS_} {
BEGIN(PrototypeSubprog);
}
<PrototypeSubprog>{ID}{BS} { current->name = yytext;
current->name.stripWhiteSpace();
BEGIN(PrototypeArgs);
}
<PrototypeArgs>{
"("|")"|","|{BS_} { current->args += yytext; }
{ID} { current->args += yytext;
Argument *a = new Argument;
a->name = yytext;
current->argList->append(a);
}
}
/*------------------------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------------------------*/
<*>"\n" { <*>"\n" {
...@@ -1111,7 +1135,10 @@ private { ...@@ -1111,7 +1135,10 @@ private {
/*---- error: EOF in wrong state --------------------------------------------------------------------*/ /*---- error: EOF in wrong state --------------------------------------------------------------------*/
<*><<EOF>> { <*><<EOF>> {
if ( include_stack_ptr <= 0 ) { if (parsingPrototype) {
yyterminate();
} else if ( include_stack_ptr <= 0 ) {
if (YY_START!=INITIAL && YY_START!=Start) { if (YY_START!=INITIAL && YY_START!=Start) {
DBG_CTX((stderr,"==== Error: EOF reached in wrong state (end missing)")); DBG_CTX((stderr,"==== Error: EOF reached in wrong state (end missing)"));
scanner_abort(); scanner_abort();
...@@ -2304,7 +2331,13 @@ void FortranLanguageScanner::resetCodeParserState() ...@@ -2304,7 +2331,13 @@ void FortranLanguageScanner::resetCodeParserState()
void FortranLanguageScanner::parsePrototype(const char *text) void FortranLanguageScanner::parsePrototype(const char *text)
{ {
current->name = QCString(text).lower(); QCString buffer = QCString(text).lower();
pushBuffer(buffer);
parsingPrototype = TRUE;
BEGIN(Prototype);
fscanYYlex();
parsingPrototype = FALSE;
popBuffer();
} }
static void scanner_abort() static void scanner_abort()
......
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