diff options
| author | bloodstalker <thabogre@gmail.com> | 2017-01-05 09:33:41 +0000 | 
|---|---|---|
| committer | bloodstalker <thabogre@gmail.com> | 2017-01-05 09:33:41 +0000 | 
| commit | cc4aa044d738dd497d34736ba8a6146598840587 (patch) | |
| tree | 8c1ffaaac0551265fbfb5e5144e95a49a52c071a | |
| parent | updated interface with the new overlaod (diff) | |
| download | mutator-cc4aa044d738dd497d34736ba8a6146598840587.tar.gz mutator-cc4aa044d738dd497d34736ba8a6146598840587.zip | |
added 19.1
| -rw-r--r-- | mutator-lvl0.cpp | 133 | 
1 files changed, 128 insertions, 5 deletions
| diff --git a/mutator-lvl0.cpp b/mutator-lvl0.cpp index 443be9f..958ea44 100644 --- a/mutator-lvl0.cpp +++ b/mutator-lvl0.cpp @@ -7,9 +7,10 @@  #include "mutator_aux.h"  #include "tinyxml2/tinyxml2.h"  /*standard headers*/ -#include <string> -#include <iostream>  #include <cassert> +#include <fstream> +#include <iostream> +#include <string>  #include <vector>  /*Clang headers*/  #include "clang/AST/AST.h" @@ -5436,6 +5437,125 @@ private:    const SourceManager &SM;  };  /**********************************************************************************************************************/ +class IsThereJunkPreInclusion +{ +public: +  IsThereJunkPreInclusion() {} + +  void Check(std::vector<std::string> SourcePathList) +  { +    bool HaveWeMatchedInclusionDirYet = false; +    bool HaveWeMatchIllegal191Yet = false; + +    for (auto &iter : SourcePathList) +    { +      //std::cout << iter << std::endl; +      std::ifstream InputFile(iter); + +      HaveWeMatchIllegal191Yet = false; +      HaveWeMatchedInclusionDirYet = false; + +      for (std::string line; getline(InputFile, line);) +      { +        //std::cout << iter << ":" << line << ":" << HaveWeMatchedInclusionDirYet << " " << HaveWeMatchIllegal191Yet << std::endl; + +        if (line.empty()) +        { +          continue; +        } + +        if (line.front() == '#') +        { +          size_t st = line.find("#include", 0U); + +          if (st == 0U) +          { +            /*we've found a header include*/ +            HaveWeMatchedInclusionDirYet = true; + +            if (HaveWeMatchIllegal191Yet) +            { +              /*print diag out*/ +              std::cout << "19.1" << ":" << "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments" << ":" << iter << std::endl; + +              XMLDocOut.XMLAddNode(iter, "19.1", "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments : "); +              JSONDocOUT.JSONAddElement(iter, "19.1", "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments : "); +              break; +            } +            else +            { +              break; +            } +          } + +          continue; +        } + +        if (line.front() == '/') +        { +          /*has to be a comment*/ +          continue; +        } + +        if (line.front() == '\n' || line.front() == '\t' || line.front() == ' ' || line.front() == '\r') +        { +          HaveWeMatchIllegal191Yet = false; + +          for (auto &iterchar : line) +          { +            if (iterchar == '\n' || iterchar == '\t' || iterchar == ' ' || line.front() == '\r') +            { +              continue; +            } + +            if (iterchar == '/') +            { +              break; +            } + +            if (iterchar == '#') +            { +              size_t st = line.find("#include", 0U); + +              if (st == 0U) +              { +                /*we've found a header include*/ +                HaveWeMatchedInclusionDirYet = true; + +                if (HaveWeMatchIllegal191Yet) +                { +                  /*print diag out*/ +                  std::cout << "19.1" << ":" << "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments" << ":" << iter << std::endl; + +                  XMLDocOut.XMLAddNode(iter, "19.1", "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments : "); +                  JSONDocOUT.JSONAddElement(iter, "19.1", "Inclusion directives should only be preceeded by other inclusion directives, pp directives or comments : "); +                  break; +                } +                else +                { +                  break; +                } + +                continue; +              } +            } + +            HaveWeMatchIllegal191Yet = true; +          } + +          continue; +        } + +        HaveWeMatchIllegal191Yet = true; +      } + +      InputFile.close(); +    } +  } + +private: + +};  /**********************************************************************************************************************/  /**********************************************************************************************************************/  /**********************************************************************************************************************/ @@ -5756,9 +5876,8 @@ int main(int argc, const char **argv)  {    /*@DEVI-we should parse the common options before parsing the custom options.*/    CommonOptionsParser op(argc, argv, MutatorLVL0Cat); -#if 0 -  cl::ParseCommandLineOptions(argc, argv); -#endif + +  const std::vector<std::string> &SourcePathList = op.getSourcePathList();    ClangTool Tool(op.getCompilations(), op.getSourcePathList()); @@ -5766,6 +5885,10 @@ int main(int argc, const char **argv)    JSONDocOUT.JSONCreateReport(); +  IsThereJunkPreInclusion ITJPIInstance; + +  ITJPIInstance.Check(SourcePathList); +    int RunResult = Tool.run(newFrontendActionFactory<MyFrontendAction>().get());    XMLDocOut.SaveReport(); | 
