diff --git a/lib/token.cpp b/lib/token.cpp index 15376a128..6f0ec9fbe 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -561,7 +561,7 @@ bool Token::Match(const Token *tok, const char pattern[], unsigned int varid) if (tok->str() != "|") return false; p += 4; - } else if (p[3] == 'p') { + } else if (p[2] == 'p') { if (!tok->isOp()) return false; p += 4; diff --git a/test/testtoken.cpp b/test/testtoken.cpp index 07de35575..fc60b5647 100644 --- a/test/testtoken.cpp +++ b/test/testtoken.cpp @@ -47,6 +47,7 @@ private: TEST_CASE(matchNumeric); TEST_CASE(matchBoolean); TEST_CASE(matchOr); + TEST_CASE(matchOp); TEST_CASE(updateProperties) TEST_CASE(updatePropertiesConcatStr) @@ -248,12 +249,12 @@ private: void matchOr() { givenACodeSampleToTokenize bitwiseOr("|"); ASSERT_EQUALS(true, Token::Match(bitwiseOr.tokens(), "%or%")); - ASSERT_EQUALS(false, Token::Match(bitwiseOr.tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(bitwiseOr.tokens(), "%op%")); ASSERT_EQUALS(false, Token::Match(bitwiseOr.tokens(), "%oror%")); givenACodeSampleToTokenize logicalOr("||"); ASSERT_EQUALS(false, Token::Match(logicalOr.tokens(), "%or%")); - ASSERT_EQUALS(false, Token::Match(logicalOr.tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%op%")); ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%")); ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "&&|%oror%")); ASSERT_EQUALS(true, Token::Match(logicalOr.tokens(), "%oror%|&&")); @@ -265,8 +266,26 @@ private: } void matchOp() { - givenACodeSampleToTokenize op("+"); - ASSERT_EQUALS(true, Token::Match(op.tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("<<").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize(">>").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("+").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("-").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("*").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("/").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("%").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("&&").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("||").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("==").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("!=").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("<").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("<=").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize(">").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize(">=").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("&").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("|").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("^").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("~").tokens(), "%op%")); + ASSERT_EQUALS(true, Token::Match(givenACodeSampleToTokenize("!").tokens(), "%op%")); } void updateProperties() {