Loading src/fortranscanner.l +35 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 %% %% /*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/ Loading Loading @@ -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" { Loading @@ -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(); Loading Loading @@ -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() Loading Loading
src/fortranscanner.l +35 −2 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 %% %% /*-----------------------------------------------------------------------------------*/ /*-----------------------------------------------------------------------------------*/ Loading Loading @@ -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" { Loading @@ -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(); Loading Loading @@ -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() Loading