From e89b8d516b7e208bc67e273e174714f7f9b67b77 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Thu, 17 Sep 2015 15:15:36 +0200 Subject: test Conflicts: test/libsolidity/SolidityEndToEndTest.cpp --- test/libsolidity/SolidityEndToEndTest.cpp | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 9c4d0c5b..803ff61a 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -5283,6 +5283,51 @@ BOOST_AUTO_TEST_CASE(simple_throw) BOOST_CHECK(callContractFunction("f(uint256)", u256(1)) == encodeArgs()); } +BOOST_AUTO_TEST_CASE(strings_in_struct) +{ + char const* sourceCode = R"( + contract buggystruct { + Buggy public bug; + + struct Buggy { + uint first; + uint second; + uint third; + string last; + } + + function buggystruct(){ + bug = Buggy(10, 20, 30, "a"); + } + function getFirst() returns (uint) + { + return bug.first; + } + function getSecond() returns (uint) + { + return bug.second; + } + function getThird() returns (uint) + { + return bug.third; + } + function getLast() returns (string) + { + return bug.last; + } + } + )"; + compileAndRun(sourceCode); + auto first = callContractFunction("getFirst()"); + BOOST_CHECK(callContractFunction("getFirst()") == encodeArgs(u256(10))); + auto second = callContractFunction("getSecond()"); + BOOST_CHECK(callContractFunction("getSecond()") == encodeArgs(u256(20))); + auto third = callContractFunction("getThird()"); + BOOST_CHECK(callContractFunction("getThird()") == encodeArgs(u256(30))); + auto last = callContractFunction("getLast()"); + BOOST_CHECK(callContractFunction("getLast()") == encodeArgs(string("a"))); +} + BOOST_AUTO_TEST_SUITE_END() } -- cgit v1.2.3 From e50400082b1fe3b1086d8ebb874b12b30ef2ff92 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Thu, 17 Sep 2015 15:04:44 +0200 Subject: fixed using string as a type for struct member --- libsolidity/AST.h | 9 ++++++--- libsolidity/ExpressionCompiler.cpp | 2 +- test/libsolidity/SolidityEndToEndTest.cpp | 12 ++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/libsolidity/AST.h b/libsolidity/AST.h index de0ef3ef..ba529a8a 100644 --- a/libsolidity/AST.h +++ b/libsolidity/AST.h @@ -347,10 +347,13 @@ private: class StructDefinition: public Declaration { public: - StructDefinition(SourceLocation const& _location, - ASTPointer const& _name, - std::vector> const& _members): + StructDefinition( + SourceLocation const& _location, + ASTPointer const& _name, + std::vector> const& _members + ): Declaration(_location, _name), m_members(_members) {} + virtual void accept(ASTVisitor& _visitor) override; virtual void accept(ASTConstVisitor& _visitor) const override; diff --git a/libsolidity/ExpressionCompiler.cpp b/libsolidity/ExpressionCompiler.cpp index 1b9f2150..7db0dde9 100644 --- a/libsolidity/ExpressionCompiler.cpp +++ b/libsolidity/ExpressionCompiler.cpp @@ -390,7 +390,7 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall) TypeType const& type = dynamic_cast(*_functionCall.expression().type()); auto const& structType = dynamic_cast(*type.actualType()); - m_context << u256(max(32u, structType.calldataEncodedSize(true))); + m_context << max(u256(32u), structType.memorySize()); utils().allocateMemory(); m_context << eth::Instruction::DUP1; diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 803ff61a..1f5a92e7 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -5297,7 +5297,10 @@ BOOST_AUTO_TEST_CASE(strings_in_struct) } function buggystruct(){ - bug = Buggy(10, 20, 30, "a"); + bug.first = 10; + bug.second = 20; + bug.third = 30; + bug.last = "asdfghjkl"; } function getFirst() returns (uint) { @@ -5318,14 +5321,11 @@ BOOST_AUTO_TEST_CASE(strings_in_struct) } )"; compileAndRun(sourceCode); - auto first = callContractFunction("getFirst()"); + string s = "asdfghjkl"; BOOST_CHECK(callContractFunction("getFirst()") == encodeArgs(u256(10))); - auto second = callContractFunction("getSecond()"); BOOST_CHECK(callContractFunction("getSecond()") == encodeArgs(u256(20))); - auto third = callContractFunction("getThird()"); BOOST_CHECK(callContractFunction("getThird()") == encodeArgs(u256(30))); - auto last = callContractFunction("getLast()"); - BOOST_CHECK(callContractFunction("getLast()") == encodeArgs(string("a"))); + BOOST_CHECK(callContractFunction("getLast()") == encodeDyn(s)); } BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.3 From ed76798406f387c8bd138ed22cd0b1687a79fa32 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Tue, 22 Sep 2015 14:03:09 +0200 Subject: fixed the test --- test/libsolidity/SolidityEndToEndTest.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 1f5a92e7..98da1e27 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -5297,10 +5297,7 @@ BOOST_AUTO_TEST_CASE(strings_in_struct) } function buggystruct(){ - bug.first = 10; - bug.second = 20; - bug.third = 30; - bug.last = "asdfghjkl"; + bug = Buggy(10, 20, 30, "asdfghjkl"); } function getFirst() returns (uint) { -- cgit v1.2.3