Module: TypeProf
Relationships & Source Files | |
Namespace Children | |
Modules:
| |
Classes:
ActualArguments ,
AliasMethodDef ,
AllocationSite ,
AttrMethodDef ,
Block ,
BlockSignature ,
CRef ,
ConfigData ,
Context ,
CustomBlock ,
CustomMethodDef ,
Env ,
ExecutionPoint ,
ISeq ,
ISeqBlock ,
ISeqMethodDef ,
Import ,
MethodDef ,
MethodSignature ,
RBS2JSON ,
RBSReader ,
RubySignatureExporter ,
Scratch ,
Signature ,
StaticEnv ,
SymbolBlock ,
Type ,
TypedBlock ,
TypedContext ,
TypedMethodDef | |
Exceptions:
| |
Defined in: | lib/typeprof.rb, lib/typeprof/analyzer.rb, lib/typeprof/arguments.rb, lib/typeprof/block.rb, lib/typeprof/builtin.rb, lib/typeprof/cli.rb, lib/typeprof/config.rb, lib/typeprof/container-type.rb, lib/typeprof/export.rb, lib/typeprof/import.rb, lib/typeprof/iseq.rb, lib/typeprof/method.rb, lib/typeprof/type.rb, lib/typeprof/utils.rb, lib/typeprof/version.rb |
Constant Summary
-
INSN_TABLE =
# File 'lib/typeprof/insns-def.rb', line 1{:nop=>[], :getlocal=>["lindex_t", "rb_num_t"], :setlocal=>["lindex_t", "rb_num_t"], :getblockparam=>["lindex_t", "rb_num_t"], :setblockparam=>["lindex_t", "rb_num_t"], :getblockparamproxy=>["lindex_t", "rb_num_t"], :getspecial=>["rb_num_t", "rb_num_t"], :setspecial=>["rb_num_t"], :getinstancevariable=>["ID", "IVC"], :setinstancevariable=>["ID", "IVC"], :getclassvariable=>["ID"], :setclassvariable=>["ID"], :getconstant=>["ID"], :setconstant=>["ID"], :getglobal=>["GENTRY"], :setglobal=>["GENTRY"], :putnil=>[], :putself=>[], :putobject=>["VALUE"], :putspecialobject=>["rb_num_t"], :putstring=>["VALUE"], :concatstrings=>["rb_num_t"], :tostring=>[], :freezestring=>["VALUE"], :toregexp=>["rb_num_t", "rb_num_t"], :intern=>[], :newarray=>["rb_num_t"], :newarraykwsplat=>["rb_num_t"], :duparray=>["VALUE"], :duphash=>["VALUE"], :=>["rb_num_t", "rb_num_t"], :concatarray=>[], :splatarray=>["VALUE"], :newhash=>["rb_num_t"], :newrange=>["rb_num_t"], :pop=>[], :dup=>[], :dupn=>["rb_num_t"], :swap=>[], :reverse=>["rb_num_t"], :topn=>["rb_num_t"], :setn=>["rb_num_t"], :adjuststack=>["rb_num_t"], :defined=>["rb_num_t", "VALUE", "VALUE"], :checkmatch=>["rb_num_t"], :checkkeyword=>["lindex_t", "lindex_t"], :checktype=>["rb_num_t"], :defineclass=>["ID", "ISEQ", "rb_num_t"], :definemethod=>["ID", "ISEQ"], :definesmethod=>["ID", "ISEQ"], :send=>["CALL_DATA", "ISEQ"], :invokesuper=>["CALL_DATA", "ISEQ"], :invokeblock=>["CALL_DATA"], :leave=>[], :throw=>["rb_num_t"], :jump=>["OFFSET"], :branchif=>["OFFSET"], :branchunless=>["OFFSET"], :branchnil=>["OFFSET"], :once=>["ISEQ", "ISE"], :invokebuiltin=>["RB_BUILTIN"]}
-
VERSION =
# File 'lib/typeprof/version.rb', line 2"0.15.2"
Class Method Summary
Class Method Details
.analyze(config)
[ GitHub ]# File '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. [:stackprof] require "stackprof" out = "typeprof-stackprof-#{ Config. [:stackprof] }.dump" StackProf.start(mode: Config. [: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. [:stackprof] && defined?(StackProf) StackProf.stop StackProf.results end end
.starting_state(iseq)
[ GitHub ]# File '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