@@ -771,7 +771,7 @@ static TypeBase *FixCallingConv(Decl *in_decl, TypeBase *in_type) {
771
771
static void
772
772
VisitNode (ASTContext *ast, std::vector<Demangle::NodePointer> &nodes,
773
773
VisitNodeResult &result,
774
- const VisitNodeResult &generic_context ); // set by GenericType case
774
+ const VisitNodeResult &genericContext ); // set by GenericType case
775
775
776
776
static void VisitNodeAddressor (
777
777
ASTContext *ast, std::vector<Demangle::NodePointer> &nodes,
@@ -2142,178 +2142,187 @@ static void VisitAllChildNodes(
2142
2142
}
2143
2143
}
2144
2144
2145
- static void
2146
- VisitNode (ASTContext *ast, std::vector<Demangle::NodePointer> &nodes,
2147
- VisitNodeResult &result,
2148
- const VisitNodeResult &generic_context) { // set by GenericType case
2149
- if (nodes.empty ())
2150
- result._error = " no node" ;
2151
- else if (nodes.back () == nullptr )
2152
- result._error = " last node is NULL" ;
2153
- else
2154
- result._error = " " ;
2145
+ static void visitNodeImpl (
2146
+ ASTContext *ast, std::vector<Demangle::NodePointer> &nodes,
2147
+ Demangle::NodePointer node, VisitNodeResult &result,
2148
+ const VisitNodeResult &genericContext) { // set by GenericType case
2149
+ assert (result._error .empty ());
2150
+ assert (nodes.back () == node);
2151
+
2152
+ const Demangle::Node::Kind nodeKind = node->getKind ();
2153
+
2154
+ switch (nodeKind) {
2155
+ case Demangle::Node::Kind::OwningAddressor:
2156
+ case Demangle::Node::Kind::OwningMutableAddressor:
2157
+ case Demangle::Node::Kind::UnsafeAddressor:
2158
+ case Demangle::Node::Kind::UnsafeMutableAddressor:
2159
+ VisitNodeAddressor (ast, nodes, node, result, genericContext);
2160
+ break ;
2155
2161
2156
- if (result. _error . empty ()) {
2157
- Demangle::NodePointer node = nodes. back ( );
2158
- const Demangle::Node::Kind node_kind = node-> getKind () ;
2162
+ case Demangle::Node::Kind::Generics:
2163
+ VisitNodeGenerics (ast, nodes, node, result, genericContext );
2164
+ break ;
2159
2165
2160
- switch (node_kind) {
2161
- case Demangle::Node::Kind::OwningAddressor:
2162
- case Demangle::Node::Kind::OwningMutableAddressor:
2163
- case Demangle::Node::Kind::UnsafeAddressor:
2164
- case Demangle::Node::Kind::UnsafeMutableAddressor:
2165
- VisitNodeAddressor (ast, nodes, node, result, generic_context);
2166
- break ;
2166
+ case Demangle::Node::Kind::ArchetypeRef:
2167
+ VisitNodeArchetypeRef (ast, nodes, node, result, genericContext);
2168
+ break ;
2167
2169
2168
- case Demangle::Node::Kind::Generics :
2169
- VisitNodeGenerics (ast, nodes, node, result, generic_context );
2170
- break ;
2170
+ case Demangle::Node::Kind::Archetype :
2171
+ VisitNodeArchetype (ast, nodes, node, result, genericContext );
2172
+ break ;
2171
2173
2172
- case Demangle::Node::Kind::ArchetypeRef :
2173
- VisitNodeArchetypeRef (ast, nodes, node, result, generic_context );
2174
- break ;
2174
+ case Demangle::Node::Kind::ArgumentTuple :
2175
+ VisitFirstChildNode (ast, nodes, node, result, genericContext );
2176
+ break ;
2175
2177
2176
- case Demangle::Node::Kind::Archetype :
2177
- VisitNodeArchetype (ast, nodes, node, result, generic_context );
2178
- break ;
2178
+ case Demangle::Node::Kind::AssociatedTypeRef :
2179
+ VisitNodeAssociatedTypeRef (ast, nodes, node, result, genericContext );
2180
+ break ;
2179
2181
2180
- case Demangle::Node::Kind::ArgumentTuple:
2181
- VisitFirstChildNode (ast, nodes, node, result, generic_context);
2182
- break ;
2182
+ case Demangle::Node::Kind::BoundGenericClass:
2183
+ case Demangle::Node::Kind::BoundGenericStructure:
2184
+ case Demangle::Node::Kind::BoundGenericEnum:
2185
+ VisitNodeBoundGeneric (ast, nodes, node, result, genericContext);
2186
+ break ;
2183
2187
2184
- case Demangle::Node::Kind::AssociatedTypeRef :
2185
- VisitNodeAssociatedTypeRef (ast, nodes, node, result, generic_context );
2186
- break ;
2188
+ case Demangle::Node::Kind::BuiltinTypeName :
2189
+ VisitNodeBuiltinTypeName (ast, nodes, node, result, genericContext );
2190
+ break ;
2187
2191
2188
- case Demangle::Node::Kind::BoundGenericClass:
2189
- case Demangle::Node::Kind::BoundGenericStructure:
2190
- case Demangle::Node::Kind::BoundGenericEnum:
2191
- VisitNodeBoundGeneric (ast, nodes, node, result, generic_context);
2192
- break ;
2192
+ case Demangle::Node::Kind::Structure:
2193
+ case Demangle::Node::Kind::Class:
2194
+ case Demangle::Node::Kind::Enum:
2195
+ case Demangle::Node::Kind::Global:
2196
+ case Demangle::Node::Kind::Static:
2197
+ case Demangle::Node::Kind::TypeAlias:
2198
+ case Demangle::Node::Kind::Type:
2199
+ case Demangle::Node::Kind::TypeMangling:
2200
+ case Demangle::Node::Kind::ReturnType:
2201
+ case Demangle::Node::Kind::Protocol:
2202
+ VisitAllChildNodes (ast, nodes, node, result, genericContext);
2203
+ break ;
2193
2204
2194
- case Demangle::Node::Kind::BuiltinTypeName :
2195
- VisitNodeBuiltinTypeName (ast, nodes, node, result, generic_context );
2196
- break ;
2205
+ case Demangle::Node::Kind::Constructor :
2206
+ VisitNodeConstructor (ast, nodes, node, result, genericContext );
2207
+ break ;
2197
2208
2198
- case Demangle::Node::Kind::Structure:
2199
- case Demangle::Node::Kind::Class:
2200
- case Demangle::Node::Kind::Enum:
2201
- case Demangle::Node::Kind::Global:
2202
- case Demangle::Node::Kind::Static:
2203
- case Demangle::Node::Kind::TypeAlias:
2204
- case Demangle::Node::Kind::Type:
2205
- case Demangle::Node::Kind::TypeMangling:
2206
- case Demangle::Node::Kind::ReturnType:
2207
- case Demangle::Node::Kind::Protocol:
2208
- VisitAllChildNodes (ast, nodes, node, result, generic_context);
2209
- break ;
2209
+ case Demangle::Node::Kind::Destructor:
2210
+ VisitNodeDestructor (ast, nodes, node, result, genericContext);
2211
+ break ;
2210
2212
2211
- case Demangle::Node::Kind::Constructor :
2212
- VisitNodeConstructor (ast, nodes, node, result, generic_context );
2213
- break ;
2213
+ case Demangle::Node::Kind::DeclContext :
2214
+ VisitNodeDeclContext (ast, nodes, node, result, genericContext );
2215
+ break ;
2214
2216
2215
- case Demangle::Node::Kind::Destructor :
2216
- VisitNodeDestructor (ast, nodes, node, result, generic_context) ;
2217
- break ;
2217
+ case Demangle::Node::Kind::ErrorType :
2218
+ result. _error = " error type encountered while demangling name " ;
2219
+ break ;
2218
2220
2219
- case Demangle::Node::Kind::DeclContext :
2220
- VisitNodeDeclContext (ast, nodes, node, result, generic_context );
2221
- break ;
2221
+ case Demangle::Node::Kind::Extension :
2222
+ VisitNodeExtension (ast, nodes, node, result, genericContext );
2223
+ break ;
2222
2224
2223
- case Demangle::Node::Kind::ErrorType :
2224
- result. _error = " error type encountered while demangling name " ;
2225
- break ;
2225
+ case Demangle::Node::Kind::ExplicitClosure :
2226
+ VisitNodeExplicitClosure (ast, nodes, node, result, genericContext) ;
2227
+ break ;
2226
2228
2227
- case Demangle::Node::Kind::Extension:
2228
- VisitNodeExtension (ast, nodes, node, result, generic_context);
2229
- break ;
2229
+ case Demangle::Node::Kind::Function:
2230
+ case Demangle::Node::Kind::Allocator:
2231
+ case Demangle::Node::Kind::Variable: // Out of order on purpose
2232
+ VisitNodeFunction (ast, nodes, node, result, genericContext);
2233
+ break ;
2230
2234
2231
- case Demangle::Node::Kind::ExplicitClosure:
2232
- VisitNodeExplicitClosure (ast, nodes, node, result, generic_context);
2233
- break ;
2235
+ case Demangle::Node::Kind::FunctionType:
2236
+ case Demangle::Node::Kind::UncurriedFunctionType: // Out of order on
2237
+ // purpose.
2238
+ VisitNodeFunctionType (ast, nodes, node, result, genericContext);
2239
+ break ;
2234
2240
2235
- case Demangle::Node::Kind::Function:
2236
- case Demangle::Node::Kind::Allocator:
2237
- case Demangle::Node::Kind::Variable: // Out of order on purpose
2238
- VisitNodeFunction (ast, nodes, node, result, generic_context);
2239
- break ;
2241
+ case Demangle::Node::Kind::GenericType:
2242
+ VisitNodeGenericType (ast, nodes, node, result, genericContext);
2243
+ break ;
2240
2244
2241
- case Demangle::Node::Kind::FunctionType:
2242
- case Demangle::Node::Kind::UncurriedFunctionType: // Out of order on
2243
- // purpose.
2244
- VisitNodeFunctionType (ast, nodes, node, result, generic_context);
2245
- break ;
2245
+ case Demangle::Node::Kind::DidSet:
2246
+ case Demangle::Node::Kind::Getter:
2247
+ case Demangle::Node::Kind::Setter:
2248
+ case Demangle::Node::Kind::WillSet: // out of order on purpose
2249
+ VisitNodeSetterGetter (ast, nodes, node, result, genericContext);
2250
+ break ;
2246
2251
2247
- case Demangle::Node::Kind::GenericType :
2248
- VisitNodeGenericType (ast, nodes, node, result, generic_context );
2249
- break ;
2252
+ case Demangle::Node::Kind::LocalDeclName :
2253
+ VisitNodeLocalDeclName (ast, nodes, node, result, genericContext );
2254
+ break ;
2250
2255
2251
- case Demangle::Node::Kind::DidSet:
2252
- case Demangle::Node::Kind::Getter:
2253
- case Demangle::Node::Kind::Setter:
2254
- case Demangle::Node::Kind::WillSet: // out of order on purpose
2255
- VisitNodeSetterGetter (ast, nodes, node, result, generic_context);
2256
- break ;
2256
+ case Demangle::Node::Kind::Identifier:
2257
+ VisitNodeIdentifier (ast, nodes, node, result, genericContext);
2258
+ break ;
2257
2259
2258
- case Demangle::Node::Kind::LocalDeclName :
2259
- VisitNodeLocalDeclName (ast, nodes, node, result, generic_context );
2260
- break ;
2260
+ case Demangle::Node::Kind::InOut :
2261
+ VisitNodeInOut (ast, nodes, node, result, genericContext );
2262
+ break ;
2261
2263
2262
- case Demangle::Node::Kind::Identifier :
2263
- VisitNodeIdentifier (ast, nodes, node, result, generic_context );
2264
- break ;
2264
+ case Demangle::Node::Kind::Metatype :
2265
+ VisitNodeMetatype (ast, nodes, node, result, genericContext );
2266
+ break ;
2265
2267
2266
- case Demangle::Node::Kind::InOut :
2267
- VisitNodeInOut (ast, nodes, node, result, generic_context );
2268
- break ;
2268
+ case Demangle::Node::Kind::Module :
2269
+ VisitNodeModule (ast, nodes, node, result, genericContext );
2270
+ break ;
2269
2271
2270
- case Demangle::Node::Kind::Metatype :
2271
- VisitNodeMetatype (ast, nodes, node, result, generic_context );
2272
- break ;
2272
+ case Demangle::Node::Kind::NonVariadicTuple :
2273
+ VisitNodeNonVariadicTuple (ast, nodes, node, result, genericContext );
2274
+ break ;
2273
2275
2274
- case Demangle::Node::Kind::Module :
2275
- VisitNodeModule (ast, nodes, node, result, generic_context );
2276
- break ;
2276
+ case Demangle::Node::Kind::PrivateDeclName :
2277
+ VisitNodePrivateDeclName (ast, nodes, node, result, genericContext );
2278
+ break ;
2277
2279
2278
- case Demangle::Node::Kind::NonVariadicTuple :
2279
- VisitNodeNonVariadicTuple (ast, nodes, node, result, generic_context );
2280
- break ;
2280
+ case Demangle::Node::Kind::ProtocolList :
2281
+ VisitNodeProtocolList (ast, nodes, node, result, genericContext );
2282
+ break ;
2281
2283
2282
- case Demangle::Node::Kind::PrivateDeclName :
2283
- VisitNodePrivateDeclName (ast, nodes, node, result, generic_context );
2284
- break ;
2284
+ case Demangle::Node::Kind::QualifiedArchetype :
2285
+ VisitNodeQualifiedArchetype (ast, nodes, node, result, genericContext );
2286
+ break ;
2285
2287
2286
- case Demangle::Node::Kind::ProtocolList :
2287
- VisitNodeProtocolList (ast, nodes, node, result, generic_context );
2288
- break ;
2288
+ case Demangle::Node::Kind::SelfTypeRef :
2289
+ VisitNodeSelfTypeRef (ast, nodes, node, result, genericContext );
2290
+ break ;
2289
2291
2290
- case Demangle::Node::Kind::QualifiedArchetype :
2291
- VisitNodeQualifiedArchetype (ast, nodes, node, result, generic_context );
2292
- break ;
2292
+ case Demangle::Node::Kind::TupleElement :
2293
+ VisitNodeTupleElement (ast, nodes, node, result, genericContext );
2294
+ break ;
2293
2295
2294
- case Demangle::Node::Kind::SelfTypeRef :
2295
- VisitNodeSelfTypeRef (ast, nodes, node, result, generic_context );
2296
- break ;
2296
+ case Demangle::Node::Kind::TypeList :
2297
+ VisitNodeTypeList (ast, nodes, node, result, genericContext );
2298
+ break ;
2297
2299
2298
- case Demangle::Node::Kind::TupleElement :
2299
- VisitNodeTupleElement (ast, nodes, node, result, generic_context );
2300
- break ;
2300
+ case Demangle::Node::Kind::Unowned :
2301
+ VisitNodeUnowned (ast, nodes, node, result, genericContext );
2302
+ break ;
2301
2303
2302
- case Demangle::Node::Kind::TypeList:
2303
- VisitNodeTypeList (ast, nodes, node, result, generic_context);
2304
- break ;
2304
+ case Demangle::Node::Kind::Weak:
2305
+ VisitNodeWeak (ast, nodes, node, result, genericContext);
2306
+ break ;
2307
+ default :
2308
+ break ;
2309
+ }
2310
+ }
2305
2311
2306
- case Demangle::Node::Kind::Unowned:
2307
- VisitNodeUnowned (ast, nodes, node, result, generic_context);
2308
- break ;
2312
+ static void
2313
+ VisitNode (ASTContext *ast, std::vector<Demangle::NodePointer> &nodes,
2314
+ VisitNodeResult &result,
2315
+ const VisitNodeResult &genericContext) { // set by GenericType case
2316
+ if (nodes.empty ())
2317
+ result._error = " no node" ;
2318
+ else if (nodes.back () == nullptr )
2319
+ result._error = " last node is NULL" ;
2320
+ else
2321
+ result._error = " " ;
2322
+
2323
+ if (result._error .empty ())
2324
+ visitNodeImpl (ast, nodes, nodes.back (), result, genericContext);
2309
2325
2310
- case Demangle::Node::Kind::Weak:
2311
- VisitNodeWeak (ast, nodes, node, result, generic_context);
2312
- break ;
2313
- default :
2314
- break ;
2315
- }
2316
- }
2317
2326
nodes.pop_back ();
2318
2327
}
2319
2328
0 commit comments