diff --git a/cxxheaderparser/lexer.py b/cxxheaderparser/lexer.py index 17caf92..e0b23cc 100644 --- a/cxxheaderparser/lexer.py +++ b/cxxheaderparser/lexer.py @@ -111,6 +111,10 @@ class PlyLexer: "__inline", "inline", "int", + "__int8", + "__int16", + "__int32", + "__int64", "long", "mutable", "namespace", diff --git a/cxxheaderparser/parser.py b/cxxheaderparser/parser.py index 41b7a54..8582f07 100644 --- a/cxxheaderparser/parser.py +++ b/cxxheaderparser/parser.py @@ -1514,6 +1514,10 @@ def _parse_pqname_decltype_specifier(self) -> DecltypeSpecifier: "float", "double", "char", + "__int8", + "__int16", + "__int32", + "__int64" } _fundamentals = _compound_fundamentals | { @@ -1522,7 +1526,7 @@ def _parse_pqname_decltype_specifier(self) -> DecltypeSpecifier: "char32_t", "nullptr_t", "wchar_t", - "void", + "void" } def _parse_pqname_fundamental(self, tok_value: str) -> FundamentalSpecifier: diff --git a/tests/test_msvc_types.py b/tests/test_msvc_types.py new file mode 100644 index 0000000..bf08bb2 --- /dev/null +++ b/tests/test_msvc_types.py @@ -0,0 +1,56 @@ +from cxxheaderparser.types import ( + Function, + Type, + PQName, + NameSpecifier, +) +from cxxheaderparser.simple import ( + NamespaceScope, + parse_string, + ParsedData, +) + + +def test_msvc_types() -> None: + content = """ + __int64 test_int64(); + __int32 test_int32(); + __int16 test_int16(); + __int8 test_int8(); + """ + data = parse_string(content, cleandoc=True) + + assert data == ParsedData( + namespace=NamespaceScope( + functions=[ + Function( + return_type=Type( + typename=PQName(segments=[NameSpecifier(name="__int64")]) + ), + name=PQName(segments=[NameSpecifier(name="test_int64")]), + parameters=[], + ), + Function( + return_type=Type( + typename=PQName(segments=[NameSpecifier(name="__int32")]) + ), + name=PQName(segments=[NameSpecifier(name="test_int32")]), + parameters=[], + ), + Function( + return_type=Type( + typename=PQName(segments=[NameSpecifier(name="__int16")]) + ), + name=PQName(segments=[NameSpecifier(name="test_int16")]), + parameters=[], + ), + Function( + return_type=Type( + typename=PQName(segments=[NameSpecifier(name="__int8")]) + ), + name=PQName(segments=[NameSpecifier(name="test_int8")]), + parameters=[], + ), + ] + ) + )