iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

C again系列 第 26

rb_iseq_compile_node

  • 分享至 

  • xImage
  •  

想先找到這個 function 如何回傳結果,推測是存到傳入的 const NODE *node。經過 macro COMPILE 可以找到 iseq_compile_each, iseq_compile_each0,在其中 switch-case 看到相關實作。

要進一步理解的話,需要知道 NODE 結構的意義。但同時,又需要從使用 NODE 的程式,反過來理解結構的使用方式。找不到 top-down 的說明文件。

rb_iseq_compile_node 裡,實際 compile instruction 前,會先用 prepare_iseq_build 設定 rb_iseq_t *iseq 內容。其中抓出來要特別看的是 type

簡略整理要能執行 Ruby program,YARV 需要的資訊:

  • AST 是 parse 後的程式結構,根據 grammar 產生
  • AST 的 node 類別 (enum node_type)
  • 要知道 lookup 時的規則

從 function 裡抓一下關鍵字:

  • scope
  • anchor
  • element

NODE struct 看到 u1, u2, u3,需要知道怎麼使用


上一篇
yycompile0
下一篇
node.h
系列文
C again30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言