從 ruby_options() 用到 TAG_NONE
在 vm_core.h 裡找到 TAG 的定義,名字都是熟悉的 ruby 操作,應該是直接對應,之後再進一步看:
#define TAG_NONE RUBY_TAG_NONE
#define TAG_RETURN RUBY_TAG_RETURN
#define TAG_BREAK RUBY_TAG_BREAK
#define TAG_NEXT RUBY_TAG_NEXT
#define TAG_RETRY RUBY_TAG_RETRY
#define TAG_REDO RUBY_TAG_REDO
#define TAG_RAISE RUBY_TAG_RAISE
#define TAG_THROW RUBY_TAG_THROW
#define TAG_FATAL RUBY_TAG_FATAL
#define TAG_MASK RUBY_TAG_MASK
ruby_options()
裡實際執行的是 ruby_process_options()
,它們外層的 ruby_run_node()
預期要收到 iseq,再呼叫 rb_ec_exec_node
執行 iseq 內容