mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
fixed assert on EI creation for structs containing only mapping or arrays
This commit is contained in:
parent
ca45cfee8c
commit
b2daa5a9d8
@ -292,17 +292,19 @@ void TypeChecker::checkContractExternalTypeClashes(ContractDefinition const& _co
|
|||||||
if (f->isPartOfExternalInterface())
|
if (f->isPartOfExternalInterface())
|
||||||
{
|
{
|
||||||
auto functionType = make_shared<FunctionType>(*f);
|
auto functionType = make_shared<FunctionType>(*f);
|
||||||
externalDeclarations[functionType->externalSignature()].push_back(
|
if (functionType->interfaceFunctionType())
|
||||||
make_pair(f, functionType)
|
externalDeclarations[functionType->externalSignature()].push_back(
|
||||||
);
|
make_pair(f, functionType)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
for (VariableDeclaration const* v: contract->stateVariables())
|
for (VariableDeclaration const* v: contract->stateVariables())
|
||||||
if (v->isPartOfExternalInterface())
|
if (v->isPartOfExternalInterface())
|
||||||
{
|
{
|
||||||
auto functionType = make_shared<FunctionType>(*v);
|
auto functionType = make_shared<FunctionType>(*v);
|
||||||
externalDeclarations[functionType->externalSignature()].push_back(
|
if (functionType->interfaceFunctionType())
|
||||||
make_pair(v, functionType)
|
externalDeclarations[functionType->externalSignature()].push_back(
|
||||||
);
|
make_pair(v, functionType)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto const& it: externalDeclarations)
|
for (auto const& it: externalDeclarations)
|
||||||
|
@ -1593,6 +1593,10 @@ FunctionTypePointer FunctionType::interfaceFunctionType() const
|
|||||||
else
|
else
|
||||||
return FunctionTypePointer();
|
return FunctionTypePointer();
|
||||||
}
|
}
|
||||||
|
auto variable = dynamic_cast<VariableDeclaration const*>(m_declaration);
|
||||||
|
if (variable && retParamTypes.empty())
|
||||||
|
return FunctionTypePointer();
|
||||||
|
|
||||||
return make_shared<FunctionType>(paramTypes, retParamTypes, m_parameterNames, m_returnParameterNames, m_location, m_arbitraryParameters);
|
return make_shared<FunctionType>(paramTypes, retParamTypes, m_parameterNames, m_returnParameterNames, m_location, m_arbitraryParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1003,6 +1003,19 @@ BOOST_AUTO_TEST_CASE(base_class_state_variable_accessor)
|
|||||||
BOOST_CHECK(success(text));
|
BOOST_CHECK(success(text));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(struct_accessor_one_array_only)
|
||||||
|
{
|
||||||
|
char const* sourceCode = R"(
|
||||||
|
contract test {
|
||||||
|
|
||||||
|
struct Data { uint[15] m_array; }
|
||||||
|
Data public data;
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
BOOST_CHECK(expectError(sourceCode) == Error::Type::TypeError);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(base_class_state_variable_internal_member)
|
BOOST_AUTO_TEST_CASE(base_class_state_variable_internal_member)
|
||||||
{
|
{
|
||||||
char const* text = "contract Parent {\n"
|
char const* text = "contract Parent {\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user