mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Added intern_ids.rb
This commit is contained in:
parent
13f8521c63
commit
0754cc4888
Notes:
git
2021-07-27 15:40:54 +09:00
2 changed files with 51 additions and 10 deletions
26
defs/id.def
26
defs/id.def
|
@ -138,6 +138,21 @@ class KeywordError < RuntimeError
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def id2varname(token, prefix = nil)
|
||||||
|
if /#/ =~ token
|
||||||
|
token = "_#{token.gsub(/\W+/, '_')}"
|
||||||
|
else
|
||||||
|
token = token.sub(/\?/, 'P')
|
||||||
|
token = prefix + token if prefix
|
||||||
|
token.sub!(/\A[a-z]/) {$&.upcase}
|
||||||
|
token.sub!(/\A\$/, "_G_")
|
||||||
|
token.sub!(/\A@@/, "_C_")
|
||||||
|
token.sub!(/\A@/, "_I_")
|
||||||
|
token.gsub!(/\W+/, "")
|
||||||
|
end
|
||||||
|
token
|
||||||
|
end
|
||||||
|
|
||||||
predefined_ids = {}
|
predefined_ids = {}
|
||||||
preserved_ids = []
|
preserved_ids = []
|
||||||
local_ids = []
|
local_ids = []
|
||||||
|
@ -153,16 +168,7 @@ predefined.split(/^/).each_with_index do |line, num|
|
||||||
line.sub!(/\s+#.*/, '')
|
line.sub!(/\s+#.*/, '')
|
||||||
name, token = line.split
|
name, token = line.split
|
||||||
next unless name
|
next unless name
|
||||||
token ||= name
|
token = id2varname(token || name)
|
||||||
if /#/ =~ token
|
|
||||||
token = "_#{token.gsub(/\W+/, '_')}"
|
|
||||||
else
|
|
||||||
token = token.sub(/\?/, 'P').sub(/\A[a-z]/) {$&.upcase}
|
|
||||||
token.sub!(/\A\$/, "_G_")
|
|
||||||
token.sub!(/\A@@/, "_C_")
|
|
||||||
token.sub!(/\A@/, "_I_")
|
|
||||||
token.gsub!(/\W+/, "")
|
|
||||||
end
|
|
||||||
if name == '-'
|
if name == '-'
|
||||||
preserved_ids << token
|
preserved_ids << token
|
||||||
next
|
next
|
||||||
|
|
35
tool/intern_ids.rb
Executable file
35
tool/intern_ids.rb
Executable file
|
@ -0,0 +1,35 @@
|
||||||
|
#!/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
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue