iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
自我挑戰組

C again系列 第 7

ruby_options()

  • 分享至 

  • xImage
  •  

在 ruby_options() 內有對 execution context, stack 的操作。
YARV 是 stack machine 架構,用來取代原始 MRI 直接操作 AST nodes 速度慢的問題。ruby 執行過程中會一直 parse ruby 程式,看起來都是用 ruby_options() 處理。推測裡面 EC 的 marco 會操作 stack,相關資訊叫 TAG 用它來判斷狀態。不知道這些狀態的定義是什麼,要再看 code

void *
ruby_options(int argc, char **argv)
{
    rb_execution_context_t *ec = GET_EC();
    enum ruby_tag_type state;
    void *volatile iseq = 0;

    ruby_init_stack((void *)&iseq);
    EC_PUSH_TAG(ec);
    if ((state = EC_EXEC_TAG()) == TAG_NONE) {
        SAVE_ROOT_JMPBUF(GET_THREAD(), iseq = ruby_process_options(argc, argv));
    }
    else {
        rb_ec_clear_current_thread_trace_func(ec);
        int exitcode = error_handle(ec, ec->errinfo, state);
        ec->errinfo = Qnil; /* just been handled */
        iseq = (void *)INT2FIX(exitcode);
    }
    EC_POP_TAG();
    return iseq;
}

上一篇
尋找 parse ruby code 的地方
下一篇
ruby_process_options
系列文
C again30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言