@@ -2404,9 +2404,7 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind
24042404 }
24052405 }
24062406
2407- // prefer generating a fresh typevar, to avoid repeated renaming if the result
2408- // is compared to one of the intersected types later.
2409- if (!varval )
2407+ if (!varval && (vb -> lb != vb -> var -> lb || vb -> ub != vb -> var -> ub ))
24102408 newvar = jl_new_typevar (vb -> var -> name , vb -> lb , vb -> ub );
24112409
24122410 // remove/replace/rewrap free occurrences of this var in the environment
@@ -3266,25 +3264,11 @@ jl_svec_t *jl_outer_unionall_vars(jl_value_t *u)
32663264static jl_value_t * switch_union_tuple (jl_value_t * a , jl_value_t * b )
32673265{
32683266 if (jl_is_unionall (a )) {
3269- jl_unionall_t * ua = (jl_unionall_t * )a ;
3270- if (jl_is_unionall (b )) {
3271- jl_unionall_t * ub = (jl_unionall_t * )b ;
3272- if (ub -> var -> lb == ua -> var -> lb && ub -> var -> ub == ua -> var -> ub ) {
3273- jl_value_t * ub2 = jl_instantiate_unionall (ub , (jl_value_t * )ua -> var );
3274- jl_value_t * ans = NULL ;
3275- JL_GC_PUSH2 (& ub2 , & ans );
3276- ans = switch_union_tuple (ua -> body , ub2 );
3277- if (ans != NULL )
3278- ans = jl_type_unionall (ua -> var , ans );
3279- JL_GC_POP ();
3280- return ans ;
3281- }
3282- }
3283- jl_value_t * ans = switch_union_tuple (ua -> body , b );
3267+ jl_value_t * ans = switch_union_tuple (((jl_unionall_t * )a )-> body , b );
32843268 if (ans == NULL )
32853269 return NULL ;
32863270 JL_GC_PUSH1 (& ans );
3287- ans = jl_type_unionall (ua -> var , ans );
3271+ ans = jl_type_unionall ((( jl_unionall_t * ) a ) -> var , ans );
32883272 JL_GC_POP ();
32893273 return ans ;
32903274 }
0 commit comments