なんか注意しろとか書いてあるな.
ぼくたちが SV * を XS の返り値として返すときは,RETVAL が mortal にされるとかなんとか.
で,下記の二つのコードが同じとか.
void alpha() PPCODE: ST(0) = newSVpv("Hello World",0); sv_2mortal(ST(0)); XSRETURN(1); SV * beta() CODE: RETVAL = newSVpv("Hello World",0); OUTPUT: RETVAL
いや,話の展開が意味わからんし!!というわけでここ調べるよー.
今分からんのはこのへん.
- PPCODE: セクションてなに
- mortal てどういう状態や! sv_2mortal てなにしてるんや!
PPCODE セクション
xsubpp コンパイラに対して,プログラマが戻り値のために引数スタックを操作するコード書くから!大丈夫だから!っていうのを伝えるためのセクションとのこと.XSUB の戻り値としてリストとか返すときに必要になるっぽい.スタックポインタの位置もちがうみたいだけど,今のところはスルーする.
mortal
perlxs の中にそれといった解説はみつからない.
で,とりあえず Google 先生にお聞きしたら,id:wakapon さんの記事が見つかった.XS で調べるとだいたい wakapon さんの記事がヒットするという仕様.
うーん,perlguts かー.perlxs を読んでいたら perlguts を読まなければならないということですね.分かります.