aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/codegen/ContractCompiler.cpp
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-07-13 07:23:28 +0800
committerGitHub <noreply@github.com>2018-07-13 07:23:28 +0800
commit052f19c6b0aac3b4f60ee8a7f340033e0b5350f0 (patch)
tree82027ba467f6851c64984c77538ee424ae74f645 /libsolidity/codegen/ContractCompiler.cpp
parentf0bc1bce895f67ccd8b21e244d1b7cbd8c8f9453 (diff)
parent62645d530253c365ac09979135e9037f2bde2934 (diff)
downloaddexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar.gz
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar.bz2
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar.lz
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar.xz
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.tar.zst
dexon-solidity-052f19c6b0aac3b4f60ee8a7f340033e0b5350f0.zip
Merge pull request #4431 from ethereum/tupleDeclaration
Disallow multi variable declarations with mismatching number of values.
Diffstat (limited to 'libsolidity/codegen/ContractCompiler.cpp')
-rw-r--r--libsolidity/codegen/ContractCompiler.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/libsolidity/codegen/ContractCompiler.cpp b/libsolidity/codegen/ContractCompiler.cpp
index 93f698bc..bbb3db3d 100644
--- a/libsolidity/codegen/ContractCompiler.cpp
+++ b/libsolidity/codegen/ContractCompiler.cpp
@@ -833,20 +833,19 @@ bool ContractCompiler::visit(VariableDeclarationStatement const& _variableDeclar
valueTypes = tupleType->components();
else
valueTypes = TypePointers{expression->annotation().type};
- auto const& assignments = _variableDeclarationStatement.annotation().assignments;
- solAssert(assignments.size() == valueTypes.size(), "");
- for (size_t i = 0; i < assignments.size(); ++i)
+ auto const& declarations = _variableDeclarationStatement.declarations();
+ solAssert(declarations.size() == valueTypes.size(), "");
+ for (size_t i = 0; i < declarations.size(); ++i)
{
- size_t j = assignments.size() - i - 1;
+ size_t j = declarations.size() - i - 1;
solAssert(!!valueTypes[j], "");
- VariableDeclaration const* varDecl = assignments[j];
- if (!varDecl)
- utils.popStackElement(*valueTypes[j]);
- else
+ if (VariableDeclaration const* varDecl = declarations[j].get())
{
utils.convertType(*valueTypes[j], *varDecl->annotation().type);
utils.moveToStackVariable(*varDecl);
}
+ else
+ utils.popStackElement(*valueTypes[j]);
}
}
checker.check();