SILGen: More interface type abstraction pattern goodness, NFC

This commit is contained in:
Slava Pestov
2016-01-18 20:44:40 -08:00
parent 2f5af054bf
commit df38bd1764
5 changed files with 20 additions and 9 deletions

View File

@@ -45,8 +45,12 @@ AbstractionPattern TypeConverter::getAbstractionPattern(SubscriptDecl *decl) {
AbstractionPattern
TypeConverter::getIndicesAbstractionPattern(SubscriptDecl *decl) {
// TODO: use interface types
return AbstractionPattern(decl->getIndicesType());
CanGenericSignature genericSig;
if (auto sig = decl->getGenericSignatureOfContext())
genericSig = sig->getCanonicalSignature();
return AbstractionPattern(genericSig,
decl->getIndicesInterfaceType()
->getCanonicalType());
}
static const clang::Type *getClangType(const clang::Decl *decl) {
@@ -80,7 +84,13 @@ AbstractionPattern TypeConverter::getAbstractionPattern(VarDecl *var) {
AbstractionPattern TypeConverter::getAbstractionPattern(EnumElementDecl *decl) {
assert(decl->hasArgumentType());
assert(!decl->hasClangNode());
return AbstractionPattern(decl->getArgumentType());
CanGenericSignature genericSig;
if (auto sig = decl->getParentEnum()->getGenericSignatureOfContext())
genericSig = sig->getCanonicalSignature();
return AbstractionPattern(genericSig,
decl->getArgumentInterfaceType()
->getCanonicalType());
}
AbstractionPattern::EncodedForeignErrorInfo