summaryrefslogtreecommitdiff
path: root/tool/mk_builtin_loader.rb
diff options
context:
space:
mode:
Diffstat (limited to 'tool/mk_builtin_loader.rb')
-rw-r--r--tool/mk_builtin_loader.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/tool/mk_builtin_loader.rb b/tool/mk_builtin_loader.rb
index 8f9eb7c886..db2224c1de 100644
--- a/tool/mk_builtin_loader.rb
+++ b/tool/mk_builtin_loader.rb
@@ -49,11 +49,26 @@ def make_cfunc_name inlines, name, lineno
end
end
-def collect_builtin base, tree, name, bs, inlines
+def collect_params tree
+ while tree
+ case tree.first
+ when :params
+ idents = (tree[1] || []) + (tree[2] || []).map(&:first)
+ return idents.map { |ident| ident[1].to_sym }
+ when :paren
+ tree = tree[1]
+ else
+ raise "unknown sexp: #{tree.first}"
+ end
+ end
+end
+
+def collect_builtin base, tree, name, bs, inlines, params = nil
while tree
call = sep = mid = args = nil
case tree.first
when :def
+ params = collect_params(tree[2])
tree = tree[3]
next
when :defs
@@ -126,7 +141,7 @@ def collect_builtin base, tree, name, bs, inlines
end
tree.each do |t|
- collect_builtin base, t, name, bs, inlines if Array === t
+ collect_builtin base, t, name, bs, inlines, params if Array === t
end
break
end