When classes are defined, you can specify the
:method-invocation-order
. This is a feature specific to EIEIO.
This controls the order in which method resolution occurs for
methods in cases of multiple inheritance. The order
affects which method is called first in a tree, and if
cl-call-next-method
is used, it controls the order in which the
stack of methods are run.
The original EIEIO order turned out to be broken for multiple inheritance, but some programs depended on it. As such this option was added when the default invocation order was fixed to something that made more sense in that case.
Valid values are:
:breadth-first
Search for methods in the class hierarchy in breadth first order. This is the default.
:depth-first
Search for methods in the class hierarchy in a depth first order.
:c3
Searches for methods in a linearized way that most closely matches what CLOS does when a monotonic class structure is defined.
This is derived from the Dylan language documents by Kim Barrett et al.: A Monotonic Superclass Linearization for Dylan Retrieved from: https://doi.org/10.1145/236338.236343