英語版
このページの英語版を見る

dmd.sideeffect

表現の副作用を見つける。
Authors:

出典 sideeffect.d

bool isTrivialExp(Expression e);
フロントエンドの式書き換えは、次のような目的で、些細でない部分式のために一時変数を作成する必要がある。 を作成する必要がある:
  1. 評価順序を保存する
  2. ASTでの部分式の共有を防ぐ。
bool hasSideEffect(Expression e, bool assumeImpureCalls = false);
式に副作用があるかどうかを判断する。
Parameters:
Expression e 式に副作用があるかどうかを判定する。
bool assumeImpureCalls 関数呼び出しが常に不純であると仮定するかどうか。 を常に不純であると仮定すべきかどうか(例えば、デバッグが不純であることを許容する)。
int callSideEffectLevel(FuncDeclaration f);
fの呼び出し、あるいは関数型やデリゲート型t1に副作用があるかどうかを判定する。
Returns:
0 副作用がある 1 nothrow + 強く純粋である。 2 nothrow + 強く純粋 + 返り値の不変間接のみ 型」である。
bool discardValue(Expression e);
この式の結果は破棄される。 演算に副作用がない(つまり意味がない)場合はエラーメッセージを表示する。
Returns:
式に副作用がない場合はtrueを返す。
VarDeclaration copyToTemp(StorageClass stc, const char[] name, Expression e);
eの値をコピーする一時変数を作成する。
Parameters:
StorageClass stc 作成された一時変数にはストレージ・クラスが追加される。
char[] name 一時変数の名前
Expression e 元の式
Returns:
新しく作られた一時変数。
Expression extractSideEffect(Scope* sc, const char[] name, ref Expression e0, Expression e, bool alwaysCopy = false);
eがトリビアルでない場合、eの評価を抽出するための一時変数を構築する。
Parameters:
Scope* sc スコープ
char[] name 一時変数の名前
Expression e0 には、新しい副作用部分が付加される。
Expression e オリジナル式
bool alwaysCopy がtrueの場合、eが些細なものであっても新しい一時変数を作る。
Returns:
e がトリビアルで alwaysCopy == false の場合、e 自身が返される。 そうでない場合は、新しい VarExp が返される。

注釈 eのl値性はSTC.ref_またはSTC.r値によってうまく処理される。