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

dmd.expressionsem

表現の意味解析。
Authors:

ソース expressionsem.d

bool expressionsToString(ref OutBuffer buf, Scope* sc, Expressions* exps);
式に対して意味解析とCTFEを行い、文字列を生成する。 文字列を生成する。
Parameters:
OutBuffer buf 生成された文字列をバッファに追加する
Scope* sc コンテキスト
Expressions* exps "式"の配列。
Returns:
エラー時にtrueを返す
FuncDeclaration hasThis(Scope* sc);
this 関数が見つかるまで スコープを関数が見つかるまで歩くことによって、。
Parameters:
Scope* sc どこで包含関数を探し始めるか。
Returns:
isThis() を満たしていれば関数が見つかる。null
StringExp semanticString(Scope* sc, Expression exp, const char* s);
解決する expをコンパイル時に既知の文字列として解決する。
Parameters:
Scope* sc スコープ
Expression exp 文字列として期待される式
char* s この文字列が何に使われるかは、エラー診断で使われる。
Returns:
文字列リテラル、またはエラーが発生した場合はnull
StringExp toUTF8(StringExp se, Scope* sc);
文字列をchar[]に変換する。
TupleDeclaration isAliasThisTuple(Expression e);
このタプルのエイリアスを展開する。
Expression resolveOpDollar(Scope* sc, ArrayExp ae, Expression* pe0);
ae.argumentsのセマンティックを実行する。一時変数を宣言する。 が使用された場合、一時変数を宣言する。
Expression resolveOpDollar(Scope* sc, ArrayExp ae, IntervalExp ie, Expression* pe0);
se.lwrとse.uprに対してセマンティックを実行する。が使用された場合、一時変数を宣言する。 が使用された場合、一時変数を宣言する。
Returns:
エラーが発生した場合は ae または ErrorExp を実行する。
bool arrayExpressionSemantic(Expression[] exps, Scope* sc, bool preserveErrors = false);
式の配列に対してsemantic()を実行する。
Expression doCopyOrMove(Scope* sc, Expression e, Type t = null);
l値のポストブリット呼び出し、またはr値の移動を処理する。
Parameters:
Scope* sc 式が発生したスコープ。
Expression e 移動またはコピーが必要な式(ソース)
Type t 構造体がコピーコンストラクタを定義している場合、コピー先の型。
Returns:
値をコピー構築または移動する式。
Expression valueNoDtor(Expression e);
この式の値が欲しいが、デストラクタを呼び出したくない場合、次のようになる。 デストラクタを呼び出したくない場合。
Expression resolvePropertiesOnly(Scope* sc, Expression e1);
e1がプロパティ関数(テンプレート化された関数)であれば、それを解決する。
Expression symbolToExp(Dsymbol s, const ref Loc loc, Scope* sc, bool hasOverloads);
シンボル sをそれが表す式に変える。
Parameters:
Dsymbol s 解決する記号
Loc loc の使用場所 s
Scope* sc コンテキスト
bool hasOverloads が適用される。 sが関数を表す場合に適用される。 trueはオーバーロードされ、後で解決されることを意味する、 falseは正確な関数シンボルであることを意味する。
Returns:
sエラーが発生した場合、ErrorExp
void checkOverriddenDtor(FuncDeclaration f, Scope* sc, const ref Loc loc, scope bool function(DtorDeclaration) check, const string checkName);
であるかどうかをチェックする。 fがユーザー定義のものを隠すために生成されたDtorDeclaration かどうかをチェックする。 を渡す。 checkをパスする。 fを隠す生成されたものであるかどうかをチェックする(例えば、ユーザー定義のdtorは純粋だが、生成されたdtorは純粋でない場合)。 生成されたdtorはそうでない場合など)。 その場合、このメソッドは属性の不一致を引き起こすすべてのメンバを特定し、表示する。 のミスマッチを引き起こすすべてのメンバを特定して表示する。
Parameters:
FuncDeclaration f 潜在的なDtorDeclaration
Scope* sc スコープ
Loc loc 位置
bool function(DtorDeclaration) check 現在のチェック(純粋かどうかなど)
string checkName チェックの種類 (例:"pure")
Package resolveIsPackage(Dsymbol sym);
シンボルがモジュールかパッケージかを判定する (is(型==モジュール)とis(型==パッケージ)のヘルパーとして使われる)
Parameters:
Dsymbol sym チェックするシンボル
Returns:
を表すシンボル symを表す(Package を表さない場合はnull )。
Expression trySemantic(Expression exp, Scope* sc);
セマンティック・ルーチンの実行を試みる。 失敗した場合はNULLを返す。
Expression unaSemantic(UnaExp e, Scope* sc);
エラー伝搬を容易にするためのヘルパー関数。 エラーが発生した場合、ErrorExp を返す。それ以外は NULL を返す。
Expression binSemantic(BinExp e, Scope* sc);
簡単なエラー伝播のためのヘルパー関数。 エラーが発生した場合、ErrorExpを返す。それ以外は NULL を返す。
Expression dotIdSemanticProp(DotIdExp exp, Scope* sc, bool gag);
UFCSを見ることなく、プロパティを解決する、つまり、e1.ident
Parameters:
DotIdExp exp 解決する式
Scope* sc コンテキスト
bool gag を返すだけで、エラーメッセージは出さない。null
Returns:
を返すだけである。
Expression dotTemplateSemanticProp(DotTemplateInstanceExp exp, Scope* sc, bool gag);
UFCSを見ずにe1.ident!tiargs を解決する。
Parameters:
DotTemplateInstanceExp exp 解決するDotTemplateInstanceExp
Scope* sc 意味的スコープ
bool gag not a property "エラーを止め、null
Returns:
null エラーまたは見つからない場合は、解決された式を返す。
bool checkSharedAccess(Expression e, Scope* sc, bool returnRef = false);
expressionが共有されている場合、アクセスできるかチェックする。 見つからない場合はエラーメッセージを出す。
Parameters:
Expression e チェックする式
Scope* sc 文脈
bool returnRef この式がreturnref 。この場合、単一レベルの再参照が許される( )。 この場合、単一レベルの再参照が許される(例:shared(int)*)。
Returns:
エラー時にtrueを返す
Expression resolveLoc(Expression exp, const ref Loc loc, Scope* sc);
FILE__, __LINE__, __MODULE__, __FUNCTION__, __PRETTY_FUNCTION__, __FILE_FULL_PATH__" を loc に解決する。
Expression addDtorHook(Expression e, Scope* sc);
デストラクタはVarDeclarationに付けられる。 したがって、式がデストラクタを必要とするtempを返す場合、必ずVarDeclarationを作成すること、 そのtempに対してVarDeclarationを作成する。
Expression toLvalue(Expression _this, Scope* sc, const(char)* action);
式をl値に変換してみる。
l値でない場合はエラーを出す。
Parameters:
Expression _this 変換する式
Scope* sc スコープ
const(char)* action エラーメッセージの場合、l値が何のために必要なのか(例えば、&x の場合はアドレスを取る、x++ の場合は修正する)。
Returns:
変換された式、またはエラー時のErrorExp
Modifiable checkModifiable(Expression exp, Scope* sc, ModifyFlags flag = ModifyFlags.none);

