Consider consolidating the type-checker functions that perform an intersection of types.
The type checker has three families of functions that intersect two types:
and_pike_types()
match_types()
soft_cast()
This leads to quite a bit of (complex) code duplication.
Investigate the differences and attempt to consolidate them into one.
It may also be possible to implement pike_types_le()
with the new function by comparing its result with the first type.