aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbloodstalker <thabogre@gmail.com>2017-05-23 11:46:49 +0000
committerbloodstalker <thabogre@gmail.com>2017-05-23 11:46:49 +0000
commit886f344694057f864fd211f285d48921348bfe1d (patch)
tree28c4f99e0776e27cf1b05dfa798a96327bd57096
parentnothing (diff)
downloadmutator-886f344694057f864fd211f285d48921348bfe1d.tar.gz
mutator-886f344694057f864fd211f285d48921348bfe1d.zip
added xml report classes, there is a problem with a tinyxml2 assert being triggered on inheritance while the same problem doesnt exist when you dont inherit, raised an issue, until that gets sorted out, the report classes are one-offs, took me 2 days
-rw-r--r--mutator-lvl0.cpp15
-rw-r--r--mutator-lvl0.h65
-rw-r--r--mutator_aux.h2
-rw-r--r--mutator_report.cpp4
-rw-r--r--mutator_report.h4
5 files changed, 77 insertions, 13 deletions
diff --git a/mutator-lvl0.cpp b/mutator-lvl0.cpp
index e5fd494..f73bd6a 100644
--- a/mutator-lvl0.cpp
+++ b/mutator-lvl0.cpp
@@ -89,6 +89,7 @@ using namespace clang::tooling;
/*global vars*/
Devi::XMLReport XMLDocOut;
Devi::JSONReport JSONDocOUT;
+MutagenExtraction ME;
std::vector<SourceLocation> MacroDefSourceLocation;
std::vector<SourceLocation> MacroUndefSourceLocation;
@@ -438,14 +439,14 @@ public:
{
const IfStmt *IS = MR.Nodes.getNodeAs<clang::IfStmt>("mcelse");
-#if 1
if (mutagen)
{
ME.ExtractAncestry(ast_type_traits::DynTypedNode::create(*IS), *MR.Context);
+#if 0
ME.DumpLast();
ME.DumpAll();
- }
#endif
+ }
SourceLocation SL = IS->getLocStart();
CheckSLValidity(SL);
@@ -472,7 +473,6 @@ public:
}
private:
- MutagenExtraction ME;
Rewriter &Rewrite;
};
/**********************************************************************************************************************/
@@ -486,6 +486,11 @@ public:
{
const IfStmt *IS = MR.Nodes.getNodeAs<clang::IfStmt>("mcif");
+ if (mutagen)
+ {
+ ME.ExtractAncestry(ast_type_traits::DynTypedNode::create(*IS), *MR.Context);
+ }
+
SourceLocation SL = IS->getLocStart();
CheckSLValidity(SL);
SL = Devi::SourceLocationHasMacro(SL, Rewrite, "start");
@@ -8386,7 +8391,6 @@ public:
}
private:
- MutagenExtraction ME;
Rewriter TheRewriter;
};
/**********************************************************************************************************************/
@@ -8475,6 +8479,9 @@ int main(int argc, const char **argv)
XMLDocOut.SaveReport();
JSONDocOUT.CloseReport();
+
+ ME.DumpAll();
+ ME.XMLReport();
return RunResult;
}
diff --git a/mutator-lvl0.h b/mutator-lvl0.h
index 0ec92c5..11049c6 100644
--- a/mutator-lvl0.h
+++ b/mutator-lvl0.h
@@ -350,16 +350,64 @@ class MutatorLVL0Tests
};
/**********************************************************************************************************************/
-class mutagenAncestryReport : public Devi::XMLReportBase
+class mutagenAncestryReport// : public Devi::XMLReportBase
{
public:
- mutagenAncestryReport() {}
- ~mutagenAncestryReport() {}
+ mutagenAncestryReport(std::vector<std::vector<std::string>> __dss) : DoomedStrains(__dss)
+ {
+ RootPointer = Doc.NewElement("mutagen:Report");
+ RootPointer->SetAttribute("xmlns:mutator", "http://www.w3.org/2001/XMLSchema");
+ }
+
+ ~mutagenAncestryReport()
+ {
+ Doc.InsertEndChild(RootPointer);
+ }
virtual void AddNode(void)
- {}
+ {
+#if 1
+ XMLElement* MGene = Doc.NewElement("DoomedStrains");
+
+ for (auto &iter : DoomedStrains)
+ {
+ XMLElement* NodeDoomedStrain = Doc.NewElement("DoomedStrain");
+
+ for (auto &iterer : iter)
+ {
+ XMLElement* Child = Doc.NewElement("Strain");
+ Child->SetText(iterer.c_str());
+ NodeDoomedStrain->InsertEndChild(Child);
+ }
+
+ MGene->InsertEndChild(NodeDoomedStrain);
+ }
+
+ RootPointer->InsertEndChild(MGene);
+#endif
+ }
+
+ void CreateReport()
+ {
+ Doc.InsertFirstChild(RootPointer);
+ }
+
+ void SaveReport(const char* __filename)
+ {
+ Doc.InsertEndChild(RootPointer);
+
+ XMLError XMLErrorResult = Doc.SaveFile(__filename);
+
+ if (XMLErrorResult != XML_SUCCESS)
+ {
+ std::cerr << "could not write xml misra report.\n";
+ }
+ }
private:
+ std::vector<std::vector<std::string>> DoomedStrains;
+ XMLElement* RootPointer;
+ XMLDocument Doc;
};
/**********************************************************************************************************************/
#define EXTRACT_MUTAGEN
@@ -389,6 +437,7 @@ class MutagenExtraction
}
MutantStrainsAncestry.push_back(LastStrain);
+ LastStrain.clear();
}
void DumpLast(void)
@@ -412,6 +461,14 @@ class MutagenExtraction
}
}
+ void XMLReport(void)
+ {
+ mutagenAncestryReport MAR(MutantStrainsAncestry);
+ MAR.CreateReport();
+ MAR.AddNode();
+ MAR.SaveReport("m0.xml");
+ }
+
private:
std::vector<std::string> LastStrain;
std::vector<std::vector<std::string>> MutantStrainsAncestry;
diff --git a/mutator_aux.h b/mutator_aux.h
index 52be1b0..c6baa8e 100644
--- a/mutator_aux.h
+++ b/mutator_aux.h
@@ -46,7 +46,7 @@ enum class Scope {NoValue, TU, Block};
enum class FunctionDeclKind {NoValue, Definition, Declaration};
/*********************************************************************************************************************/
-SourceLocation SourceLocationHasMacro [[deprecated("doesnt work")]] (SourceLocation SL, Rewriter &Rewrite, std::string Kind);
+SourceLocation SourceLocationHasMacro(SourceLocation SL, Rewriter &Rewrite, std::string Kind);
SourceLocation SourceLocationHasMacro(SourceLocation __sl, Rewriter &__rewrite);
/*********************************************************************************************************************/
diff --git a/mutator_report.cpp b/mutator_report.cpp
index c989d32..6086880 100644
--- a/mutator_report.cpp
+++ b/mutator_report.cpp
@@ -55,11 +55,11 @@ namespace Devi {
Doc.InsertFirstChild(RootPointer);
}
- void XMLReportBase::SaveReport()
+ void XMLReportBase::SaveReport(const char* __filename)
{
Doc.InsertEndChild(RootPointer);
- XMLError XMLErrorResult = Doc.SaveFile("./test/misrareport.xml");
+ XMLError XMLErrorResult = Doc.SaveFile(__filename);
if (XMLErrorResult != XML_SUCCESS)
{
diff --git a/mutator_report.h b/mutator_report.h
index e6b1936..ee8041b 100644
--- a/mutator_report.h
+++ b/mutator_report.h
@@ -47,9 +47,9 @@ namespace Devi {
virtual void AddNode(void) = 0;
- void SaveReport(void);
+ void SaveReport(const char*);
- private:
+ protected:
XMLDocument Doc;
XMLElement* RootPointer;
};