Type-bound Operators#
Type-bound operators are in fact basically just GENERIC procedure
bindings and are represented much in the same way as those (see
Type-bound Procedures).
They come in two flavours:
User-defined operators (like .MYOPERATOR.)
are stored in the f2k_derived namespace’s tb_uop_root
symtree exactly like ordinary type-bound procedures are stored in
tb_sym_root ; their symtrees’ names are the operator-names (e.g.
myoperator in the example).
Intrinsic operators on the other hand are stored in the namespace’s
array member tb_op indexed by the intrinsic operator’s enum
value. Those need not be packed into gfc_symtree structures and are
only gfc_typebound_proc instances.
When an operator call or assignment is found that cannot be handled in
another way (i.e. neither matches an intrinsic nor interface operator
definition) but that contains a derived-type expression, all type-bound
operators defined on that derived-type are checked for a match with
the operator call. If there’s indeed a relevant definition, the
operator call is replaced with an internally generated GENERIC
type-bound procedure call to the respective definition and that call is
further processed.