英語版
このページの英語版を見る
rt.dwarfeh
Dwarf スタイルのポータブル例外処理をサポートする。
License:
Distributed under the
Boost Software License 1.0.
(See accompanying file LICENSE)
Authors:
Walter Bright
ソース rt/dwarfeh.d
- struct
ExceptionHeader; - アンワインダーのデータをコンパイラ固有の構造体でラップする。 でラップする。
- static @nogc ExceptionHeader*
create(Throwableo); - ExceptionHeaderを割り当てて初期化する。Parameters:
Throwable oオブジェクトをスローする。 Returns:ExceptionHeaderを割り当てて初期化する - static void
free(ExceptionHeader*eh); - create()で作成されたExceptionHeaderを解放する。Parameters:
ExceptionHeader* eh解放するExceptionHeader - void
push(); - これを連鎖した例外スタックにプッシュする。
- static ExceptionHeader*
pop(); - 連鎖した例外スタックの先頭をポップして返す。
- static ExceptionHeader*
toExceptionHeader(_Unwind_Exception*eo); - exception_objectへのポインタをExceptionHeaderへのポインタに変換する。 へのポインタに変換する。Parameters:
_Unwind_Exception* eo例外オブジェクトフィールドへのポインタ Returns:eoが指すExceptionHeaderへのポインタ。
- Throwable
__dmd_begin_catch(_Unwind_Exception*exceptionObject); - キャッチ・ハンドラが最初にすることは、これを呼び出すことである。Parameters:
_Unwind_Exception* exceptionObjectunwinderによってキャッチ・ハンドラに渡される値 Returns:キャッチされたオブジェクト - nothrow @nogc void*
_d_eh_swapContextDwarf(void*newContext); - ファイバーがコンテキストを切り替えるときに呼び出される。Parameters:
void* newContext切り替えるスタック Returns:スタックの前の値 - void
_d_throwdwarf(Throwableo); - を介して例外をスローするためにDコードから呼び出される。
throw o;
Parameters:Throwable oスローするオブジェクト Returns:を返さない - _Unwind_Reason_Code
__dmd_personality_v0(intver, _Unwind_Actionactions, _Unwind_Exception_ClassexceptionClass, _Unwind_Exception*exceptionObject, _Unwind_Context*context); - 各言語固有の"個性"関数。 これはもちろんDMD特有のものだ。Parameters:
int verバージョンは1でなければならない。 _Unwind_Action actions4つのアクションUA_xxxのビットORである。 UA_SEARCH_PHASEは、現在のフレームにハンドラーがあればURC_HANDLER_FOUNDを返す、 なければURC_CONTINUE_UNWINDを返す。UA_CLEANUP_PHASE とは併用できない。 UA_CLEANUP_PHASE は、ネストされた関数を呼び出して現在のフレームのクリーンアップを行うことを意味する。 を呼び出してURC_CONTINUE_UNWINDを返す。または、ランディングパッドのレジスタとIPをセットアップする。 をセットアップし、URC_INSTALL_CONTEXTを返す。 UA_HANDLER_FRAMEは、このフレームがフェーズ1でハンドラのあるフレームであったことを意味する。 フェーズ2であり、ハンドラを実行しなければならない。 UA_FORCE_UNWINDは、longjmpまたはスレッドキャンセルのためにスタックを巻き戻すことを意味する。実行する finally 節は catch 節ではなく、Uwind_Resume() の呼び出しで終わらなければならない。 _Unwind_Exception_Class exceptionClassスローされた例外の型を示す8バイトの値。下位4バイトが が"C++0"の場合、C++例外である。 _Unwind_Exception* exceptionObject言語固有の例外情報 _Unwind_Context* contextアンワインダ状態情報の不透明型 Returns:理由コード - ClassInfo
getClassInfo(_Unwind_Exception*exceptionObject, const(ubyte)*currentLsd); - 機内例外の連鎖を見て、catch節で探すクラス型を選ぶ。 catch節で探されるクラス型を選ぶ。Parameters:
_Unwind_Exception* exceptionObject言語固有の例外情報 const(ubyte)* currentLsdLSDAテーブルへのポインタ Returns:検索するクラス型 - _uleb128_t
uLEB128(const(ubyte)**p); - 符号なしLEB128をデコードする。Parameters:
const(ubyte)** pデータポインタへのポインタ、*pは更新される デコードされた過去の値を指すように更新される Returns:デコード値See Also: - _sleb128_t
sLEB128(const(ubyte)**p); - 符号付き LEB128 をデコードする。Parameters:
const(ubyte)** pデータ・ポインタへのポインタ、*pは更新される。 を更新する。 Returns:デコード値See Also: - LsdaResult
scanLSDA(const(ubyte)*lsda, _Unwind_Ptrip, _Unwind_Exception_ClassexceptionClass, boolcleanupsOnly, boolpreferHandler, _Unwind_Exception*exceptionObject, out _Unwind_PtrlandingPad, out inthandler); - LSDA(別名gcc_except_tableセクション)から情報を読み取り、抽出する。 dmdコールサイトテーブルは、他の実装とは構造的に異なる。それは つのipが複数の範囲にマッピングできる。検索時には、最も 検索時には、最もネストした候補が選択される。他の実装では を持つ。Parameters:
const(ubyte)* lsdaLSDAテーブルへのポインタ _Unwind_Ptr ip例外が発生した関数開始からのオフセット _Unwind_Exception_Class exceptionClassどの言語が例外をスローしたか。 bool cleanupsOnlyクリーンアップだけを探す bool preferHandlerハンドラがクリーンアップを含んでいる場合、そのハンドラを優先する _Unwind_Exception* exceptionObject言語固有の例外情報 _Unwind_Ptr landingPadランディングパッドに設定される int handlerどのcatch節にマッチしたかのインデックスにセットされる Returns:LsdaResult - int
actionTableLookup(_Unwind_Exception*exceptionObject, uintactionRecordPtr, const(ubyte)*pActionTable, const(ubyte)*tt, ubyteTType, _Unwind_Exception_ClassexceptionClass, const(ubyte)*lsda); - アクションテーブルでclassTypeを検索する。Parameters:
_Unwind_Exception* exceptionObject言語固有の例外情報 uint actionRecordPtrアクションテーブルの開始インデックス+1 const(ubyte)* pActionTableアクションテーブルの開始へのポインタ const(ubyte)* tt型テーブルの末尾を過ぎたポインタ ubyte TType型テーブルのエントリーのエンコーディング _Unwind_Exception_Class exceptionClassどの言語が例外をスローしたか const(ubyte)* lsdaLSDAテーブルへのポインタ Returns:- >=1はclassTypeのハンドラインデックスを意味する。
- 0はclassTypeがアクションテーブルにないことを意味する
- <0は壊れていることを意味する
- enum _Unwind_Exception_Class
cppExceptionClass; - C++サポート
- void*
getCppPtrToThrownObject(_Unwind_Exception*exceptionObject, CppTypeInfosti); - スローされたオブジェクトの型が暗黙的にキャッチ型に変換可能な場合、スローされたオブジェクトへのポインタを取得する。 へのポインタを取得する。Parameters:
_Unwind_Exception* exceptionObject言語固有の例外情報 CppTypeInfo sticatch節の型 Returns:キャッチされなかった場合はnull、キャッチされた場合はスローされたオブジェクトへのポインタ - interface
CppTypeInfo; - D言語からC++ std::type_info の仮想関数にアクセスする、 libstd++とリンクする必要がないように注意する。 とのリンクが必要になったり、core.stdcpp.typeinfoと干渉したりしないように注意すること。 そこで、別の名前をつける。
- struct
CppExceptionHeader; - DのExceptionHeaderラッパーのC++バージョン
- static CppExceptionHeader*
toExceptionHeader(_Unwind_Exception*eo); - exception_objectフィールドへのポインタからCppExceptionHeaderへのポインタに変換する。 へのポインタに変換する。Parameters:
_Unwind_Exception* eo例外オブジェクト・フィールドへのポインタ Returns:eoが指すCppExceptionHeaderへのポインタ。
Copyright © 1999-2025 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
サイト全体のドキュメントのdmdのバージョン: 2.109.1
最新のdmdのバージョン: 2.111.0 ダウンロード
翻訳日付:
HTML生成日時:
編集者: dokutoku