@@ -141,6 +141,7 @@ def trace_print(*args):
141
141
_BRACE_REASON_OTHER = 0
142
142
_BRACE_REASON_NS = 1
143
143
_BRACE_REASON_EXTERN = 2
144
+ _BRACE_REASON_VARIABLE = 3
144
145
145
146
# Track what was added in what order and at what depth
146
147
parseHistory = []
@@ -239,10 +240,13 @@ def is_property_namestack(nameStack):
239
240
r = False
240
241
if "(" not in nameStack and ")" not in nameStack :
241
242
r = True
242
- elif (
243
- "(" in nameStack
244
- and "=" in nameStack
245
- and nameStack .index ("=" ) < nameStack .index ("(" )
243
+ elif "(" in nameStack and (
244
+ ( # = initialization
245
+ "=" in nameStack and nameStack .index ("=" ) < nameStack .index ("(" )
246
+ )
247
+ or ( # {} initialization
248
+ "{" in nameStack and nameStack .index ("{" ) < nameStack .index ("(" )
249
+ )
246
250
):
247
251
r = True
248
252
# See if we are a function pointer
@@ -1226,6 +1230,16 @@ def __init__(self, nameStack, doxygen, location, is_var=True, **kwargs):
1226
1230
self ["default" ] = default
1227
1231
# backwards compat; deprecate camelCase in dicts
1228
1232
self ["defaultValue" ] = default
1233
+ elif "{" in nameStack and "}" in nameStack :
1234
+ posBracket = nameStack .index ("{" )
1235
+ self ["type" ] = " " .join (nameStack [: posBracket - 1 ])
1236
+ self ["name" ] = nameStack [posBracket - 1 ]
1237
+ default = " " .join (nameStack [posBracket + 1 : - 1 ])
1238
+ nameStack = nameStack [:posBracket ]
1239
+ default = self ._filter_name (default )
1240
+ self ["default" ] = default
1241
+ # backwards compat; deprecate camelCase in dicts
1242
+ self ["defaultValue" ] = default
1229
1243
1230
1244
_stack_ = nameStack
1231
1245
self ["array" ] = 0
@@ -2931,7 +2945,23 @@ def __init__(
2931
2945
continue
2932
2946
2933
2947
if parenDepth == 0 and tok .type == "{" :
2934
- self .lastBraceReason = _BRACE_REASON_OTHER
2948
+ if self .nameStack [0 ] in (
2949
+ "class" ,
2950
+ "struct" ,
2951
+ "union" ,
2952
+ "namespace" ,
2953
+ "enum" ,
2954
+ "extern" ,
2955
+ "typedef" ,
2956
+ ) or (is_method_namestack (self .stack ) or (not self .curClass )):
2957
+ self .lastBraceReason = _BRACE_REASON_OTHER
2958
+ else :
2959
+ # Case : type variable {init};
2960
+ self .lastBraceReason = _BRACE_REASON_VARIABLE
2961
+ self .braceDepth += 1
2962
+ self .braceReason .append (self .lastBraceReason )
2963
+ self .nameStack .append (tok .value )
2964
+ continue
2935
2965
if len (self .nameStack ) >= 2 and is_namespace (
2936
2966
self .nameStack
2937
2967
): # namespace {} with no name used in boost, this sets default?
@@ -2991,6 +3021,10 @@ def __init__(
2991
3021
self .linkage_stack .pop ()
2992
3022
self .stack = [] # clear stack when linkage ends?
2993
3023
self .stmtTokens = []
3024
+ # Case : type variable {init};
3025
+ elif reason == _BRACE_REASON_VARIABLE :
3026
+ self .nameStack .append (tok .value )
3027
+ continue
2994
3028
else :
2995
3029
self ._evaluate_stack ()
2996
3030
self .braceDepth -= 1
0 commit comments