Skip to content

Commit 2215299

Browse files
authored
fix: hex float types (#567)
1 parent 037bd31 commit 2215299

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

pycparser/c_parser.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1891,15 +1891,12 @@ def p_constant_2(self, p):
18911891
""" constant : FLOAT_CONST
18921892
| HEX_FLOAT_CONST
18931893
"""
1894-
if 'x' in p[1].lower():
1894+
if p[1][-1] in ('f', 'F'):
18951895
t = 'float'
1896+
elif p[1][-1] in ('l', 'L'):
1897+
t = 'long double'
18961898
else:
1897-
if p[1][-1] in ('f', 'F'):
1898-
t = 'float'
1899-
elif p[1][-1] in ('l', 'L'):
1900-
t = 'long double'
1901-
else:
1902-
t = 'double'
1899+
t = 'double'
19031900

19041901
p[0] = c_ast.Constant(
19051902
t, p[1], self._token_coord(p, 1))

tests/test_c_parser.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1464,7 +1464,7 @@ def test_decl_inits(self):
14641464

14651465
d1_1 = 'float f = 0xEF.56p1;'
14661466
self.assertEqual(self.get_decl_init(d1_1),
1467-
['Constant', 'float', '0xEF.56p1'])
1467+
['Constant', 'double', '0xEF.56p1'])
14681468

14691469
d1_2 = 'int bitmask = 0b1001010;'
14701470
self.assertEqual(self.get_decl_init(d1_2),
@@ -1529,7 +1529,23 @@ def test_decl_inits(self):
15291529

15301530
d55 = 'float ld = 0xDE.38p0;'
15311531
self.assertEqual(self.get_decl_init(d55),
1532-
['Constant', 'float', '0xDE.38p0'])
1532+
['Constant', 'double', '0xDE.38p0'])
1533+
1534+
d56 = 'float ld = 0xDE.38p0f;'
1535+
self.assertEqual(self.get_decl_init(d56),
1536+
['Constant', 'float', '0xDE.38p0f'])
1537+
1538+
d57 = 'float ld = 0xDE.38p0F;'
1539+
self.assertEqual(self.get_decl_init(d57),
1540+
['Constant', 'float', '0xDE.38p0F'])
1541+
1542+
d58 = 'float ld = 0xDE.38p0l;'
1543+
self.assertEqual(self.get_decl_init(d58),
1544+
['Constant', 'long double', '0xDE.38p0l'])
1545+
1546+
d59 = 'float ld = 0xDE.38p0L;'
1547+
self.assertEqual(self.get_decl_init(d59),
1548+
['Constant', 'long double', '0xDE.38p0L'])
15331549

15341550
d6 = 'int i = 1;'
15351551
self.assertEqual(self.get_decl_init(d6),

0 commit comments

Comments
 (0)