summaryrefslogtreecommitdiff
path: root/ext/ripper/tools/generate-ripper_rb.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/ripper/tools/generate-ripper_rb.rb')
-rwxr-xr-xext/ripper/tools/generate-ripper_rb.rb21
1 files changed, 14 insertions, 7 deletions
diff --git a/ext/ripper/tools/generate-ripper_rb.rb b/ext/ripper/tools/generate-ripper_rb.rb
index 9d33bddc4c..b85d2745a0 100755
--- a/ext/ripper/tools/generate-ripper_rb.rb
+++ b/ext/ripper/tools/generate-ripper_rb.rb
@@ -2,6 +2,12 @@
def main
template, ids1, ids2 = *ARGV
+ print <<header
+#
+# This file is automatically generated from #{template} and parse.y.
+# DO NOT MODIFY!!!!!!
+#
+header
File.foreach(template) do |line|
case line
when /\A\#include ids1/
@@ -13,7 +19,7 @@ def main
id, arity = line.split
arity = arity.to_i
puts
- puts " def on__#{id}(#{argdecl(arity)})"
+ puts " def on__#{id}#{paramdecl(arity)}"
puts " #{arity == 0 ? 'nil' : 'a'}"
puts " end"
end
@@ -35,20 +41,21 @@ def main
end
def print_items(ids)
- comma = "\n"
- ids.each do |id|
+ comma = ''
+ ids.each do |id, arity|
print comma; comma = ",\n"
- print " #{id.intern.inspect}"
+ print " #{id.intern.inspect} => #{arity}"
end
puts
end
def read_ids(path)
- File.readlines(path).map {|line| line.split[0] }
+ File.readlines(path).map {|line| line.split }
end
-def argdecl(n)
- %w(a b c d e f g h i j k l m)[0, n].join(', ')
+def paramdecl(n)
+ return '' if n == 0
+ '(' + %w(a b c d e f g h i j k l m)[0, n].join(', ') + ')'
end
main