@@ -1043,20 +1043,31 @@ def __init__(self, nameStack, curClass, methinfo, curTemplate, doxygen, location
1043
1043
# Find commas that are not nexted in <>'s like template types
1044
1044
open_template_count = 0
1045
1045
open_paren_count = 0
1046
+ open_brace_count = 0
1046
1047
param_separator = 0
1047
1048
i = 0
1048
1049
for elm in paramsStack :
1049
- if "<" in elm :
1050
- open_template_count += 1
1051
- elif ">" in elm :
1052
- open_template_count -= 1
1053
- elif "(" in elm :
1054
- open_paren_count += 1
1055
- elif ")" in elm :
1056
- open_paren_count -= 1
1057
- elif elm == "," and open_template_count == 0 and open_paren_count == 0 :
1058
- param_separator = i
1059
- break
1050
+ if elm in "<>(){}," :
1051
+ if elm == "," :
1052
+ if (
1053
+ open_template_count == 0
1054
+ and open_paren_count == 0
1055
+ and open_brace_count == 0
1056
+ ):
1057
+ param_separator = i
1058
+ break
1059
+ elif "<" == elm :
1060
+ open_template_count += 1
1061
+ elif ">" == elm :
1062
+ open_template_count -= 1
1063
+ elif "(" == elm :
1064
+ open_paren_count += 1
1065
+ elif ")" == elm :
1066
+ open_paren_count -= 1
1067
+ elif "{" == elm :
1068
+ open_brace_count += 1
1069
+ elif "}" == elm :
1070
+ open_brace_count -= 1
1060
1071
i += 1
1061
1072
1062
1073
if param_separator :
@@ -1215,9 +1226,11 @@ def __init__(self, nameStack, doxygen, location, **kwargs):
1215
1226
elif "=" in nameStack :
1216
1227
self ["type" ] = " " .join (nameStack [: nameStack .index ("=" ) - 1 ])
1217
1228
self ["name" ] = nameStack [nameStack .index ("=" ) - 1 ]
1218
- self ["default" ] = " " .join (nameStack [nameStack .index ("=" ) + 1 :])
1229
+ default = " " .join (nameStack [nameStack .index ("=" ) + 1 :])
1230
+ default = self ._filter_name (default )
1231
+ self ["default" ] = default
1219
1232
# backwards compat; deprecate camelCase in dicts
1220
- self ["defaultValue" ] = self [ " default" ]
1233
+ self ["defaultValue" ] = default
1221
1234
1222
1235
elif is_fundamental (nameStack [- 1 ]) or nameStack [- 1 ] in [">" , "<" , ":" , "." ]:
1223
1236
# Un named parameter
@@ -1228,12 +1241,7 @@ def __init__(self, nameStack, doxygen, location, **kwargs):
1228
1241
self ["type" ] = " " .join (nameStack [:- 1 ])
1229
1242
self ["name" ] = nameStack [- 1 ]
1230
1243
1231
- self ["type" ] = self ["type" ].replace (" :" , ":" )
1232
- self ["type" ] = self ["type" ].replace (": " , ":" )
1233
- self ["type" ] = self ["type" ].replace (" < " , "<" )
1234
- self ["type" ] = self ["type" ].replace (" > " , "> " ).replace (">>" , "> >" )
1235
- self ["type" ] = self ["type" ].replace (") >" , ")>" )
1236
- self ["type" ] = self ["type" ].replace (" ," , "," )
1244
+ self ["type" ] = self ._filter_name (self ["type" ])
1237
1245
1238
1246
# Optional doxygen description
1239
1247
try :
@@ -1244,6 +1252,15 @@ def __init__(self, nameStack, doxygen, location, **kwargs):
1244
1252
self .init ()
1245
1253
CppVariable .Vars .append (self ) # save and resolve later
1246
1254
1255
+ def _filter_name (self , name ):
1256
+ name = name .replace (" :" , ":" ).replace (": " , ":" )
1257
+ name = name .replace (" < " , "<" )
1258
+ name = name .replace (" > " , "> " ).replace (">>" , "> >" )
1259
+ name = name .replace (") >" , ")>" )
1260
+ name = name .replace (" {" , "{" ).replace (" }" , "}" )
1261
+ name = name .replace (" ," , "," )
1262
+ return name
1263
+
1247
1264
def __str__ (self ):
1248
1265
keys_white_list = [
1249
1266
"constant" ,
@@ -2508,8 +2525,8 @@ def evalute_forward_decl(self):
2508
2525
2509
2526
# fmt: off
2510
2527
_namestack_append_tokens = {
2511
- "( " ,
2512
- ") " ,
2528
+ "{ " ,
2529
+ "} " ,
2513
2530
"[" ,
2514
2531
"]" ,
2515
2532
"=" ,
@@ -2729,6 +2746,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2729
2746
self .braceHandled = False
2730
2747
tok = None
2731
2748
self .stmtTokens = []
2749
+ parenDepth = 0
2732
2750
2733
2751
try :
2734
2752
while True :
@@ -2779,7 +2797,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2779
2797
self .nameStack = []
2780
2798
continue
2781
2799
2782
- if tok .type == "{" :
2800
+ if parenDepth == 0 and tok .type == "{" :
2783
2801
if len (self .nameStack ) >= 2 and is_namespace (
2784
2802
self .nameStack
2785
2803
): # namespace {} with no name used in boost, this sets default?
@@ -2830,7 +2848,7 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2830
2848
if not self .braceHandled :
2831
2849
self .braceDepth += 1
2832
2850
2833
- elif tok .type == "}" :
2851
+ elif parenDepth == 0 and tok .type == "}" :
2834
2852
if self .braceDepth == 0 :
2835
2853
continue
2836
2854
if self .braceDepth == len (self .nameSpaces ):
@@ -2862,7 +2880,6 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2862
2880
self .curClass = ""
2863
2881
self .stack = []
2864
2882
self .stmtTokens = []
2865
-
2866
2883
elif tok .type in _namestack_append_tokens :
2867
2884
self .nameStack .append (tok .value )
2868
2885
nameStackAppended = True
@@ -2922,6 +2939,15 @@ def __init__(self, headerFileName, argType="file", encoding=None, **kwargs):
2922
2939
self .stack = []
2923
2940
self .nameStack = []
2924
2941
self .stmtTokens = []
2942
+ elif tok .type == "(" :
2943
+ parenDepth += 1
2944
+ self .nameStack .append (tok .value )
2945
+ nameStackAppended = True
2946
+ elif tok .type == ")" :
2947
+ self .nameStack .append (tok .value )
2948
+ nameStackAppended = True
2949
+ if parenDepth != 0 :
2950
+ parenDepth -= 1
2925
2951
2926
2952
newNsLen = len (self .nameStack )
2927
2953
if nslen != newNsLen and newNsLen == 1 :
0 commit comments