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

dmd.mtype

D型を定義する。
Authors:

ソースmtype.d

適用範囲 https://codecov.io/gh/dlang/dmd/src/master/src/dmd/mtype.d

pure nothrow @nogc @safe bool MODimplicitConv(MOD modfrom, MOD modto);
modfrom が modto に暗黙的に変換できる場合は、0以外の値を返す
pure nothrow @nogc @safe MATCH MODmethodConv(MOD modfrom, MOD modto);
型 '() modfrom' のメソッドが型 '() modto' のメソッドを呼び出せる場合は、MATCH.exact または MATCH.constant を返す。
pure nothrow @nogc @safe MOD MODmerge(MOD mod1, MOD mod2);
modビットをマージして共通のmodを生成する。
nothrow @safe void MODtoBuffer(ref OutBuffer buf, MOD mod);
修飾子名を buf に格納する。
pure nothrow const(char)* MODtoChars(MOD mod);

pure nothrow @safe string MODtoString(MOD mod);
Returns: 人間が読める形式で
人間が読める形式で表現された mod、 トークンが mod
pure nothrow @nogc @safe string trustToString(TRUST trust);
trust から信頼フラグを1つ取り出し、 それを文字列表現で返す。
pure nothrow @nogc @safe StorageClass ModToStc(uint mod);
MODxxxx を STCxxx に変換する
pure nothrow @nogc @safe bool isSomeChar(TY ty);
ty が char、wchar、または dchar の場合、true を返す
enum DotExpFlag: int;
dotExp() ビットフラグ
enum Covariant: int;
2つの型が同値型かどうかをチェックした結果
distinct
型は異なる
yes
型が共変型である
no
引数はオーバーロードの範囲では一致するが、型は共変ではない
fwdref
前方参照があるため、共変性を決定できない
abstract class Type: dmd.ast_node.ASTNode;
final const size_t getUniqueID();
この型に対して一意な非ゼロのIDを返す。型が一意なIDを持たない(まだ持っていない)場合は0を返す。semantic() がまだ実行されていない場合は0が返される。
final const const(char)* toChars();

final char* toPrettyChars(bool QualifyTypes = false);
型の整形表示。
static void deinitialize();
コンパイラのグローバル状態を初期化解除する。
これは、_init によって設定された状態を元の状態に復元するために使用できる。
final const nothrow void modToBuffer(ref OutBuffer buf);
この型の修飾子名を buf に格納する。
final const nothrow char* modToChars();
この型の修飾子名を返す。
bool isAssignable();
T が変更可能な場合、

与えられた T a, b; ビット単位の代入が可能か? a = b; ?

