[1881] Re:crowbar_book_ver4について
投稿者:RednaxelaFX
2013/11/27 02:02:07
前橋様、
もう一つ、crowbarスタックとネーティブ仮引数について聞きたいことがあります。
crowbar_book_0_4では、crowbarスタックはrealloc()を使って拡張します。そしてネイティブ関数に渡す引数の配列がはcrowbarスタックに積んでいます。realloc()が対象データを移動しかねないので、移動した場合、もしスタックのなかでネイティブ関数に渡す引数があれば、それを指すポインタ(arg_p)が無効化される恐れがありますね。
ついでに、CRB_create_interpreter()で、interpreter->stack.stack_alloc_sizeの初期値が0になってますが、それがSTACK_ALLOC_SIZEになったほうがいいではないでしょうか。stack_alloc_sizeの初期値が0なら、最初にpush_value()を呼び出すと、stack_pointer == stack_alloc_sizeので無駄にMEM_realloc()でcrowbarスタック拡張をします。
- Kris