Skip to content

Commit 544c253

Browse files
authored
Merge pull request #100 from robotpy/msvc-inline
Parse MSVC inline/forceinline as inline
2 parents 914838c + a7b156d commit 544c253

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

cxxheaderparser/lexer.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,11 @@ class PlyLexer:
104104
"final",
105105
"float",
106106
"for",
107+
"__forceinline",
107108
"friend",
108109
"goto",
109110
"if",
111+
"__inline",
110112
"inline",
111113
"int",
112114
"long",

cxxheaderparser/parser.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2371,6 +2371,8 @@ def _parse_type(
23712371
volatile = True
23722372
elif tok_type in _attribute_start:
23732373
self._consume_attribute(tok)
2374+
elif tok_type in ("__inline", "__forceinline"):
2375+
both["inline"] = tok
23742376
else:
23752377
break
23762378

tests/test_fn.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1258,3 +1258,58 @@ def test_method_trailing_return_with_body() -> None:
12581258
]
12591259
)
12601260
)
1261+
1262+
1263+
def test_msvc_inline() -> None:
1264+
content = """
1265+
__inline double fn1() {}
1266+
__forceinline double fn2() {}
1267+
static __inline double fn3() {}
1268+
static __forceinline double fn4() {}
1269+
"""
1270+
data = parse_string(content, cleandoc=True)
1271+
1272+
assert data == ParsedData(
1273+
namespace=NamespaceScope(
1274+
functions=[
1275+
Function(
1276+
return_type=Type(
1277+
typename=PQName(segments=[FundamentalSpecifier(name="double")])
1278+
),
1279+
name=PQName(segments=[NameSpecifier(name="fn1")]),
1280+
parameters=[],
1281+
inline=True,
1282+
has_body=True,
1283+
),
1284+
Function(
1285+
return_type=Type(
1286+
typename=PQName(segments=[FundamentalSpecifier(name="double")])
1287+
),
1288+
name=PQName(segments=[NameSpecifier(name="fn2")]),
1289+
parameters=[],
1290+
inline=True,
1291+
has_body=True,
1292+
),
1293+
Function(
1294+
return_type=Type(
1295+
typename=PQName(segments=[FundamentalSpecifier(name="double")])
1296+
),
1297+
name=PQName(segments=[NameSpecifier(name="fn3")]),
1298+
parameters=[],
1299+
static=True,
1300+
inline=True,
1301+
has_body=True,
1302+
),
1303+
Function(
1304+
return_type=Type(
1305+
typename=PQName(segments=[FundamentalSpecifier(name="double")])
1306+
),
1307+
name=PQName(segments=[NameSpecifier(name="fn4")]),
1308+
parameters=[],
1309+
static=True,
1310+
inline=True,
1311+
has_body=True,
1312+
),
1313+
]
1314+
)
1315+
)

0 commit comments

Comments
 (0)