bool isBoolean();
T がブール値に変換できる場合は true を返す。
final const nothrow Type nullAttributes();
この型のコピーを返し、すべての属性をnullで初期化する。 異なる修飾子を持つ型を作成する際に役立つ。
final void fixTo(Type t);
新しい型 'this' は t から型構築されるので、 cto、ito、sto、scto、wto ショートカットを埋める。
final void check();
型構築のバグがないか確認する。
final Type addSTC(StorageClass stc);
既存の型にSTCxxxxビットを適用する。 意味解析が実行される前に使用する。
final Type toBasetype();
これが他の型のシェルである場合、 その他の型を取得する。
MATCH implicitConvTo(Type to);
「this」が暗黙的に型「to」に変換できるかどうかを判断する。
Returns:
MATCH.nomatch、MATCH.convert、MATCH.constant、MATCH.exact
MATCH constConv(Type to);
'this' を 'to' に変換することが同一性操作であるか、 const 操作への変換であるか、または型が一致しないかを判断する。
Returns:
MATCH.exact 'this' == 'to' MATCH.constant 'to' は定数 MATCH.nomatch 変更可能または不変への変換
MOD deduceWild(Type t, bool isRef);
MODビットを計算する。this の引数の型をワイルドカードのパラメータ型に一致させる。
Parameters:
Type t 対応するパラメータ型
bool isRef パラメータがref またはout
Returns: MODビット
MODビット
structalign_t alignment();
この型で使用する整列を戻す。
Expression defaultInitLiteral(const ref Loc loc);
デフォルトの初期化子をリテラルではなく、グローバルな"不変の変数"としたい場合にこれを使用する。
const int hasWild();
型またはそのサブタイプがワイルドである場合は、0以外の値を返す。
bool hasVoidInitPointers();
型がvoidに初期化されるポインタフィールドを持っているかどうかを検出する。 そのようなvoidフィールドを持つローカルスタック変数は、初期化されないままとなり、 ポインタバグの原因となる。
Returns:
そうであれば true
bool hasUnsafeBitpatterns();
@system メンバが存在するため、この型が安全でないかどうかを検出する
Returns:
そうであれば true を返す
bool hasInvariant();
Returns:
型に不変条件がある場合は true を返す
Type nextOf();
これが何かの型である場合、その何かを返す。
final Type baseElemOf();
これが静的配列の型である場合は、その基本要素の型を返す。
final uint numberOfElems(const ref Loc loc);
(多次元の可能性もある)静的配列の要素数を計算する。 または、他の型の場合は1を返す。
Parameters:
Loc loc エラーメッセージ用
Returns: 要素数、オーバーフローの場合は uint.max
要素数、オーバーフローの場合は"uint.max"
final uinteger_t sizemask();
整数が収まるマスクを返す。
bool needsDestruction();
型がスコープ外に出る際にデストラクタが必要な場合は true を返す。 これは値型のみに適用され、参照型には適用されない。
bool needsCopyOrPostblit();
型がコピーされる際に、コピーコンストラクタまたはポストブライトが適用される必要がある場合は true。 値型のみに適用され、参照型には適用されない。
bool needsNested();
final inout pure nothrow @nogc inout(TypeFunction) isPtrToFunction();
この型は関数へのポインタか?
Returns:
関数型である場合
final inout pure nothrow @nogc inout(TypeFunction) isFunction_Delegate_PtrToFunction();
この型は関数、デリゲート、または関数へのポインタか?
Returns:
関数型である場合、
class TypeError: dmd.mtype.Type;
abstract class TypeNext: dmd.mtype.Type;
final @safe Type nextOf();
TypeFunctionの場合、関数の戻り値の型が推測されるべきであり、semantic()がまだ関数上で実行されていない場合、nextOf()はNULLを返す可能性がある。 semantic()の実行後は、NULLではなくなる。
class TypeBasic: dmd.mtype.Type;
class TypeVector: dmd.mtype.Type;
基本型は以下のいずれかでなければならない。 byte[16],ubyte[16],short[8],ushort[8],int[4],uint[4],long[2],ulong[2],float[4],double[2] AVX の場合: byte[32],ubyte[32],short[16],ushort[16],int[8],uint[8],long[4],ulong[4],float[8],double[4]
abstract class TypeArray: dmd.mtype.TypeNext;
class TypeSArray: dmd.mtype.TypeArray;
静的配列、固定サイズのもの
bool isIncomplete();
C11 6.7.6.2-4 不完全配列型
Returns:
不完全型の場合に真
bool needsNested();
class TypeDArray: dmd.mtype.TypeArray;
動的配列、次元なし
class TypeAArray: dmd.mtype.TypeArray;
class TypePointer: dmd.mtype.TypeNext;
class TypeReference: dmd.mtype.TypeNext;
class TypeFunction: dmd.mtype.TypeNext;
bool hasLazyParameters();
遅延パラメータが存在する場合に true を返す。
const pure nothrow @safe bool isDstyleVariadic();
extern (D) U func(T t, ...) 可変長引数関数型をチェックし、_arguments[] を最初の引数として追加する。
Returns:
D言語のスタイルの可変長引数である場合は true
Expressions* resolveNamedArgs(ArgumentList argumentList, const(char)** pMessage);
変換する argumentList、名前付き引数を含む可能性があるものを パラメータリストの順番通りに引数のリストに変換する。
Parameters:
ArgumentList argumentList 関数引数の配列
const(char)** pMessage エラーメッセージを格納するアドレス、またはnull
Returns:
順序が入れ替わった引数リスト、またはエラー時にnull
MATCH constConv(Type to);
TypeNext.constConvを拡張し、一致する属性もチェックする
const pure nothrow @nogc @safe bool iswild();
Returns:
true 関数に一致する属性がある場合は または 、それ以外は 。isInOutQual isInOutParamfalse
const pure nothrow @nogc @safe bool attributesEqual(scope const TypeFunction other, bool trustSystemEqualsDefault = true);
Returns: xml-ph-0000@deepl.internal関数タイプが同じ属性(xml-ph-0001@deepl.internal、...)を持つかどうか
this 関数型が同じ属性(@safe など)を持つかどうか other
class TypeDelegate: dmd.mtype.TypeNext;
class TypeTraits: dmd.mtype.Type;
これは、TraitsExpを含むシェルであり、 型またはシンボルに解決できる。
重要なのは、AliasDeclarationYが__traits() を使用できるようにすることである。https://issues.dlang.org/show_bug.cgi?id=7804を参照のこと。
TraitsExp exp;
"式"を"型"または"シンボル"として解決する。
RootObject obj;
意味解析後のキャッシュされた型/シンボル。
class TypeMixin: dmd.mtype.Type;
ミックスイン型を実装する。
意味解析により、実際の型に変換される。
abstract class TypeQualified: dmd.mtype.Type;
class TypeIdentifier: dmd.mtype.TypeQualified;
class TypeInstance: dmd.mtype.TypeQualified;
TypeIdentifier と似ているが、ルートとして TemplateInstance を使用する
class TypeTypeof: dmd.mtype.TypeQualified;
class TypeReturn: dmd.mtype.TypeQualified;
class TypeStruct: dmd.mtype.Type;
Expression defaultInitLiteral(const ref Loc loc);
デフォルトの初期化子をリテラルにすることを好む場合、 グローバルな不変の変数ではなく、これを使用する。
class TypeEnum: dmd.mtype.Type;
class TypeClass: dmd.mtype.Type;
class TypeTuple: dmd.mtype.Type;
this(Expressions* exps);
式の型から TypeTuple 型を生成する。 exps[] がすでにタプル展開済みであると仮定する。
@safe this();
0、1、または2つの型を含むタプル型とする。
class TypeSlice: dmd.mtype.TypeNext;
これは、TypeTupleをスライスできるようにするためである
class TypeNull: dmd.mtype.Type;
class TypeNoreturn: dmd.mtype.Type;
class TypeTag: dmd.mtype.Type;
D言語とは異なり、C言語では、 D言語のように個別にではなく、宣言子の中で構造体/共用体/列挙型のタグ名を宣言/定義できる。 シンボルテーブルに表示される順序は、"()()"順でなければならない。 構文解析段階では、それが宣言であるか、既存の名前への参照であるかを決定するのに十分な情報が得られないため、 この型は必要な情報を収集し、それをsemantic()に委ねる。
Loc loc;
宣言の場所
TOK tok;
TOK.struct_, TOK.union_, TOK.enum_
structalign_t packalign;
構造体/共用体のフィールドのアラインメント
Identifier id;
タグ名 識別子
Type base;
列挙型の基本型、それ以外はnull
Dsymbols* members;
構造体のメンバ、存在しない場合はnull
Type resolved;
このインスタンスを指す他のメンバが複数ある場合、semantic()の後の"型"
MOD mod;
このインスタンスを指すもの、これは struct S { int a; } s1, *s2;
型が解決された後に適用される修飾子(現時点では、MODFlags.const_のみ)
struct ParameterList;
関数の仮引数と可変長引数情報を表す。 長さ、インデックス、反復は深さ優先のタプル展開に基づいている。 https://dlang.org/spec/function.html#ParameterList
Parameters* parameters;
展開されていない(生の)形式パラメータ。タプルを含む場合がある。
size_t length();
展開されたパラメータの数を返す。 計算量:O(N)。
Parameter opIndex(size_t i);
指定されたインデックスの展開済みパラメータを返す。範囲外の場合はnullを返す。 計算量:O(i)。
int opApply(scope Parameter.ForeachDg dg);
展開されたパラメータを繰り返し処理する。 計算量:O(N)。 長さを計算し、opIndexをN回呼び出すO(N + N^2/2)の複雑さを回避するために、こちらを推奨する。
int opApply(scope Parameter.SemanticForeachDg dg);
展開されたパラメータを順に処理し、展開されていないパラメータと照合しながら 意味処理を行う
const bool opEquals(ref scope ParameterList other);
これを別の ParameterList と比較し(必要に応じてタプルを展開する)
bool hasDefaultArgs();
Returns:
true パラメータにデフォルト引数があるかどうかを確認
class Parameter: dmd.ast_node.ASTNode;
Type isLazyArray();
パラメータが遅延配列のデリゲートであるかどうかを判断する。 そうであれば、それらのデリゲートの戻り値の型を返す。 そうでない場合は、NULL を返す。
型が以下の形式のいずれかである場合、T を返す。 T delegate()[] T delegate()dim
const pure nothrow @nogc @safe bool isLazy();
Returns:
関数パラメータが遅延しているかどうかを返す。
const pure nothrow @nogc @safe bool isReference();
Returns:
関数パラメータが参照(out / ref)であるかどうか
static size_t dim(Parameters* parameters);
引数の数を決定し、タプルを折りたたむ。
static Parameter getNth(Parameters* parameters, size_t nth);
n番目のParameter を取得し、タプルで折りたたむ。
parametersタプルを含めることができるため、その長さが増加する。 この関数では、 nthパラメータを、 すべてのタプルが推移的に含まれるように parameters平らにされたかのように
Parameters:
Parameters* parameters Parameter の配列を反復処理する
size_t nth 目的のパラメータのインデックス。
Returns: インデックスのパラメータ
インデックスのパラメータは nth(タプルを考慮)、 または範囲外の場合はnull
alias ForeachDg = int delegate(ulong paramidx, Parameter param);
パラメータのみを反復処理する場合のデリゲートの型
alias SemanticForeachDg = int delegate(ulong oidx, Parameter oparam, ulong eidx, Parameter eparam);
元のパラメータセットと型タプルの両方を反復処理する場合のデリゲートの型。 意味解析に役立つ。 'o' は 'original' を表し、'e' は 'expanded' を表す。
static int _foreach(Parameters* parameters, scope ForeachDg dg);