パラメータ sc: スコープ flag: 1: 無効な修正に対してエラーメッセージを発行しない。 2: expがDotVarExpで、左端の変数のサブフィールドが変更される 変数が変更される

Returns:
型が変更可能かどうか。
Expression modifiableLvalue(Expression _this, Scope* sc);
toLvalue と同様であるが、変更可能であることを強制するか、エラーを発生させる。
Parameters:
Expression _this 変換する式
Scope* sc スコープ
Returns:
_thisをl値に変換する。ErrorExp
bool checkAddressVar(Scope* sc, Expression exp, VarDeclaration v);
を決定する。 expアドレスが取得された場合、安全にそれを行うことができる。
Parameters:
Scope* sc コンテキスト
Expression exp アドレスを取られる式
VarDeclaration v アドレスを取られる変数
Returns:
true OKなら、 。false
bool checkAddressable(Expression e, Scope* sc);
このチェックは、exp のオブジェクトがアドレスを取得されるか、診断エラーを出すかを確実にする。 診断エラーを出す。
Parameters:
Expression e チェックする式
Scope* sc コンテキスト
Returns:
式がアドレス可能であればtrueを返す。
Expression getThisSkipNestedFuncs(const ref Loc loc, Scope* sc, Dsymbol s, AggregateDeclaration ad, Expression e1, Type t, Dsymbol var, bool flag = false);
getRightThis() のヘルパー関数。 次の外部集約のthis を取得する。
Parameters:
Loc loc エラーメッセージに使用する場所
Scope* sc コンテキスト
Dsymbol s 既存のthis
AggregateDeclaration ad 構造体やクラスの親シンボルで、this
Expression e1 既存のthis
Type t 既存の型this
Dsymbol var アクセスしているadの特定のメンバー
bool flag もしtrueなら、エラーを投げる代わりにnull
Returns:
varに対するthis を表す式。
VarDeclaration makeThis2Argument(const ref Loc loc, Scope* sc, FuncDeclaration fd);
this 引数として使用するデュアルコンテキストのコンテナを作成する。
Parameters:
Loc loc エラーメッセージに使用する場所
Scope* sc 現在のスコープ
FuncDeclaration fd this 引数を受け取るターゲット関数
Returns:
一時的なクロージャ変数。

注釈 この関数 fdのネストされた参照に追加される。 に追加される。 のアドレスが fdのアドレスが取られたときに、その変数に対してクロージャが作られるようにする。

bool verifyHookExist(const ref Loc loc, ref Scope sc, Identifier id, string description, Identifier module_ = Id.object);
実行時フック idが存在することを確認する。
Parameters:
Loc loc エラーメッセージに使用する場所
Scope sc 現在のスコープ
Identifier id フックの識別子
string description フックが何をするか
Identifier module_ フックがどのモジュールにあるか
Returns:
フックが存在するかどうかを示すbool
Expression getVarExp(EnumMember em, const ref Loc loc, Scope* sc);
戻り値 emVariableExpとして
Parameters:
EnumMember em ラップするEnumMember
Loc loc emの使用場所
Scope* sc emの使用範囲
Returns:
VarExp参照 emまたはErrorExpを参照する。 em無効/非推奨の場合
Expression toBoolean(Expression exp, Scope* sc);
をブール値として扱う。 expをブール値として扱うようにする、
Parameters:
Expression exp 式" とする。
Scope* sc を評価する expである。
Returns:
成功時には修正された式、エラー時にはErrorExpが返される。
bool evalStaticCondition(Scope* sc, Expression original, Expression e, out bool errors, Expressions* negatives = null);
コンパイル時に静的条件を意味的に分析し、評価する。 これは特別なことで、トップ・レベルの短絡演算子&&、 ||、? 式の結果が必要でない場合は、意味解析されないからである。 は意味解析されないからである。
Parameters:
Scope* sc スコープのインスタンス化
Expression original 元の式、エラーメッセージ用
Expression e 結果の式
bool errors エラーが発生した場合はtrue に設定される
Expressions* negatives 否定句を格納する配列
Returns:
trueと評価された場合はtrue