@@ -2127,7 +2127,7 @@ def _evaluate_method_stack(self):
2127
2127
info ["name" ],
2128
2128
info ,
2129
2129
self .curTemplate ,
2130
- self .lex . get_doxygen (),
2130
+ self ._get_stmt_doxygen (),
2131
2131
self ._get_location (self .nameStack ),
2132
2132
)
2133
2133
klass = self .classes [info ["class" ]]
@@ -2144,7 +2144,7 @@ def _evaluate_method_stack(self):
2144
2144
self .curClass ,
2145
2145
info ,
2146
2146
self .curTemplate ,
2147
- self .lex . get_doxygen (),
2147
+ self ._get_stmt_doxygen (),
2148
2148
self ._get_location (self .nameStack ),
2149
2149
)
2150
2150
klass = self .classes [self .curClass ]
@@ -2161,7 +2161,7 @@ def _evaluate_method_stack(self):
2161
2161
None ,
2162
2162
info ,
2163
2163
self .curTemplate ,
2164
- self .lex . get_doxygen (),
2164
+ self ._get_stmt_doxygen (),
2165
2165
self ._get_location (self .nameStack ),
2166
2166
)
2167
2167
self .functions .append (newMethod )
@@ -2288,7 +2288,7 @@ def _evaluate_property_stack(self, clearStack=True, addToVar=None):
2288
2288
2289
2289
newVar = CppVariable (
2290
2290
self .nameStack ,
2291
- self .lex . get_doxygen (),
2291
+ self ._get_stmt_doxygen (),
2292
2292
self ._get_location (self .nameStack ),
2293
2293
)
2294
2294
newVar ["namespace" ] = self .current_namespace ()
@@ -2305,7 +2305,7 @@ def _evaluate_property_stack(self, clearStack=True, addToVar=None):
2305
2305
debug_print ("Found Global variable" )
2306
2306
newVar = CppVariable (
2307
2307
self .nameStack ,
2308
- self .lex . get_doxygen (),
2308
+ self ._get_stmt_doxygen (),
2309
2309
self ._get_location (self .nameStack ),
2310
2310
)
2311
2311
if addToVar :
@@ -2345,7 +2345,7 @@ def _evaluate_class_stack(self):
2345
2345
if self .nameStack [0 ] == "union" :
2346
2346
newClass = CppUnion (
2347
2347
self .nameStack ,
2348
- self .lex . get_doxygen (),
2348
+ self ._get_stmt_doxygen (),
2349
2349
self ._get_location (self .nameStack ),
2350
2350
)
2351
2351
if newClass ["name" ] == "union " :
@@ -2357,7 +2357,7 @@ def _evaluate_class_stack(self):
2357
2357
newClass = CppClass (
2358
2358
self .nameStack ,
2359
2359
self .curTemplate ,
2360
- self .lex . get_doxygen (),
2360
+ self ._get_stmt_doxygen (),
2361
2361
self ._get_location (self .nameStack ),
2362
2362
)
2363
2363
trace_print ("NEW CLASS" , newClass ["name" ])
@@ -2631,6 +2631,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2631
2631
# it's slowly getting there!), so take this with a grain of salt.
2632
2632
#
2633
2633
2634
+ self ._doxygen_cache = None
2634
2635
tok = None
2635
2636
try :
2636
2637
while True :
@@ -2648,6 +2649,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2648
2649
if tok .value in self .IGNORE_NAMES :
2649
2650
continue
2650
2651
elif tok .value == "template" :
2652
+ self ._doxygen_cache = self .lex .get_doxygen ()
2651
2653
self ._parse_template ()
2652
2654
continue
2653
2655
elif tok .value == "alignas" :
@@ -2666,6 +2668,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2666
2668
continue
2667
2669
2668
2670
self .stack .append (tok .value )
2671
+ nslen = len (self .nameStack )
2669
2672
2670
2673
if tok .type in ("PRECOMP_MACRO" , "PRECOMP_MACRO_CONT" ):
2671
2674
debug_print ("PRECOMP: %s" , tok )
@@ -2748,6 +2751,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2748
2751
2749
2752
elif tok .type in _namestack_append_tokens :
2750
2753
self .nameStack .append (tok .value )
2754
+ nameStackAppended = True
2751
2755
elif tok .type in _namestack_pass_tokens :
2752
2756
pass
2753
2757
elif tok .type in _namestack_str_tokens :
@@ -2797,6 +2801,11 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2797
2801
self .stack = []
2798
2802
self .nameStack = []
2799
2803
2804
+ newNsLen = len (self .nameStack )
2805
+ if nslen != newNsLen and newNsLen == 1 :
2806
+ if not self .curTemplate :
2807
+ self ._doxygen_cache = self .lex .get_doxygen ()
2808
+
2800
2809
except Exception as e :
2801
2810
if debug :
2802
2811
raise
@@ -2829,6 +2838,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2829
2838
# Delete some temporary variables
2830
2839
for key in [
2831
2840
"_precomp_macro_buf" ,
2841
+ "_doxygen_cache" ,
2832
2842
"lex" ,
2833
2843
"nameStack" ,
2834
2844
"nameSpaces" ,
@@ -2856,6 +2866,14 @@ def _get_location(self, stack):
2856
2866
2857
2867
return self .lex .current_location ()
2858
2868
2869
+ def _get_stmt_doxygen (self ):
2870
+ # retrieves the doxygen comment associated with an accumulated
2871
+ # statement (since doxygen comments have to be retrieved immediately)
2872
+ doxygen , self ._doxygen_cache = self ._doxygen_cache , ""
2873
+ if not doxygen :
2874
+ doxygen = self .lex .get_doxygen ()
2875
+ return doxygen
2876
+
2859
2877
def _parse_error (self , tokens , expected ):
2860
2878
if not tokens :
2861
2879
# common case after a failed token_if
@@ -3003,13 +3021,13 @@ def _evaluate_stack(self, token=None):
3003
3021
alias = self .nameStack [1 ]
3004
3022
ns , stack = _split_namespace (self .nameStack [3 :])
3005
3023
atype = CppVariable (
3006
- stack , self .lex . get_doxygen (), self ._get_location (stack )
3024
+ stack , self ._get_stmt_doxygen (), self ._get_location (stack )
3007
3025
)
3008
3026
else :
3009
3027
# using foo::bar
3010
3028
ns , stack = _split_namespace (self .nameStack [1 :])
3011
3029
atype = CppVariable (
3012
- stack , self .lex . get_doxygen (), self ._get_location (stack )
3030
+ stack , self ._get_stmt_doxygen (), self ._get_location (stack )
3013
3031
)
3014
3032
alias = atype ["type" ]
3015
3033
@@ -3158,7 +3176,7 @@ def _parse_enum(self):
3158
3176
"""
3159
3177
3160
3178
# entry: enum token was just consumed
3161
- doxygen = self .lex . get_doxygen ()
3179
+ doxygen = self ._get_stmt_doxygen ()
3162
3180
location = self .lex .current_location ()
3163
3181
3164
3182
nametok = self .lex .token ()
0 commit comments