FormalLinkage swift::getTypeLinkage(CanType type) { FormalLinkage result = FormalLinkage::Top; // Merge all nominal types from the structural type. (void) type.findIf([&](Type _type) { CanType type = CanType(_type); // For any nominal type reference, look at the type declaration. if (auto nominal = type->getAnyNominal()) result ^= getDeclLinkage(nominal); assert(!isa<PolymorphicFunctionType>(type) && "Don't expect a polymorphic function type here"); return false; // continue searching }); return result; }
FormalLinkage swift::getTypeLinkage(CanType type) { FormalLinkage result = FormalLinkage::Top; // Merge all nominal types from the structural type. (void) type.findIf([&](Type _type) { CanType type = CanType(_type); // For any nominal type reference, look at the type declaration. if (auto nominal = type->getAnyNominal()) { result ^= getDeclLinkage(nominal); // For polymorphic function types, look at the generic parameters. // FIXME: findIf should do this, once polymorphic function types can be // canonicalized and re-formed properly. } else if (auto polyFn = dyn_cast<PolymorphicFunctionType>(type)) { result ^= getGenericClauseLinkage(polyFn->getGenericParameters()); } return false; // continue searching }); return result; }