Holly Borla
04a91fe61d
[RequirementMachine] Suppress requirement diagnostics when one of the
...
types already has an error.
2022-02-16 13:11:57 -08:00
Holly Borla
d5814ae3e5
[RequirementMachine] Only emit a redundancy warning for layout constraints
...
if the type is constrained to a class layout, and add a few more test cases
for type requirement conflicts.
2022-02-16 13:11:57 -08:00
Holly Borla
a992917f1c
[NFC][RequirementMachine] Rename some of the RequirementError::Kind cases,
...
add documentation for each case, and move RequirementError to
lib/AST/RequirementMachine/Diagnostics.h.
2022-02-16 13:11:57 -08:00
Holly Borla
1f1125098b
[NFC][RequirementMachine] Add documentation for diagnoseRequirementErrors.
2022-02-16 13:11:57 -08:00
Holly Borla
e6dc7e69c1
[RequirementMachine] Emit diagnostics for structural requirements in protocol
...
and typealias requirement signatures.
2022-02-16 13:11:57 -08:00
Holly Borla
ec45d960d8
[RequirementMachine] Always store an invalid requirement in RequirementError.
2022-02-16 13:11:57 -08:00
Holly Borla
3837b4def4
[RequirementMachine] Diagnose early redundant requirements.
2022-02-16 13:11:57 -08:00
Holly Borla
203734bea4
[RequirementMachine] Diagnose conformance, layout, and superclass constraints
...
on non-type-parameters in the requirement machine.
2022-02-16 13:11:57 -08:00
Holly Borla
e4cba889c2
[RequirementMachine] Diagnose concrete same-type mismatches, such as
...
`where String == Int`.
2022-02-16 13:11:57 -08:00
Holly Borla
3c2b588037
[RequirementMachine] Plumb the requirement errors vector through desugarRequirement.
2022-02-16 13:11:57 -08:00
Holly Borla
a74717ab69
[RequirementMachine] Diagnose non-protocol, non-class conformance/subtype
...
constraints in the requirement machine.
2022-02-16 13:11:56 -08:00
Slava Pestov
4a06e21bf9
RequirementMachine: Introduce rules for protocol typealiases from requirement signatures
...
When building a rewrite system for a generic signature or protocol,
we would add requirements from the requirement signature of every
protocol dependency. Now, also add protocol typealias rules as well.
2022-02-13 00:24:23 -05:00
Slava Pestov
a1c03db381
AST: Generalize ProtocolDecl::getRequirementSignature() to a new RequirementSignature type
...
The RequirementSignature generalizes the old ArrayRef<Requirement>
which stores the minimal requirements that a conforming type's
witnesses must satisfy, to also record the protocol typealiases
defined in the protocol.
2022-02-13 00:24:23 -05:00
Slava Pestov
c58d9d8974
Sema: StructuralRequirementsRequest collects protocol typealiases
...
Introduces rewrite rules for typealiases defined inside the protocol
itself.
Typealiases defined in protocol extensions do not participate
in the rewrite system, except for when they have the same name as
an associated type, as per the weird rule codified in the
TypeAliasRequirementsRequest for GSB compatibility.
2022-02-13 00:24:23 -05:00
Slava Pestov
d64fb39514
RequirementMachine: Introduce conditional requirements in desugaring
2022-02-10 17:23:54 -05:00
Slava Pestov
48ca87ddeb
RequirementMachine: Handle type parameters in @_differentiable requirement inference
2022-02-10 17:23:54 -05:00
Slava Pestov
915ae67974
RequirementMachine: Factor out lookupMemberType() utility in RequirementLowering.cpp
2022-02-10 17:23:54 -05:00
Slava Pestov
0177f75473
AST: TypeBase::isConstraintType() answers true for ParameterizedProtocolType also
2022-02-03 13:27:24 -05:00
Slava Pestov
aa67c8bf8a
Parametrized => parameterized
2022-02-03 13:27:24 -05:00
Slava Pestov
7dc36c3092
Merge pull request #40714 from slavapestov/parametrized-protocol-type
...
Parametrized protocol types
2022-01-26 11:44:29 -05:00
Slava Pestov
a416116094
RequirementMachine: Desugar ParametrizedProtocolType
2022-01-26 00:11:38 -05:00
Slava Pestov
7393c9c84f
RequirementMachine: Remove unsound cycle-breaking hack
2022-01-25 21:28:52 -05:00
Slava Pestov
96122834fb
RequirementMachine: getRuleForRequirement() supports relative terms
2022-01-25 00:32:25 -05:00
Slava Pestov
f480eeaf53
RequirementMachine: Factor out getRuleForRequirement() from RuleBuilder::addRequirement()
2022-01-25 00:32:25 -05:00
Slava Pestov
a2f2ffd1c2
RequirementMachine: Remove obsolete comment
2022-01-25 00:32:25 -05:00
Slava Pestov
56450af673
RequirementMachine: Record identity conformances in the property map
2022-01-11 21:43:55 -05:00
Slava Pestov
25cae6f479
RequirementMachine: Ignore requirements with ErrorTypes for GSB compatibility
2022-01-05 22:41:03 -05:00
Slava Pestov
be772cc74b
RequirementMachine: Layout requirement implied by superclass is now handled in the property map
2022-01-05 22:41:03 -05:00
Slava Pestov
f50c7c94df
RequirementMachine: Tweak TypeAliasRequirementsRequest to match GSB on highly-invalid code
2021-12-20 17:59:31 -05:00
Slava Pestov
360fbc67bc
RequirementMachine: Fix silly mistake in requirement inference
...
getFirstTypeRepr() asserts unless the RequirementRepr is a SameType
requirement. For type requirements we need to call getSubjectTypeRepr().
2021-12-10 00:49:46 -05:00
Slava Pestov
cfd8dbf272
Merge pull request #40465 from slavapestov/rqm-protocol-minimization-fixes
...
RequirementMachine: Protocol requirement signature minimization fixes
2021-12-08 17:19:21 -05:00
zoecarver
fc3b3a1d71
[cxx-interop] Implement foreign reference types.
...
This is an expiremental feature to allow an attribute, `import_as_ref`, to import a C++ record as a non-reference-counted reference type in Swift.
2021-12-08 15:35:18 +00:00
Slava Pestov
0e2fd5ad06
RequirementMachine: Don't call getExistentialLayout() from desugarConformanceRequirement()
2021-12-08 00:53:35 -05:00
Slava Pestov
77d4a207f8
RequirementMachine: Implement requirement inference
2021-11-29 13:54:15 -05:00
Slava Pestov
291ddd7a31
RequirementMachine: Plumb through the ModuleDecl used for requirement inference
2021-11-29 13:54:15 -05:00
Slava Pestov
42c0a28ad7
RequirementMachine: Add RequirementMachine::initWithWrittenRequirements()
2021-11-19 15:48:28 -05:00
Slava Pestov
f0899e3acb
RequirementMachine: Make some entry points in RequirementLowering.cpp public
2021-11-19 15:48:07 -05:00
Slava Pestov
28c1178c4f
RequirementMachine: Introduce TypeAliasRequirementsRequest
...
This is a verbatim copy of the GenericSignatureBuilder's somewhat
questionable (but necessary for source compatibility) logic where
protocol typealiases with the same name as some other associated
type imply a same-type requirement.
The related diagnostics are there too, but only emitted when
-requirement-machine-protocol-signatures=on; in 'verify' mode,
the GSB will emit the same diagnostics.
2021-11-19 15:48:01 -05:00
Slava Pestov
df8ce67539
RequirementMachine: Refactor requirement lowering
2021-11-12 14:30:46 -05:00
Slava Pestov
67535303b6
RequirementMachine: Move implementation of StructuralRequirementsRequest and ProtocolDependenciesRequest to RequirementLowering.cpp
2021-11-12 14:30:46 -05:00
Slava Pestov
ff5d0e1d63
RequirementMachine: Split off RuleBuilder into a new RequirementLowering.cpp file
2021-11-12 14:30:46 -05:00