mirror of
https://github.com/nasa/trick.git
synced 2024-12-22 14:32:24 +00:00
4dad11bf45
Moved field offset calculations for inherited classes to when the inherited classes are processed. This removes the need to have to remember if fields were inherited or not, the offset already reflects the correct offset. refs #218
106 lines
3.9 KiB
C++
106 lines
3.9 KiB
C++
|
|
#ifndef COMMENTSAVER_HH
|
|
#define COMMENTSAVER_HH
|
|
|
|
#include <map>
|
|
#include <set>
|
|
#include <vector>
|
|
|
|
#include "clang/Lex/Preprocessor.h"
|
|
#include "clang/Frontend/CompilerInstance.h"
|
|
|
|
#include "HeaderSearchDirs.hh"
|
|
|
|
/**
|
|
|
|
This class is passed to the clang preprocessor as a comment handler. The class
|
|
saves the source locations of each comment found. Comments may be retrived by
|
|
file name and line number.
|
|
|
|
@author Alexander S. Lin
|
|
|
|
@date July 2012
|
|
|
|
*/
|
|
|
|
class CommentSaver : public clang::CommentHandler {
|
|
public:
|
|
CommentSaver( clang::CompilerInstance & in_ci , HeaderSearchDirs & in_hsd ) ;
|
|
|
|
/** Called by the PreProcessor when a comment is parsed. HandleComment saves
|
|
the comment indexed by file name and line number in the comment map
|
|
@param PP = the preprocessor (unused)
|
|
@param source_range = the bounding line and column of the comment
|
|
@param always false
|
|
*/
|
|
virtual bool HandleComment(clang::Preprocessor &PP, clang::SourceRange source_range) ;
|
|
|
|
/** Retrieves comments out of the comment map. Returns the full comment string
|
|
@param sr = clang::SourceRange type marking comment location.
|
|
@return std::string the last comment starting on that line, or empty string if none found
|
|
*/
|
|
std::string getComment( clang::SourceRange sr ) ;
|
|
|
|
/** Retrieves comments out of the comment map. Returns the full comment string
|
|
@param file_name = File name to search
|
|
@param line_no = line number to search
|
|
@return std::string the last comment starting on that line, or empty string if none found
|
|
*/
|
|
std::string getComment( std::string file_name , unsigned int line_no ) ;
|
|
|
|
/** Searches all comments found within the file_name parameter for a Trick header comment
|
|
@param file_name = File name to search
|
|
@return std::string a comment that matches the Trick header comment format
|
|
*/
|
|
std::string getTrickHeaderComment( std::string file_name ) ;
|
|
|
|
/** sets the flags for hasICGNo and hasICGNoComment
|
|
@param file_name = File name to search
|
|
*/
|
|
void getICGField( std::string file_name ) ;
|
|
|
|
/** Returns if the header has a Trick header comment
|
|
@param file_name = File name to search
|
|
@return true = if header comment found
|
|
*/
|
|
bool hasTrickHeader(std::string file_name ) ;
|
|
|
|
/** Searches the Trick header comment for the ICG:(No) entry.
|
|
@param file_name = File name to search
|
|
@return true = ICG:(No) was found.
|
|
*/
|
|
bool hasICGNo( std::string file_name ) ;
|
|
|
|
/** Searches the Trick header comment for the ICG:(NoComment) entry.
|
|
@param file_name = File name to search
|
|
@return true = ICG:(NoComment) was found.
|
|
*/
|
|
bool hasICGNoComment( std::string file_name ) ;
|
|
|
|
/** Searches the Trick header comment for the ICG_EXCLUDE_TYPES field
|
|
@param file_name = File name to search
|
|
@return set of strings that list the type names to ignore.
|
|
*/
|
|
std::set< std::string > getIgnoreTypes( std::string file_name ) ;
|
|
|
|
private:
|
|
/** The compiler's source manager. Holds file/line info for everything. */
|
|
clang::CompilerInstance & ci ;
|
|
|
|
HeaderSearchDirs & hsd ;
|
|
|
|
/** Map of file name to ICG: (No) found */
|
|
std::map < std::string , bool > icg_no_found ;
|
|
|
|
/** Map of file name to ICG: (NoComment) found */
|
|
std::map < std::string , bool > icg_no_comment_found ;
|
|
|
|
/** All comments source locations indexed by file name then line number */
|
|
std::map < std::string , std::map < unsigned int , clang::SourceRange > > comment_map ;
|
|
|
|
/** Store Trick header comments so we don't have to look them up over and over */
|
|
std::map < std::string , std::string > trick_header_comments ;
|
|
} ;
|
|
|
|
#endif
|