This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Note that mro[gs]et_private_data are documented
[perl5.git] / pod / perlmroapi.pod
index 2200bec..c585441 100644 (file)
@@ -9,7 +9,7 @@ resolution orders other than the default (linear depth first search).
 The C3 method resolution order added in 5.10.0 has been re-implemented as
 a plugin, without changing its Perl-space interface.
 
-Each plugin should register itself with C<Perl_mro_register> by providing
+Each plugin should register itself by providing
 the following structure
 
     struct mro_alg {
@@ -20,6 +20,10 @@ the following structure
         U32 hash;
     };
 
+and calling C<Perl_mro_register>:
+
+    Perl_mro_register(aTHX_ &my_mro_alg);
+
 =over 4
 
 =item resolve
@@ -54,8 +58,12 @@ function - the parameter is provided to allow your implementation to track
 depth if it needs to recurse.
 
 The function should return a reference to an array containing the parent
-classes in order. The caller is responsible for incrementing the reference
-count if it wants to keep the structure. Hence if you have created a
+classes in order. The names of the classes should be the result of calling
+C<HvENAME()> on the stash. In those cases where C<HvENAME()> returns null,
+C<HvNAME()> should be used instead.
+
+The caller is responsible for incrementing the reference count of the array
+returned if it wants to keep the structure. Hence, if you have created a
 temporary value that you keep no pointer to, C<sv_2mortal()> to ensure that
 it is disposed of correctly. If you have cached your return value, then
 return a pointer to it without changing the reference count.
@@ -71,10 +79,14 @@ stash, and a pointer to your C<mro_alg> structure:
     meta = HvMROMETA(stash);
     private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg);
 
+=for apidoc mro_get_private_data
+
 To set your private value, call C<Perl_mro_set_private_data()>:
 
     Perl_mro_set_private_data(aTHX_ meta, &c3_alg, private_sv);
 
+=for apidoc mro_set_private_data
+
 The private data cache will take ownership of a reference to private_sv,
 much the same way that C<hv_store()> takes ownership of a reference to the
 value that you pass it.
@@ -82,8 +94,8 @@ value that you pass it.
 =head1 Examples
 
 For examples of MRO implementations, see C<S_mro_get_linear_isa_c3()>
-and the C<BOOT:> section of F<mro/mro.xs>, and C<S_mro_get_linear_isa_dfs()>
-in F<mro.c>
+and the C<BOOT:> section of F<ext/mro/mro.xs>, and
+C<S_mro_get_linear_isa_dfs()> in F<mro_core.c>
 
 =head1 AUTHORS