mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Enable abi pragmas and fix formatting.
This commit is contained in:
parent
3669137297
commit
e90248c136
@ -133,15 +133,12 @@ string SourceUnitGenerator::visit()
|
||||
|
||||
string PragmaGenerator::visit()
|
||||
{
|
||||
static constexpr const char* preamble = R"(
|
||||
pragma solidity >= 0.0.0;
|
||||
pragma experimental SMTChecker;
|
||||
)";
|
||||
// Choose equally at random from coder v1 and v2
|
||||
string abiPragma = "pragma abicoder v" +
|
||||
to_string(uRandDist->distributionOneToN(2)) +
|
||||
";\n";
|
||||
return preamble + abiPragma;
|
||||
set<string> pragmas = uRandDist->subset(s_genericPragmas);
|
||||
// Choose either abicoder v1 or v2 but not both.
|
||||
pragmas.insert(s_abiPragmas[uRandDist->distributionOneToN(s_abiPragmas.size()) - 1]);
|
||||
ostringstream pragmaString;
|
||||
copy(pragmas.begin(), pragmas.end(), ostream_iterator<string>(pragmaString, "\n"));
|
||||
return pragmaString.str() + "\n";
|
||||
}
|
||||
|
||||
string ImportGenerator::visit()
|
||||
@ -160,7 +157,7 @@ string ImportGenerator::visit()
|
||||
os << "import "
|
||||
<< "\""
|
||||
<< state->randomPath()
|
||||
<< "\";";
|
||||
<< "\";\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -169,7 +166,7 @@ string ImportGenerator::visit()
|
||||
os << "import "
|
||||
<< "\""
|
||||
<< state->randomNonCurrentPath()
|
||||
<< "\";";
|
||||
<< "\";\n";
|
||||
}
|
||||
return os.str();
|
||||
}
|
||||
|
@ -77,6 +77,20 @@ struct UniformRandomDistribution
|
||||
solAssert(_n > 0, "");
|
||||
return distributionOneToN(_n) == 1;
|
||||
}
|
||||
/// @returns a subset whose elements are of type @param T
|
||||
/// created from the set @param _container using
|
||||
/// uniform selection.
|
||||
template <typename T>
|
||||
std::set<T> subset(std::set<T> const& _container)
|
||||
{
|
||||
size_t s = _container.size();
|
||||
solAssert(s > 1, "");
|
||||
std::set<T> subContainer;
|
||||
for (auto const& item: _container)
|
||||
if (probable(s))
|
||||
subContainer.insert(item);
|
||||
return subContainer;
|
||||
}
|
||||
std::unique_ptr<RandomEngine> randomEngine;
|
||||
};
|
||||
|
||||
@ -231,6 +245,15 @@ public:
|
||||
{}
|
||||
std::string visit() override;
|
||||
std::string name() override { return "Pragma generator"; }
|
||||
private:
|
||||
std::set<std::string> const s_genericPragmas = {
|
||||
R"(pragma solidity >= 0.0.0;)",
|
||||
R"(pragma experimental SMTChecker;)",
|
||||
};
|
||||
std::vector<std::string> const s_abiPragmas = {
|
||||
R"(pragma abicoder v1;)",
|
||||
R"(pragma abicoder v2;)"
|
||||
};
|
||||
};
|
||||
|
||||
class ImportGenerator: public GeneratorBase
|
||||
|
Loading…
Reference in New Issue
Block a user