-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add restricted capabilities x.only[C]
#23485
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
odersky
wants to merge
12
commits into
scala:main
Choose a base branch
from
dotty-staging:cc-only
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
+622
−203
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
prolativ
reviewed
Jul 7, 2025
@@ -597,7 +597,7 @@ class SepCheck(checker: CheckCaptures.CheckerAPI) extends tpd.TreeTraverser: | |||
* - If the reference is to a this type of the enclosing class, the | |||
* access must be in a @consume method. | |||
* | |||
* References that extend SharedCapability are excluded from checking. | |||
* References that extend cpas.Sharable are excluded from checking. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Suggested change
* References that extend cpas.Sharable are excluded from checking. | |
* References that extend caps.Sharable are excluded from checking. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
No more detour via PostfixOps of compiler-generated names.
Basic representations and definitions, so that we can parse only-capabilities, convert them to internal representation `Restrict(c, cls)`, not crash on them during capture checking and print them out correctly.
The previous version failed in the "Scala-3 with Capture Checking" test.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implementation along the lines of #23463
only
-capabilities.Classifier
base trait.only
-capabilities.captureSetOfInfo
foronly
capabilities.x.only[Nothing]
. It should have emptycaptureSetOfInfo
.only
must refer to a classified capability class.- it's
*
, then.only
, then.rd
,- multiple
.only
normalize to the smallest one if the classes are related,- multiple
.only
normalize to the empty capability if the classes are not related.FreshCap
andResultCap
.capToFresh
andtoResultInResults
so that the classifier field is correctly set.tcs
, define when a capability is classified by a classifier class.C
can subsume only capabilities that are classified asC
.-
c.as[C] <: d
ifc <: d
orc.as[D] <: empty
-
c.as[C] <: d.as[D]
ifc <: d
andC
derives fromD
-
c <: d.as[D]
ifc <: d
andc
is classified asD
-
c.as[D] <: empty
iftcs(c)
consists of capabilities that all derive from classifier classes unrelated toD
.