Hi all --

A while back I noticed that when I tried to use namespace::autoclean
and overload in the same package, my overloads would be purged by
namespace::autoclean...  Resulting in a non-optimal situation.
Digging into it a bit more it became quickly apparent that this was
happening because overloads weren't being recognized as methods by
Class::MOP.  I wrote a little hack that would "fix" this in
namespace::autoclean; it was pretty hackish, and ended up redoing it
(a little better, I hope) in MooseX::MarkAsMethods.

Sooo....

1) Am I crazy in thinking that overloads should be, if not treated as
methods, then at least tracked/managed by CMOP as methods (or
something similar)?

2) How does CMOP determine what is a method and what isn't?

I spent a little time the other day going through the CMOP source
trying to figure this out...  It seems like it happens in
CMOP::Package, with the XS magic in HasMethods.xs...  Right?  My
XS-foo isn't amazing right now, so it seemed better to ask :)  I also
dug through MooseX::Role::WithOverloading, as it seemed like this
should be able point me in the right direction; it simply copies
package symbols over from the role to the class/role being composed.

...which lead me to realize that MX:RWO doesn't address the underlying
issue: roles created with it also have their overloads stripped if one
uses namespace::autoclean in the role.  MX::RWO only works as the
"with" pulls the overload symbols in after namespace::autoclean has
done its thing.

I'm certainly willing to try my hand at a topic branch if #1 makes
sense, but it seemed like a good idea to ask for advice (and a sanity
check) here first :)

Thanks-
                           -Chris

-- 
Chris Weyl
Ex astris, scientia

Reply via email to