Fixed #9016 (tokenizer: wrong simplification for operator ^ (){}) (#1724)

This commit is contained in:
IOBYTE 2019-03-05 05:35:45 -05:00 committed by Daniel Marjamäki
parent 0934577dda
commit 5ee6c2138c
2 changed files with 25 additions and 1 deletions

View File

@ -9390,7 +9390,7 @@ void Tokenizer::simplifyAsm2()
if (tok->str() != "^")
continue;
if (Token::simpleMatch(tok, "^ {") || Token::simpleMatch(tok->linkAt(1), ") {")) {
if (Token::simpleMatch(tok, "^ {") || (Token::simpleMatch(tok->linkAt(1), ") {") && tok->strAt(-1) != "operator")) {
Token * start = tok;
while (start && !Token::Match(start, "[,(;{}=]")) {
if (start->link() && Token::Match(start, ")|]|>"))

View File

@ -1130,6 +1130,30 @@ private:
tokenizeAndStringify("; return f(^(void){somecode});"));
ASSERT_EQUALS("; asm ( \"a?(b?(c,asm(\"^{}\")):0):^{}\" ) ;",
tokenizeAndStringify(";a?(b?(c,^{}):0):^{};"));
ASSERT_EQUALS("template < typename T > "
"CImg < T > operator| ( const char * const expression , const CImg < T > & img ) { "
"return img | expression ; "
"} "
"template < typename T > "
"CImg < T > operator^ ( const char * const expression , const CImg < T > & img ) { "
"return img ^ expression ; "
"} "
"template < typename T > "
"CImg < T > operator== ( const char * const expression , const CImg < T > & img ) { "
"return img == expression ; "
"}",
tokenizeAndStringify("template < typename T >"
"inline CImg<T> operator|(const char *const expression, const CImg<T>& img) {"
" return img | expression ;"
"}"
"template<typename T>"
"inline CImg<T> operator^(const char *const expression, const CImg<T>& img) {"
" return img ^ expression;"
"}"
"template<typename T>"
"inline CImg<T> operator==(const char *const expression, const CImg<T>& img) {"
" return img == expression;"
"}"));
}
void ifAddBraces1() {