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

dmd.expression

式レベルで AST を表すクラスの大部分を定義する。
Authors:

ソース expression.d

enum Modifiable: int;
戻り値checkModifiable
no
変更不可
yes
変更可能(型は変更可能)
initialization
初期化なので変更可能
enum ModifyFlags: int;
checkModifyが特定の状況をどのように扱うかを指定する
none
変数の無効な変更に対してエラーメッセージを出す
noError
無効な変更に対してエラーは発生しない
fieldAssign
変更は現在の変数のサブフィールドに対して行われる
inout(Expression) lastComma(inout Expression e);
最後の非コンマ式を見つける。
Parameters:
Expression e カンマでつながれた式
Returns:
右端の非カンマ式
void expandTuples(Expressions* exps, Identifiers* names = null);
タプルをインプレースで展開する。

例: f(10, pair: AliasSeq!(20, 30), single: 40) という呼び出しがあった場合、入力は以下のようになる: exps = [10, (20, 30), 40] names = [null, "pair", "single"] 配列は次のように変更される: exps = [10, 20, 30, 40] names = [null, "pair", null, "single"]

Parameters:
Expressions* exps "式"の配列
Identifiers* names "式"に対応する名前のオプション配列。
@safe TemplateDeclaration getFuncTemplateDecl(Dsymbol s);
もし sが関数テンプレート、つまりテンプレートの唯一のメンバで、そのメンバが関数である場合 で、そのメンバが関数である場合、そのテンプレートを返す。
Parameters:
Dsymbol s 関数テンプレート化された関数かもしれないシンボル
Returns:
その関数のテンプレート。そうでない場合はnullを返す。
@safe DotIdExp typeDotIdExp(const ref Loc loc, Type type, Identifier ident);
TypeDotIdExp
VarDeclaration expToVariable(Expression e);
Expressionが与えられたとき、それが実際にどの変数であるかを調べる。
例えば、a[index] は本当はa であり、s.f は本当はs である。
Parameters:
Expression e 見るべき式
Returns:
変数があれば変数、なければNULL
abstract class Expression: dmd.ast_node.ASTNode;
final const pure nothrow @nogc @safe size_t size();
Returns:
この式のクラス・インスタンス・サイズ(extern(C++) のため、手動で実装する。)
static void deinitialize();
コンパイラのグローバル状態を初期化する。
これは、_init によって設定された状態を元の状態に戻すために使用できる。 状態に戻すことができる。
final Expression copy();
ディープ・コピーは行わない
static @safe Expression combine(Expression e1, Expression e2);
e1とe2の両方がNULLでなければ、CommaExpで結合する。
static @safe Expression extractLast(Expression e, out Expression e0);
e'がカンマのツリーである場合、ツリーからカンマを取り除いた右端の式を返す。 を返す。ツリーの残りの部分 は e0 によって返される。 それ以外の場合、'e' は直接返され、e0 は NULL に設定される。
bool isLvalue();
expressionがl値であれば、!=0を返す。
bool checkType();
式が有効な型を持っているかチェックする。 そうでない場合は、"... has no type"というエラーを生成する。
Returns:
式が有効でない場合は真を返す。

注釈: この関数がtrueを返すとき、checkValue() もtrueを返すべきである。

bool checkValue();
式が有効な値を持っているかチェックする。 有効でない場合、エラー"... has no value"を生成する。
Returns:
式が有効でないか、またはvoid型の場合はtrueを返す。
final bool checkReadModifyWrite(EXP rmwOp, Expression ex = null);
式がRMW演算を許すかどうかをチェックし、許さない場合はrmw演算子の診断でエラーとなる。 exはRHS式、または++/--が使われた場合はNULL(診断用)。 エラーが発生したら真を返す。
final Expression addressOf();
式のアドレスを取る。
final Expression deref();
これが参照なら、それを非参照にする。
const bool isIdentical(const Expression e);
単に等しいだけでなく、同一である。すなわち、ビットパターンが異なる NaN は同一ではない。
Optional!bool toBool();
可能であれば、この式をbool に静的に評価する。
Returns:
値を含むか空であるかのオプション。
class IntegerExp: dmd.expression.Expression;
コンパイル時に既知の整数値である。
IntegerExp literal(int v)();
よく使われるリテラル(0や1など)の新しいインスタンスを作成する代わりに、これを使う。 0や1のような一般的に使用されるリテラル用の新しいインスタンスを作成する代わりに、これを使用する。

