зеркало из https://github.com/github/ruby.git
36 строки
833 B
Ruby
36 строки
833 B
Ruby
|
#!/usr/bin/ruby -sp
|
||
|
# $ ruby -i tool/intern_ids.rb -prefix=_ foo.c
|
||
|
|
||
|
BEGIN {
|
||
|
$prefix ||= nil
|
||
|
|
||
|
defs = File.join(File.dirname(__dir__), "defs/id.def")
|
||
|
ids = eval(File.read(defs), binding, defs)
|
||
|
table = {}
|
||
|
ids[:predefined].each {|v, t| table[t] = "id#{v}"}
|
||
|
ids[:token_op].each {|v, t, *| table[t] = "id#{v}"}
|
||
|
predefined = table.keys
|
||
|
}
|
||
|
|
||
|
$_.gsub!(/rb_intern\("([^\"]+)"\)/) do
|
||
|
token = $1
|
||
|
table[token] ||= "id" + id2varname(token, $prefix)
|
||
|
end
|
||
|
|
||
|
END {
|
||
|
predefined.each {|t| table.delete(t)}
|
||
|
unless table.empty?
|
||
|
table = table.sort_by {|t, v| v}
|
||
|
|
||
|
# Append at the last, then edit and move appropriately.
|
||
|
puts
|
||
|
puts "==== defs"
|
||
|
table.each {|t, v| puts "static ID #{v};"}
|
||
|
puts ">>>>"
|
||
|
puts
|
||
|
puts "==== init"
|
||
|
table.each {|t, v|puts "#{v} = rb_intern_const(\"#{t}\");"}
|
||
|
puts ">>>>"
|
||
|
end
|
||
|
}
|