static int _foreach(Parameters* parameters, scope SemanticForeachDg dg);
深さ優先一次探索で args のタプルを展開する。 各 Parameter に対して dg(void *ctx, size_t argidx, Parameter *arg) を呼び出す。 dg が 0 以外の値を返した場合は、そこで処理を中止してその値を返し、0 を返す。 この関数を使用することで、dim の計算と N 回の getNth の呼び出しの O(N + N^2/2) の複雑性を回避できる。
const pure nothrow @nogc @safe bool isCovariant(bool returnByRef, const Parameter p);
パラメータthis の共分散を計算し、 p 両者のストレージクラスの設定によって決定される。
Parameters:
bool returnByRef 関数が参照で返す場合は true
Parameter p 比較対象のパラメータ
Returns: true = xml-ph-0000@deepl.internal は、xml-ph-0000@deepl.internal の代わりに使用できる。
true =this は false = nope の代わりに使用できる p false = nope
const(char*)[2] toAutoQualChars(Type t1, Type t2);
必要に応じて修飾付きの2つの型を印刷する場合に使用する。
Parameters:
Type t1 最初の型に型名を指定する
Type t2 2番目の型に型名を適用する
Returns: 2つの型名が同じでない場合は両方の型の完全修飾名、または2つの型名が同じ場合は両方の型の非修飾名。
2つの型名が同じでない場合は両方の型の完全修飾名、 または2つの型名が同じ場合は両方の型の非修飾名。
void modifiersApply(const TypeFunction tf, void delegate(string) dg);
各アクティブ修飾子(MODFlags.const_, MODFlags.immutable_, など)に対して、 作業パラメータ用の void* と属性の文字列表現を指定してfp を呼び出す。
void attributesApply(const TypeFunction tf, void delegate(string) dg, TRUSTformat trustFormat = TRUSTformatDefault);
各アクティブな属性(ref/const/nogc/etc)に対して、fp にvoid*をワークパラメータとして渡し、 属性の文字列表現を渡す。
AggregateDeclaration isAggregate(Type t);
型がクラスまたは構造体の場合、そのシンボルを返し、 それ以外はnullを返す。
bool isIndexableNonAggregate(Type t);
型 t がインデックス化またはスライス化できるかどうかを、それが 演算子オーバーロードを持つ集約型ではないことを前提に
Parameters:
Type t 型をチェックする
Returns:
型 t の式が配列式の e1 として使用できる場合は true を返す
pure nothrow @nogc @safe ScopeRef buildScopeRef(StorageClass stc);
パラメータがどのように返されるかを計算する。 StorageClass が非常に幅広であるため、表現の縮小が必要である
Parameters: パラメータのストレージクラス
StorageClass stc パラメータのストレージクラスは
Returns: 値のenum ScopeRef
値の列挙型
enum ScopeRef: int;
scope-return-refの可能性の分類
pure nothrow @nogc @safe const(char)* ScopeRefToChars(ScopeRef sr);
デバッグ用にわかりやすい文字列を入力してください。
Parameters:
ScopeRef sr
Returns: 対応する文字列
対応する文字列
TypeVector toBooleanVector(TypeVector tv);
適切なベクトル型を作成し、 tvベクトル型の各要素に対して1つのブール値の結果を格納する。 ベクトル比較の結果は、 すべて1(比較結果が真)またはすべて0(比較結果が偽)のシングルまたはダブルワードマスクとなる。 このSIMDマスク型には同等のD型はないが、 最も近い同等品は同じ単位サイズと長さの整数ベクトルである。 "type"型
Parameters:
TypeVector tv TypeVector からベクトルを構築する。
Returns: ベクトル比較演算の結果に適したベクトル型。
ベクトル比較演算の結果に適したベクトル型。
Result VisitType(Result)(Type t);
Typeの静的型に基づいて関数にディスパッチする。
pure @safe string visitTYCase(string handler);
CTFE専用ヘルパー関数 VisitInitializer用。
Parameters:
string handler 訪問ハンドラの名前を表す文字列
Returns:
ケースの雛形コード
TypeIdentifier getThrowable();
Returns:
TypeIdentifier 対応するobject.Throwable
TypeIdentifier getException();
Returns:
TypeIdentifierに対応するobject.Exception