Browse Source

Adding mapping treatment to FunctionType

Plus a TypeResolution test for it
cl-refactor
Lefteris Karapetsas 10 years ago
parent
commit
c6c8a1ceeb
  1. 23
      libsolidity/Types.cpp
  2. 10
      test/SolidityNameAndTypeResolution.cpp

23
libsolidity/Types.cpp

@ -621,12 +621,25 @@ FunctionType::FunctionType(FunctionDefinition const& _function, bool _isInternal
FunctionType::FunctionType(VariableDeclaration const& _varDecl):
m_location(Location::EXTERNAL), m_isConstant(true), m_declaration(&_varDecl)
{
TypePointers params({});
vector<string> paramNames({});
TypePointers retParams({_varDecl.getType()});
vector<string> retParamNames({ _varDecl.getName()});
// for now, no input parameters LTODO: change for some things like mapping
TypePointers params;
vector<string> paramNames;
TypePointers retParams;
vector<string> retParamNames;
TypePointer varDeclType = _varDecl.getType();
auto mappingType = dynamic_cast<const MappingType*>(varDeclType.get());
if (mappingType!= nullptr)
{
params.push_back(mappingType->getKeyType());
paramNames.push_back(mappingType->getKeyType()->toString());
retParams.push_back(mappingType->getValueType());
retParamNames.push_back(mappingType->getValueType()->toString());
}
else // elelemntary type
{
retParams.push_back(varDeclType);
retParamNames.push_back(_varDecl.getName());
}
swap(params, m_parameterTypes);
swap(paramNames, m_parameterNames);
swap(retParams, m_returnParameterTypes);

10
test/SolidityNameAndTypeResolution.cpp

@ -637,6 +637,7 @@ BOOST_AUTO_TEST_CASE(state_variable_accessors)
" uint64(2);\n"
" }\n"
"uint256 foo;\n"
"mapping(uint=>string4) map;\n"
"}\n";
ASTPointer<SourceUnit> source;
@ -644,10 +645,17 @@ BOOST_AUTO_TEST_CASE(state_variable_accessors)
BOOST_CHECK_NO_THROW(source = parseTextAndResolveNamesWithChecks(text));
BOOST_REQUIRE((contract = retrieveContract(source, 0)) != nullptr);
FunctionTypePointer function = retrieveFunctionBySignature(contract, "foo()");
BOOST_REQUIRE(function->hasDeclaration());
BOOST_REQUIRE(function && function->hasDeclaration());
auto returnParams = function->getReturnParameterTypeNames();
BOOST_CHECK_EQUAL(returnParams.at(0), "uint256");
BOOST_CHECK(function->isConstant());
function = retrieveFunctionBySignature(contract, "map(uint256)");
BOOST_REQUIRE(function && function->hasDeclaration());
auto Params = function->getParameterTypeNames();
BOOST_CHECK_EQUAL(returnParams.at(0), "uint256");
returnParams = function->getReturnParameterTypeNames();
BOOST_CHECK_EQUAL(returnParams.at(0), "string4");
BOOST_CHECK(function->isConstant());
}
BOOST_AUTO_TEST_CASE(function_clash_with_state_variable_accessor)

Loading…
Cancel
Save