パラメータ v = 式の値

Returns:
式の静的インスタンスで、Tint32 として型付けされる。
static IntegerExp createBool(bool b);
よく使われるboolのインスタンスを新しく作る代わりにこれを使う。

パラメータ b = 式の値。

Returns:
式の静的インスタンス。Type.tbool として型付けされる。
class ErrorExp: dmd.expression.Expression;
この式をエラー回復に使用する。
エラーメッセージがさらに連鎖するのを防ぐために、この式は「シンク」として振る舞うべきである。
class VoidInitExp: dmd.expression.Expression;
初期化されていない値、 ボイド初期化子から生成される。
VarDeclaration var;
void値の元となった変数、不明な場合はnull。
@safe this(VarDeclaration var);
エラーメッセージに有用である。
class RealExp: dmd.expression.Expression;
コンパイル時に既知の浮動小数点数
class ComplexExp: dmd.expression.Expression;
コンパイル時の複素数(非推奨)
class IdentifierExp: dmd.expression.Expression;
(宣言ではなく)式のコンテキストにおける識別子。
int x; // 識別子付きVarDeclaration
x++; // IdentifierExpを持つPostExp
class DollarExp: dmd.expression.IdentifierExp;
配列のインデックス付けやスライス時に使用されるドル演算子。例:a[$]a[1 .. $] など。
class DsymbolExp: dmd.expression.Expression;
パーサーによって生成されない。
class ThisExp: dmd.expression.Expression;
class SuperExp: dmd.expression.ThisExp;
class NullExp: dmd.expression.Expression;
コンパイル時に既知のnull
class StringExp: dmd.expression.Expression;
bool committed;
文字列リテラルの型が固定かどうか。

例:

wstring x = "abc"; // OK、文字列リテラルは柔軟だ
wstring y = cast(string) "abc"; // エラー: キャスト後に型がコミットされた

