//===----------------------------------------------------------------------===// // Type creation/memorization methods //===----------------------------------------------------------------------===// Type ASTContext::getExtTypeInfoType(const RawType *Base, TypeInfo quals) { unsigned fastQuals = quals.getFastTypeInfo(); quals.removeFastTypeInfo(); // Check if we've already instantiated this type. llvm::FoldingSetNodeID ID; ExtTypeInfo::Profile(ID, Base, quals); void *insertPos = 0; if (ExtTypeInfo *eq = ExtTypeInfoNodes.FindNodeOrInsertPos(ID, insertPos)) { assert(eq->getTypeInfo() == quals); return Type(eq, fastQuals); } ExtTypeInfo *eq = new (*this, TypeAlignment) ExtTypeInfo(Base, quals); ExtTypeInfoNodes.InsertNode(eq, insertPos); return Type(eq, fastQuals); }