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.