From e544698ad3a2101e3d910d0761571d4fa20144e8 Mon Sep 17 00:00:00 2001
From: Rhett Aultman <roadriverrail@gmail.com>
Date: Fri, 28 Apr 2017 17:43:19 -0700
Subject: Deprecate use of unary '+'

The unary '+' serves no meaningful purpose in Solidity and it makes it
possible to produce typos with dagerous implications (e.g. 'a =+5 '),
so we are deprecating it.  The SyntaxChecker currently issues warnings
on the unary '+' but will still compile it for now.
---
 libsolidity/analysis/SyntaxChecker.cpp | 19 +++++++++++++++++++
 libsolidity/analysis/SyntaxChecker.h   |  4 ++++
 2 files changed, 23 insertions(+)

(limited to 'libsolidity')

diff --git a/libsolidity/analysis/SyntaxChecker.cpp b/libsolidity/analysis/SyntaxChecker.cpp
index 89014133..308733df 100644
--- a/libsolidity/analysis/SyntaxChecker.cpp
+++ b/libsolidity/analysis/SyntaxChecker.cpp
@@ -32,6 +32,16 @@ bool SyntaxChecker::checkSyntax(ASTNode const& _astRoot)
 	return Error::containsOnlyWarnings(m_errors);
 }
 
+void SyntaxChecker::warning(SourceLocation const& _location, string const& _description)
+{
+	auto err = make_shared<Error>(Error::Type::Warning);
+	*err <<
+		errinfo_sourceLocation(_location) <<
+		errinfo_comment(_description);
+
+	m_errors.push_back(err);
+}
+
 void SyntaxChecker::syntaxError(SourceLocation const& _location, std::string const& _description)
 {
 	auto err = make_shared<Error>(Error::Type::SyntaxError);
@@ -148,6 +158,15 @@ bool SyntaxChecker::visit(Break const& _breakStatement)
 	return true;
 }
 
+bool SyntaxChecker::visit(UnaryOperation const& _operation)
+{
+	if (_operation.getOperator() == Token::Add)
+	{
+		warning(_operation.location(), "Use of unary + is deprecated");
+	}
+	return true;
+}
+
 bool SyntaxChecker::visit(PlaceholderStatement const&)
 {
 	m_placeholderFound = true;
diff --git a/libsolidity/analysis/SyntaxChecker.h b/libsolidity/analysis/SyntaxChecker.h
index 308e128b..8d7dcdd3 100644
--- a/libsolidity/analysis/SyntaxChecker.h
+++ b/libsolidity/analysis/SyntaxChecker.h
@@ -32,6 +32,7 @@ namespace solidity
  * The module that performs syntax analysis on the AST:
  *  - whether continue/break is in a for/while loop.
  *  - whether a modifier contains at least one '_'
+ *  - issues deprecation warnings for unary '+'
  */
 class SyntaxChecker: private ASTConstVisitor
 {
@@ -43,6 +44,7 @@ public:
 
 private:
 	/// Adds a new error to the list of errors.
+	void warning(SourceLocation const& _location, std::string const& _description);
 	void syntaxError(SourceLocation const& _location, std::string const& _description);
 
 	virtual bool visit(SourceUnit const& _sourceUnit) override;
@@ -60,6 +62,8 @@ private:
 	virtual bool visit(Continue const& _continueStatement) override;
 	virtual bool visit(Break const& _breakStatement) override;
 
+	virtual bool visit(UnaryOperation const& _operation) override;
+
 	virtual bool visit(PlaceholderStatement const& _placeholderStatement) override;
 
 	ErrorList& m_errors;
-- 
cgit v1.2.3


From 96870686a9aba46a14d659c8c1cd107a9071857f Mon Sep 17 00:00:00 2001
From: chriseth <chris@ethereum.org>
Date: Tue, 2 May 2017 15:48:58 +0200
Subject: Style and stricter tests.

---
 libsolidity/analysis/SyntaxChecker.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

(limited to 'libsolidity')

diff --git a/libsolidity/analysis/SyntaxChecker.cpp b/libsolidity/analysis/SyntaxChecker.cpp
index 308733df..94e82a87 100644
--- a/libsolidity/analysis/SyntaxChecker.cpp
+++ b/libsolidity/analysis/SyntaxChecker.cpp
@@ -161,9 +161,7 @@ bool SyntaxChecker::visit(Break const& _breakStatement)
 bool SyntaxChecker::visit(UnaryOperation const& _operation)
 {
 	if (_operation.getOperator() == Token::Add)
-	{
-		warning(_operation.location(), "Use of unary + is deprecated");
-	}
+		warning(_operation.location(), "Use of unary + is deprecated.");
 	return true;
 }
 
-- 
cgit v1.2.3