@@ -1510,7 +1510,6 @@ def initextra(self):
1510
1510
self .stack = (
1511
1511
[]
1512
1512
) # full name stack, good idea to keep both stacks? (simple stack and full stack)
1513
- self ._classes_brace_level = {} # class name : level
1514
1513
self ._forward_decls = []
1515
1514
self ._template_typenames = [] # template<typename XXX>
1516
1515
@@ -2278,7 +2277,7 @@ def parse_method_type(self, stack):
2278
2277
if name .startswith ("~" ):
2279
2278
info ["destructor" ] = True
2280
2279
name = name [1 :]
2281
- elif not a or (name == self .curClass and len ( self .curClass ) ):
2280
+ elif not a or (self .curClass and name == self .curClass [ "name" ] ):
2282
2281
info ["constructor" ] = True
2283
2282
2284
2283
info ["name" ] = name
@@ -2353,15 +2352,15 @@ def _evaluate_method_stack(self):
2353
2352
newMethod ["path" ] = klass ["name" ]
2354
2353
2355
2354
elif self .curClass : # normal case
2355
+ klass = self .curClass
2356
2356
newMethod = CppMethod (
2357
2357
self .nameStack ,
2358
- self . curClass ,
2358
+ klass [ "name" ] ,
2359
2359
info ,
2360
2360
self .curTemplate ,
2361
2361
self ._get_stmt_doxygen (),
2362
2362
self ._get_location (self .nameStack ),
2363
2363
)
2364
- klass = self .classes [self .curClass ]
2365
2364
klass ["methods" ][self .curAccessSpecifier ].append (newMethod )
2366
2365
newMethod ["parent" ] = klass
2367
2366
if klass ["namespace" ]:
@@ -2453,11 +2452,10 @@ def _evaluate_property_stack(self, clearStack=True, addToVar=None):
2453
2452
if self .curClass :
2454
2453
typedef = self ._parse_typedef (self .stack )
2455
2454
name = typedef ["name" ]
2456
- klass = self .classes [self .curClass ]
2457
- klass ["typedefs" ][self .curAccessSpecifier ].append (name )
2455
+ self .curClass ["typedefs" ][self .curAccessSpecifier ].append (name )
2458
2456
if self .curAccessSpecifier == "public" :
2459
- klass ._public_typedefs [name ] = typedef ["type" ]
2460
- Resolver .SubTypedefs [name ] = self .curClass
2457
+ self . curClass ._public_typedefs [name ] = typedef ["type" ]
2458
+ Resolver .SubTypedefs [name ] = self .curClass [ "name" ]
2461
2459
else :
2462
2460
assert 0
2463
2461
elif self .curClass :
@@ -2510,7 +2508,7 @@ def _evaluate_property_stack(self, clearStack=True, addToVar=None):
2510
2508
)
2511
2509
newVar ["namespace" ] = self .current_namespace ()
2512
2510
if self .curClass :
2513
- klass = self .classes [ self . curClass ]
2511
+ klass = self .curClass
2514
2512
klass ["properties" ][self .curAccessSpecifier ].append (newVar )
2515
2513
newVar ["property_of_class" ] = klass ["name" ]
2516
2514
newVar ["parent" ] = klass
@@ -2589,27 +2587,26 @@ def _evaluate_class_stack(self):
2589
2587
classKey = newClass ["name" ]
2590
2588
2591
2589
if parent :
2592
- newClass ["namespace" ] = self . classes [ parent ] ["namespace" ] + "::" + parent
2593
- newClass ["parent" ] = self . classes [ parent ]
2590
+ newClass ["namespace" ] = parent ["namespace" ] + "::" + parent [ "name" ]
2591
+ newClass ["parent" ] = parent
2594
2592
newClass ["access_in_parent" ] = self .accessSpecifierStack [- 1 ]
2595
- self . classes [ parent ] ["nested_classes" ].append (newClass )
2593
+ parent ["nested_classes" ].append (newClass )
2596
2594
## supports nested classes with the same name ##
2597
- self .curClass = key = parent + "::" + classKey
2598
- self ._classes_brace_level [key ] = self .braceDepth
2595
+ key = parent ["name" ] + "::" + classKey
2599
2596
2600
2597
elif newClass ["parent" ]: # nested class defined outside of parent. A::B {...}
2601
2598
pcls = newClass ["parent" ]
2602
- parent = pcls ["name" ]
2603
- newClass ["namespace" ] = pcls ["namespace" ] + "::" + parent
2599
+ parentName = pcls ["name" ]
2600
+ newClass ["namespace" ] = pcls ["namespace" ] + "::" + parentName
2604
2601
pcls ["nested_classes" ].append (newClass )
2605
2602
## supports nested classes with the same name ##
2606
- self .curClass = key = parent + "::" + classKey
2607
- self ._classes_brace_level [key ] = self .braceDepth
2603
+ key = parentName + "::" + classKey
2608
2604
2609
2605
else :
2610
2606
newClass ["namespace" ] = self .cur_namespace ()
2611
- self .curClass = key = classKey
2612
- self ._classes_brace_level [classKey ] = self .braceDepth
2607
+ key = classKey
2608
+
2609
+ self .curClass = newClass
2613
2610
2614
2611
if not key .endswith ("::" ) and not key .endswith (" " ) and len (key ) != 0 :
2615
2612
if key in self .classes :
@@ -2628,10 +2625,9 @@ def evalute_forward_decl(self):
2628
2625
assert self .nameStack [0 ] in ("class" , "struct" )
2629
2626
name = self .nameStack [- 1 ]
2630
2627
if self .curClass :
2631
- klass = self .classes [self .curClass ]
2632
- klass ["forward_declares" ][self .curAccessSpecifier ].append (name )
2628
+ self .curClass ["forward_declares" ][self .curAccessSpecifier ].append (name )
2633
2629
if self .curAccessSpecifier == "public" :
2634
- klass ._public_forward_declares .append (name )
2630
+ self . curClass ._public_forward_declares .append (name )
2635
2631
else :
2636
2632
self ._forward_decls .append (name )
2637
2633
@@ -2705,7 +2701,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2705
2701
headerFileStr = headerFileName
2706
2702
else :
2707
2703
raise Exception ("Arg type must be either file or string" )
2708
- self .curClass = ""
2704
+ self .curClass = None
2709
2705
2710
2706
# nested classes have parent::nested, but no extra namespace,
2711
2707
# this keeps the API compatible, TODO proper namespace for everything.
@@ -2977,24 +2973,14 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2977
2973
self ._evaluate_stack ()
2978
2974
self .braceDepth -= 1
2979
2975
2980
- # if self.curClass:
2981
- # debug_print(
2982
- # "CURBD %s", self._classes_brace_level[self.curClass]
2983
- # )
2984
-
2985
- if (self .braceDepth == 0 ) or (
2986
- self .curClass
2987
- and self ._classes_brace_level [self .curClass ] == self .braceDepth
2988
- ):
2976
+ if self .braceDepth == 0 or self .curClass :
2989
2977
trace_print ("END OF CLASS DEF" )
2990
2978
if self .accessSpecifierStack :
2991
2979
self .curAccessSpecifier = self .accessSpecifierStack [- 1 ]
2992
2980
self .accessSpecifierStack = self .accessSpecifierStack [:- 1 ]
2993
- if self .curClass and self .classes [self .curClass ]["parent" ]:
2994
- thisClass = self .classes [self .curClass ]
2995
- self .curClass = self .curClass [
2996
- : - (len (thisClass ["name" ]) + 2 )
2997
- ]
2981
+ if self .curClass and self .curClass ["parent" ]:
2982
+ thisClass = self .curClass
2983
+ self .curClass = self .curClass ["parent" ]
2998
2984
2999
2985
# Detect anonymous union members
3000
2986
if (
@@ -3014,7 +3000,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
3014
3000
self .nameStack = []
3015
3001
self .stmtTokens = []
3016
3002
else :
3017
- self .curClass = ""
3003
+ self .curClass = None
3018
3004
self .stack = []
3019
3005
self .stmtTokens = []
3020
3006
elif tok .type in _namestack_append_tokens :
@@ -3115,7 +3101,6 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
3115
3101
"anon_struct_counter" ,
3116
3102
"anon_union_counter" ,
3117
3103
"anon_class_counter" ,
3118
- "_classes_brace_level" ,
3119
3104
"_forward_decls" ,
3120
3105
"stack" ,
3121
3106
"mainClass" ,
@@ -3124,6 +3109,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
3124
3109
"stmtTokens" ,
3125
3110
"typedefs_order" ,
3126
3111
"curTemplate" ,
3112
+ "curClass" ,
3127
3113
]:
3128
3114
del self .__dict__ [key ]
3129
3115
@@ -3285,10 +3271,10 @@ def _evaluate_stack(self, token=None):
3285
3271
debug_caller_lineno ,
3286
3272
)
3287
3273
3288
- if len (self .curClass ):
3289
- debug_print ("%s (%s) " , self .curClass , self .curAccessSpecifier )
3290
- else :
3291
- debug_print ("<anonymous> (%s) " , self .curAccessSpecifier )
3274
+ # if len(self.curClass):
3275
+ # debug_print("%s (%s) ", self.curClass, self.curAccessSpecifier)
3276
+ # else:
3277
+ # debug_print("<anonymous> (%s) ", self.curAccessSpecifier)
3292
3278
3293
3279
# Filter special case of array with casting in it
3294
3280
try :
@@ -3372,7 +3358,7 @@ def _evaluate_stack(self, token=None):
3372
3358
atype ["raw_type" ] = ns + atype ["type" ]
3373
3359
3374
3360
if self .curClass :
3375
- klass = self .classes [ self . curClass ]
3361
+ klass = self .curClass
3376
3362
klass ["using" ][alias ] = atype
3377
3363
else :
3378
3364
# lookup is done
@@ -3436,10 +3422,11 @@ def _evaluate_stack(self, token=None):
3436
3422
else :
3437
3423
debug_print ("Discarded statement %s" , self .nameStack )
3438
3424
3425
+ className = self .curClass ["name" ] if self .curClass else ""
3439
3426
try :
3440
- self .nameStackHistory [self .braceDepth ] = (nameStackCopy , self . curClass )
3427
+ self .nameStackHistory [self .braceDepth ] = (nameStackCopy , className )
3441
3428
except :
3442
- self .nameStackHistory .append ((nameStackCopy , self . curClass ))
3429
+ self .nameStackHistory .append ((nameStackCopy , className ))
3443
3430
3444
3431
# its a little confusing to have some if/else above return and others not, and then clearning the nameStack down here
3445
3432
self .nameStack = []
@@ -3595,12 +3582,11 @@ def _parse_enum(self):
3595
3582
self ._install_enum (newEnum , instancesData )
3596
3583
3597
3584
def _install_enum (self , newEnum , instancesData ):
3598
- if len ( self .curClass ) :
3585
+ if self .curClass :
3599
3586
newEnum ["namespace" ] = self .cur_namespace (False )
3600
- klass = self .classes [self .curClass ]
3601
- klass ["enums" ][self .curAccessSpecifier ].append (newEnum )
3587
+ self .curClass ["enums" ][self .curAccessSpecifier ].append (newEnum )
3602
3588
if self .curAccessSpecifier == "public" and "name" in newEnum :
3603
- klass ._public_enums [newEnum ["name" ]] = newEnum
3589
+ self . curClass ._public_enums [newEnum ["name" ]] = newEnum
3604
3590
else :
3605
3591
newEnum ["namespace" ] = self .cur_namespace (True )
3606
3592
self .enums .append (newEnum )
0 commit comments