summaryrefslogtreecommitdiffhomepage
path: root/Rakefile
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-04-27 08:57:20 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:20:42 +0900
commit721f934b9b01f4644d63f2b838e141cf0e6cda91 (patch)
tree30420a13054170b2dbd6ed402c09b381acd55e28 /Rakefile
parentd2cab16301ecabbe67886051d4c777a73de6d327 (diff)
downloadmruby-721f934b9b01f4644d63f2b838e141cf0e6cda91.tar.gz
mruby-721f934b9b01f4644d63f2b838e141cf0e6cda91.zip
Scan `.rb` files as well to generate `presym` table.
Diffstat (limited to 'Rakefile')
-rw-r--r--Rakefile21
1 files changed, 15 insertions, 6 deletions
diff --git a/Rakefile b/Rakefile
index 0e60726f4..7ef67b3da 100644
--- a/Rakefile
+++ b/Rakefile
@@ -106,25 +106,34 @@ end
cfiles = (Dir.glob("#{MRUBY_ROOT}/src/*.c")+
Dir.glob("#{MRUBY_ROOT}/mrbgems/*/{core,src}/*.c")+
Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/{src,core}/*.c")).uniq
+rbfiles = (Dir.glob("#{MRUBY_ROOT}/mrblib/*.rb")+
+ Dir.glob("#{MRUBY_ROOT}/mrbgems/*/mrblib/*.rb")+
+ Dir.glob("#{MRUBY_ROOT}/build/*/mrbgems/**/mrblib/*.rb")).uniq
presym_file="#{MRUBY_ROOT}/build/presym"
+predef_symbols = nil
desc "preallocated symbols"
-file presym_file => cfiles do
- symbols = cfiles.map do |f|
+file presym_file => cfiles+rbfiles do
+ csymbols = cfiles.map do |f|
src = File.read(f)
[src.scan(/intern_lit\([^\n"]*"([^\n "]*)"/),
src.scan(/mrb_define_method\([^\n"]*"([^\n"]*)"/),
src.scan(/mrb_define_class\([^\n"]*"([^\n"]*)"/),
src.scan(/mrb_define_module\([^\n"]*"([^\n"]*)"/),
- src.scan(/MRB_SYM\(([a-zA-Z0-9_]+)\)/)]
+ src.scan(/MRB_SYM\((\w+)\)/)]
end
- symbols = symbols.flatten.uniq.sort
+ rbsymbols = rbfiles.map do |f|
+ src = File.read(f)
+ [src.scan(/\bclass +([A-Z]\w*)/),
+ src.scan(/\bmodule +([A-Z]\w*)/),
+ src.scan(/\bdef +(\w+)/)]
+ end
+ symbols = (csymbols+rbsymbols).flatten.uniq.sort
presyms = File.readlines(presym_file, chomp: true) rescue []
if presyms != symbols
File.write(presym_file, symbols.join("\n"))
end
end
-file presym_file => cfiles
presym_inc=presym_file+".inc"
file presym_inc => presym_file do
presyms = File.readlines(presym_file, chomp: true)
@@ -132,7 +141,7 @@ file presym_inc => presym_file do
f.print "/* MRB_PRESYM_CSYM(sym, num) - symbol which is valid C id name */\n"
f.print "/* MRB_PRESYM_SYM(sym, num) - symbol which is not valid C id */\n\n"
presyms.each.with_index do |sym,i|
- if /\A[a-zA-Z0-9_]+\Z/ =~ sym
+ if /\A\w+\Z/ =~ sym
f.print "MRB_PRESYM_CSYM(#{sym}, #{i+1})\n"
else
f.print "MRB_PRESYM_SYM(#{sym}, #{i+1})\n"