module TypeProf
Constants
- ConfigData
- INSN_TABLE
- VERSION
Public Class Methods
analyze(config)
click to toggle source
# File typeprof-0.15.2/lib/typeprof/config.rb, line 64 def self.analyze(config) # Deploy the config to the TypeProf::Config (Note: This is thread unsafe) if TypeProf.const_defined?(:Config) TypeProf.send(:remove_const, :Config) end TypeProf.const_set(:Config, config) if Config.options[:stackprof] require "stackprof" out = "typeprof-stackprof-#{ Config.options[:stackprof] }.dump" StackProf.start(mode: Config.options[:stackprof], out: out, raw: true) end scratch = Scratch.new Builtin.setup_initial_global_env(scratch) Config.gem_rbs_features.each do |feature| Import.import_library(scratch, feature) end rbs_files = [] rbs_codes = [] Config.rbs_files.each do |rbs| if rbs.is_a?(Array) # [String name, String content] rbs_codes << rbs else rbs_files << rbs end end Import.import_rbs_files(scratch, rbs_files) rbs_codes.each do |name, content| Import.import_rbs_code(scratch, name, content) end Config.rb_files.each do |rb| if rb.is_a?(Array) # [String name, String content] iseq = ISeq.compile_str(*rb.reverse) else iseq = rb end scratch.add_entrypoint(iseq) end result = scratch.type_profile if Config.output.respond_to?(:write) scratch.report(result, Config.output) else open(Config.output, "w") do |output| scratch.report(result, output) end end rescue TypeProfError => exc exc.report(Config.output) ensure if Config.options[:stackprof] && defined?(StackProf) StackProf.stop StackProf.results end end
starting_state(iseq)
click to toggle source
# File typeprof-0.15.2/lib/typeprof/config.rb, line 127 def self.starting_state(iseq) cref = CRef.new(:bottom, Type::Builtin[:obj], false) # object recv = Type::Instance.new(Type::Builtin[:obj]) ctx = Context.new(iseq, cref, nil) ep = ExecutionPoint.new(ctx, 0, nil) locals = [Type.nil] * iseq.locals.size env = Env.new(StaticEnv.new(recv, Type.nil, false, false), locals, [], Utils::HashWrapper.new({})) return ep, env end