mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use nonlinear clauses instead of inlining for base constructors
This commit is contained in:
@@ -131,9 +131,6 @@ bool SMTEncoder::visit(FunctionDefinition const& _function)
|
||||
{
|
||||
m_modifierDepthStack.push_back(-1);
|
||||
|
||||
if (_function.isConstructor())
|
||||
inlineConstructorHierarchy(dynamic_cast<ContractDefinition const&>(*_function.scope()));
|
||||
|
||||
initializeLocalVariables(_function);
|
||||
|
||||
_function.parameterList().accept(*this);
|
||||
@@ -2563,6 +2560,37 @@ SourceUnit const* SMTEncoder::sourceUnitContaining(Scopable const& _scopable)
|
||||
solAssert(false, "");
|
||||
}
|
||||
|
||||
map<ContractDefinition const*, vector<ASTPointer<frontend::Expression>>> SMTEncoder::baseArguments(ContractDefinition const& _contract)
|
||||
{
|
||||
map<ContractDefinition const*, vector<ASTPointer<Expression>>> baseArgs;
|
||||
|
||||
for (auto contract: _contract.annotation().linearizedBaseContracts)
|
||||
{
|
||||
/// Collect base contracts and potential constructor arguments.
|
||||
for (auto specifier: contract->baseContracts())
|
||||
{
|
||||
solAssert(specifier, "");
|
||||
auto const& base = dynamic_cast<ContractDefinition const&>(*specifier->name().annotation().referencedDeclaration);
|
||||
if (auto args = specifier->arguments())
|
||||
baseArgs[&base] = *args;
|
||||
}
|
||||
/// Collect base constructor arguments given as constructor modifiers.
|
||||
if (auto constructor = contract->constructor())
|
||||
for (auto mod: constructor->modifiers())
|
||||
{
|
||||
auto decl = mod->name()->annotation().referencedDeclaration;
|
||||
if (auto base = dynamic_cast<ContractDefinition const*>(decl))
|
||||
{
|
||||
solAssert(!baseArgs.count(base), "");
|
||||
if (auto args = mod->arguments())
|
||||
baseArgs[base] = *args;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return baseArgs;
|
||||
}
|
||||
|
||||
void SMTEncoder::createReturnedExpressions(FunctionCall const& _funCall)
|
||||
{
|
||||
FunctionDefinition const* funDef = functionCallToDefinition(_funCall);
|
||||
|
||||
Reference in New Issue
Block a user