dotty.tools.dotc.cc
Members list
Type members
Classlikes
A one-element cache for the boxed version of an unboxed capturing type
A one-element cache for the boxed version of an unboxed capturing type
Attributes
- Supertypes
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 capture references to capture sets. cs1 = ∪ {x | x ∈ cs2, p(x)} where p is a predicate on capture references 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 capture references (c.f. doc comment on map
below).
Attributes
- Companion
- object
- Supertypes
- Known subtypes
-
class Constclass Varclass DerivedVarclass BiMappedclass Filteredclass Diffclass Mappedclass IntersectedShow all
Attributes
- Companion
- class
- Supertypes
- Self type
-
CaptureSet.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
An extractor for types that will be capturing types at phase CheckCaptures. Also included are types that indicate captures on enclosing call-by-name parameters before phase ElimByName.
An extractor for types that will be capturing types at phase CheckCaptures. Also included are types that indicate captures on enclosing call-by-name parameters before phase ElimByName.
Attributes
- Supertypes
- Self type
An exception thrown if a @retains argument is not syntactically a CaptureRef
An exception thrown if a @retains argument is not syntactically a CaptureRef
Attributes
- Supertypes
A tree traverser that prepares a compilation unit to be capture checked. It does the following:
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
Classification and transformation methods for 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 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
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
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
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
Under pureFunctions, add a @retainsByName(*)` annotation to the argument of a by name parameter type, turning the latter into an impure by name parameter type.
Under pureFunctions, add a @retainsByName(*)` annotation to the argument of a by name parameter type, turning the latter into an impure by name parameter type.
Attributes
Under pureFunctions, map regular function type to impure function type
Under pureFunctions, map regular function type to impure function type
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.
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.
Attributes
If sym
is a type parameter, the boxed version of tp
, otherwise tp
If sym
is a type parameter, the boxed version of tp
, otherwise tp
Attributes
The boxed version of tp
, unless tycon
is a function symbol
The boxed version of tp
, unless tycon
is a function symbol
Attributes
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
Is type known to be always pure by its class structure, so that adding a capture set to it would not make sense?
Is type known to be always pure by its class structure, so that adding a capture set to it would not make sense?
Attributes
Is the boxedCaptureSet of this type nonempty?
Is the boxedCaptureSet of this type nonempty?
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
Under pureFunctions, add a @retainsByName(*)` annotation to the argument of a by name parameter type, turning the latter into an impure by name parameter type.
Under pureFunctions, add a @retainsByName(*)` annotation to the argument of a by name parameter type, turning the latter into an impure by name parameter type.
Attributes
Map tree with CaptureRef type to its type, throw IllegalCaptureRef otherwise
Map tree with CaptureRef type to its type, throw IllegalCaptureRef otherwise
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.