Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
dmd.typesem
Semantic analysis for D types.
Authors:
License:
Source typesem.d
Documentation https://dlang.org/phobos/dmd_typesem.html
- bool
isCopyable
(Typet
); - Determine if type t is copyable.Parameters:
Type t
type to check Returns:true if we can copy it - int
mutabilityOfType
(boolisref
, Typet
); - Determine mutability of indirections in (ref) t.Returns:When the type has any mutable indirections, returns 0. When all indirections are immutable, returns 2. Otherwise, when the type has const/inout indirections, returns 1.Parameters:
bool isref
if true, check ref t
; otherwise, check justt
Type t
the type that is being checked - void
purityLevel
(TypeFunctiontypeFunction
); - Set 'purity' field of 'typeFunction'. Do this lazily, as the parameter types might be forward referenced.
- Expression
typeToExpression
(Typet
); - We've mistakenly parsed
t
as a type. Redot
as an Expression only if there are no type modifiers.Parameters:Type t
mistaken type Returns:t redone as Expression, null if cannot - bool
checkComplexTransition
(Typetype
, const ref Locloc
, Scope*sc
); - https://issues.dlang.org/show_bug.cgi?id=14488 Check if the inner most base type is complex or imaginary. Should only give alerts when set to emit transitional messages.Parameters:
Type type
type to check Loc loc
The source location. Scope* sc
scope of the type - MATCH
callMatch
(TypeFunctiontf
, Typetthis
, ArgumentListargumentList
, intflag
= 0, void delegate(const(char)*) scopeerrorHelper
= null, Scope*sc
= null); - 'args' are being matched to function type 'tf' Determine match level.Parameters:
TypeFunction tf
function type Type tthis
type of this pointer, null if not member function ArgumentList argumentList
arguments to function call int flag
1: performing a partial ordering match void delegate(const(char)*) scope errorHelper
delegate to call for error messages Scope* sc
context Returns:MATCHxxxx - bool
hasPointers
(Typet
); - Return !=0 if type has pointers that need to be scanned by the GC during a collection cycle.
- Type
typeSemantic
(Typetype
, const ref Locloc
, Scope*sc
); - Perform semantic analysis on a type.Parameters:
Type type
Type AST node Loc loc
the location of the type Scope* sc
context Returns:Type with completed semantic analysis, Terror if errors were encountered - Type
merge
(Typetype
); - If an identical type to
type
is intype
.stringtable, return the latter one. Otherwise, add it totype
.stringtable. Some types don't get merged and are returned as-is.Parameters:Type type
Type to check against existing types Returns:the type that was merged - Type
merge2
(Typetype
); - This version does a merge even if the deco is already computed. Necessary for types that have a deco, but are not merged.
- Expression
getProperty
(Typet
, Scope*scope_
, const ref Locloc
, Identifierident
, intflag
, Expressionsrc
= null); - Calculate built-in properties which just the type is necessary.Parameters:
Type t
the type for which the property is calculated Scope* scope_
the scope from which the property is being accessed. Used for visibility checks only. Loc loc
the location where the property is encountered Identifier ident
the identifier of the property int flag
if flag & 1, don't report "not a property" error and just return NULL. Expression src
expression for type t
or null.Returns:expression representing the property, or null if not a property and (flag & 1) - void
resolve
(Typemt
, const ref Locloc
, Scope*sc
, out Expressionpe
, out Typept
, out Dsymbolps
, boolintypeid
= false); - Resolve type 'mt' to either type, symbol, or expression. If errors happened, resolved to Type.terror.Parameters:
Type mt
type to be resolved Loc loc
the location where the type is encountered Scope* sc
the scope of the type Expression pe
is set if t is an expression Type pt
is set if t is a type Dsymbol ps
is set if t is a symbol bool intypeid
true if in type id - Expression
dotExp
(Typemt
, Scope*sc
, Expressione
, Identifierident
, DotExpFlagflag
); - Access the members of the object e. This type is same as e.type.Parameters:
Type mt
type for which the dot expression is used Scope* sc
instantiating scope Expression e
expression to convert Identifier ident
identifier being used DotExpFlag flag
DotExpFlag bit flags Returns:resulting expression with e.ident resolved - Expression
defaultInit
(Typemt
, const ref Locloc
, const boolisCfile
= false); - Get the default initialization expression for a type.Parameters:
Type mt
the type for which the init expression is returned Loc loc
the location where the expression needs to be evaluated bool isCfile
default initializers are different with C Returns:The initialization expression for the type. - Type
addStorageClass
(Typetype
, StorageClassstc
); - Add storage class modifiers to type.
- Type
getComplexLibraryType
(const ref Locloc
, Scope*sc
, TYty
); - Extract complex type from core.stdc.configParameters:
Loc loc
for error messages Scope* sc
context TY ty
a complex or imaginary type Returns:Complex!float, Complex!double, Complex!real or null for error - Covariant
covariant
(Typesrc
, Typet
, StorageClass*pstc
= null, boolcppCovariant
= false); - Covariant means that 'src' can substitute for 't', i.e. a pure function is a match for an impure type.Parameters:
Type src
source type Type t
type 'src' is covariant with StorageClass* pstc
if not null, store STCxxxx which would make it covariant bool cppCovariant
true if extern(C++) function types should follow C++ covariant rules Returns:An enum value of either Covariant.yes or a reason it's not covariant. - StorageClass
parameterStorageClass
(TypeFunctiontf
, Typetthis
, Parameterp
, VarDeclarations*outerVars
= null, boolindirect
= false); - Take the specified storage class for p, and use the function signature to infer whether STC.scope_ and STC.return_ should be OR'd in. (This will not affect the name mangling.)Parameters:
TypeFunction tf
TypeFunction to use to get the signature from Type tthis
type of this parameter, null if none Parameter p
parameter to this function VarDeclarations* outerVars
context variables p could escape into, if any bool indirect
is this for an indirect or virtual function call? Returns:storage class with STC.scope_ or STC.return_ OR'd in - Type
constOf
(Typetype
); - Convert to 'const'.
- Type
immutableOf
(Typetype
); - Convert to 'immutable'.
- Type
mutableOf
(Typetype
); - Make type mutable.
- Type
unSharedOf
(Typetype
); - Make type unshared. 0 => 0 const => const immutable => immutable shared => 0 shared const => const wild => wild wild const => wild const shared wild => wild shared wild const => wild const
- Type
wildOf
(Typetype
); - Convert to 'wild'.
- Type
toHeadMutable
(const Typet
); - Return type with the top level of it being mutable.Parameters:
Type t
type for which the top level mutable version is being returned Returns:type version with mutable top level - Type
castMod
(Typetype
, MODmod
); - Apply MODxxxx bits to existing type.
- Type
addMod
(Typetype
, MODmod
); - Add MODxxxx bits to existing type. We're adding, not replacing, so adding const to a shared type => "shared const"
- bool
isRecursiveAliasThis
(ref Typeatt
, Typet
); - Check and set 'att' if 't' is a recursive 'alias this' typeThe 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 returns false, and a rewrite to S1 can be tried. S1 is a recursive alias this type, but sinceatt
is initialized to null, this still returns false, but att1 is set to S1. A rewrite to S2 and S3 can be tried, but when we want to try a rewrite to S1 again, we noticeatt
==t
, so we're back at the start of the loop, and this returns true.Parameters:Type att
type reference used to detect recursion. Should be initialized to null. Type t
type of 'alias this' rewrite to attempt Returns:false if the rewrite is safe, true if it would loop back around
Copyright © 1999-2024 by the D Language Foundation | Page generated by
Ddoc on Wed Dec 18 08:51:53 2024