File tree Expand file tree Collapse file tree 2 files changed +39
-5
lines changed Expand file tree Collapse file tree 2 files changed +39
-5
lines changed Original file line number Diff line number Diff line change @@ -2428,12 +2428,9 @@ def _evaluate_class_stack(self):
2428
2428
# dont support sub classes today
2429
2429
# print( 'eval class stack', self.nameStack )
2430
2430
parent = self .curClass
2431
- if self . braceDepth > len ( self . nameSpaces ) and parent :
2432
- trace_print ( "HIT NESTED SUBCLASS " )
2431
+ if parent :
2432
+ debug_print ( "found nested subclass " )
2433
2433
self .accessSpecifierStack .append (self .curAccessSpecifier )
2434
- elif self .braceDepth != len (self .nameSpaces ):
2435
- error_print ("ERROR: WRONG BRACE DEPTH" )
2436
- return
2437
2434
2438
2435
# When dealing with typedefed structs, get rid of typedef keyword to handle later on
2439
2436
if self .nameStack [0 ] == "typedef" :
@@ -2478,6 +2475,7 @@ def _evaluate_class_stack(self):
2478
2475
if parent :
2479
2476
newClass ["namespace" ] = self .classes [parent ]["namespace" ] + "::" + parent
2480
2477
newClass ["parent" ] = self .classes [parent ]
2478
+ newClass ["access_in_parent" ] = self .accessSpecifierStack [- 1 ]
2481
2479
self .classes [parent ]["nested_classes" ].append (newClass )
2482
2480
## supports nested classes with the same name ##
2483
2481
self .curClass = key = parent + "::" + classKey
Original file line number Diff line number Diff line change @@ -3708,5 +3708,41 @@ def test_fn(self):
3708
3708
self .assertEqual (fn ["rtnType" ], "void" )
3709
3709
3710
3710
3711
+ class NestedClassAccess_TestCase (unittest .TestCase ):
3712
+ def setUp (self ):
3713
+ self .cppHeader = CppHeaderParser .CppHeader (
3714
+ """
3715
+ class Outer {
3716
+ struct Inner {
3717
+ void fn();
3718
+ };
3719
+
3720
+ void ofn();
3721
+ };
3722
+ """ ,
3723
+ "string" ,
3724
+ )
3725
+
3726
+ def test_fn (self ):
3727
+ self .assertEqual (len (self .cppHeader .functions ), 0 )
3728
+
3729
+ outer = self .cppHeader .classes ["Outer" ]
3730
+ self .assertEqual (outer ["parent" ], None )
3731
+
3732
+ self .assertEqual (0 , len (outer ["methods" ]["public" ]))
3733
+ self .assertEqual (0 , len (outer ["methods" ]["protected" ]))
3734
+ self .assertEqual (1 , len (outer ["methods" ]["private" ]))
3735
+ self .assertEqual ("ofn" , outer ["methods" ]["private" ][0 ]["name" ])
3736
+
3737
+ inner = self .cppHeader .classes ["Outer::Inner" ]
3738
+ self .assertIs (inner ["parent" ], outer )
3739
+ self .assertEqual (inner ["access_in_parent" ], "private" )
3740
+
3741
+ self .assertEqual (1 , len (inner ["methods" ]["public" ]))
3742
+ self .assertEqual (0 , len (inner ["methods" ]["protected" ]))
3743
+ self .assertEqual (0 , len (inner ["methods" ]["private" ]))
3744
+ self .assertEqual ("fn" , inner ["methods" ]["public" ][0 ]["name" ])
3745
+
3746
+
3711
3747
if __name__ == "__main__" :
3712
3748
unittest .main ()
You can’t perform that action at this time.
0 commit comments