mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #81 from LianaHus/sol_strings_in_struct
Sol strings in struct
This commit is contained in:
commit
5ca79f005e
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -5283,6 +5283,48 @@ 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, "asdfghjkl");
|
||||
}
|
||||
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);
|
||||
string s = "asdfghjkl";
|
||||
BOOST_CHECK(callContractFunction("getFirst()") == encodeArgs(u256(10)));
|
||||
BOOST_CHECK(callContractFunction("getSecond()") == encodeArgs(u256(20)));
|
||||
BOOST_CHECK(callContractFunction("getThird()") == encodeArgs(u256(30)));
|
||||
BOOST_CHECK(callContractFunction("getLast()") == encodeDyn(s));
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user