Skip to content

Commit 40e8699

Browse files
committed
Cache Type::Bot instance in GlobalEnv
It is used frequently in hot paths like resolve and filter methods.
1 parent 95a56f9 commit 40e8699

5 files changed

Lines changed: 14 additions & 11 deletions

File tree

lib/typeprof/core/ast/control.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ def install0(genv)
236236
if @lenv.exist_var?(:"*expected_block_ret")
237237
@lenv.add_next_box(@changes.add_escape_box(genv, @arg.ret))
238238
end
239-
Source.new(Type::Bot.new(genv))
239+
Source.new(genv.bot_type)
240240
end
241241
end
242242

@@ -496,7 +496,7 @@ def install0(genv)
496496
@arg.install(genv)
497497
e_ret = @lenv.locals[:"*expected_method_ret"]
498498
@lenv.add_return_box(@changes.add_escape_box(genv, @arg.ret)) if e_ret
499-
Source.new(Type::Bot.new(genv))
499+
Source.new(genv.bot_type)
500500
end
501501
end
502502

@@ -681,7 +681,7 @@ def initialize(raw_node, lenv)
681681
end
682682

683683
def install0(genv)
684-
Source.new(Type::Bot.new(genv))
684+
Source.new(genv.bot_type)
685685
end
686686
end
687687

lib/typeprof/core/ast/sig_type.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,11 +304,11 @@ def show
304304

305305
class SigTyBaseBottomNode < SigTyNode
306306
def covariant_vertex0(genv, changes, vtx, subst)
307-
changes.add_edge(genv, Source.new(Type::Bot.new(genv)), vtx)
307+
changes.add_edge(genv, Source.new(genv.bot_type), vtx)
308308
end
309309

310310
def contravariant_vertex0(genv, changes, vtx, subst)
311-
changes.add_edge(genv, Source.new(Type::Bot.new(genv)), vtx)
311+
changes.add_edge(genv, Source.new(genv.bot_type), vtx)
312312
end
313313

314314
def typecheck(genv, changes, vtx, subst)

lib/typeprof/core/env.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ def initialize
4040
@set_type = Type::Instance.new(self, resolve_cpath([:Set]), [])
4141
@regexp_type = Type::Instance.new(self, resolve_cpath([:Regexp]), [])
4242

43+
@bot_type = Type::Bot.new(self)
44+
4345
@run_count = 0
4446
end
4547

@@ -50,6 +52,7 @@ def initialize
5052
attr_reader :obj_type, :nil_type, :true_type, :false_type, :str_type
5153
attr_reader :int_type, :float_type, :rational_type, :complex_type
5254
attr_reader :proc_type, :symbol_type, :method_type, :set_type, :regexp_type
55+
attr_reader :bot_type
5356

5457
def gen_ary_type(elem_vtx)
5558
Type::Instance.new(self, @mod_ary, [elem_vtx])

lib/typeprof/core/graph/box.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -791,7 +791,7 @@ def run0(genv, changes)
791791

792792
def resolve(genv, changes, &blk)
793793
@recv.each_type do |orig_ty|
794-
next if orig_ty == Type::Bot.new(genv)
794+
next if orig_ty == genv.bot_type
795795
if @mid == :"*super"
796796
mid = @node.lenv.cref.mid
797797
skip = true
@@ -936,7 +936,7 @@ def resolve_included_modules(genv, changes, base_ty_env, ty, mid, &blk)
936936
def resolve_subclasses(genv, changes)
937937
# TODO: This does not follow new subclasses
938938
@recv.each_type do |ty|
939-
next if ty == Type::Bot.new(genv)
939+
next if ty == genv.bot_type
940940
base_ty = ty.base_type(genv)
941941
singleton = base_ty.is_a?(Type::Singleton)
942942
mod = base_ty.mod

lib/typeprof/core/graph/filter.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,14 @@ def filter(types)
112112

113113
def on_type_added(genv, src_var, added_types)
114114
if src_var == @base_vtx
115-
if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
115+
if @base_vtx.types.size == 1 && @base_vtx.types.include?(genv.bot_type)
116116
@next_vtx.on_type_removed(genv, self, @types.keys & @next_vtx.types.keys) # XXX: smoke/control/bot2.rb
117117
end
118118
else
119119
added_types.each do |ty|
120120
@types[ty] = true
121121
end
122-
if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
122+
if @base_vtx.types.size == 1 && @base_vtx.types.include?(genv.bot_type)
123123
# ignore
124124
else
125125
@next_vtx.on_type_added(genv, self, added_types - @next_vtx.types.keys) # XXX: smoke/control/bot4.rb
@@ -129,7 +129,7 @@ def on_type_added(genv, src_var, added_types)
129129

130130
def on_type_removed(genv, src_var, removed_types)
131131
if src_var == @base_vtx
132-
if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
132+
if @base_vtx.types.size == 1 && @base_vtx.types.include?(genv.bot_type)
133133
# ignore
134134
else
135135
@next_vtx.on_type_added(genv, self, @types.keys - @next_vtx.types.keys) # XXX: smoke/control/bot4.rb
@@ -138,7 +138,7 @@ def on_type_removed(genv, src_var, removed_types)
138138
removed_types.each do |ty|
139139
@types.delete(ty) || raise
140140
end
141-
if @base_vtx.types.size == 1 && @base_vtx.types.include?(Type::Bot.new(genv))
141+
if @base_vtx.types.size == 1 && @base_vtx.types.include?(genv.bot_type)
142142
# ignore
143143
else
144144
@next_vtx.on_type_removed(genv, self, removed_types & @next_vtx.types.keys) # XXX: smoke/control/bot2.rb

0 commit comments

Comments
 (0)