From 57a05bc341953248d4399437d5ec5913377be36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 20 Jul 2014 15:24:40 +0200 Subject: [PATCH] xml dump: added 'astIsFloat' utility function in cppcheckdata.py --- tools/cppcheckdata.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tools/cppcheckdata.py b/tools/cppcheckdata.py index 6dc765240..4120957b9 100644 --- a/tools/cppcheckdata.py +++ b/tools/cppcheckdata.py @@ -232,3 +232,30 @@ class CppcheckData: def parsedump(filename): return CppcheckData(filename) + +# Check if type of ast node is float/double +def astIsFloat(token): + if not token: + return False + if token.str == '.': + return astIsFloat(token.astOperand2) + if '+-*/%'.find(token.str) == 0: + if True == astIsFloat(token.astOperand1): + return True + return astIsFloat(token.astOperand2) + if not token.variable: + # float literal? + if token.str[0].isdigit(): + for c in token.str: + if c=='f' or c=='.' or c=='E': + return True + return False + typeToken = token.variable.typeStartToken + endToken = token.variable.typeEndToken + while typeToken != endToken: + if typeToken.str == 'float' or typeToken.str == 'double': + return True + typeToken = typeToken.next + if typeToken.str == 'float' or typeToken.str == 'double': + return True + return False