diff --git a/lib/typeprof/core/env.rb b/lib/typeprof/core/env.rb index f3d47eac..13a4a8e5 100644 --- a/lib/typeprof/core/env.rb +++ b/lib/typeprof/core/env.rb @@ -116,6 +116,10 @@ def get_instance_type(mod, type_args, changes, base_ty_env, base_ty) base_ty.mod.type_params.zip(base_ty.args) do |param, arg| ty_env[param] = arg || Source.new end + elsif base_ty.is_a?(Type::Singleton) + base_ty.mod.type_params&.each do |param| + ty_env[param] = Source.new + end end args = mod.type_params.zip(type_args).map do |param, arg| arg && changes ? arg.covariant_vertex(self, changes, ty_env) : Source.new diff --git a/scenario/regressions/singleton-type-param.rb b/scenario/regressions/singleton-type-param.rb new file mode 100644 index 00000000..9e202548 --- /dev/null +++ b/scenario/regressions/singleton-type-param.rb @@ -0,0 +1,7 @@ +## update +# Passing class constants (Singleton types) to methods like `all?` +# should not crash with "unknown type variable" error +[].all?(Array) +[].all?(Hash) + +## assert