bool hexString;
文字列が16進文字列リテラルから解析された場合
const size_t numberOfCodeUnits(int tynto = 0);
文字列をtyntoとして再エンコードした場合のコードユニット数を返す。 tyntoとして再エンコードした場合のコードユニット数を返す。
Parameters:
int tynto 対象エンコーディングのコードユニット型
Returns:
コードユニット数
const void writeTo(void* dest, bool zero, int tyto = 0);
文字列の内容をdestに書き込む。 結果のサイズを決定するには numberOfCodeUnits() を使用する。
Parameters:
void* dest 出力先
int tyto 結果のエンコード型
bool zero 終端0を追加する
const pure dchar getCodeUnit(size_t i);
インデックスiのコードユニットを取得する
Parameters:
size_t i インデックス
Returns:
インデックスiのコード・ユニット
const pure dinteger_t getIndex(size_t i);
Returns:
インデックスの整数 i
void setCodeUnit(size_t i, dchar c);
インデックスiのコードユニットをcに設定する
Parameters:
size_t i インデックス
dchar c に設定するコード・ユニット
const pure nothrow @nogc int compare(const StringExp se2);
二つのStringExp を長さで比較する。
で見られるような通常のC言語のスタイルでの比較ではなく、まず長さに基づいて比較する。 strcmpmemcmp で見られるような通常のCスタイルの比較ではなく、まず長さに基づいて比較する。 これにより、疎なデータを比較する際に、より高速な検索とソートが可能になる。
この順序付けスキームは、文字列切り替え機能で利用されている。 Druntimeのcore.internal.switch_ のコードは、case文の間でバイナリ検索を行う際に、この順序付けに依存している。 のコードでは、case文のバイナリ検索を行う際に、この順序付けに依存している。
StringExp は両方とも同じエンコーディングでなければならない。
Parameters:
StringExp se2 this と比較する文字列式。
Returns:
0 this が se2 と等しい場合、 より大きい値である。 よりも大きいとみなされる。0 this se2, this よりも小さい場合は0 よりも小さい値である。 se2.
const const(char)[] toStringz();
文字列の内容を0終端文字列に変換する、 mem.xmalloc()によって確保される。
const const(ubyte)[] peekData();
データのスライスを取得する。
ubyte[] borrowData();
データのスライスを借りる。 データのスライスを借りる。
void setData(void* s, size_t len, ubyte sz);
新しい文字列データを設定する。 this データの新しい所有者になる。
class TupleExp: dmd.expression.Expression;
一連の式
alias AliasSeq(T...) = T;
alias Tup = AliasSeq!(3, int, "abc");
class ArrayLiteralExp: dmd.expression.Expression;
[e1, e2, e3, ... ]である。
Expression basis;
がNULLの場合、elements[]はスパースになり、basisが要素の「デフォルト」値に使われる。 デフォルトの"要素値"に使われる。言い換えると、非NULLのelements[i]は、この「basis」値を上書きする。 この"basis"値を上書きする。
class AssocArrayLiteralExp: dmd.expression.Expression;
[key0 : value0, key1 : value1, ... ]である。
Expression lowering;
静的初期化用にcore.internal.newaaに下げる。
enum int stageScrub;
scrubReturnValueが実行されている。
enum int stageSearchPointers;
hasNonConstPointers実行中
enum int stageOptimize;
optimizeが実行されている
enum int stageApply;
applyが実行されている
enum int stageInlineScan;
inlineScanが実行されている
enum int stageToCBuffer;
toCBuffer実行中
class StructLiteralExp: dmd.expression.Expression;
sd( e1, e2, e3, ... )
StructDeclaration sd;
これはどの集約のためか
Expressions* elements;
sd.fields[]と並行し、スキップするフィールドにはnullを指定する
Type stype;
結果の最終型(sdの型と異なっていても構わない)
void* sym;
リテラルで初期化するバックエンドのシンボル(シンボル*として使用される)
StructLiteralExp inlinecopy;
これらのフィールドは、構造体の1つのフィールドが'this'ポインタで初期化されたときの無限再帰を防ぐ必要がある。
StructLiteralExp origin;
式の原点インスタンスへのポインタ。 新しい式が作成されると、originは'this'に設定される。 式のコピーが作成されると、いつでも'origin'ポインタが'this'に設定される。 origin'ポインタは元の式の'値'に設定される。
ubyte stageflags;
再帰関数が呼び出されるときはいつでも、'stageflags' に現在のステージのビットフラグがセットされる。 でマークし、この関数から戻る前にマークを解除する。 'inlinecopy'も同様の'stageflags'を使用し、'doInline'を複数回評価する。 (無限再帰)を使用する。
bool useStaticInit;
これが true の場合、StructDeclaration の init シンボルを使用する。
bool isOriginal;
を示すためにインスタンスを移動するときに使用されるthis is this.origin
Expression getField(Type type, uint offset);
型のオフセットにある式を取得する。 見つからなければ NULL を返す。
int getFieldIndex(Type type, uint offset);
フィールドのインデックスを取得する。 見つからなければ -1 を返す。
class CompoundLiteralExp: dmd.expression.Expression;
C11 6.5.2.5 ( 型名 ) { initializer-list }.
Initializer initializer;
イニシャライザ・リスト
class TypeExp: dmd.expression.Expression;
主に単なるプレースホルダ
class ScopeExp: dmd.expression.Expression;
主に パッケージ、モジュール、Nspace、TemplateInstance(TemplateMixinを含む)。
IFTIを必要とするテンプレートインスタンス: foo!tiargs(fargs) // foo! は、CallExp::semantic()またはresolveProperties()まで残される
class TemplateExp: dmd.expression.Expression;
主に単なるプレースホルダー
class NewExp: dmd.expression.Expression;
newtype(引数)
ArgumentList argumentList();
argumentsnamesArgumentList に入れ、簡単に渡せるようにする。 後方互換性のために、フィールドはまだ分離されている。
class NewAnonClassExp: dmd.expression.Expression;
クラス baseclasses { } (引数)
class SymbolExp: dmd.expression.Expression;
class SymOffExp: dmd.expression.SymbolExp;
シンボルからのオフセット
class VarExp: dmd.expression.SymbolExp;
変数
class OverExp: dmd.expression.Expression;
オーバーロードセット
class FuncExp: dmd.expression.Expression;
関数/委譲リテラル
class DeclarationExp: dmd.expression.Expression;
シンボルの宣言
D文法では、宣言は文としてのみ許される。しかし、AST表現では では、任意の式の一部とすることができる。これは、たとえば内部構文の書き換えの際に、隠れた記号を挿入するために使われる。 構文を書き換えるときに使われる。
class TypeidExp: dmd.expression.Expression;
typeid(int)
class TraitsExp: dmd.expression.Expression;
_traits(識別子, 引数...)
class HaltExp: dmd.expression.Expression;
停止命令を生成する。
assert(0) は次のように書き換えられる。CHECKACTION.halt
class IsExp: dmd.expression.Expression;
is(targ id tok tspec) is(targ id == tok2) である。
abstract class UnaExp: dmd.expression.Expression;
単項演算子の基本クラス
final Expression incompatibleTypes();
単項式の型は互換性がない。 エラーメッセージを表示する。
Returns:
エラー
final void setNoderefOperand();
オペランドを決して再参照されないものとしてマークする、 これは、"@safe"チェックに有用な情報である。 オペランドのsemantic()がオペランドを書き換える前に行う。
abstract class BinExp: dmd.expression.Expression;
二項演算子の基底クラス
final Expression incompatibleTypes();
二項式の型に互換性がない。 エラー・メッセージを表示する。
Returns:
エラー
final void setNoderefOperands();
オペランドを決して再参照されないものとしてマークする、 これは、"@safe"チェックに有用な情報である。 オペランドのsemantic()がオペランドを書き換える前に行う。
class BinAssignExp: dmd.expression.BinExp;
二項演算子代入、+= -= *= など。
class MixinExp: dmd.expression.Expression;
文字列ミックスイン"、mixin("x")
class ImportExp: dmd.expression.UnaExp;
import式、import("file.txt")
モジュールのインポート(import std.stdio )と混同しないように。ImportStatement
https://dlang.org/spec/expression.html#import_expressions である。
class AssertExp: dmd.expression.UnaExp;
アサート式、assert(x == y)
class ThrowExp: dmd.expression.UnaExp;
throw <e1> DIP 1034で提案されている。
非推奨のThrowStatement 。 の代わりになる。
class DotIdExp: dmd.expression.UnaExp;
class DotTemplateExp: dmd.expression.UnaExp;
主に単なるプレースホルダーである。
class DotVarExp: dmd.expression.UnaExp;
class DotTemplateInstanceExp: dmd.expression.UnaExp;
(引数)
class DelegateExp: dmd.expression.UnaExp;
class DotTypeExp: dmd.expression.UnaExp;
struct ArgumentList;
関数呼び出しの引数。
式のリストを含む。名前付き引数の場合names リストには同じインデックスに非NULLのエントリがある。
const pure nothrow @nogc @safe bool hasNames();
Returns:
この引数リストに名前付き引数が含まれているかどうか。
class CallExp: dmd.expression.UnaExp;
bool inDebugStatement;
デバッグ文の場合はtrueを返す。
bool ignoreAttributes;
属性を強制しない(例えば、@nogcコードで@gc関数を呼び出す)。
bool isUfcsRewrite;
最初の引数はUFCSの書き換えによってここに押し込まれた。
ArgumentList argumentList();
argumentsnamesArgumentList に入れ、簡単に受け渡しができるようにした。 後方互換性のため、フィールドは分離されたままである。
this(const ref Loc loc, FuncDeclaration fd, Expression earg1);
新しい関数呼び出し式をインスタンス化する。
Parameters:
Loc loc 場所
FuncDeclaration fd 呼び出す関数の宣言。
Expression earg1 関数の引数
static CallExp create(const ref Loc loc, FuncDeclaration fd, Expression earg1);
新しい関数呼び出し式を作成する。
Parameters:
Loc loc 場所
FuncDeclaration fd 呼び出す関数の宣言。
Expression earg1 関数の引数
TypeFunction calledFunctionType(CallExp ce);
呼び出し式から呼び出される関数型を取得する
Parameters:
CallExp ce 関数呼び出し式。意味解析が行われている必要がある。
Returns:
エラー/意味解析が行われていない場合は、null
class AddrExp: dmd.expression.UnaExp;
のアドレス」演算子、&p
class PtrExp: dmd.expression.UnaExp;
ポインタ非参照演算子、*p
class NegExp: dmd.expression.UnaExp;
否定演算子、-x
class UAddExp: dmd.expression.UnaExp;
単項加算演算子+x
class ComExp: dmd.expression.UnaExp;
ビットごとの補数演算子~x
class NotExp: dmd.expression.UnaExp;
論理not演算子、!x
class DeleteExp: dmd.expression.UnaExp;
delete演算子、delete x (非推奨)
class CastExp: dmd.expression.UnaExp;
型キャスト演算子、cast(T) x
ある型にペイントしながら、別の型にキャストすることができる。
https://dlang.org/spec/expression.html#cast_expressions
class VectorExp: dmd.expression.UnaExp;
class VectorArrayExp: dmd.expression.UnaExp;
e1.arrayプロパティはベクトル用である。
class SliceExp: dmd.expression.UnaExp;
e1 [lwr ... upr].
@safe this(const ref Loc loc, Expression e1, IntervalExp ie);
class ArrayLengthExp: dmd.expression.UnaExp;
配列の.length プロパティ
class ArrayExp: dmd.expression.UnaExp;
e1 [ a0, a1, a2, a3 ,... ]。
class DotExp: dmd.expression.BinExp;
class CommaExp: dmd.expression.BinExp;
const bool isGenerated;
これはAssignExpがCommaExpを書き換えるために必要である。 が非推奨のトリガーとなる。
bool allowCommaExp;
カンマ式の非推奨を有効/無効にする一時変数。 を有効/無効にするための一時的な変数である。 ほとんどのコンストラクタ呼び出しは書き換えを行うので、falseが渡されるのは falseが渡されるのはパーサーだけである。
static @safe void allow(Expression exp);
引数がCommaExpの場合、非推奨メッセージを防ぐフラグを設定する。
CommaExp.semanticから結果が使われるかどうかを知ることはできない。 したがって、結果(型 != void)がある場合、非推奨メッセージが常に出力される。 メッセージが常に出力される。 しかし、いくつかの構文は結果を生成できるが、それを使用しない。 (ExpStatementとforループのインクリメント)。 それらはこの関数を呼び出すべきである。 を呼び出すべきである。
Parameters:
Expression exp 結果を破棄する式。 引数がNULLまたはCommaExpでない場合は何も起こらない。
class IntervalExp: dmd.expression.Expression;
主に単なるプレースホルダーである。
class DelegatePtrExp: dmd.expression.UnaExp;
dg.ptr プロパティ。デリゲートの「コンテキスト」を指す。
c.f.DelegateFuncptrExp 、デリゲートの関数ポインタを指す。dg.funcptr
class DelegateFuncptrExp: dmd.expression.UnaExp;
dg.funcptr プロパティ。デリゲートの関数を指す。
c.f.DelegatePtrExp 、デリゲートの関数ポインタを指す。dg.ptr
class IndexExp: dmd.expression.BinExp;
e1 [ e2 ]。
class PostExp: dmd.expression.BinExp;
後置インクリメント/デクリメント演算子、i++ /i--
class PreExp: dmd.expression.UnaExp;
前置インクリメント/デクリメント演算子、++i /--i
class AssignExp: dmd.expression.BinExp;
代入/初期化演算子、=

