|
44 | 44 | #include "llvm/Support/raw_ostream.h"
|
45 | 45 | #include "llvm/Support/SaveAndRestore.h"
|
46 | 46 | #include <algorithm>
|
| 47 | +#include "GenericSignatureBuilderImpl.h" |
47 | 48 |
|
48 | 49 | using namespace swift;
|
49 | 50 | using llvm::DenseMap;
|
@@ -1856,96 +1857,6 @@ void EquivalenceClass::addMember(PotentialArchetype *pa) {
|
1856 | 1857 | }
|
1857 | 1858 | }
|
1858 | 1859 |
|
1859 |
| -class GenericSignatureBuilder::ResolvedType { |
1860 |
| - llvm::PointerUnion<PotentialArchetype *, Type> type; |
1861 |
| - EquivalenceClass *equivClass; |
1862 |
| - |
1863 |
| - /// For a type that could not be resolved further unless the given |
1864 |
| - /// equivalence class changes. |
1865 |
| - ResolvedType(EquivalenceClass *equivClass) |
1866 |
| - : type(), equivClass(equivClass) { } |
1867 |
| - |
1868 |
| -public: |
1869 |
| - /// A specific resolved potential archetype. |
1870 |
| - ResolvedType(PotentialArchetype *pa) |
1871 |
| - : type(pa), equivClass(pa->getEquivalenceClassIfPresent()) { } |
1872 |
| - |
1873 |
| - /// A resolved type within the given equivalence class. |
1874 |
| - ResolvedType(Type type, EquivalenceClass *equivClass) |
1875 |
| - : type(type), equivClass(equivClass) { |
1876 |
| - assert(type->isTypeParameter() == static_cast<bool>(equivClass) && |
1877 |
| - "type parameters must have equivalence classes"); |
1878 |
| - } |
1879 |
| - |
1880 |
| - /// Return an unresolved result, which could be resolved when we |
1881 |
| - /// learn more information about the given equivalence class. |
1882 |
| - static ResolvedType forUnresolved(EquivalenceClass *equivClass) { |
1883 |
| - return ResolvedType(equivClass); |
1884 |
| - } |
1885 |
| - |
1886 |
| - /// Return a result for a concrete type. |
1887 |
| - static ResolvedType forConcrete(Type concreteType) { |
1888 |
| - return ResolvedType(concreteType, nullptr); |
1889 |
| - } |
1890 |
| - |
1891 |
| - /// Determine whether this result was resolved. |
1892 |
| - explicit operator bool() const { return !type.isNull(); } |
1893 |
| - |
1894 |
| - /// Retrieve the dependent type. |
1895 |
| - Type getDependentType(GenericSignatureBuilder &builder) const; |
1896 |
| - |
1897 |
| - /// Retrieve the concrete type, or a null type if this result doesn't store |
1898 |
| - /// a concrete type. |
1899 |
| - Type getAsConcreteType() const { |
1900 |
| - assert(*this && "Doesn't contain any result"); |
1901 |
| - if (equivClass) return Type(); |
1902 |
| - return type.dyn_cast<Type>(); |
1903 |
| - } |
1904 |
| - |
1905 |
| - /// Realize a potential archetype for this type parameter. |
1906 |
| - PotentialArchetype *realizePotentialArchetype( |
1907 |
| - GenericSignatureBuilder &builder); |
1908 |
| - |
1909 |
| - /// Retrieve the potential archetype, if already known. |
1910 |
| - PotentialArchetype *getPotentialArchetypeIfKnown() const { |
1911 |
| - return type.dyn_cast<PotentialArchetype *>(); |
1912 |
| - } |
1913 |
| - |
1914 |
| - /// Retrieve the equivalence class into which a resolved type refers. |
1915 |
| - EquivalenceClass *getEquivalenceClass( |
1916 |
| - GenericSignatureBuilder &builder) const { |
1917 |
| - assert(*this && "Only for resolved types"); |
1918 |
| - if (equivClass) return equivClass; |
1919 |
| - |
1920 |
| - // Create the equivalence class now. |
1921 |
| - return type.get<PotentialArchetype *>() |
1922 |
| - ->getOrCreateEquivalenceClass(builder); |
1923 |
| - } |
1924 |
| - |
1925 |
| - /// Retrieve the equivalence class into which a resolved type refers. |
1926 |
| - EquivalenceClass *getEquivalenceClassIfPresent() const { |
1927 |
| - assert(*this && "Only for resolved types"); |
1928 |
| - if (equivClass) return equivClass; |
1929 |
| - |
1930 |
| - // Create the equivalence class now. |
1931 |
| - return type.get<PotentialArchetype *>()->getEquivalenceClassIfPresent(); |
1932 |
| - } |
1933 |
| - |
1934 |
| - /// Retrieve the unresolved result. |
1935 |
| - EquivalenceClass *getUnresolvedEquivClass() const { |
1936 |
| - assert(!*this); |
1937 |
| - return equivClass; |
1938 |
| - } |
1939 |
| - |
1940 |
| - /// Return an unresolved type. |
1941 |
| - /// |
1942 |
| - /// This loses equivalence-class information that could be useful, which |
1943 |
| - /// is unfortunate. |
1944 |
| - UnresolvedType getUnresolvedType() const { |
1945 |
| - return type; |
1946 |
| - } |
1947 |
| -}; |
1948 |
| - |
1949 | 1860 | bool EquivalenceClass::recordConformanceConstraint(
|
1950 | 1861 | GenericSignatureBuilder &builder,
|
1951 | 1862 | ResolvedType type,
|
|
0 commit comments