A NamedType of the form Prefix # name
Constructors
Members
Hook for adding debug check code when denotations are assigned
Hook for adding debug check code when denotations are assigned
A second fallback to recompute the denotation if necessary
A second fallback to recompute the denotation if necessary
Guard against cycles that can arise if given op
follows info. The problematic cases are a type alias to itself or
bounded by itself or a val typed as it...
Guard against cycles that can arise if given op
follows info. The problematic cases are a type alias to itself or
bounded by itself or a val typed as itself:
type T <: T val x: x.type
These are errors but we have to make sure that operations do not loop before the error is detected.
The denotation is current, its symbol, otherwise NoDenotation.
Note: This operation does not force the denotation, and is therefore timing dependent. It...
The denotation is current, its symbol, otherwise NoDenotation.
Note: This operation does not force the denotation, and is therefore
timing dependent. It should only be used if the outcome of the
essential computation does not depend on the symbol being present or not.
It's currently used to take an optimized path in substituters and
type accumulators, as well as to be safe in diagnostic printing.
Normally, it's better to use symbol
, not currentSymbol
.
The denotation currently denoted by this type
The denotation currently denoted by this type
A first fall back to do a somewhat more expensive calculation in case the first
attempt in denot
does not yield a denotation.
A first fall back to do a somewhat more expensive calculation in case the first
attempt in denot
does not yield a denotation.
There is a denotation computed which is valid (somewhere in) the current run.
There is a denotation computed which is valid (somewhere in) the current run.
A selection of the same kind, but with potentially a different prefix. The following normalizations are performed for type selections T#A:
T#A --> B...
A selection of the same kind, but with potentially a different prefix. The following normalizations are performed for type selections T#A:
T#A --> B if A is bound to an alias = B
in T
If Config.splitProjections is set:
(S & T)#A --> S#A if T does not have a member named A --> T#A if S does not have a member named A --> S#A & T#A otherwise (S | T)#A --> S#A | T#A
Create a NamedType of the same kind as this type, but with a new prefix.
Create a NamedType of the same kind as this type, but with a new prefix.
A member of prefix
(disambiguated by d.signature
) or, if none was found, d.current
.
A member of prefix
(disambiguated by d.signature
) or, if none was found, d.current
.
(1) Reduce a type-ref W # X
or W { ... } # U
, where W
is a wildcard type
to an (unbounded) wildcard type.
(2) Reduce a type-ref T { X = U; ... } # X
to...
(1) Reduce a type-ref W # X
or W { ... } # U
, where W
is a wildcard type
to an (unbounded) wildcard type.
(2) Reduce a type-ref T { X = U; ... } # X
to U
provided U
does not refer with a RecThis to the
refinement type T { X = U; ... }
Create a NamedType of the same kind as this type, but with a "inherited name". This is necessary to in situations like the following:
class B { def m: T...
Create a NamedType of the same kind as this type, but with a "inherited name". This is necessary to in situations like the following:
class B { def m: T1 } class C extends B { private def m: T2; ... C.m } object C extends C object X { ... C.m }
The two references of C.m in class C and object X refer to different definitions: The one in C refers to C#m whereas the one in X refers to B#m. But the type C.m must have only one denotation, so it can't refer to two members depending on context.
In situations like this, the reference in X would get the type
<C.m>.shadowed
to make clear that we mean the inherited member, not
the private one.
Note: An alternative, possibly more robust scheme would be to give private members special names. A private definition would have a special name (say m' in the example above), but would be entered in its enclosing under both private and public names, so it could still be found by looking up the public name.
Retrieves currently valid symbol without necessarily updating denotation. Assumes that symbols do not change between periods in the same run. Used to ge...
Retrieves currently valid symbol without necessarily updating denotation. Assumes that symbols do not change between periods in the same run. Used to get the class underlying a ThisType.