From 72b4809da0f96eabc910180c9a322546b8c37e92 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Wed, 1 Apr 2015 13:46:07 +0200 Subject: [PATCH] Moved simplification of operator names before template and parentheses simplifications (#6576) --- lib/tokenize.cpp | 8 ++++---- test/testsimplifytokens.cpp | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index a43aa07c3..1f236c05c 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -3553,6 +3553,10 @@ bool Tokenizer::simplifyTokenList1(const char FileName[]) // Simplify float casts (float)1 => 1.0 simplifyFloatCasts(); + // Collapse operator name tokens into single token + // operator = => operator= + simplifyOperatorName(); + // Remove redundant parentheses simplifyRedundantParentheses(); for (Token *tok = list.front(); tok; tok = tok->next()) @@ -3573,10 +3577,6 @@ bool Tokenizer::simplifyTokenList1(const char FileName[]) if (!isC()) TemplateSimplifier::cleanupAfterSimplify(list.front()); - // Collapse operator name tokens into single token - // operator = => operator= - simplifyOperatorName(); - // Simplify pointer to standard types (C only) simplifyPointerToStandardType(); diff --git a/test/testsimplifytokens.cpp b/test/testsimplifytokens.cpp index a23a70548..6fdaacc30 100644 --- a/test/testsimplifytokens.cpp +++ b/test/testsimplifytokens.cpp @@ -137,6 +137,7 @@ private: TEST_CASE(simplifyAtol) TEST_CASE(simplifyOperator1); + TEST_CASE(simplifyOperator2); TEST_CASE(reverseArraySyntax) TEST_CASE(simplify_numeric_condition) @@ -2514,6 +2515,31 @@ private: ASSERT_EQUALS(expected, tok(code)); } + void simplifyOperator2() { + // #6576 + ASSERT_EQUALS("class TClass { " + "public: " + "TClass & operator= ( const TClass & rhs ) ; " + "} ; " + "TClass :: TClass ( const TClass & other ) " + "{ " + "operator= ( other ) ; " + "} class SharedPtr { " + "SharedPtr & operator= ( SharedPtr const & r ) ; " + "} ;", + tok("template\n" + " class SharedPtr {\n" + " SharedPtr& operator=(SharedPtr const & r);\n" + "};\n" + "class TClass {\n" + "public:\n" + " TClass& operator=(const TClass& rhs);\n" + "};\n" + "TClass::TClass(const TClass &other) {\n" + " operator=(other);\n" + "}")); + } + void reverseArraySyntax() { ASSERT_EQUALS("a [ 13 ]", tok("13[a]")); }