英語版
このページの英語版を見る
dmd.escape
スコープ付きポインタとスコープ付き参照を実装するためのロジックのほとんどはここに記載されている。
Authors:
License:
ソースescape.d
適用範囲 https://codecov.io/gh/dlang/dmd/src/master/src/dmd/escape.d
- struct
EscapeState
; - エスケープチェックのためのグローバル状態をまとめてグループ化する
- static void
reset
(); - initDMD /deinitializeDMD によってグローバル状態のリセットのために呼び出される
- bool
checkMutableArguments
(ref Scopesc
, FuncDeclarationfd
, TypeFunctiontf
, Expressionethis
, Expressions*arguments
, boolgag
); - 関数に渡されたメモリオブジェクトをチェックする。 メモリオブジェクトが参照渡しまたはポインタ渡しされた場合、 すべての参照またはポインタが const であるか、または変更可能な参照またはポインタが1つだけ存在する ことを確認する。
参考文献 DIP 1021
Parameters: 現在の関数とモジュールを決定するために使用されるScope sc
現在の関数と、呼び出されるモジュール関数を決定するために使用される FuncDeclaration fd
呼び出される関数とモジュールを決定する TypeFunction tf
fdの型 Expression ethis
null でなければ、this ポインタ Expressions* arguments
関数への実際の引数 bool gag
エラーメッセージは表示しない Returns:true エラーが発生した場合 - bool
checkArrayLiteralEscape
(ref Scopesc
, ArrayLiteralExpae
, boolgag
); - 配列リテラルはGCヒープ上に割り当てられる予定である。 その要素がヒープ上にエスケープする可能性があるかどうかを確認する。Parameters:
Scope sc
現在の関数とモジュールを決定するために使用される ArrayLiteralExp ae
配列リテラル式 bool gag
エラーメッセージを表示しない Returns:true 要素がエスケープされた場合 - bool
checkAssocArrayLiteralEscape
(ref Scopesc
, AssocArrayLiteralExpae
, boolgag
); - 連想配列リテラルは GC ヒープ上に割り当てられる予定である。 その要素がヒープ上にエスケープするかどうかを確認する。Parameters:
Scope sc
現在の関数とモジュールを決定するために使用される AssocArrayLiteralExp ae
連想配列リテラル式 bool gag
エラーメッセージを表示しない。 Returns:true 要素がエスケープされている場合 - bool
checkParamArgumentEscape
(ref Scopesc
, FuncDeclarationfdc
, IdentifierparId
, VarDeclarationvPar
, STCparStc
, Expressionarg
, boolassertmsg
, boolgag
); - 関数パラメータpar は初期化されている
arg
、par はエスケープされる可能性がある。 スコープされた値がこのようにエスケープされるかどうかを検出する。 エスケープが検出された場合はエラーメッセージを表示する。Parameters:Scope sc
現在の関数とモジュールを決定するために使用される FuncDeclaration fdc
間接的に呼び出された場合はnull Identifier parId
エラーメッセージ用の関数パラメータの名前 VarDeclaration vPar
VarDeclaration par STC parStc
関数パラメータのストレージクラス(pure から追加されたscope がある場合がある) Expression arg
パラメータの初期化子 bool assertmsg
パラメータが assert(bool, msg) の msg 引数である場合は true。 bool gag
エラーメッセージを表示しない Returns:true スタックへのポインタが代入によって外部に漏れる可能性がある場合 - bool
checkParamArgumentReturn
(ref Scopesc
, ExpressionfirstArg
, Expressionarg
, Parameterparam
, boolgag
); - 関数引数はreturn パラメータを初期化し、 そのパラメータが代入される
firstArg
。 本質的には、firstArg
=arg
;Parameters: 現在の関数とモジュールを決定するために使用されるScope sc
現在の関数とモジュールを決定するために使用される Expression firstArg
ref 引数を通して、 arg
初期化子を割り当てることができるExpression arg
パラメータの初期化子を割り当てる Parameter param
パラメータ宣言に対応する arg
bool gag
エラーメッセージを表示しない Returns:truefirstArg
エラーが発生する - bool
checkConstructorEscape
(ref Scopesc
, CallExpce
, boolgag
); - s.this(args) の構造体コンストラクタをチェックし、 各return パラメータがs に割り当てられるかどうかを確認する。Parameters:
Scope sc
現在の関数とモジュールを決定するために使用される CallExp ce
コンストラクタ呼び出しの形式をs.this(args) bool gag
エラーメッセージを表示しない Returns:true エスケープ参照エラーが発生する可能性がある場合、 - enum
ReturnParamDest
: int; - return パラメータがリターンステートメントによってポインタ値をどのようにエスケープするのか
returnVal
- return文を通して:return x
this_
- 構造体インスタンスに代入される場合:this.x = x
firstArg
- 最初の引数に割り当てられる:
firstArg
= x
- ReturnParamDest
returnParamDest
(TypeFunctiontf
, Typetthis
); - return文を使用してreturn パラメータを返す代わりに、this または最初のパラメータに代入して返すかどうかを確認する。これは、return文で値を返すのと同じ動作である。 最初の引数はref でなければならないが、ref で返されるとはみなされない。See Also: https://dlang.org.spec/function.html#return-ref-parametersParameters:
TypeFunction tf
関数型 Type tthis
this パラメータの型、またはnull (なしの場合) Returns:return パラメータは引数の寿命を転送するべきである。 - bool
checkAssignEscape
(ref Scopesc
, Expressione
, boolgag
, boolbyRef
); - AssignExp が与えられた場合、"l値"が "r値"の内容をエスケープするかどうかを判断する。 エラーが検出された場合、エラーメッセージを表示する。 可能な場合は、"l値"のscope 属性を推論し、 エラーを排除する。Parameters: 現在の関数とモジュールを決定するために使用される
Scope sc
現在の関数とモジュールを決定するために使用される Expression e
AssignExp または を使用してスタックへのポインタをチェックするCatAssignExp bool gag
エラーメッセージは表示しない bool byRef
true に設定する。e1 が e
参照が割り当てられるe2Returns:true スタックへのポインタが代入によって漏洩する可能性がある場合 - bool
checkThrowEscape
(ref Scopesc
, Expressione
, boolgag
); - スタックへのポインタがスタックフレームの寿命から抜け出せる場合を検出する。
e
。 これらが検出された場合、エラーメッセージを表示する。Parameters:Scope sc
現在の関数とモジュールを決定するために使用される Expression e
スタックへのポインタをチェックするための式 bool gag
エラーメッセージを表示しない Returns: スタックへのポインタがエスケープできる場合はtrue スタックへのポインタがエスケープできる場合 - bool
checkNewEscape
(ref Scopesc
, Expressione
, boolgag
); - GCで割り当てられたオブジェクトにスタックポインタが置かれることで、スタックポインタがスタックフレームの寿命から抜け出せる場合を検出する。 検出された場合、エラーメッセージを表示する。Parameters: 現在の関数とモジュールを特定するために使用される
Scope sc
現在の関数とモジュールを決定するために使用される Expression e
スタックへのポインタをチェックするための式 bool gag
エラーメッセージを表示しない Returns: スタックへのポインタがエスケープできる場合はtrue スタックへのポインタがエスケープできる場合は - bool
checkReturnEscape
(ref Scopesc
, Expressione
, boolgag
); - スタックへのポインタがスタックフレームの寿命から抜け出せる場合を検出する。 値を返すことで
e
。 これらが検出された場合はエラーメッセージを表示する。Parameters:Scope sc
現在の関数とモジュールを決定するために使用される Expression e
スタックへのポインタをチェックするための式 bool gag
エラーメッセージを表示しない Returns: スタックへのポインタがエスケープできる場合はtrue スタックへのポインタがエスケープできる場合 - bool
checkReturnEscapeRef
(ref Scopesc
, Expressione
, boolgag
); - xml-ph-0000@deepl.internal による戻り値がスタックへの参照を返す可能性がある場合を検出する
e
ref によってスタックへの参照が返される可能性がある場合を検出する。 検出された場合はエラーメッセージを表示する。Parameters: 現在の関数とモジュールを特定するために使用されるScope sc
現在の関数とモジュールを決定するために使用される Expression e
式をチェックして bool gag
エラーメッセージを表示しない Returns:true スタックへの参照がエスケープできる場合 - void
escapeByValue
(Expressione
, ref scope EscapeByResultser
, boolretRefTransition
= false); - e は値として返される式であり、その値にはポインタが含まれる。 e をたどって、値として返される可能性のある変数を特定する。 例えば、 int* function(int* p) { return p; } e が &p の形式である場合、ref として返される内容を持つ変数を特定する。 例えば、 int* function(int i) { return &i; } このような式があるため、複数の変数を挿入できる。 int function(bool b, int i, int* p) { return b ? &i : p; }副作用なし。Parameters:
Expression e
値として返される式 EscapeByResults er
収集したデータをどこに配置するか bool retRefTransition
xml-ph-0000@deepl.internal関数呼び出しを通じて返される場合、 e
return (ref) scope 関数呼び出しによって返される場合 - struct
EscapeByResults
; - escapeBy??()関数によって収集されたデータを集約する。
- void delegate(VarDeclaration, bool retRefTransition)
byRef
; - ref / addressで返される変数で呼び出される
- void delegate(VarDeclaration)
byValue
; - ポインタを含む値を持つ変数に対して呼び出される
- void delegate(FuncDeclaration, bool called)
byFunc
; - ネストされた関数がデリゲートに変換された場合called が true の場合、デリゲートが クロージャから変数を呼び出しによってエスケープすることを意味し、false は デリゲート自体がエスケープすることを意味する。
- void delegate(Expression, bool retRefTransition)
byExp
; - 式のテンポラリが参照/アドレスによって返される際に呼び出される
- bool
live
; - @liveセマンティクスが適用される場合、すなわち、式p 、*p 、**p など、すべてp を返す。
- void
findAllOuterAccessedVariables
(FuncDeclarationfd
, VarDeclarations*vars
); - このデリゲートによってアクセスされるすべての変数を見つけ、 それを囲む関数でParameters:
FuncDeclaration fd
関数 VarDeclarations* vars
配列に、見つかった変数を追加する - void
finishScopeParamInference
(FuncDeclarationfuncdecl
, ref TypeFunctionf
); - 関数本体の意味解析後、 パラメータでscope /return を推測するParameters:
FuncDeclaration funcdecl
解析された関数宣言の TypeFunction f
最終的な関数型。 funcdecl
.type属性推論の前に「早期型」として開始され、 その後、推論された属性が最終型にコピーされる。f
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.109.1
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku