Reorganized code for better readability.

This commit is contained in:
Bhargava Shastry 2021-01-26 16:11:18 +01:00
parent f5e0faaa37
commit be733d5f61
2 changed files with 16 additions and 31 deletions

View File

@ -64,7 +64,6 @@ string TestCaseGenerator::visit()
<< "\n"; << "\n";
m_numSourceUnits++; m_numSourceUnits++;
os << visitChildren(); os << visitChildren();
generator<SourceUnitGenerator>()->reset();
} }
return os.str(); return os.str();
} }
@ -78,15 +77,7 @@ void SourceUnitGenerator::setup()
string SourceUnitGenerator::visit() string SourceUnitGenerator::visit()
{ {
string sourceUnit = visitChildren(); return visitChildren();
reset();
return sourceUnit;
}
void SourceUnitGenerator::reset()
{
for (auto& g: generators)
std::visit(ResetVisitor{}, g);
} }
string PragmaGenerator::visit() string PragmaGenerator::visit()
@ -132,7 +123,7 @@ string SolidityGenerator::generateTestProgram()
createGenerators(); createGenerators();
for (auto& g: m_generators) for (auto& g: m_generators)
std::visit(AddDependenciesVisitor{}, g); std::visit(AddDependenciesVisitor{}, g);
string program = generator<TestCaseGenerator>()->visit(); string program = generator<TestCaseGenerator>()->generate();
destroyGenerators(); destroyGenerators();
return program; return program;
} }

View File

@ -82,16 +82,7 @@ struct GeneratorVisitor
template <typename T> template <typename T>
std::string operator()(T const& _t) std::string operator()(T const& _t)
{ {
return _t->visit(); return _t->generate();
}
};
struct ResetVisitor
{
template <typename T>
void operator()(T const& _t)
{
_t->reset();
} }
}; };
@ -106,9 +97,19 @@ struct GeneratorBase
return std::get<std::shared_ptr<T>>(g); return std::get<std::shared_ptr<T>>(g);
solAssert(false, ""); solAssert(false, "");
} }
/// Returns test fragment created by this generator.
std::string generate()
{
std::string generatedCode = visit();
endVisit();
return generatedCode;
}
/// Virtual visitor that returns a string representing /// Virtual visitor that returns a string representing
/// the generation of the Solidity grammar element. /// the generation of the Solidity grammar element.
virtual std::string visit() = 0; virtual std::string visit() = 0;
/// Method called after visiting this generator. Used
/// for clearing state if necessary.
virtual void endVisit() {}
/// Visitor that invokes child grammar elements of /// Visitor that invokes child grammar elements of
/// this grammar element returning their string /// this grammar element returning their string
/// representations. /// representations.
@ -119,15 +120,12 @@ struct GeneratorBase
{ {
generators += _generators; generators += _generators;
} }
/// Virtual reset method used to reset test state or
/// a portion of it if necessary e.g., remove scoped
/// variables.
virtual void reset() = 0;
/// Virtual method to obtain string name of generator. /// Virtual method to obtain string name of generator.
virtual std::string name() = 0; virtual std::string name() = 0;
/// Virtual method to add generators that this grammar /// Virtual method to add generators that this grammar
/// element depends on. /// element depends on. If not overridden, there are
virtual void setup() = 0; /// no dependencies.
virtual void setup() {}
virtual ~GeneratorBase() virtual ~GeneratorBase()
{ {
generators.clear(); generators.clear();
@ -148,7 +146,6 @@ public:
m_numSourceUnits(0) m_numSourceUnits(0)
{} {}
void setup() override; void setup() override;
void reset() override {}
std::string visit() override; std::string visit() override;
std::string name() override std::string name() override
{ {
@ -175,7 +172,6 @@ public:
{} {}
void setup() override; void setup() override;
std::string visit() override; std::string visit() override;
void reset() override;
std::string name() override { return "Source unit generator"; } std::string name() override { return "Source unit generator"; }
}; };
@ -185,8 +181,6 @@ public:
PragmaGenerator(std::shared_ptr<SolidityGenerator> _mutator): PragmaGenerator(std::shared_ptr<SolidityGenerator> _mutator):
GeneratorBase(std::move(_mutator)) GeneratorBase(std::move(_mutator))
{} {}
void setup() override {}
void reset() override {}
std::string visit() override; std::string visit() override;
std::string name() override { return "Pragma generator"; } std::string name() override { return "Pragma generator"; }
}; };