diff --git a/lib/crystal/type_inference/call.rb b/lib/crystal/type_inference/call.rb index b088182a955f3dccaaf905bf1e625d14311438b4..a70ccf6f5f1156e9fcd1e02eb2213e8dce1955b8 100644 --- a/lib/crystal/type_inference/call.rb +++ b/lib/crystal/type_inference/call.rb @@ -21,7 +21,7 @@ module Crystal return if @types_signature == types_signature @types_signature = types_signature - if has_unions_in_obj? || (obj && obj.type.has_restricted_defs?(name) && has_unions_in_args?) + if has_unions_in_obj? || (obj && obj.type.has_restricted_defs?(name) && has_unions_in_args?) || (scope && scope.has_restricted_defs?(name) && has_unions_in_args?) compute_dispatch return end diff --git a/lib/crystal/types.rb b/lib/crystal/types.rb index 55ded77e54c9403f65d682175ca5fa58d401ad4c..7d06632f8f7b189794c9e39c3ff3a723f4da6e4a 100644 --- a/lib/crystal/types.rb +++ b/lib/crystal/types.rb @@ -171,7 +171,7 @@ module Crystal def has_restricted_defs?(name) defs = @defs[name] - defs && defs.keys.any? { |ary| ary[0].any? } + (defs && defs.keys.any? { |ary| ary[0].any? }) || (parents && parents.any? { |p| p.has_restricted_defs?(name) }) end end