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

dmd.typesem

D型の意味解析。
Authors:

出典 typesem.d

bool isCopyable(Type t);
t 型がコピー可能かどうかを判定する。
Parameters:
Type t チェックする型
Returns:
コピー可能なら真
int mutabilityOfType(bool isref, Type t);
(ref)tの間接法の変更可能性を判断する。
Returns:
型に変更可能な間接表現がある場合は0を返す。 すべての間接関数が不変の場合、2を返す。 そうでない場合、const/inout間接関数を持つ型は1を返す。
Parameters:
bool isref 真ならば ref tそうでなければ t
Type t をチェックする。
void purityLevel(TypeFunction typeFunction);
typeFunction'の'purity'フィールドを設定する。 パラメータ型が前方参照される可能性があるため、このようなことは怠ること。
Expression typeToExpression(Type t);
我々は間違って tを型として解析してしまった。 やり直す t型修飾子がない場合のみ、式としてやり直す。
Parameters:
Type t 誤った型
Returns:
tはExpressionとしてやり直される。
bool checkComplexTransition(Type type, const ref Loc loc, Scope* sc);
https://issues.dlang.org/show_bug.cgi?id=14488 最も内側の基本型が複素数か虚数かをチェックする。 トランジショナル・メッセージを出すように設定されている場合のみ、警告を出すようにする。
Parameters:
Type type チェックする型
Loc loc ソースの位置。
Scope* sc 型のスコープ。
MATCH callMatch(TypeFunction tf, Type tthis, ArgumentList argumentList, int flag = 0, void delegate(const(char)*) scope errorHelper = null, Scope* sc = null);
args "が"tf"関数型にマッチしている。 マッチレベルを決定する。
Parameters:
TypeFunction tf 関数型
Type tthis this ポインタの型、メンバ関数でない場合はNULL。
ArgumentList argumentList 関数呼び出しの引数。
int flag 1: 部分的な順序照合を行う
void delegate(const(char)*) scope errorHelper エラーメッセージのために呼び出されるデリゲート
Scope* sc コンテキスト
Returns:
MATCHxxxx
bool hasPointers(Type t);
型がコレクションサイクル中にGCによってスキャンされる必要があるポインタを持つ場合、!=0を返す。 を返す。
Type typeSemantic(Type type, const ref Loc loc, Scope* sc);
型のセマンティック解析を行う。
Parameters:
Type type 型ASTノード
Loc loc 型の位置。
Scope* sc コンテキスト
Returns:
Type 意味解析が完了した状態で、 。 に遭遇した場合Terror
Type merge(Type type);
と同一の型が typeと同じ型が type.stringtableにある場合は を返す。そうでなければ、それを type.stringtable. いくつかの型はマージされず、そのまま返される。
Parameters:
Type type 既存の型と照合する型
Returns:
マージされた型
Type merge2(Type type);
このバージョンは、デコがすでに計算されていてもマージを行う。 デコを持つがマージされない型に必要である。
Expression getProperty(Type t, Scope* scope_, const ref Loc loc, Identifier ident, int flag, Expression src = null);
型だけが必要な組み込みプロパティを計算する。
Parameters:
Type t プロパティが計算される"@型
Scope* scope_ プロパティがアクセスされるスコープ。可視性のチェックにのみ使用される。
Loc loc プロパティが出現する場所。
Identifier ident プロパティの識別子。
int flag flag & 1の場合、"not a property"エラーは報告せず、単にNULLを返す。
Expression src "型"の式。 tまたはNULLを返す。
Returns:
プロパティを表す式、またはプロパティでない場合はNULLを返す。
void resolve(Type mt, const ref Loc loc, Scope* sc, out Expression pe, out Type pt, out Dsymbol ps, bool intypeid = false);
型'mt'を型、シンボル、式のいずれかに解決する。 エラーが発生した場合は、Type.terrorに解決する。
Parameters:
Type mt 解決される型
Loc loc 型に遭遇した場所
Scope* sc 型のスコープ
Expression pe がセットされる。
Type pt がセットされる。
Dsymbol ps tがシンボルの場合に設定される
bool intypeid 型idの場合はtrueがセットされる。
Expression dotExp(Type mt, Scope* sc, Expression e, Identifier ident, DotExpFlag flag);
この型はe.typeと同じである。
Parameters:
Type mt ドット式が使われる型である。
Scope* sc スコープのインスタンス化
Expression e 変換する式
Identifier ident 使用される識別子
DotExpFlag flag DotExpFlagビットフラグ
Returns:
e.identが解決された結果の式
Expression defaultInit(Type mt, const ref Loc loc, const bool isCfile = false);
型のデフォルトの初期化式を取得する。
Parameters:
Type mt init式が返される型。
Loc loc 式が評価される必要がある場所。
bool isCfile デフォルトの初期化子は、Cとは異なる
Returns:
型の初期化式。
Type addStorageClass(Type type, StorageClass stc);
型にストレージクラス修飾子を追加する。
Type getComplexLibraryType(const ref Loc loc, Scope* sc, TY ty);
core.stdc.configから複合型を取り出す。
Parameters:
Loc loc エラーメッセージ用
Scope* sc コンテキスト
TY ty 複合型または虚数型
Returns:
Complex!float、Complex!double、Complex!real、またはエラーの場合はnullを指定する。
Covariant covariant(Type src, Type t, StorageClass* pstc = null, bool cppCovariant = false);
共変数とは、'src'が't'を代替できることを意味する、 すなわち、純粋な関数は純粋でない関数にマッチする。
Parameters:
Type src ソース型
Type t 型'src'が共変である。
StorageClass* pstc もしnullでなければ、STCxxxxを格納する。
bool cppCovariant extern(C++)関数型がC++の共変ルールに従う必要がある場合はtrueを指定する。
Returns:
Covariant.yes 、または共変でない理由のいずれかの列挙型値。
StorageClass parameterStorageClass(TypeFunction tf, Type tthis, Parameter p, VarDeclarations* outerVars = null, bool indirect = false);
p.に指定されたストレージ・クラスを取る、 に指定されたストレージ・クラスを取り、関数のシグネチャを使用して、次のように推測する。 STC.scope_とSTC.return_がORされるべきかどうかを推測する。 (これは名前のマングリングには影響しない)。
Parameters:
TypeFunction tf シグネチャを取得するために使用するTypeFunction
Type tthis this "型"。パラメータがない場合はNULLとなる。
Parameter p この関数のパラメータ。
VarDeclarations* outerVars もしあれば、pがエスケープできるコンテキスト変数
bool indirect これは間接関数呼び出しか仮想関数呼び出しか?
Returns:
STC.scope_またはSTC.return_がORされたストレージクラス。
Type constOf(Type type);
const'に変換する。
Type immutableOf(Type type);
immutable'に変換する。
Type mutableOf(Type type);
型を "変更可能"にする。
Type unSharedOf(Type type);
型を非共有にする。 0 => 0 const => const immutable(不変) => immutable(不変 共有 => 0 共有 const => const wild => wild ワイルドコンスト => ワイルドコンスト 共有ワイルド => ワイルド 共有野生 const => 野生 const
Type wildOf(Type type);
wild'に変換する。
Type toHeadMutable(const Type t);
最上位が変更可能な型を返す。
Parameters:
Type t トップレベルが変更可能な型を返す。
Returns:
トップ・レベルが変更可能な型のバージョン
Type castMod(Type type, MOD mod);
MODxxxxビットを既存の型に適用する。
Type addMod(Type type, MOD mod);
既存の型にMODxxxxビットを追加する。 置き換えるのではなく、追加する。 を追加する。
bool isRecursiveAliasThis(ref Type att, Type t);
もし't'が再帰的な'alias this'型であれば、'att'をチェックして設定する。
この目的は、alias thisチェーンにサイクルがある場合に、無限ループを防ぐことである。 複数のalias this は存在しないので、チェーンはリーフで終わる、 あるいは、ある時点でループして戻ってくる。

例: s0 -> (s1 -> s2 -> s3 -> s1)

S0 は再帰的エイリアス this ではないので、これはfalse を返し、S1 への書き換えを試すことができる。 S1 は再帰的エイリアス this 型である。 attnull に初期化される、 はまだfalse を返すが、att1S1 に設定される。 S2S3 への書き換えは試せるが、S1 への書き換えをもう一度試したいと思ったとき、次のことに気づく、 ということに気づく。 att == tループの最初に戻り、true が返される。

Parameters:
Type att 再帰を検出するための型参照。null に初期化する必要がある。
Type t このエイリアスの'型'を書き換える。
Returns:
false 書き換えが安全であれば、 。true