diff --git a/lib/typeprof/core/ast/sig_type.rb b/lib/typeprof/core/ast/sig_type.rb index f48da01d..c400d916 100644 --- a/lib/typeprof/core/ast/sig_type.rb +++ b/lib/typeprof/core/ast/sig_type.rb @@ -826,7 +826,7 @@ def contravariant_vertex0(genv, changes, vtx, subst) end def typecheck(genv, changes, vtx, subst) - changes.add_edge(genv, vtx, subst[@var]) unless vtx == subst[@var] + changes.add_edge(genv, vtx.new_vertex(genv, self), subst[@var]) unless vtx == subst[@var] true end diff --git a/scenario/regressions/hash-merge-bang.rb b/scenario/regressions/hash-merge-bang.rb new file mode 100644 index 00000000..364f66f3 --- /dev/null +++ b/scenario/regressions/hash-merge-bang.rb @@ -0,0 +1,22 @@ +## update +def option + { a: 1 } +end + +def foo1 + option.merge!(bar) +end + +def foo2 + option.merge!(bar) +end + +def bar = {} + +## assert +class Object + def option: -> Hash[:a, Integer] + def foo1: -> Hash[:a, Integer] + def foo2: -> Hash[:a, Integer] + def bar: -> Hash[untyped, untyped] +end