@@ -87,7 +87,7 @@ def run0(genv, changes)
8787 mod = genv . resolve_cpath ( @node . cpath )
8888 if mod . type_params && !mod . type_params . empty?
8989 # Create a substitution map where each type parameter maps to a type variable vertex
90- subst = mod . type_params . to_h do |param |
90+ subst = mod . type_params . to_h do |param , _default_ty |
9191 type_var_vtx = Vertex . new ( @node )
9292 [ param , type_var_vtx ]
9393 end
@@ -185,8 +185,8 @@ def match_arguments?(genv, changes, param_map, a_args, method_type)
185185 def resolve_overload ( changes , genv , method_type , node , param_map , a_args , ret , force )
186186 param_map0 = param_map . dup
187187 if method_type . type_params
188- method_type . type_params . zip ( yield ( method_type ) ) do |var , vtx |
189- param_map0 [ var ] = vtx
188+ method_type . type_params . zip ( yield ( method_type ) ) do |( var , _default_ty ) , vtx |
189+ param_map0 [ var ] = vtx # TODO: default_ty?
190190 end
191191 end
192192
@@ -443,17 +443,17 @@ def run0(genv, changes)
443443 ty = Type ::Singleton . new ( genv , mod )
444444 param_map0 = Type . default_param_map ( genv , ty )
445445 else
446- type_params = mod . type_params . map { |ty_param | Source . new ( ) } # TODO: better support
446+ type_params = mod . type_params . map { |( _name , _default_ty ) | Source . new ( ) } # TODO: better support
447447 ty = Type ::Instance . new ( genv , mod , type_params )
448448 param_map0 = Type . default_param_map ( genv , ty )
449449 if ty . is_a? ( Type ::Instance )
450- ty . mod . type_params . zip ( ty . args ) do |param , arg |
451- param_map0 [ param ] = arg
450+ ty . mod . type_params . zip ( ty . args ) do |( name , _default_ty ) , arg |
451+ param_map0 [ name ] = arg
452452 end
453453 end
454454 end
455- method_type . type_params . each do |param |
456- param_map0 [ param ] = Source . new ( )
455+ method_type . type_params . each do |name , _default_ty |
456+ param_map0 [ name ] = Source . new ( )
457457 end
458458
459459 positional_args = [ ]
@@ -739,12 +739,12 @@ def run0(genv, changes)
739739 # TODO: add_depended_method_entity for types used to resolve overloads
740740 ty_env = Type . default_param_map ( genv , orig_ty )
741741 if ty . is_a? ( Type ::Instance )
742- ty . mod . type_params . zip ( ty . args ) do |param , arg |
743- ty_env [ param ] = arg
742+ ty . mod . type_params . zip ( ty . args ) do |( param , default_ty ) , arg |
743+ ty_env [ param ] = arg || ( default_ty ? default_ty . covariant_vertex ( genv , changes , ty_env ) : Source . new )
744744 end
745745 end
746746 mdecl . resolve_overloads ( changes , genv , @node , ty_env , @a_args , @ret ) do |method_type |
747- @generics [ method_type ] ||= method_type . type_params . map { | var | Vertex . new ( @node ) }
747+ @generics [ method_type ] ||= method_type . type_params . map { Vertex . new ( @node ) }
748748 end
749749 end
750750 elsif !me . defs . empty?
@@ -846,7 +846,7 @@ def resolve_prepended_modules(genv, changes, base_ty_env, ty, mid, &blk)
846846 if prep_decl . is_a? ( AST ::SigPrependNode ) && prep_mod . type_params
847847 prep_ty = genv . get_instance_type ( prep_mod , prep_decl . args , changes , base_ty_env , ty )
848848 else
849- type_params = prep_mod . type_params . map { | ty_param | Source . new ( ) } # TODO: better support
849+ type_params = prep_mod . type_params . map { Source . new ( ) } # TODO: better support
850850 prep_ty = Type ::Instance . new ( genv , prep_mod , type_params )
851851 end
852852
@@ -901,7 +901,7 @@ def resolve_included_modules(genv, changes, base_ty_env, ty, mid, &blk)
901901 if inc_decl . is_a? ( AST ::SigIncludeNode ) && inc_mod . type_params
902902 inc_ty = genv . get_instance_type ( inc_mod , inc_decl . args , changes , base_ty_env , ty )
903903 else
904- type_params = inc_mod . type_params . map { | ty_param | Source . new ( ) } # TODO: better support
904+ type_params = inc_mod . type_params . map { Source . new ( ) } # TODO: better support
905905 inc_ty = Type ::Instance . new ( genv , inc_mod , type_params )
906906 end
907907
0 commit comments