Disallow multi variable declarations with mismatching number of values.

This commit is contained in:
Daniel Kirchner
2018-07-12 20:33:51 +02:00
parent 5d8a8f7265
commit fc370591f0
6 changed files with 25 additions and 98 deletions
+7 -8
View File
@@ -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();