aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLianaHus <liana@ethdev.com>2015-09-17 21:04:44 +0800
committerLianaHus <liana@ethdev.com>2015-09-17 21:15:46 +0800
commite50400082b1fe3b1086d8ebb874b12b30ef2ff92 (patch)
tree3bb55ebfe31cbb3a15b7ffa306a4e1a1d99325ae
parente89b8d516b7e208bc67e273e174714f7f9b67b77 (diff)
downloaddexon-solidity-e50400082b1fe3b1086d8ebb874b12b30ef2ff92.tar.gz
dexon-solidity-e50400082b1fe3b1086d8ebb874b12b30ef2ff92.tar.zst
dexon-solidity-e50400082b1fe3b1086d8ebb874b12b30ef2ff92.zip
fixed using string as a type for struct member
-rw-r--r--libsolidity/AST.h9
-rw-r--r--libsolidity/ExpressionCompiler.cpp2
-rw-r--r--test/libsolidity/SolidityEndToEndTest.cpp12
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<ASTString> const& _name,
- std::vector<ASTPointer<VariableDeclaration>> const& _members):
+ StructDefinition(
+ SourceLocation const& _location,
+ ASTPointer<ASTString> const& _name,
+ std::vector<ASTPointer<VariableDeclaration>> 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<TypeType const&>(*_functionCall.expression().type());
auto const& structType = dynamic_cast<StructType const&>(*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()