Skip to content

Commit c5e9da2

Browse files
committed
xml dump: add more token attributes
1 parent 46a0ab1 commit c5e9da2

2 files changed

Lines changed: 84 additions & 23 deletions

File tree

lib/tokenize.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3827,6 +3827,31 @@ void Tokenizer::dump(std::ostream &out) const
38273827
out << " <token id=\"" << tok << "\" file=\"" << toxml(list.file(tok)) << "\" linenr=\"" << tok->linenr() << '\"';
38283828
out << " str=\"" << toxml(tok->str()) << '\"';
38293829
out << " scope=\"" << tok->scope() << '\"';
3830+
if (tok->isName())
3831+
out << " type=\"name\"";
3832+
else if (tok->isNumber()) {
3833+
out << " type=\"number\"";
3834+
if (MathLib::isInt(tok->str()))
3835+
out << " isInt=\"True\"";
3836+
if (MathLib::isFloat(tok->str()))
3837+
out << " isFloat=\"True\"";
3838+
} else if (tok->type() == Token::eString)
3839+
out << " type=\"string\" strlen=\"" << Token::getStrLength(tok) << '\"';
3840+
else if (tok->type() == Token::eChar)
3841+
out << " type=\"char\"";
3842+
else if (tok->isBoolean())
3843+
out << " type=\"boolean\"";
3844+
else if (tok->isOp()) {
3845+
out << " type=\"op\"";
3846+
if (tok->isArithmeticalOp())
3847+
out << " isArithmeticalOp=\"True\"";
3848+
else if (tok->isAssignmentOp())
3849+
out << " isAssignmentOp=\"True\"";
3850+
else if (tok->isComparisonOp())
3851+
out << " isComparisonOp=\"True\"";
3852+
else if (tok->type() == Token::eLogicalOp)
3853+
out << " isLogicalOp=\"True\"";
3854+
}
38303855
if (tok->link())
38313856
out << " link=\"" << tok->link() << '\"';
38323857
if (tok->varId() > 0U)

tools/cppcheckdata.py

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,41 @@
44
from lxml import etree
55

66
class Token:
7-
Id = None
8-
str = None
9-
next = None
10-
previous = None
11-
scopeId = None
12-
scope = None
13-
linkId = None
14-
link = None
15-
varId = None
16-
variableId = None
17-
variable = None
18-
functionId = None
19-
function = None
20-
valuesId = None
21-
values = None
22-
astParentId = None
23-
astParent = None
24-
astOperand1Id = None
25-
astOperand1 = None
26-
astOperand2Id = None
27-
astOperand2 = None
28-
file = None
29-
linenr = None
7+
Id = None
8+
str = None
9+
next = None
10+
previous = None
11+
scopeId = None
12+
scope = None
13+
isName = None
14+
isNumber = None
15+
isInt = None
16+
isFloat = None
17+
isString = None
18+
strlen = None
19+
isChar = None
20+
isOp = None
21+
isArithmeticalOp = None
22+
isAssignmentOp = None
23+
isComparisonOp = None
24+
isLogicalOp = None
25+
linkId = None
26+
link = None
27+
varId = None
28+
variableId = None
29+
variable = None
30+
functionId = None
31+
function = None
32+
valuesId = None
33+
values = None
34+
astParentId = None
35+
astParent = None
36+
astOperand1Id = None
37+
astOperand1 = None
38+
astOperand2Id = None
39+
astOperand2 = None
40+
file = None
41+
linenr = None
3042

3143
def __init__(self, element):
3244
self.Id = element.get('id')
@@ -35,6 +47,30 @@ def __init__(self, element):
3547
self.previous = None
3648
self.scopeId = element.get('scope')
3749
self.scope = None
50+
type = element.get('type')
51+
if type == 'name':
52+
self.isName = True
53+
elif type == 'number':
54+
self.isNumber = True
55+
if element.get('isInt'):
56+
self.isInt = True
57+
elif element.get('isFloat'):
58+
self.isFloat = True
59+
elif type == 'string':
60+
self.isString = True
61+
self.strlen = int(element.get('strlen'))
62+
elif type == 'char':
63+
self.isChar = True
64+
elif type == 'op':
65+
self.isOp = True
66+
if element.get('isArithmeticalOp'):
67+
self.isArithmeticalOp = True
68+
elif element.get('isAssignmentOp'):
69+
self.isAssignmentOp = True
70+
elif element.get('isComparisonOp'):
71+
self.isComparisonOp = True
72+
elif element.get('isLogicalOp'):
73+
self.isLogicalOp = True
3874
self.linkId = element.get('link')
3975
self.link = None
4076
self.varId = element.get('varId')

0 commit comments

Comments
 (0)