注釈: 演算子代入 はベースが異なる。 代入演算子op= は異なる基底クラスを持つ、BinAssignExp

@safe this(const ref Loc loc, Expression e1, Expression e2);
class LoweredAssignExp: dmd.expression.AssignExp;
代入式がdruntime呼び出しに下げられるとき、このクラスは下げられた代入式を格納するために使われる。 このクラスは、代入式がdruntime呼び出しに下げられたときに、下げられた代入式を格納するために使用される。 このクラスは基本的にAssignExpと同じように動作する。 のためにスペースを無駄にしないために使われる。 のスペースを無駄にしないために使用される。
class ConstructExp: dmd.expression.AssignExp;
class BlitExp: dmd.expression.AssignExp;
e2 からe1
class AddAssignExp: dmd.expression.BinAssignExp;
x += y
class MinAssignExp: dmd.expression.BinAssignExp;
x -= y
class MulAssignExp: dmd.expression.BinAssignExp;
x *= y
class DivAssignExp: dmd.expression.BinAssignExp;
x /= y
class ModAssignExp: dmd.expression.BinAssignExp;
x %= y
class AndAssignExp: dmd.expression.BinAssignExp;
x &= y
class OrAssignExp: dmd.expression.BinAssignExp;
x |= y
class XorAssignExp: dmd.expression.BinAssignExp;
x ^= y
class PowAssignExp: dmd.expression.BinAssignExp;
x ^^= y
class ShlAssignExp: dmd.expression.BinAssignExp;
x <<= y
class ShrAssignExp: dmd.expression.BinAssignExp;
x >>= y
class UshrAssignExp: dmd.expression.BinAssignExp;
x >>>= y
class CatAssignExp: dmd.expression.BinAssignExp;
~=
以下の演算子のいずれかを持つことができる:
EXP.concatenateAssign - T[]をT[]に追加する。 EXP.concatenateElemAssign - TをT[]に追加する。 EXP.concatenateDcharAssign - T[]にdcharを追加する。
パーサは、最初にEXP.concatenateAssignに設定し、後でsemantic()が3つのうちどれに設定するかを決定する。 に設定される。
class CatElemAssignExp: dmd.expression.CatAssignExp;
単一の要素を追加するときの~= 演算子
class CatDcharAssignExp: dmd.expression.CatAssignExp;
1つの要素を追加するときの~= 演算子dchar
class AddExp: dmd.expression.BinExp;
加算演算子、x + y
class MinExp: dmd.expression.BinExp;
マイナス演算子、x - y
class CatExp: dmd.expression.BinExp;
連結演算子、x ~ y
class MulExp: dmd.expression.BinExp;
乗算演算子、x * y
class DivExp: dmd.expression.BinExp;
除算演算子、x / y
class ModExp: dmd.expression.BinExp;
モジュロ演算子、x % y
class PowExp: dmd.expression.BinExp;
べき乗演算子、x ^^ y
class ShlExp: dmd.expression.BinExp;
shift left' 演算子、x << y
class ShrExp: dmd.expression.BinExp;
shift right' 演算子、x >> y
class UshrExp: dmd.expression.BinExp;
符号なし右シフト」演算子、x >>> y
class AndExp: dmd.expression.BinExp;
ビット単位の 'and' 演算子、x & y
class OrExp: dmd.expression.BinExp;
ビットごとの 'or' 演算子、x | y
class XorExp: dmd.expression.BinExp;
ビットごとの 'xor' 演算子、x ^ y
class LogicalExp: dmd.expression.BinExp;
論理 'and' / 'or' 演算子、X && Y /X || Y
class CmpExp: dmd.expression.BinExp;
比較演算子、< <= > >=
op のいずれかである: EXP.lessThan、EXP.lessOrEqual、EXP.greaterThan、EXP.greaterOrEqual のいずれかである。
https://dlang.org/spec/expression.html#relation_expressions
class InExp: dmd.expression.BinExp;
in 演算子、"a" in ["a": 1]

