summaryrefslogtreecommitdiff
path: root/tool/mk_builtin_loader.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-05-18 10:09:28 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-06-19 18:46:55 +0900
commitc8703a17ceedae4a72f83c962a4d098731a85dda (patch)
tree1a7559bafd2356904bef9b531ae3fa30d7649095 /tool/mk_builtin_loader.rb
parentf3e081c6b6f877c498ce9203429ee4fd7e812837 (diff)
downloadruby-c8703a17ceedae4a72f83c962a4d098731a85dda.tar.gz
[Feature #16254] Allow `__builtin.func` style
Diffstat (limited to 'tool/mk_builtin_loader.rb')
-rw-r--r--tool/mk_builtin_loader.rb23
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