@@ -282,6 +282,28 @@ GetPointerTo(swift::Demangle::Demangler &dem,
282
282
return bgs;
283
283
}
284
284
285
+ NodePointer TypeSystemSwiftTypeRef::CreateBoundGenericStruct (
286
+ llvm::StringRef name, llvm::StringRef module_name,
287
+ llvm::ArrayRef<NodePointer> type_list_elements,
288
+ swift::Demangle::Demangler &dem) {
289
+ NodePointer type_list = dem.createNode (Node::Kind::TypeList);
290
+ for (auto *type_list_element : type_list_elements)
291
+ type_list->addChild (type_list_element, dem);
292
+ NodePointer identifier = dem.createNode (Node::Kind::Identifier, name);
293
+ NodePointer module = dem.createNode (Node::Kind::Module, module_name);
294
+ NodePointer structure = dem.createNode (Node::Kind::Structure);
295
+ structure->addChild (module , dem);
296
+ structure->addChild (identifier, dem);
297
+ NodePointer type = dem.createNode (Node::Kind::Type);
298
+ type->addChild (structure, dem);
299
+ NodePointer signature = dem.createNode (Node::Kind::BoundGenericStructure);
300
+ signature->addChild (type, dem);
301
+ signature->addChild (type_list, dem);
302
+ NodePointer outer_type = dem.createNode (Node::Kind::Type);
303
+ outer_type->addChild (signature, dem);
304
+ return outer_type;
305
+ }
306
+
285
307
// / Return a demangle tree leaf node representing \p clang_type.
286
308
swift::Demangle::NodePointer
287
309
TypeSystemSwiftTypeRef::GetClangTypeNode (CompilerType clang_type,
@@ -377,6 +399,28 @@ TypeSystemSwiftTypeRef::GetClangTypeNode(CompilerType clang_type,
377
399
kind = Node::Kind::TypeAlias;
378
400
pointee = {};
379
401
break ;
402
+ case eTypeClassVector: {
403
+ CompilerType element_type;
404
+ uint64_t size;
405
+ bool is_vector = clang_type.IsVectorType (&element_type, &size);
406
+ if (!is_vector)
407
+ break ;
408
+
409
+ auto qual_type = ClangUtil::GetQualType (clang_type);
410
+ const auto *ptr = qual_type.getTypePtrOrNull ();
411
+ if (!ptr)
412
+ break ;
413
+
414
+ // Check if this is an extended vector type.
415
+ if (!llvm::isa<clang::DependentSizedExtVectorType>(ptr) &&
416
+ !llvm::isa<clang::ExtVectorType>(ptr))
417
+ break ;
418
+
419
+ NodePointer element_type_node = GetClangTypeNode (element_type, dem);
420
+ llvm::SmallVector<NodePointer, 1 > elements ({element_type_node});
421
+ return CreateBoundGenericStruct (" SIMD" + std::to_string (size),
422
+ swift::STDLIB_NAME, elements, dem);
423
+ }
380
424
default :
381
425
break ;
382
426
}
0 commit comments