@@ -846,7 +846,8 @@ jl_value_t *jl_apply_type(jl_value_t *tc, jl_value_t **params, size_t n)
846
846
}
847
847
// if this is a wrapper, let check_datatype_parameters give the error
848
848
if (!iswrapper )
849
- jl_type_error_rt ("Type" , jl_symbol_name (ua -> var -> name ), (jl_value_t * )ua -> var , pi );
849
+ jl_type_error_rt (jl_is_datatype (inner ) ? jl_symbol_name (inner -> name -> name ) : "Type" ,
850
+ jl_symbol_name (ua -> var -> name ), (jl_value_t * )ua -> var , pi );
850
851
}
851
852
852
853
tc = jl_instantiate_unionall (ua , pi );
@@ -1063,16 +1064,19 @@ static void check_datatype_parameters(jl_typename_t *tn, jl_value_t **params, si
1063
1064
}
1064
1065
assert (i == np * 2 );
1065
1066
wrapper = tn -> wrapper ;
1066
- for ( i = 0 ; i < np ; i ++ ) {
1067
+ for ( i = 0 ; i < np ; i ++ ) {
1067
1068
assert (jl_is_unionall (wrapper ));
1068
1069
jl_tvar_t * tv = ((jl_unionall_t * )wrapper )-> var ;
1069
1070
if (!within_typevar (params [i ], bounds [2 * i ], bounds [2 * i + 1 ])) {
1070
- // TODO: pass a new version of `tv` containing the instantiated bounds
1071
+ if (tv -> lb != bounds [2 * i ] || tv -> ub != bounds [2 * i + 1 ])
1072
+ // pass a new version of `tv` containing the instantiated bounds
1073
+ tv = jl_new_typevar (tv -> name , bounds [2 * i ], bounds [2 * i + 1 ]);
1074
+ JL_GC_PUSH1 (& tv );
1071
1075
jl_type_error_rt (jl_symbol_name (tn -> name ), jl_symbol_name (tv -> name ), (jl_value_t * )tv , params [i ]);
1072
1076
}
1073
1077
int j ;
1074
- for ( j = 2 * i + 2 ; j < 2 * np ; j ++ ) {
1075
- jl_value_t * bj = bounds [j ];
1078
+ for ( j = 2 * i + 2 ; j < 2 * np ; j ++ ) {
1079
+ jl_value_t * bj = bounds [j ];
1076
1080
if (bj != (jl_value_t * )jl_any_type && bj != jl_bottom_type )
1077
1081
bounds [j ] = jl_substitute_var (bj , tv , params [i ]);
1078
1082
}
0 commit comments