From 1e4b5886d61328d951fc03dc88cfc3dd722a3a00 Mon Sep 17 00:00:00 2001 From: Daniel Kirchner <daniel@ekpyron.org> Date: Fri, 3 Aug 2018 16:22:03 +0200 Subject: Allow assignments to local variables of mapping types. --- libsolidity/analysis/TypeChecker.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'libsolidity') diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp index f9604794..1d30881c 100644 --- a/libsolidity/analysis/TypeChecker.cpp +++ b/libsolidity/analysis/TypeChecker.cpp @@ -1332,7 +1332,15 @@ void TypeChecker::checkExpressionAssignment(Type const& _type, Expression const& checkExpressionAssignment(_type, *tupleExpression->components().front()); } else if (_type.category() == Type::Category::Mapping) - m_errorReporter.typeError(_expression.location(), "Mappings cannot be assigned to."); + { + bool isLocalOrReturn = false; + if (auto const* identifier = dynamic_cast<Identifier const*>(&_expression)) + if (auto const *variableDeclaration = dynamic_cast<VariableDeclaration const*>(identifier->annotation().referencedDeclaration)) + if (variableDeclaration->isLocalOrReturn()) + isLocalOrReturn = true; + if (!isLocalOrReturn) + m_errorReporter.typeError(_expression.location(), "Mappings cannot be assigned to."); + } } bool TypeChecker::visit(Assignment const& _assignment) -- cgit v1.2.3