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