きままにものづくり読者になるきままにものづくり日々の気付いたことなんかを書いてます。インスタンスごとにsetFramePushedを呼び出して初期化しているのを、MacroAssemblerのコンストラクタを作成することで、まとめる。模索途中MacroAssembler(js/src/assembler/assembler/MacroAssembler.h)MacroAssemblerが定義されている箇所MacroAssembler(js/src/ion/IonMacroAssembler.h)MacroAssemblerが定義されいる箇所。現在使われているのはこちら。OutOfLineCode(js/src/ion/shared/CodeGenerator-shared.h)framePushedをメンバ変数として持つクラス。MacroAssemblerまでのリレーショナルはまだ分からない。調査経過OutOfLineCodeクラスには、setFramePushedというセッターが用意されている。MacroAssemblerから、setFramePushedを呼ぶことはできない。インスタンスメソッドなので、インスタンスしてからでないと呼び出せない?コンストラクタはインスタンス生成時に呼び出されるのでインスタンスメソッドも呼び出し可能なはず。fromePushedの初期化もできない。OutOfLineCodeクラスを継承してない?しかし、MacroAssemblerのインスタンスであるmasmがsetFramePushedを呼び出している。コンストラクタで親クラスのメンバ変数を初期化したい。その変数はのアクセッサはprivateである。セッタは用意されている。スタックオーバーフローに方法が載っていた。http://stackoverflow.com/questions/2290733/initialize-parents-protected-members-with-initialization-list-cつまり、OutOfLineCodeに新たなコンストラクタを追加することになる。複数のクラスを間に挟んでいるので簡単にはいかない。OutOfLineCodeまでの関係図を調べる。OutOfLineCodeは、SEGV周りで使われているためたくさんのクラスが継承している。よって、ここのコードを変更するのはあまりよろしくない。MacroAssemlerがIonMacroAssembler内で定義されていた。引数を持ったコンストラクタが呼ばれている形跡があるので、変更したいのはこっちの可能性が高い。icSaveLiveはファントムタイプを返すことになっている。ファントムタイプの説明は以下のURLに載っている。http://d.hatena.ne.jp/faith_and_brave/20121205/1354690830http://kagamilove0707.github.io/programming/2013/05/30/about-phantom-type/icSaveLiveはCodeGeneratorShared::saveLiveと同等な役割を持つ。buildOOLFakeExitFrameは、icSaveLiveの戻り値を受け取れるように変更しなければならない。このメソッドの機能をまずは理解する。8はてなブログをはじめよう!even_ekoさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。