mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Sema: Hook up layout constraints to the solver
There were various problems with layout constraints either being ignored or handled incorrectly. Now that I've exercised this support with an upcoming patch, there are some fixes here. Also, introduce a new ExistentialLayout::getLayoutConstriant() which returns a value for existentials which are class-constrained but don't have a superclass or any class-constrained protocols; an example would be AnyObject, or AnyObject & P for some non-class protocol P. NFC for now, since these layout-constrained existentials cannot be constructed yet.
This commit is contained in:
@@ -71,6 +71,8 @@ struct ExistentialLayout {
|
||||
return multipleProtocols;
|
||||
}
|
||||
|
||||
LayoutConstraint getLayoutConstraint() const;
|
||||
|
||||
private:
|
||||
// Inline storage for 'protocols' member above when computing
|
||||
// layout of a single ProtocolType
|
||||
|
||||
@@ -434,11 +434,6 @@ public:
|
||||
NominalTypeDecl *getAnyNominal() const;
|
||||
GenericTypeDecl *getAnyGeneric() const;
|
||||
|
||||
/// Returns information about the layout constraint represented by
|
||||
/// this type. If this type does not represent a layout constraint,
|
||||
/// it returns an empty LayoutConstraint.
|
||||
LayoutConstraint getLayoutConstraint() const;
|
||||
|
||||
CanType getAnyOptionalObjectType() const {
|
||||
OptionalTypeKind kind;
|
||||
return getAnyOptionalObjectTypeImpl(*this, kind);
|
||||
|
||||
@@ -717,12 +717,6 @@ public:
|
||||
/// concrete types to form the argument type.
|
||||
bool isBindableTo(Type ty, LazyResolver *resolver);
|
||||
|
||||
/// \brief Retrieve the layout constraint of this type.
|
||||
///
|
||||
/// \returns The layout constraint of this type, or a null layout constraint
|
||||
/// if it has no layout constraint.
|
||||
LayoutConstraint getLayoutConstraint();
|
||||
|
||||
/// \brief Determines whether this type is permitted as a method override
|
||||
/// of the \p other.
|
||||
bool canOverride(Type other, OverrideMatchMode matchMode,
|
||||
|
||||
Reference in New Issue
Block a user