英語版
このページの英語版を見る
dmd.funcsem
関数の意味解析を行う。
仕様 関数
Authors:
License:
ソースfuncsem.d
適用範囲 https://codecov.io/gh/dlang/dmd/src/master/src/dmd/funcsem.d
- void
funcDeclarationSemantic
(Scope*sc
, FuncDeclarationfuncdecl
); - 関数の主な意味論ルーチン。
- bool
functionSemantic
(FuncDeclarationfd
); - 関数シグネチャの前方参照を解決する - パラメータ型、戻り値の型、属性。Parameters:
FuncDeclaration fd
関数宣言 Returns: シグネチャにエラーがある場合は false を返す。シグネチャにエラーがある場合は false を返す。 - bool
functionSemantic3
(FuncDeclarationfd
); - 関数本体の前方参照を解決する。 本体にエラーが存在する場合は false を返す。
- void
declareThis
(FuncDeclarationfd
, Scope*sc
); - この関数宣言の隠しパラメータを作成し、返す。隠しパラメータには、クラス、構造体、ネストされた関数のthis パラメータ、 Objective-Cメソッドのセレクタパラメータが含まれる。
- bool
checkForwardRef
(FuncDeclarationfd
, const ref Locloc
); - この関数型が適切に解決されていることを確認する。 解決されていない場合は、「前方参照エラー」を報告し、trueを返す。
- int
findVtblIndex
(FuncDeclarationfd
, Dsymbol[]vtbl
); - この関数が上書きするvtbl[0..length]内の関数のインデックスを 見つける。 共変よりも厳密な一致を優先する。Parameters:
FuncDeclaration fd
関数 Dsymbol[] vtbl
使用するvtable Returns:-1 該当なし -2 前方参照があるため判断できない - BaseClass*
overrideInterface
(FuncDeclarationfd
); - 関数がベースクラスの関数である場合、 そのベースクラスを返す。Parameters:
FuncDeclaration fd
関数 Returns:ベースクラスをオーバーライドする場合はそのクラスを返し、オーバーライドしない場合はnullを返す - enum
FuncResolveFlag
: ubyte; - フラグが使用される resolveFuncCall。
standard
- エラーメッセージを表示する、コールを解決する。
quiet
- 一致しない場合はエラーメッセージを出さず、null を返す。
overloadOnly
- オーバーロードのみを解決する。すなわち、あいまいな一致に対してはエラーを発行せず
ufcs
- 一致した場合にエラーを発行せず、明示的なthisが必要UFCS呼び出しを解決しようとしている
- FuncDeclaration
resolveFuncCall
(const ref Locloc
, Scope*sc
, Dsymbols
, Objects*tiargs
, Typetthis
, ArgumentListargumentList
, FuncResolveFlagflags
); - FuncDeclarationまたは関数テンプレートである可能性があるシンボルが与えられた場合、 それを関数シンボルとして解決する。Parameters:
Loc loc
インスタンス化の場所 Scope* sc
インスタンス化スコープ Dsymbol s
シンボルをインスタンス化する Objects* tiargs
テンプレート引数の初期リスト Type tthis
NULLでない場合、this 引数の型 ArgumentList argumentList
関数への引数 FuncResolveFlag flags
参照 FuncResolveFlag。 Returns:一致が見つかれば関数シンボル、そうでなければnull - Expression
addInvariant
(AggregateDeclarationad
, VarDeclarationvthis
); - 不変を呼び出すための式を生成する。
入力 ad 集合で不変式 vthis 'this' 変数
Returns: 不変条件を呼び出すvoid式不変式を呼び出す式 - FuncDeclaration
overloadExactMatch
(FuncDeclarationthisfd
, Typet
); - tに正確に一致するオーバーロードリスト内の関数を見つける。
- FuncDeclaration
overloadModMatch
(FuncDeclarationthisfd
, const ref Locloc
, Typetthis
, ref boolhasOverloads
); - 'this'修飾子に一致するオーバーロードリストの関数を見つける。 結果の型は4つある。
- tthis"が1つの候補のみに一致する場合、それは「完全一致」である。 関数を返し、'hasOverloads'はfalseに設定される。 例: 'tthis"が変更可能で、変更可能なメソッドが1つだけ存在する場合。
- 一致する候補が2つ以上あるが、候補となる関数は "より良い一致"となる。 より良い一致となる関数が返されるが、'hasOverloads'はtrueに設定される。 例:'tthis'が変更可能であり、変更可能メソッドとconstメソッドの両方がある場合、 変更可能メソッドがより良い一致となる。
- 一致する候補が複数あるが、より良い一致する候補がない場合、 nullを返し、"hasOverloads"をtrueに設定して「あいまいな一致」を表す。 例えば、'tthis'が変更可能で、変更可能なメソッドが複数ある場合。
- 候補がなければ「一致なし」となり、エラー報告とともにnullが返される。 例えば、'tthis'がconstであるがconstメソッドが存在しない場合など。
- int
getLevelAndCheck
(FuncDeclarationfd
, const ref Locloc
, Scope*sc
, FuncDeclarationtarget
, Declarationdecl
); - 語彙レベルの違いを判断する
fd
ネストされた関数かどうかを判断するtarget
。 呼び出しができない場合はエラーを返すfd
呼び出せないtarget
。Parameters:FuncDeclaration fd
関数 Loc loc
エラーメッセージの表示先 Scope* sc
コンテキスト FuncDeclaration target
呼び出し先 Declaration decl
このチェックを実行したDeclaration 。 より適切なエラーメッセージのみを提供するために使用される。 Returns: 0 同じレベル0 同じレベル0 ネストの数を減らす -1 ネストの数を1増やす (
target
fd' にネストされている LevelError エラー - bool
canInferAttributes
(FuncDeclarationfd
, Scope*sc
); - この関数の属性が関数本体の調査から推測できるかどうかを判断する。Returns: できる場合は trueできる場合は true
- bool
checkNestedReference
(FuncDeclarationfd
, Scope*sc
, const ref Locloc
); - 現在の関数では、'this'関数を呼び出している。
- 現在の関数が「this」関数を呼び出せるかどうかを確認し、呼び出せない場合はエラーを発行する。
- 現在の関数が「this」関数の親でない場合は、 「this」関数の兄弟のリストに現在の関数を追加する。
- 現在の関数がリテラルであり、上位スコープにアクセスしている場合は、 それをデリゲートとしてマークする。
- void
buildResultVar
(FuncDeclarationfd
, Scope*sc
, Typetret
); - 結果変数を遅延して宣言する。
- Statement
mergeFrequire
(FuncDeclarationfd
, Statementsf
, Expressions*params
); - この関数がオーバーライドするすべての関数の「in」契約をマージする。 「in」はORで結合される。つまり、そのうちの1つだけが合格すればよい。
- Statement
mergeFrequireInclusivePreview
(FuncDeclarationfd
, Statementsf
, Expressions*params
); - この関数に、オーバーライドするすべての「in」契約をマージする。
- void
buildEnsureRequire
(FuncDeclarationthisfd
); - 契約を文として書き換える。
- Statement
mergeFensure
(FuncDeclarationfd
, Statementsf
, Identifieroid
, Expressions*params
); - この関数に、オーバーライドするすべての「out」契約をマージする。 「out」はANDで結合される。つまり、すべてが通過する必要がある。
- void
modifyReturns
(FuncLiteralDeclarationfld
, Scope*sc
, Typetret
); - return文のすべての式型をtretに変更する。関数リテラルでは、意味論が完了した後のFuncExp::implicitCastToで、コンテキストの型に基づいて戻り値の型を変更できる。 関数() dg = (){ return new B(); } // OK if is(B : A) == true BからAへの変換が共変で、オフセット調整が必要な場合、 すべてのreturn文を型Aの戻り値式に調整する必要がある。
- bool
isRootTraitsCompilesScope
(Scope*sc
); - 関数リテラル呼び出しでトレイト(コンパイル)が使用される場合、 関数の本体が属性に違反していないか考慮する必要があるが、 外部関数の属性推論に影響を与えてはならない。 関数リテラルの属性は依然として推論する必要があるため、 トレイトのコンパイルが導入するスコープをチェックする方法が必要となる。Parameters:
Scope* sc
スコープをチェックする必要がある。 Returns: 提供されたスコープがtraitのコンパイルするスコープのリストのルートである場合true 提供されたスコープが トレイトのコンパイルするスコープのリストのルートである場合、 - bool
setUnsafe
(Scope*sc
, boolgag
= false, Locloc
= Loc.init, const(char)*fmt
= null, RootObjectarg0
= null, RootObjectarg1
= null, RootObjectarg2
= null); - このスコープ内の文または式は@safe ではないため、 それを囲む関数を@systemとしてマークする。Parameters:
Scope* sc
その安全でない文/式が含まれるスコープを bool gag
エラーメッセージを抑制する(escape.dで使用される) Loc loc
エラーの発生場所 const(char)* fmt
printf 形式のフォーマット文字列 RootObject arg0
(オプション)最初の %s フォーマット指定子用の引数 RootObject arg1
(オプション) 2番目の %s フォーマット指定子用の引数 RootObject arg2
(オプション)3番目の %s フォーマット指定子用の引数 Returns:安全なエラーがあるかどうか - bool
setUnsafePreview
(Scope*sc
, FeatureStatefs
, boolgag
, Locloc
, const(char)*msg
, RootObjectarg0
= null, RootObjectarg1
= null, RootObjectarg2
= null); - setUnsafe のように、ただしプレビュースイッチの背後にある安全エラー与えられた FeatureState
fs
、例えば dip1000 / dip25 / systemVariables の場合、 設定内容によって挙動が変化する。- -revert=
fs
、何も行われません。 - の場合、 -preview=
fs
、それはsetUnsafe - デフォルトでは、@safe 関数で非推奨の警告を表示するか、推測された関数で属性違反を記録する。
Parameters:Scope* sc
影響を受ける関数/変数を見つけ、非推奨/推測スコープの機能状態にあるかどうかを確認するために使用する FeatureState fs
プレビューフラグから bool gag
エラーメッセージを抑制する Loc loc
エラーの位置 const(char)* msg
printf 形式のフォーマット文字列 RootObject arg0
(オプション) 最初の %s フォーマット指定子用の引数 RootObject arg1
(オプション) 2番目の %s フォーマット指定子に対する引数 RootObject arg2
(オプション)3番目の %s フォーマット指定子用の引数 Returns:安全なエラー(非推奨化ではない)が実際に発生したかどうか - -revert=
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.109.1
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku