Search subclasses from constants

This commit is contained in:
Nobuyoshi Nakada 2021-02-22 12:01:41 +09:00
Родитель a7dda449e8
Коммит 4e32a4ab81
1 изменённых файлов: 3 добавлений и 6 удалений

Просмотреть файл

@ -9,14 +9,11 @@ end
class Exports class Exports
PrivateNames = /(?:Init_|InitVM_|ruby_static_id_|threadptr|_ec_|DllMain\b)/ PrivateNames = /(?:Init_|InitVM_|ruby_static_id_|threadptr|_ec_|DllMain\b)/
@@subclass = []
def self.inherited(klass)
@@subclass << [/#{klass.name.sub(/.*::/, '').downcase}/i, klass]
end
def self.create(*args, &block) def self.create(*args, &block)
platform = RUBY_PLATFORM platform = RUBY_PLATFORM
pat, klass = @@subclass.find {|p, k| p =~ platform} klass = constants.find do |p|
break const_get(p) if platform.include?(p.to_s.downcase)
end
unless klass unless klass
raise ArgumentError, "unsupported platform: #{platform}" raise ArgumentError, "unsupported platform: #{platform}"
end end