diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-05-18 10:09:28 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2020-06-19 18:46:55 +0900 |
commit | c8703a17ceedae4a72f83c962a4d098731a85dda (patch) | |
tree | 1a7559bafd2356904bef9b531ae3fa30d7649095 /tool | |
parent | f3e081c6b6f877c498ce9203429ee4fd7e812837 (diff) | |
download | ruby-c8703a17ceedae4a72f83c962a4d098731a85dda.tar.gz |
[Feature #16254] Allow `__builtin.func` style
Diffstat (limited to 'tool')
-rw-r--r-- | tool/mk_builtin_loader.rb | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/tool/mk_builtin_loader.rb b/tool/mk_builtin_loader.rb index 505a256ba8..ae6c3b3812 100644 --- a/tool/mk_builtin_loader.rb +++ b/tool/mk_builtin_loader.rb @@ -72,7 +72,7 @@ end def collect_builtin base, tree, name, bs, inlines, params = nil while tree - call = sep = mid = args = nil + call = recv = sep = mid = args = nil case tree.first when :def params = collect_params(tree[2]) @@ -93,6 +93,8 @@ def collect_builtin base, tree, name, bs, inlines, params = nil when :method_add_arg _, mid, (_, (_, args)) = tree case mid.first + when :call + _, recv, sep, mid = mid when :fcall _, mid = mid else @@ -102,12 +104,27 @@ def collect_builtin base, tree, name, bs, inlines, params = nil _, mid = tree when :command # FCALL _, mid, (_, args) = tree + when :call, :command_call # CALL + _, recv, sep, mid, (_, args) = tree end if mid raise "unknown sexp: #{mid.inspect}" unless mid.first == :@ident _, mid, (lineno,) = mid - if /\A__builtin_(.+)/ =~ mid - cfunc_name = func_name = $1 + if recv + func_name = nil + case recv.first + when :vcall + _, recv = recv + if recv.first == :@ident and recv[1] == "__builtin" + func_name = mid.to_s + end + end + collect_builtin(base, recv, name, bs, inlines) unless func_name + else + func_name = mid[/\A__builtin_(.+)/, 1] + end + if func_name + cfunc_name = func_name args.pop unless (args ||= []).last argc = args.size |