Loading src/fortranscanner.l +37 −2 Original line number Diff line number Diff line Loading @@ -187,6 +187,7 @@ static InterfaceType ifType = IF_NONE; static bool functionLine = FALSE; static char stringStartSymbol; // single or double quote static bool parsingPrototype = FALSE; // see parsePrototype() //! Accumulated modifiers of current statement, eg variable declaration. static SymbolModifiers currentModifiers; Loading Loading @@ -265,6 +266,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} CONTAINS CONTAINS PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)? SCOPENAME ({ID}{BS}"::"{BS})* %option noyywrap %option stack Loading Loading @@ -307,6 +309,12 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA %x EndDoc %x BlockData /** prototype parsing */ %x Prototype %x PrototypeSubprog %x PrototypeArgs %% /*-----------------------------------------------------------------------------------*/ Loading Loading @@ -1099,6 +1107,24 @@ private { yy_pop_state(); } /*-----Prototype parsing -------------------------------------------------------------------------*/ <Prototype>{BS}{SUBPROG}{BS_} { BEGIN(PrototypeSubprog); } <Prototype,PrototypeSubprog>{BS}{SCOPENAME}?{BS}{ID} { current->name = QCString(yytext).lower(); current->name.stripWhiteSpace(); BEGIN(PrototypeArgs); } <PrototypeArgs>{ "("|")"|","|{BS_} { current->args += yytext; } {ID} { current->args += yytext; Argument *a = new Argument; a->name = QCString(yytext).lower(); current->argList->append(a); } } /*------------------------------------------------------------------------------------------------*/ <*>"\n" { Loading @@ -1111,7 +1137,10 @@ private { /*---- error: EOF in wrong state --------------------------------------------------------------------*/ <*><<EOF>> { if ( include_stack_ptr <= 0 ) { if (parsingPrototype) { yyterminate(); } else if ( include_stack_ptr <= 0 ) { if (YY_START!=INITIAL && YY_START!=Start) { DBG_CTX((stderr,"==== Error: EOF reached in wrong state (end missing)")); scanner_abort(); Loading Loading @@ -2304,7 +2333,13 @@ void FortranLanguageScanner::resetCodeParserState() void FortranLanguageScanner::parsePrototype(const char *text) { current->name = QCString(text).lower(); QCString buffer = QCString(text); pushBuffer(buffer); parsingPrototype = TRUE; BEGIN(Prototype); fscanYYlex(); parsingPrototype = FALSE; popBuffer(); } static void scanner_abort() Loading Loading
src/fortranscanner.l +37 −2 Original line number Diff line number Diff line Loading @@ -187,6 +187,7 @@ static InterfaceType ifType = IF_NONE; static bool functionLine = FALSE; static char stringStartSymbol; // single or double quote static bool parsingPrototype = FALSE; // see parsePrototype() //! Accumulated modifiers of current statement, eg variable declaration. static SymbolModifiers currentModifiers; Loading Loading @@ -265,6 +266,7 @@ ATTR_STMT {ATTR_SPEC}|DIMENSION|{ACCESS_SPEC} CONTAINS CONTAINS PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTAL)? SCOPENAME ({ID}{BS}"::"{BS})* %option noyywrap %option stack Loading Loading @@ -307,6 +309,12 @@ PREFIX (RECURSIVE{BS_}|PURE{BS_}|ELEMENTAL{BS_}){0,2}(RECURSIVE|PURE|ELEMENTA %x EndDoc %x BlockData /** prototype parsing */ %x Prototype %x PrototypeSubprog %x PrototypeArgs %% /*-----------------------------------------------------------------------------------*/ Loading Loading @@ -1099,6 +1107,24 @@ private { yy_pop_state(); } /*-----Prototype parsing -------------------------------------------------------------------------*/ <Prototype>{BS}{SUBPROG}{BS_} { BEGIN(PrototypeSubprog); } <Prototype,PrototypeSubprog>{BS}{SCOPENAME}?{BS}{ID} { current->name = QCString(yytext).lower(); current->name.stripWhiteSpace(); BEGIN(PrototypeArgs); } <PrototypeArgs>{ "("|")"|","|{BS_} { current->args += yytext; } {ID} { current->args += yytext; Argument *a = new Argument; a->name = QCString(yytext).lower(); current->argList->append(a); } } /*------------------------------------------------------------------------------------------------*/ <*>"\n" { Loading @@ -1111,7 +1137,10 @@ private { /*---- error: EOF in wrong state --------------------------------------------------------------------*/ <*><<EOF>> { if ( include_stack_ptr <= 0 ) { if (parsingPrototype) { yyterminate(); } else if ( include_stack_ptr <= 0 ) { if (YY_START!=INITIAL && YY_START!=Start) { DBG_CTX((stderr,"==== Error: EOF reached in wrong state (end missing)")); scanner_abort(); Loading Loading @@ -2304,7 +2333,13 @@ void FortranLanguageScanner::resetCodeParserState() void FortranLanguageScanner::parsePrototype(const char *text) { current->name = QCString(text).lower(); QCString buffer = QCString(text); pushBuffer(buffer); parsingPrototype = TRUE; BEGIN(Prototype); fscanYYlex(); parsingPrototype = FALSE; popBuffer(); } static void scanner_abort() Loading