=begin pod :kind("Type") :subkind("role") :category("metamodel")

=TITLE role Metamodel::Finalization

=SUBTITLE Metaobject supporting object finalization

X<|DESTROY metamodel>

    role Metamodel::Finalization { ... }

I<Warning>: this role is part of the Rakudo implementation, and is not
a part of the language specification.

This role takes care that C<DESTROY> submethods are called (if they
exist) when an object is garbage-collected.

=head1 Methods

=head2 method setup_finalization

    method setup_finalization($obj)

Collects the C<DESTROY> submethods from this class and all its
superclasses, and marks the class as needing action on garbage
collection.

A metamodel for a kind that implements finalization semantics must call
this method at type composition time.

=head2 method destroyers

    method destroyers($obj --> List:D)

Returns a list of all finalization methods.

=end pod
