From e612ddeafe9d707716e4ea42a53bebdf0486a84f Mon Sep 17 00:00:00 2001 From: Liana Husikyan Date: Wed, 22 Apr 2015 18:53:58 +0200 Subject: [PATCH] changed the test so constructor will have input parameters --- libsolidity/AST.cpp | 7 ++-- libsolidity/ExpressionCompiler.cpp | 15 +++++++-- libsolidity/Types.cpp | 48 +++++++++++++++++++++------- libsolidity/Types.h | 44 +++++++++++++++---------- test/libsolidity/SolidityABIJSON.cpp | 21 +++++++++--- 5 files changed, 100 insertions(+), 35 deletions(-) diff --git a/libsolidity/AST.cpp b/libsolidity/AST.cpp index 59a7b61c2..83b0adf36 100644 --- a/libsolidity/AST.cpp +++ b/libsolidity/AST.cpp @@ -817,8 +817,11 @@ void NewExpression::checkTypeRequirements(TypePointers const*) BOOST_THROW_EXCEPTION(createTypeError("Trying to create an instance of an abstract contract.")); shared_ptr contractType = make_shared(*m_contract); TypePointers const& parameterTypes = contractType->getConstructorType()->getParameterTypes(); - m_type = make_shared(parameterTypes, TypePointers{contractType}, - FunctionType::Location::Creation); + m_type = make_shared( + parameterTypes, + TypePointers{contractType}, + strings(), + FunctionType::Location::Creation); } void MemberAccess::checkTypeRequirements(TypePointers const* _argumentTypes) diff --git a/libsolidity/ExpressionCompiler.cpp b/libsolidity/ExpressionCompiler.cpp index 8c07fbd19..ae825be17 100644 --- a/libsolidity/ExpressionCompiler.cpp +++ b/libsolidity/ExpressionCompiler.cpp @@ -521,8 +521,19 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall) arguments.front()->accept(*this); appendTypeConversion(*arguments.front()->getType(), *function.getParameterTypes().front(), true); - appendExternalFunctionCall(FunctionType(TypePointers{}, TypePointers{}, - Location::External, false, true, true), {}, true); + appendExternalFunctionCall( + FunctionType( + TypePointers{}, + TypePointers{}, + strings(), + Location::External, + false, + true, + true + ), + {}, + true + ); break; case Location::Suicide: arguments.front()->accept(*this); diff --git a/libsolidity/Types.cpp b/libsolidity/Types.cpp index 19bc134e1..40b0dba6f 100644 --- a/libsolidity/Types.cpp +++ b/libsolidity/Types.cpp @@ -1143,7 +1143,7 @@ FunctionTypePointer FunctionType::externalFunctionType() const return FunctionTypePointer(); retParamTypes.push_back(type->externalType()); } - return make_shared(paramTypes, retParamTypes, m_location, m_arbitraryParameters); + return make_shared(paramTypes, retParamTypes, m_parameterNames, m_location, m_arbitraryParameters); } MemberList const& FunctionType::getMembers() const @@ -1159,14 +1159,34 @@ MemberList const& FunctionType::getMembers() const if (!m_members) { MemberList::MemberMap members{ - {"value", make_shared(parseElementaryTypeVector({"uint"}), - TypePointers{copyAndSetGasOrValue(false, true)}, - Location::SetValue, false, m_gasSet, m_valueSet)}}; + { + "value", + make_shared( + parseElementaryTypeVector({"uint"}), + TypePointers{copyAndSetGasOrValue(false, true)}, + strings(), + Location::SetValue, + false, + m_gasSet, + m_valueSet + ) + } + }; if (m_location != Location::Creation) - members.push_back(MemberList::Member("gas", make_shared( - parseElementaryTypeVector({"uint"}), - TypePointers{copyAndSetGasOrValue(true, false)}, - Location::SetGas, false, m_gasSet, m_valueSet))); + members.push_back( + MemberList::Member( + "gas", + make_shared( + parseElementaryTypeVector({"uint"}), + TypePointers{copyAndSetGasOrValue(true, false)}, + strings(), + Location::SetGas, + false, + m_gasSet, + m_valueSet + ) + ) + ); m_members.reset(new MemberList(members)); } return *m_members; @@ -1244,9 +1264,15 @@ TypePointers FunctionType::parseElementaryTypeVector(strings const& _types) TypePointer FunctionType::copyAndSetGasOrValue(bool _setGas, bool _setValue) const { - return make_shared(m_parameterTypes, m_returnParameterTypes, m_location, - m_arbitraryParameters, - m_gasSet || _setGas, m_valueSet || _setValue); + return make_shared( + m_parameterTypes, + m_returnParameterTypes, + strings(), + m_location, + m_arbitraryParameters, + m_gasSet || _setGas, + m_valueSet || _setValue + ); } vector const FunctionType::getParameterTypeNames() const diff --git a/libsolidity/Types.h b/libsolidity/Types.h index cc9c455f2..49dd436d3 100644 --- a/libsolidity/Types.h +++ b/libsolidity/Types.h @@ -564,24 +564,36 @@ public: explicit FunctionType(FunctionDefinition const& _function, bool _isInternal = true); explicit FunctionType(VariableDeclaration const& _varDecl); explicit FunctionType(EventDefinition const& _event); - FunctionType(strings const& _parameterTypes, strings const& _returnParameterTypes, - Location _location = Location::Internal, bool _arbitraryParameters = false): - FunctionType(parseElementaryTypeVector(_parameterTypes), parseElementaryTypeVector(_returnParameterTypes), - _location, _arbitraryParameters) {} FunctionType( - TypePointers const& _parameterTypes, - TypePointers const& _returnParameterTypes, - Location _location = Location::Internal, - bool _arbitraryParameters = false, - bool _gasSet = false, - bool _valueSet = false + strings const& _parameterTypes, + strings const& _returnParameterTypes, + Location _location = Location::Internal, + bool _arbitraryParameters = false + ): FunctionType( + parseElementaryTypeVector(_parameterTypes), + parseElementaryTypeVector(_returnParameterTypes), + strings(), + _location, + _arbitraryParameters + ) + { + } + FunctionType( + TypePointers const& _parameterTypes, + TypePointers const& _returnParameterTypes, + strings _parameterNames = strings(), + Location _location = Location::Internal, + bool _arbitraryParameters = false, + bool _gasSet = false, + bool _valueSet = false ): - m_parameterTypes (_parameterTypes), - m_returnParameterTypes (_returnParameterTypes), - m_location (_location), - m_arbitraryParameters (_arbitraryParameters), - m_gasSet (_gasSet), - m_valueSet (_valueSet) + m_parameterTypes (_parameterTypes), + m_returnParameterTypes (_returnParameterTypes), + m_parameterNames (_parameterNames), + m_location (_location), + m_arbitraryParameters (_arbitraryParameters), + m_gasSet (_gasSet), + m_valueSet (_valueSet) {} TypePointers const& getParameterTypes() const { return m_parameterTypes; } diff --git a/test/libsolidity/SolidityABIJSON.cpp b/test/libsolidity/SolidityABIJSON.cpp index f9ecb7d9c..26d0110b8 100644 --- a/test/libsolidity/SolidityABIJSON.cpp +++ b/test/libsolidity/SolidityABIJSON.cpp @@ -499,14 +499,27 @@ BOOST_AUTO_TEST_CASE(constructor_abi) { char const* sourceCode = R"( contract test { - function test() { + function test(uint param1, test param2, bool param3) {} } - })"; + )"; char const* interface = R"([ { - "inputs" : [], - "type" : "constructor" + "inputs": [ + { + "name": "param1", + "type": "uint256" + }, + { + "name": "param2", + "type": "address" + }, + { + "name": "param3", + "type": "bool" + } + ], + "type": "constructor" } ])"; checkInterface(sourceCode, interface);