File tree Expand file tree Collapse file tree 2 files changed +35
-2
lines changed Expand file tree Collapse file tree 2 files changed +35
-2
lines changed Original file line number Diff line number Diff line change @@ -1473,7 +1473,7 @@ def initextra(self):
1473
1473
[]
1474
1474
) # full name stack, good idea to keep both stacks? (simple stack and full stack)
1475
1475
self ._classes_brace_level = {} # class name : level
1476
- self ._forward_decls = []
1476
+ self ._forward_decls = {} # name: namespace
1477
1477
self ._template_typenames = [] # template<typename XXX>
1478
1478
1479
1479
def current_namespace (self ):
@@ -1747,6 +1747,7 @@ def finalize_vars(self):
1747
1747
1748
1748
elif tag in self ._forward_decls :
1749
1749
var ["forward_declared" ] = tag
1750
+ var ["namespace" ] = self ._forward_decls [tag ]
1750
1751
var ["ctypes_type" ] = "ctypes.c_void_p"
1751
1752
1752
1753
elif tag in self .global_enums :
@@ -2599,7 +2600,7 @@ def evalute_forward_decl(self):
2599
2600
if self .curAccessSpecifier == "public" :
2600
2601
klass ._public_forward_declares .append (name )
2601
2602
else :
2602
- self ._forward_decls . append ( name )
2603
+ self ._forward_decls [ name ] = self . current_namespace ( )
2603
2604
2604
2605
2605
2606
# fmt: off
Original file line number Diff line number Diff line change @@ -3929,5 +3929,37 @@ def test_fn(self):
3929
3929
self .assertEqual (m ["returns" ], "int" )
3930
3930
3931
3931
3932
+ class ForwardDeclResolve (unittest .TestCase ):
3933
+ def setUp (self ):
3934
+ self .cppHeader = CppHeaderParser .CppHeader (
3935
+ """
3936
+ namespace n1 {
3937
+
3938
+ class A;
3939
+
3940
+ namespace n2 {
3941
+
3942
+ class B {
3943
+ public:
3944
+ explicit B(const A &a);
3945
+ };
3946
+
3947
+ }
3948
+ """ ,
3949
+ "string" ,
3950
+ )
3951
+
3952
+ def test_fn (self ):
3953
+ c = self .cppHeader .classes ["B" ]
3954
+ self .assertEqual ("B" , c ["name" ])
3955
+
3956
+ m = c ["methods" ]["public" ][0 ]
3957
+ self .assertEqual (m ["name" ], "B" )
3958
+ self .assertEqual (m ["parameters" ][0 ]["forward_declared" ], "A" )
3959
+ self .assertEqual (m ["parameters" ][0 ]["namespace" ], "n1::" )
3960
+ self .assertEqual (m ["parameters" ][0 ]["name" ], "a" )
3961
+ self .assertEqual (m ["parameters" ][0 ]["raw_type" ], "n1::A" )
3962
+
3963
+
3932
3964
if __name__ == "__main__" :
3933
3965
unittest .main ()
You can’t perform that action at this time.
0 commit comments