# HG changeset patch # User anatofuz # Date 1550475577 -32400 # Node ID 8badccde37ac9a101fd0493694bcdf90585ec916 # Parent d556613115e0d0c6a3f01deaf5322edc33e08922 fix diff -r d556613115e0 -r 8badccde37ac paper/chapter5.tex --- a/paper/chapter5.tex Mon Feb 18 16:32:35 2019 +0900 +++ b/paper/chapter5.tex Mon Feb 18 16:39:37 2019 +0900 @@ -5,7 +5,7 @@ \section{命令処理のモジュール化} MoarVMの命令コードディスパッチ部分は、 当初はcase文やラベルgotに変換されるため、 1ファイルの記述せざるを得なかった。 書き換えたCodeGearは、 関数の様にCbCから扱う事が可能である。 -MoarVMの命j令コードディスパッチでは、 命令に対応する数値を利用して、 case文又は配列から実行するラベルなどを取り出していた。 +MoarVMの命令コードディスパッチでは、 命令に対応する数値を利用して、 case文又は配列から実行するラベルなどを取り出していた。 CbCMoarVMでは、 CodeGearの集合である配列を用意している。 この配列の登録順のみ対応させれば、 CbCMoarVM内の命令に対応するCodeGearの書く場所は問わなくなる。 そのため、 命令処理部分を別ファイルに書き出すなどのモジュール化が可能となった。 @@ -13,7 +13,7 @@ モジュール化が可能となったことで、 ディスパッチ部分の処理と実際に実行する命令で関数を分離出来た。 これにより、 ソースコード上の可読性や、 適切なスコープ管理などがオリジナルのMoarVMと比較し可能となった。 -\section{CbCMoarVMのデバッグ}j +\section{CbCMoarVMのデバッグ} 主要なデバッガであるgdbやlldbでは、 関数には直接break pointを設定する事が可能である。 MoarVMのバイトコードディスパッチ部分はcase文やラベルgotoに変換され、 関数として扱う事が出来ない。 従って、 命令に対応する処理部分でbreak pointを設定を行う場合、 まず処理が書かれているMVM\_interp\_run関数にbreak pointを設置する必要がある。