Skip to content

Commit

Permalink
Make commentscan.l reentrant
Browse files Browse the repository at this point in the history
  • Loading branch information
doxygen committed Dec 30, 2019
1 parent abf1e46 commit e55c224
Show file tree
Hide file tree
Showing 11 changed files with 1,822 additions and 1,639 deletions.
119 changes: 58 additions & 61 deletions src/commentscan.h
Expand Up @@ -16,74 +16,71 @@
#ifndef COMMENTSCAN_H
#define COMMENTSCAN_H

#include <memory>
#include "types.h"

class Entry;
class OutlineParserInterface;

/** @file
* @brief Interface for the comment block parser */
* @brief Interface for the comment block scanner */

/** Invokes the comment block parser with the request to preprocess a
* single comment block.
* @param[in] comment A string representing the actual comment block.
* Note that leading *'s are already stripped from the comment block.
* @param[in] fileName The name of the file in which the comment is found.
* Mainly used for producing warnings.
* @param[in] lineNr The line number at which the comment block was found.
* @returns The prepocessed comment block
*/
QCString preprocessCommentBlock(const QCString &comment,
const QCString &fileName,
int lineNr);

/** Invokes the comment block parser with the request to parse a
* single comment block.
* @param[in] parser The language parse that invoked this function.
* The comment block parse may invoke
* ParserInterface::parsePrototype() in order to parse
* the argument of a @@fn command.
* @param[in] curEntry The Entry to which the comment block belongs.
* Any information (like documentation) that is found in
* the comment block will be stored in this entry.
* @param[in] comment A string representing the actual comment block.
* Note that leading *'s are already stripped from the comment block.
* @param[in] fileName The name of the file in which the comment is found.
* Mainly used for producing warnings.
* @param[in,out] lineNr The line number at which the comment block was found.
* When the function returns it will be set to the last line parsed.
* @param[in] isBrief TRUE iff this comment block represents a brief description.
* @param[in] isJavadocStyle TRUE iff this comment block is in "Javadoc" style.
* This means that it starts as a brief description until the end of
* the sentences is found and then proceeds as a detailed description.
* @param[in] isInbody TRUE iff this comment block is located in the body of
* a function.
* @param[in,out] prot The protection level in which this comment block was
* found. Commands in the comment block may override this.
* @param[in,out] position The character position within \a comment where the
* comment block starts. Typically used in case the comment block
* contains multiple structural commands.
* @param[out] newEntryNeeded Boolean that is TRUE if the comment block parser
* finds that a the comment block finishes the entry and a new one
* needs to be started.
* @returns TRUE if the comment requires further processing. The
* parameter \a newEntryNeeded will typically be true in this case and
* \a position will indicate the offset inside the \a comment string
* where to proceed parsing. FALSE indicates no further processing is
* needed.
*/
bool parseCommentBlock(OutlineParserInterface *parser,
Entry *curEntry,
const QCString &comment,
const QCString &fileName,
int &lineNr,
bool isBrief,
bool isJavadocStyle,
bool isInbody,
Protection &prot,
int &position,
bool &newEntryNeeded
);
class CommentScanner
{
public:
CommentScanner();
~CommentScanner();

/** Invokes the comment block parser with the request to parse a
* single comment block.
* @param[in] parser The language parse that invoked this function.
* The comment block parse may invoke
* ParserInterface::parsePrototype() in order to parse
* the argument of a @@fn command.
* @param[in] curEntry The Entry to which the comment block belongs.
* Any information (like documentation) that is found in
* the comment block will be stored in this entry.
* @param[in] comment A string representing the actual comment block.
* Note that leading *'s are already stripped from the comment block.
* @param[in] fileName The name of the file in which the comment is found.
* Mainly used for producing warnings.
* @param[in,out] lineNr The line number at which the comment block was found.
* When the function returns it will be set to the last line parsed.
* @param[in] isBrief TRUE iff this comment block represents a brief description.
* @param[in] isJavadocStyle TRUE iff this comment block is in "Javadoc" style.
* This means that it starts as a brief description until the end of
* the sentences is found and then proceeds as a detailed description.
* @param[in] isInbody TRUE iff this comment block is located in the body of
* a function.
* @param[in,out] prot The protection level in which this comment block was
* found. Commands in the comment block may override this.
* @param[in,out] position The character position within \a comment where the
* comment block starts. Typically used in case the comment block
* contains multiple structural commands.
* @param[out] newEntryNeeded Boolean that is TRUE if the comment block parser
* finds that a the comment block finishes the entry and a new one
* needs to be started.
* @returns TRUE if the comment requires further processing. The
* parameter \a newEntryNeeded will typically be true in this case and
* \a position will indicate the offset inside the \a comment string
* where to proceed parsing. FALSE indicates no further processing is
* needed.
*/
bool parseCommentBlock(OutlineParserInterface *parser,
Entry *curEntry,
const QCString &comment,
const QCString &fileName,
int &lineNr,
bool isBrief,
bool isJavadocStyle,
bool isInbody,
Protection &prot,
int &position,
bool &newEntryNeeded
);
private:
struct Private;
std::unique_ptr<Private> p;
};

#endif

0 comments on commit e55c224

Please sign in to comment.