英語版
このページの英語版を見る
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* exceptionObject
unwinderによってキャッチ・ハンドラに渡される値 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 actions
4つのアクション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)* currentLsd
LSDAテーブルへのポインタ 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)* lsda
LSDAテーブルへのポインタ _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)* lsda
LSDAテーブルへのポインタ Returns:- >=1はclassTypeのハンドラインデックスを意味する。
- 0はclassTypeがアクションテーブルにないことを意味する
- <0は壊れていることを意味する
- enum _Unwind_Exception_Class
cppExceptionClass
; - C++サポート
- void*
getCppPtrToThrownObject
(_Unwind_Exception*exceptionObject
, CppTypeInfosti
); - スローされたオブジェクトの型が暗黙的にキャッチ型に変換可能な場合、スローされたオブジェクトへのポインタを取得する。 へのポインタを取得する。Parameters:
_Unwind_Exception* exceptionObject
言語固有の例外情報 CppTypeInfo sti
catch節の型 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-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku