dotty.tools.dotc.cc
Members list
Type members
Classlikes
A base class for extractors that match annotated types with a specific Capability annotation.
A base class for extractors that match annotated types with a specific Capability annotation.
Attributes
- Supertypes
- Known subtypes
Capabilities are members of capture sets. They partially overlap with types as shown in the trait hierarchy below.
Capabilities are members of capture sets. They partially overlap with types as shown in the trait hierarchy below.
Capability --+-- RootCapabilty -----+-- GlobalCap | +-- FreshCap | +-- ResultCap | +-- CoreCapability ----+-- ObjectCapability --+-- TermRef | | +-- ThisType | | +-- TermParamRef | | | +-- SetCapability -----+-- TypeRef | +-- TypeParamRef | +-- DerivedCapability -+-- ReadOnly +-- Reach +-- Maybe
All CoreCapabilities are Types, or, more specifically instances of TypeProxy.
Attributes
- Supertypes
- Self type
-
Capabilities.type
An annotation representing a capture set and whether it is boxed. It simulates a normal @retains annotation except that it is more efficient, supports variables as capture sets, and adds a boxed
flag. These annotations are created during capture checking. Before that there are only regular @retains and @retainsByName annotations.
An annotation representing a capture set and whether it is boxed. It simulates a normal @retains annotation except that it is more efficient, supports variables as capture sets, and adds a boxed
flag. These annotations are created during capture checking. Before that there are only regular @retains and @retainsByName annotations.
Value parameters
- boxed
-
whether the type carrying the annotation is boxed
- cls
-
the underlying class (either annotation.retains or annotation.retainsByName)
- refs
-
the capture set
Attributes
- Supertypes
-
trait Serializabletrait Producttrait Equalsclass Annotationtrait Showableclass Objecttrait Matchableclass AnyShow all
A class for capture sets. Capture sets can be constants or variables. Capture sets support inclusion constraints <:< where <:< is subcapturing.
A class for capture sets. Capture sets can be constants or variables. Capture sets support inclusion constraints <:< where <:< is subcapturing.
They also allow
- mapping with functions from elements to capture sets
- filtering with predicates on elements
- intersecting wo capture sets
That is, constraints can be of the forms
cs1 <:< cs2 cs1 = ∪ {f(x) | x ∈ cs2} where f is a function from capabilities to capture sets. cs1 = ∪ {x | x ∈ cs2, p(x)} where p is a predicate on capabilities cs1 = cs2 ∩ cs2
We call the resulting constraint system "monadic set constraints". To support capture propagation across maps, mappings are supported only if the mapped function is either a bijection or if it is idempotent on capabilities (c.f. doc comment on map
below).
Attributes
- Companion
- object
- Supertypes
- Known subtypes
-
class Constclass CSImpliedByCapabilityclass EmptyWithProvenanceobject Fluidclass Varclass DerivedVarclass BiMappedclass Filteredclass Diffclass HiddenSetclass RefiningVarShow all
Attributes
- Companion
- class
- Supertypes
- Self type
-
CaptureSet.type
Attributes
- Supertypes
- Self type
A (possibly boxed) capturing type. This is internally represented as an annotated type with a @retains or @retainsByName annotation, but the extractor will succeed only at phase CheckCaptures. That way, we can ignore caturing information until phase CheckCaptures since it is wrapped in a plain annotation.
A (possibly boxed) capturing type. This is internally represented as an annotated type with a @retains or @retainsByName annotation, but the extractor will succeed only at phase CheckCaptures. That way, we can ignore caturing information until phase CheckCaptures since it is wrapped in a plain annotation.
The same trick does not work for the boxing information. Boxing is context dependent, so we have to add that information in the Setup step preceding CheckCaptures. Boxes are added for all type arguments of methods. For type arguments of applied types a different strategy is used where we box arguments of applied types that are not functions when accessing the argument.
An alternative strategy would add boxes also to arguments of applied types during setup. But this would have to be done for all possibly accessibly types from the compiled units as well as their dependencies. It's difficult to do this in a DenotationTransformer without accidentally forcing symbol infos. That's why this alternative was not implemented. If we would go back on this it would make sense to also treat captuyring types different from annotations and to generate them all during Setup and in DenotationTransformers.
Attributes
- Supertypes
- Self type
-
CapturingType.type
The capture checker
Attributes
- Companion
- object
- Supertypes
-
class Rechecktrait SymTransformertrait DenotTransformerclass Phaseclass Objecttrait Matchableclass AnyShow all
- Self type
Drop retains annotations in the type.
Drop retains annotations in the type.
Attributes
- Supertypes
An extractor for a contains argument
An extractor for a contains parameter
A class encapsulating the assumulator logic needed for CaptureSet.ofTypeDeeply
and derivesFromCapTraitDeeply
. NOTE: The traversal logic needs to be in sync with narrowCaps in CaptureOps, which replaces caps with reach capabilties. There are two exceptions, however.
A class encapsulating the assumulator logic needed for CaptureSet.ofTypeDeeply
and derivesFromCapTraitDeeply
. NOTE: The traversal logic needs to be in sync with narrowCaps in CaptureOps, which replaces caps with reach capabilties. There are two exceptions, however.
- First, invariant arguments. These have to be included to be conservative in dcs but must be excluded in narrowCaps.
- Second, unconstrained type variables are handled specially in
ofTypeDeeply
.
Attributes
- Supertypes
An extractor for all kinds of function types as well as method and poly types. It includes aliases of function types such as =>
. TODO: Can we do without?
An extractor for all kinds of function types as well as method and poly types. It includes aliases of function types such as =>
. TODO: Can we do without?
Attributes
- Returns
-
1st half: The argument types or empty if this is a type function 2nd half: The result type
- Supertypes
- Self type
-
FunctionOrMethod.type
An exception thrown if a @retains argument is not syntactically a Capability
An exception thrown if a @retains argument is not syntactically a Capability
Attributes
- Supertypes
An extractor for ref @amaybeCapability
, which is used to express the maybe capability ref?
as a type.
An extractor for ref @amaybeCapability
, which is used to express the maybe capability ref?
as a type.
Attributes
- Supertypes
- Self type
-
MaybeCapability.type
An extractor for ref @reachCapability
, which is used to express the reach capability ref*
as a type.
An extractor for ref @reachCapability
, which is used to express the reach capability ref*
as a type.
Attributes
- Supertypes
- Self type
-
ReachCapability.type
An extractor for ref @readOnlyCapability
, which is used to express the read-only capability ref.rd
as a type.
An extractor for ref @readOnlyCapability
, which is used to express the read-only capability ref.rd
as a type.
Attributes
- Supertypes
- Self type
-
ReadOnlyCapability.type
A builder and extractor for annotated types with @retains or @retainsByName annotations excluding CapturingTypes.
A builder and extractor for annotated types with @retains or @retainsByName annotations excluding CapturingTypes.
Attributes
- Supertypes
- Self type
-
RetainingType.type
The separation checker is a tree traverser that is run after capture checking. It checks tree nodes for various separation conditions, explained in the methods below. Rough summary:
The separation checker is a tree traverser that is run after capture checking. It checks tree nodes for various separation conditions, explained in the methods below. Rough summary:
- Hidden sets of arguments must not be referred to in the same application
- Hidden sets of (result-) types must not be referred to alter in the same scope.
- Returned hidden sets can only refer to @consume parameters.
- If returned hidden sets refer to an encloding this, the reference must be from a @consume method.
- Consumed entities cannot be used subsequently.
- Entitites cannot be consumed in a loop.
Attributes
Attributes
- Companion
- object
- Supertypes
Phase that sets up everthing for capture checking.
Phase that sets up everthing for capture checking.
A tree traverser that prepares a compilation unit to be capture checked. It does the following:
- For every inferred type, drop any retains annotations, add capture sets to all its parts, add refinements to class types and function types. (c.f. mapInferred)
- For explicit capturing types, expand throws aliases to the underlying (pure) function, and add some implied capture sets to curried functions (c.f. expandThrowsAlias, expandAbbreviations).
- Add capture sets to self types of classes and objects, unless the self type was written explicitly.
- Box the types of mutable variables and type arguments to methods (type arguments of types are boxed on access).
- Link the external types of val and def symbols with the inferred types based on their parameter symbols.
Attributes
- Companion
- object
- Supertypes
-
trait SetupAPItrait SymTransformerclass PreRechecktrait DenotTransformerclass Phaseclass Objecttrait Matchableclass AnyShow all
- Self type
Classification and transformation methods for function methods and synthetic case class methods that need to be treated specially. In particular, compute capturing types for some of these methods which have inferred (result-)types that need to be established under separate compilation.
Classification and transformation methods for function methods and synthetic case class methods that need to be treated specially. In particular, compute capturing types for some of these methods which have inferred (result-)types that need to be established under separate compilation.
Attributes
- Supertypes
- Self type
-
Synthetics.type
Value members
Concrete methods
The currently valid CCState
The currently valid CCState
Attributes
A dependent function type with given arguments and result type TODO Move somewhere else where we treat all function type related ops together.
A dependent function type with given arguments and result type TODO Move somewhere else where we treat all function type related ops together.
Attributes
Are we at checkCaptures phase?
Are we at checkCaptures phase?
Attributes
Are we in the CheckCaptures or Setup phase?
Are we in the CheckCaptures or Setup phase?
Attributes
Extensions
Extensions
Does this symbol allow results carrying the universal capability? Currently this is true only for function type applies (since their results are unboxed) and erasedValue
since this function is magic in that is allows to conjure global capabilies from nothing (aside: can we find a more controlled way to achieve this?). But it could be generalized to other functions that so that they can take capability classes as arguments.
Does this symbol allow results carrying the universal capability? Currently this is true only for function type applies (since their results are unboxed) and erasedValue
since this function is magic in that is allows to conjure global capabilies from nothing (aside: can we find a more controlled way to achieve this?). But it could be generalized to other functions that so that they can take capability classes as arguments.
Attributes
sym
or its info is annotated with @consume
.
sym
or its info is annotated with @consume
.
Attributes
A class is pure if:
A class is pure if:
- one its base types has an explicitly declared self type with an empty capture set
- or it is a value class
- or it is an exception
- or it is one of Nothing, Null, or String
Attributes
It's a parameter accessor that is not annotated @constructorOnly or @uncheckedCaptures
It's a parameter accessor that is not annotated @constructorOnly or @uncheckedCaptures
Attributes
This symbol is one of retains
or retainsCap
This symbol is one of retains
or retainsCap
Attributes
This symbol is one of retains
, retainsCap
, orretainsByName
This symbol is one of retains
, retainsCap
, orretainsByName
Attributes
sym
itself or its info is annotated @use or it is a type parameter with a matching
sym
itself or its info is annotated @use or it is a type parameter with a matching
Attributes
When applying sym
, would the result type be unboxed? This is the case if the result type contains a top-level reference to an enclosing class or method type parameter and the method does not allow root capture. If the type parameter is instantiated to a boxed type, that type would have to be unboxed in the method's result.
When applying sym
, would the result type be unboxed? This is the case if the result type contains a top-level reference to an enclosing class or method type parameter and the method does not allow root capture. If the type parameter is instantiated to a boxed type, that type would have to be unboxed in the method's result.
Attributes
If this is a unboxed capturing type with nonempty capture set, its boxed version. Or, if type is a TypeBounds of capturing types, the version where the bounds are boxed. The identity for all other types.
If this is a unboxed capturing type with nonempty capture set, its boxed version. Or, if type is a TypeBounds of capturing types, the version where the bounds are boxed. The identity for all other types.
Attributes
The capture set consisting of all top-level captures of tp
that appear under a box. Unlike for boxed
this also considers parents of capture types, unions and intersections, and type proxies other than abstract types. Furthermore, if the original type is a capability x
, it replaces boxed universal sets on the fly with x*.
The capture set consisting of all top-level captures of tp
that appear under a box. Unlike for boxed
this also considers parents of capture types, unions and intersections, and type proxies other than abstract types. Furthermore, if the original type is a capability x
, it replaces boxed universal sets on the fly with x*.
Attributes
The capture set of a type. This is:
The capture set of a type. This is:
- For object capabilities: The singleton capture set consisting of just the reference, provided the underlying capture set of their info is not empty.
- For other capabilities: The capture set of their info
- For all other types: The result of CaptureSet.ofType
Attributes
A type capturing ref
A type capturing ref
Attributes
A type capturing the capture set cs
. If this type is already a capturing type the two capture sets are combined.
A type capturing the capture set cs
. If this type is already a capturing type the two capture sets are combined.
Attributes
Does this type contain no-flip covariant occurrences of cap
?
Does this type contain no-flip covariant occurrences of cap
?
Attributes
The deep capture set of a type. This is by default the union of all covariant capture sets embedded in the widened type, as computed by CaptureSet.ofTypeDeeply
. If that set is nonempty, and the type is a singleton capability x
or a reach capability x*
, the deep capture set can be narrowed to{x*}
.
The deep capture set of a type. This is by default the union of all covariant capture sets embedded in the widened type, as computed by CaptureSet.ofTypeDeeply
. If that set is nonempty, and the type is a singleton capability x
or a reach capability x*
, the deep capture set can be narrowed to{x*}
.
Attributes
Attributes
Tests whether the type derives from capability class cls
.
Tests whether the type derives from capability class cls
.
Attributes
Tests whether all CapturingType parts of the type that are traversed for dcs computation satisfy at least one of two conditions:
Tests whether all CapturingType parts of the type that are traversed for dcs computation satisfy at least one of two conditions:
- They decorate classes that extend the given capability class
cls
, or - Their capture set is constant and consists only of capabilities the derive from
cls
in the sense ofderivesFromCapTrait
.
Attributes
Drop @retains annotations everywhere
Drop @retains annotations everywhere
Attributes
If this type is a capturing type, the version with boxed statues as given by boxed
. If it is a TermRef of a capturing type, and the box status flips, widen to a capturing type that captures the TermRef.
If this type is a capturing type, the version with boxed statues as given by boxed
. If it is a TermRef of a capturing type, and the box status flips, widen to a capturing type that captures the TermRef.
Attributes
Knowing that tp
is a function type, is it an alias to a function other than =>
?
Knowing that tp
is a function type, is it an alias to a function other than =>
?
Attributes
Is type known to be always pure by its class structure? In that case, adding a capture set to it would not make sense.
Is type known to be always pure by its class structure? In that case, adding a capture set to it would not make sense.
Attributes
Is the box status of tp
and tp2
compatible? I.ee they are box boxed, or both unboxed, or one of them has an empty capture set.
Is the box status of tp
and tp2
compatible? I.ee they are box boxed, or both unboxed, or one of them has an empty capture set.
Attributes
Is the boxedCaptureSet of this type nonempty?
Is the boxedCaptureSet of this type nonempty?
Attributes
Is this a reference to caps.cap? Note this is not the GlobalCap capability.
Is this a reference to caps.cap? Note this is not the GlobalCap capability.
Attributes
Is this a type extending Mutable
that has update methods?
Is this a type extending Mutable
that has update methods?
Attributes
Is this type a Capability that can be tracked? This is true for
Is this type a Capability that can be tracked? This is true for
- all ThisTypes and all TermParamRef,
- stable TermRefs with NoPrefix or ThisTypes as prefixes,
- annotated types that represent reach or maybe capabilities
Attributes
A list of capabilities of a retained set.
A list of capabilities of a retained set.
Attributes
A list of raw elements of a retained set. This will not crash even if it contains a non-wellformed Capability.
A list of raw elements of a retained set. This will not crash even if it contains a non-wellformed Capability.
Attributes
Map capturing type to their parents. Capturing types accessible via dealising are also stripped.
Map capturing type to their parents. Capturing types accessible via dealising are also stripped.
Attributes
If this is a unboxed capturing type with nonempty capture set, its boxed version. Or, if type is a TypeBounds of capturing types, the version where the bounds are boxed. The identity for all other types.
If this is a unboxed capturing type with nonempty capture set, its boxed version. Or, if type is a TypeBounds of capturing types, the version where the bounds are boxed. The identity for all other types.
Attributes
If x
is a capability, replace all no-flip covariant occurrences of cap
in type tp
with x*
.
If x
is a capability, replace all no-flip covariant occurrences of cap
in type tp
with x*
.
Attributes
A method marks an existential scope unless it is the prefix of a curried method
A method marks an existential scope unless it is the prefix of a curried method
Attributes
The type representing the capture set of @retains, @retainsCap or @retainsByName annotation.
The type representing the capture set of @retains, @retainsCap or @retainsByName annotation.
Attributes
Convert a @retains or @retainsByName annotation tree to the capture set it represents. For efficience, the result is cached as an Attachment on the tree.
Convert a @retains or @retainsByName annotation tree to the capture set it represents. For efficience, the result is cached as an Attachment on the tree.