Kathy Gray
e25cfc6d23
Expand support for PackExpansion type in requirements maching
...
Types where pack expansion required nested subsitution could cause the compiler to crash rather than properly expanding the pack. Both for populated types and infinityly expanding types which should generate an error.
This expands the support for these to generate more errors and populated types, and correspondingly expands the test suite
2025-10-10 17:46:22 +01:00
Slava Pestov
fbe3d71b19
RequirementMachine: Small cleanup
2024-09-14 23:33:11 -04:00
Holly Borla
2ea4586580
[Requirement Machine] Implement same-element requirements.
2024-07-15 10:19:32 -07:00
Slava Pestov
f34e57c016
RequirementMachine: Use ProtocolDecl::getAllInheritedProtocols()
2024-06-25 15:20:42 -04:00
Holly Borla
c7c1a2074e
[RequirementMachine] Store the singleton 'Storage' instance for shape
...
symbols in RewriteContext.
2022-10-07 10:35:49 -07:00
Slava Pestov
3cfbe037ee
RequirementMachine: Simplify getTypeForSymbolRange() a bit
2022-03-29 00:43:41 -04:00
Slava Pestov
4d097da73c
RequirementMachine: Re-use requirement machines constructed by minimization for queries
...
Fixes rdar://problem/88135641.
2022-03-26 00:56:41 -04:00
Slava Pestov
af99ac55de
RequirementMachine: Add -debug-requirement-machine=timers
2022-03-26 00:56:41 -04:00
Slava Pestov
3fe4aaae5a
RequirementMachine: Fix subtle bug in isRecursivelyConstructingRequirementMachine()
...
I don't have a reduced test case. It was possible for computing the requirement
signatures of a connected component to have finished, and yet for the
ProtocolDecl::hasComputedRequirementSignature() method to return false, if
we had evaluated a RequirementSignatureRequestRQM but not the top-level
RequirementSignatureRequest.
Instead, track whether we've computed the signatures for a component directly.
I don't have a reduced test case. It would arise with associated type inference,
which uses this predicate to break nasty cycles.
2022-03-24 23:45:32 -04:00
Slava Pestov
af443bee0a
RequirementMachine: Implement RewriteContext::getRequirementMachine(ProtocolDecl *)
2022-03-16 00:58:30 -04:00
Slava Pestov
f59ffbb94d
RequirementMachine: Remove unused field from RewriteContext
2022-03-11 17:28:01 -05:00
Slava Pestov
0d0bcb2ff1
RequirementMachine: Simplify the Symbol API for removal of merged associated types
2022-02-07 18:57:45 -05:00
Slava Pestov
e2e088e082
RequirementMachine: Remove merged associated types from completion
2022-02-07 18:57:45 -05:00
Slava Pestov
1539128dc4
RequirementMachine: Move getGenericParamIndex() to RewriteContext
2022-02-04 22:47:19 -05:00
Slava Pestov
c46c7773ed
RequirementMachine: Rename remapConcreteSubstitutionSchema() to getRelativeSubstitutionSchemaFromType()
2022-01-25 00:32:25 -05:00
Slava Pestov
01ba790ccf
RequirementMachine: Move remapConcreteSubstitutionSchema() to RewriteContext
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
fa30159130
RequirementMachine: Move term to type methods from RewriteContext to PropertyMap
2022-01-20 00:18:47 -05:00
Slava Pestov
317743a487
RequirementMachine: Rename GeneratingConformances => MinimalConformances
2021-12-17 10:04:52 -05:00
Slava Pestov
d7b5dfc644
RequirementMachine: Don't keep protocol requirement machines around
2021-12-10 00:49:45 -05:00
Slava Pestov
044611dddc
RequirementMachine: Another cycle-breaking hack for associated type inference
2021-12-08 00:53:35 -05:00
Slava Pestov
8e7a9b0f9f
RequirementMachine: Add a couple of histograms
2021-12-07 15:31:47 -05:00
Slava Pestov
0571b65cb8
RequirementMachine: Move protocol linear order from ProtocolGraph to RewriteContext
2021-10-21 19:00:10 -04:00
Slava Pestov
56439726ab
RequirementMachine: Move some code from PropertyMap.cpp to RewriteContext.cpp
2021-10-14 15:03:26 -04:00
Slava Pestov
c3270742dc
RequirementMachine: Compute strongly connected components from the protocol dependency graph
2021-10-05 21:30:57 -04:00
Slava Pestov
47ab4a9f28
AST: GenericSignatures point directly to their RequirementMachine
...
This avoids a hashtable lookup when performing queries.
2021-09-27 21:36:45 -04:00
Slava Pestov
399a600e32
RequirementMachine: Add -debug-requirement-machine= flag to control debug output
2021-08-20 01:29:22 -04:00
Slava Pestov
0935952038
RequirementMachine: Cache result of mergeAssociatedTypes()
2021-08-19 22:14:58 -04:00
Slava Pestov
eec233507b
RequirementMachine: Cache the mapping from associated type symbols to associated type declarations
2021-08-13 17:27:49 -04:00
Slava Pestov
47fc3d87ad
RequirementMachine: Speed up PropertyMap lookups with a suffix trie
...
Whereas term simplification uses a prefix trie with shortest matching,
the PropertyMap uses a suffix trie with longest matching.
2021-08-06 14:17:20 -04:00
Slava Pestov
156fa2cc04
RequirementMachine: Speed up term simplification with a prefix trie
...
Previously RewriteSystem::simplify() would attempt to apply every
rewrite rule at every position in the original term, which was
obviously a source of overhead.
The trie itself is somewhat unoptimized; for example, with a bit of
effort it could merge a node with its only child, if nodes stored
a range of elements to compare rather than a single element.
2021-08-05 21:42:50 -04:00
Slava Pestov
ed966e7337
RequirementMachine: Add histograms for symbol kinds and term length
2021-08-05 21:42:50 -04:00
Slava Pestov
cfb1595ec5
RequirementMachine: Rename Atom => Symbol
2021-07-23 15:58:50 -04:00
Slava Pestov
4184ebd0a8
RequirementMachine: Split off RewriteContext.{h,cpp} from RewriteSystem.{h,cpp}
2021-07-14 00:16:06 -04:00