types/gf/typemap: ConstType in dispatch tuples
Enable ConstType{T} in dispatch tuples for DataType values only:
concrete DataType arguments (no free typevars) are wrapped as
ConstType{T}. UnionAll and other type objects keep Type{T} wrapping.
Subtype fixes:
- ConstType{A} <: Type{B} with TypeVars: forall_exists_equal + invdepth
- obviously_disjoint: skip concrete fast path for ConstType tuples
- is_leaf_bound: true for ConstType instances
- widen_Type_if_concrete: handle ConstType (widen to typeof(T))
- jl_has_intersect_type_not_kind: true for ConstType
- fix_inferred_var_bound: unwrap ConstType{T} to Type{T} in sparams
Typemap cache fixes:
- is_type_or_consttype helper for extracting inner type
- jl_typemap_assoc_by_type: check targ and arg1 caches for ConstType
- jl_typemap_intersection_visitor: check arg1 for typeof(T)
- tname_intersection, jl_type_extract_name, jl_type_extract_name_precise:
handle ConstType
- type_hash, typekeyvalue_hash/eq: handle ConstType
- jl_precompute_memoized_dt: ConstType = concrete + dispatch
- has_concrete_supertype: true for ConstType
Other fixes:
- jl_gc_wb null check in jl_compile_method_internal
- jl_wrap_ConstType: use jl_gc_alloc + jl_set_typetagof
Bootstrap succeeds, 108 packages precompile, all tests pass.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>