Beispiel #1
0
//===----------------------------------------------------------------------===//
//                   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);
}