diary

I like Hatena Star with a text selection.

2021-09-20

C = Struct.new(:foo, keyword_init: true)

pp m=C.instance_method(:foo=)
# => #<UnboundMethod: C(keyword_init: true)#foo=(_) /tmp/tmp.ZxMbyVAwA1/test.rb:1>
pp RubyVM::AbstractSyntaxTree.of(m)
# => (CDECL@1:0-1:40 :C
   (CALL@1:4-1:40 (CONST@1:4-1:10 :Struct) :new
      (LIST@1:15-1:39 (LIT@1:15-1:19 :foo)
         (HASH@1:21-1:39
            (LIST@1:21-1:39 (LIT@1:21-1:34 :keyword_init) (TRUE@1:35-1:39)
               nil)) nil)))

StructのsetterメソッドをRubyVM::AST.ofしようとすると、メソッド定義ではないnodeが取れてしまって不便。

https://github.com/ruby/ruby/blob/593cc4ca83298c9495e6694dec6ada5c79453b11/struct.c#L394 のあたりを眺めていた。getterの場合も10個目以降は同様の問題がありそう。