From 618ea498e9d2926d47f44459eab8f333d9b85783 Mon Sep 17 00:00:00 2001 From: PKEuS Date: Fri, 5 Feb 2016 15:15:13 +0100 Subject: [PATCH] ValueType: Support logical operators --- lib/symboldatabase.cpp | 2 +- test/testsymboldatabase.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index b71dbde86..ebee165f2 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -3890,7 +3890,7 @@ void SymbolDatabase::setValueTypeInTokenList(Token *tokens, bool cpp, char defau } ::setValueType(tok, ValueType(sign, type, 0U), cpp, defsign); } - } else if (tok->isComparisonOp()) + } else if (tok->isComparisonOp() || tok->tokType() == Token::eLogicalOp) ::setValueType(tok, ValueType(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::BOOL, 0U), cpp, defsign); else if (tok->tokType() == Token::eChar) ::setValueType(tok, ValueType(ValueType::Sign::UNKNOWN_SIGN, ValueType::Type::CHAR, 0U), cpp, defsign); diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index ae7b871ff..bca3f835b 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -3207,6 +3207,11 @@ private: ASSERT_EQUALS("const char *", typeOf("int x; double y; a = (b ? \"a\" : \"b\")", "?")); ASSERT_EQUALS("", typeOf("int x; double y; a = (b ? \"a\" : std::string(\"b\"))", "?")); + // Boolean operators + ASSERT_EQUALS("bool", typeOf("a > b;", ">")); + ASSERT_EQUALS("bool", typeOf("!b;", "!")); + ASSERT_EQUALS("bool", typeOf("c = a && b;", "&&")); + // shift => result has same type as lhs ASSERT_EQUALS("signed int", typeOf("int x; a = x << 1U;", "<<")); ASSERT_EQUALS("signed int", typeOf("int x; a = x >> 1U;", ">>"));