cxxheaderparser 1.3.0__tar.gz → 1.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/PKG-INFO +1 -1
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/lexer.py +4 -4
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/parser.py +3 -1
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/version.py +1 -1
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/PKG-INFO +1 -1
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/SOURCES.txt +1 -0
- cxxheaderparser-1.3.2/tests/test_numeric_literals.py +60 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_using.py +61 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/LICENSE.txt +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/README.md +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/__init__.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/__main__.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/_ply/__init__.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/_ply/lex.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/dump.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/errors.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/gentest.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/options.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/parserstate.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/preprocessor.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/py.typed +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/simple.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/tokfmt.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/types.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser/visitor.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/dependency_links.txt +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/requires.txt +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/top_level.txt +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/setup.cfg +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/setup.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_abv_template.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_attributes.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_class.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_class_base.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_concepts.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_doxygen.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_enum.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_fn.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_friends.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_misc.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_namespaces.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_operators.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_preprocessor.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_skip.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_template.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_tokfmt.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_typedef.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_typefmt.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_union.py +0 -0
- {cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/tests/test_var.py +0 -0
|
@@ -225,18 +225,18 @@ class PlyLexer:
|
|
|
225
225
|
#
|
|
226
226
|
|
|
227
227
|
hex_prefix = "0[xX]"
|
|
228
|
-
hex_digits = "[0-9a-fA-F]+"
|
|
228
|
+
hex_digits = "[0-9a-fA-F']+"
|
|
229
229
|
bin_prefix = "0[bB]"
|
|
230
|
-
bin_digits = "[01]+"
|
|
230
|
+
bin_digits = "[01']+"
|
|
231
231
|
|
|
232
232
|
# integer constants (K&R2: A.2.5.1)
|
|
233
233
|
integer_suffix_opt = (
|
|
234
234
|
r"(([uU]ll)|([uU]LL)|(ll[uU]?)|(LL[uU]?)|([uU][lL])|([lL][uU]?)|[uU])?"
|
|
235
235
|
)
|
|
236
236
|
decimal_constant = (
|
|
237
|
-
"(0" + integer_suffix_opt + ")|([1-9][0-9]*" + integer_suffix_opt + ")"
|
|
237
|
+
"(0" + integer_suffix_opt + ")|([1-9][0-9']*" + integer_suffix_opt + ")"
|
|
238
238
|
)
|
|
239
|
-
octal_constant = "0[0-7]*" + integer_suffix_opt
|
|
239
|
+
octal_constant = "0[0-7']*" + integer_suffix_opt
|
|
240
240
|
hex_constant = hex_prefix + hex_digits + integer_suffix_opt
|
|
241
241
|
bin_constant = bin_prefix + bin_digits + integer_suffix_opt
|
|
242
242
|
|
|
@@ -1041,7 +1041,9 @@ class CxxParser:
|
|
|
1041
1041
|
) -> None:
|
|
1042
1042
|
self.state.location = tok.location
|
|
1043
1043
|
|
|
1044
|
-
tok = self._next_token_must_be(
|
|
1044
|
+
tok = self._next_token_must_be(
|
|
1045
|
+
"NAME", "DBL_COLON", "namespace", "typename", "enum"
|
|
1046
|
+
)
|
|
1045
1047
|
|
|
1046
1048
|
if tok.type == "namespace":
|
|
1047
1049
|
if template:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Autogenerated by setup.py
|
|
2
|
-
__version__ = '1.3.
|
|
2
|
+
__version__ = '1.3.2'
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Note: testcases generated via `python -m cxxheaderparser.gentest`
|
|
2
|
+
|
|
3
|
+
from cxxheaderparser.types import (
|
|
4
|
+
FundamentalSpecifier,
|
|
5
|
+
NameSpecifier,
|
|
6
|
+
PQName,
|
|
7
|
+
Token,
|
|
8
|
+
Type,
|
|
9
|
+
Value,
|
|
10
|
+
Variable,
|
|
11
|
+
)
|
|
12
|
+
from cxxheaderparser.simple import (
|
|
13
|
+
Include,
|
|
14
|
+
NamespaceScope,
|
|
15
|
+
Pragma,
|
|
16
|
+
parse_string,
|
|
17
|
+
ParsedData,
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_numeric_literals() -> None:
|
|
22
|
+
content = """
|
|
23
|
+
#pragma once
|
|
24
|
+
#include <cstdint>
|
|
25
|
+
|
|
26
|
+
int test_binary = 0b01'10'01;
|
|
27
|
+
int test_decimal = 123'456'789u;
|
|
28
|
+
int test_octal = 012'42'11l;
|
|
29
|
+
"""
|
|
30
|
+
data = parse_string(content, cleandoc=True)
|
|
31
|
+
|
|
32
|
+
assert data == ParsedData(
|
|
33
|
+
namespace=NamespaceScope(
|
|
34
|
+
variables=[
|
|
35
|
+
Variable(
|
|
36
|
+
name=PQName(segments=[NameSpecifier(name="test_binary")]),
|
|
37
|
+
type=Type(
|
|
38
|
+
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
|
39
|
+
),
|
|
40
|
+
value=Value(tokens=[Token(value="0b01'10'01")]),
|
|
41
|
+
),
|
|
42
|
+
Variable(
|
|
43
|
+
name=PQName(segments=[NameSpecifier(name="test_decimal")]),
|
|
44
|
+
type=Type(
|
|
45
|
+
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
|
46
|
+
),
|
|
47
|
+
value=Value(tokens=[Token(value="123'456'789u")]),
|
|
48
|
+
),
|
|
49
|
+
Variable(
|
|
50
|
+
name=PQName(segments=[NameSpecifier(name="test_octal")]),
|
|
51
|
+
type=Type(
|
|
52
|
+
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
|
53
|
+
),
|
|
54
|
+
value=Value(tokens=[Token(value="012'42'11l")]),
|
|
55
|
+
),
|
|
56
|
+
]
|
|
57
|
+
),
|
|
58
|
+
pragmas=[Pragma(content=Value(tokens=[Token(value="once")]))],
|
|
59
|
+
includes=[Include(filename="<cstdint>")],
|
|
60
|
+
)
|
|
@@ -716,3 +716,64 @@ def test_using_typename_in_class() -> None:
|
|
|
716
716
|
]
|
|
717
717
|
)
|
|
718
718
|
)
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
def test_using_enum_global() -> None:
|
|
722
|
+
content = """
|
|
723
|
+
namespace A {
|
|
724
|
+
using enum B::C;
|
|
725
|
+
}
|
|
726
|
+
"""
|
|
727
|
+
data = parse_string(content, cleandoc=True)
|
|
728
|
+
|
|
729
|
+
assert data == ParsedData(
|
|
730
|
+
namespace=NamespaceScope(
|
|
731
|
+
namespaces={
|
|
732
|
+
"A": NamespaceScope(
|
|
733
|
+
name="A",
|
|
734
|
+
using=[
|
|
735
|
+
UsingDecl(
|
|
736
|
+
typename=PQName(
|
|
737
|
+
segments=[
|
|
738
|
+
NameSpecifier(name="B"),
|
|
739
|
+
NameSpecifier(name="C"),
|
|
740
|
+
],
|
|
741
|
+
classkey="enum",
|
|
742
|
+
)
|
|
743
|
+
)
|
|
744
|
+
],
|
|
745
|
+
)
|
|
746
|
+
}
|
|
747
|
+
)
|
|
748
|
+
)
|
|
749
|
+
|
|
750
|
+
|
|
751
|
+
def test_using_enum_in_struct() -> None:
|
|
752
|
+
content = """
|
|
753
|
+
struct S {
|
|
754
|
+
using enum fruit;
|
|
755
|
+
};
|
|
756
|
+
"""
|
|
757
|
+
data = parse_string(content, cleandoc=True)
|
|
758
|
+
|
|
759
|
+
assert data == ParsedData(
|
|
760
|
+
namespace=NamespaceScope(
|
|
761
|
+
classes=[
|
|
762
|
+
ClassScope(
|
|
763
|
+
class_decl=ClassDecl(
|
|
764
|
+
typename=PQName(
|
|
765
|
+
segments=[NameSpecifier(name="S")], classkey="struct"
|
|
766
|
+
)
|
|
767
|
+
),
|
|
768
|
+
using=[
|
|
769
|
+
UsingDecl(
|
|
770
|
+
typename=PQName(
|
|
771
|
+
segments=[NameSpecifier(name="fruit")], classkey="enum"
|
|
772
|
+
),
|
|
773
|
+
access="public",
|
|
774
|
+
)
|
|
775
|
+
],
|
|
776
|
+
)
|
|
777
|
+
]
|
|
778
|
+
)
|
|
779
|
+
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cxxheaderparser-1.3.0 → cxxheaderparser-1.3.2}/cxxheaderparser.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|