演算子 x !in y はパーサで!(x in y) に書き換えられる。

https://dlang.org/spec/expression.html#in_expressions に書き換える。

class RemoveExp: dmd.expression.BinExp;
連想配列の削除、aa.remove(arg)
これは連想配列 e2 からキー e1 を削除する。
class EqualExp: dmd.expression.BinExp;
==!=
EXP.equalとEXP.notEqualを使用する。
https://dlang.org/spec/expression.html#equality_expressions
class IdentityExp: dmd.expression.BinExp;
is そして !is
EXP.identityとEXP.notIdentityである。
https://dlang.org/spec/expression.html#identity_expressions
class CondExp: dmd.expression.BinExp;
三項演算子、econd ? e1 : e2
class DefaultInitExp: dmd.expression.Expression;
関数のデフォルト引数として使われる場合の特別なキーワード。
可能な限り、特殊キーワードはパーサーで解決されるが デフォルト引数として現れると、関数呼び出しのたびに解決される この基底クラスから派生した式が、関数呼び出しごとに解決される。
const x = __LINE__; // パーサーで解決された
void foo(string file = __FILE__, int line = __LINE__); // DefaultInitExp
https://dlang.org/spec/expression.html#specialkeywords
@safe this(const ref Loc loc, EXP op);
Parameters:
Loc loc ロケーション
EXP op EXP.prettyFunction、EXP.functionString、EXP.moduleString、 EXP.line、EXP.file、EXP.fileFullPath
class FileInitExp: dmd.expression.DefaultInitExp;
デフォルト引数としての__FILE__ トークン
class LineInitExp: dmd.expression.DefaultInitExp;
デフォルト引数としての__LINE__ トークン
class ModuleInitExp: dmd.expression.DefaultInitExp;
デフォルトの引数としての__MODULE__ トークン
class FuncInitExp: dmd.expression.DefaultInitExp;
デフォルトの引数としての__FUNCTION__ トークン
class PrettyFuncInitExp: dmd.expression.DefaultInitExp;
デフォルトの引数としての__PRETTY_FUNCTION__ トークン
class ClassReferenceExp: dmd.expression.Expression;
クラスまたはインターフェースへの参照。これは 基底クラスを指すときに必要となる(型が何であるかを記録しなければならない)。
class CTFEExp: dmd.expression.Expression;
この型はインタープリターによってのみ使用される。
class ThrownExceptionExp: dmd.expression.Expression;
スローされた例外を保持するフェイク・クラス。 例外処理の実装に使用する。
class ObjcClassReferenceExp: dmd.expression.Expression;
Objective-Cのクラス参照式。
Objective-C クラスのメタクラスNSObject.Class を取得するために使用する。
class GenericExp: dmd.expression.Expression;
C11 6.5.1.1 汎用選択 ImportCの場合
Expression cntlExp;
汎用選択の制御式(評価されない)
Types* types;
一般的な関連付けの型名(default のエントリは NULL)
Expressions* exps;
typeNamesとexpsの1:1マッピング
bool isArrayConstruction(const Identifier id);
与えられた識別子がd_array{,set}ctorかどうかを検証する。
Parameters:
Identifier id 検証する識別子
Returns:
true その識別子がコンストラクション・ランタイム・フックに対応する場合、 そうでなければfalse