W3cubDocs

/D

dmd.sideeffect

Compiler implementation of the D programming language.

Authors:
Walter Bright
License:
Boost License 1.0
Source
sideeffect.d
Documentation
https://dlang.org/phobos/dmd_sideeffect.html
Coverage
https://codecov.io/gh/dlang/dmd/src/master/src/dmd/sideeffect.d
bool isTrivialExp(Expression e);

Front-end expression rewriting should create temporary variables for non trivial sub-expressions in order to: 1. save evaluation order 2. prevent sharing of sub-expression in AST

bool hasSideEffect(Expression e);

Determine if Expression has any side effects.

int callSideEffectLevel(FuncDeclaration f);

Determine if the call of f, or function type or delegate type t1, has any side effects.

Returns:
0 has any side effects 1 nothrow + constant purity 2 nothrow + strong purity
bool discardValue(Expression e);

The result of this expression will be discarded. Print error messages if the operation has no side effects (and hence is meaningless).

Returns:
true if expression has no side effects
VarDeclaration copyToTemp(StorageClass stc, const char* name, Expression e);

Build a temporary variable to copy the value of e into.

Parameters:
StorageClass stc storage classes will be added to the made temporary variable
char* name name for temporary variable
Expression e original expression
Returns:
Newly created temporary variable.
Expression extractSideEffect(Scope* sc, const char* name, ref Expression e0, Expression e, bool alwaysCopy = false);

Build a temporary variable to extract e's evaluation, if e is not trivial.

Parameters:
Scope* sc scope
char* name name for temporary variable
Expression e0 a new side effect part will be appended to it.
Expression e original expression
bool alwaysCopy if true, build new temporary variable even if e is trivial.
Returns:
When e is trivial and alwaysCopy == false, e itself is returned. Otherwise, a new VarExp is returned.
Note
e's lvalue-ness will be handled well by STC.ref_ or STC.rvalue.

© 1999–2019 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/dmd_sideeffect.html