dmd.aliasthis
Implements the alias this
symbol.
Specification: Alias This
License
Source: aliasthis.d
Documentation: https://dlang.org/phobos/dmd_aliasthis.html
-
Declaration
class
AliasThis
: dmd.dsymbol.Dsymbol;alias ident this;
-
Declaration
Dsymbol
sym
;The symbol this
alias this
resolves to -
Declaration
bool
isDeprecated_
;Whether this
alias this
is deprecated or not
-
-
Declaration
Expression
resolveAliasThis
(Scope*sc
, Expressione
, boolgag
= false, boolfindOnly
= false);Find the
alias this
symbol ofe
's type.Parameters
Scope*
sc
context
Expression
e
expression forming the
this
bool
gag
do not print errors, return
null
insteadbool
findOnly
don't do further processing like resolving properties, i.
e
. just return plain dotExp() result.Return Value
Expression that is
e
.aliasthis -
Declaration
bool
checkDeprecatedAliasThis
(AliasThisat
, const ref Locloc
, Scope*sc
);Check if an
alias this
is deprecatedDiscussion
Usually one would use
expression.checkDeprecated(scope, aliasthis)
to check ifexpression
uses a deprecatedaliasthis
, but this callstoPrettyChars
which lead to the following message: "Deprecation: alias thisfullyqualified.aggregate.__anonymous
is deprecated"Parameters
AliasThis
at
The
AliasThis
object to checkLoc
loc
Loc
of the expression triggering the access toat
Scope*
sc
Scope
of the expression (deprecations do not trigger in deprecated scopes)Return Value
Whether the alias this was reported as deprecated.
-
Declaration
bool
isRecursiveAliasThis
(ref Typeatt
, Typet
);Check and set '
att
' if 't
' is a recursive 'alias this' typeDiscussion
The goal is to prevent endless loops when there is a cycle in the alias this chain. Since there is no multiple
alias this
, the chain either ends in a leaf, or it loops back on itself as some point.Example: S0 -> (S1 -> S2 -> S3 -> S1)
S0
is not a recursive alias this, so this returnsfalse
, and a rewrite toS1
can be tried.S1
is a recursive alias this type, but since
is initialized toatt
null
, this still returnsfalse
, butatt1
is set toS1
. A rewrite toS2
andS3
can be tried, but when we want to try a rewrite toS1
again, we notice
, so we're back at the start of the loop, and this returnsatt
==t
true
.Parameters
Type
att
type reference used to detect recursion. Should be initialized to
null
.Type
t
type of 'alias this' rewrite to attempt
Return Value
false
if the rewrite is safe,true
if it would loop back around