On Fri, Feb 24, 2012 at 7:36 AM, Bill Moseley <mose...@hank.org> wrote:
> On Fri, Feb 24, 2012 at 6:59 PM, Chris Prather <ch...@prather.org> wrote:
>
>> Throwable::Error composes leads to:
>>
>>
>> https://metacpan.org/source/RJBS/Throwable-0.102080/lib/StackTrace/Auto.pm#L71
>>
>> In which we find 'around new => { ... }'. Which is exactly the method
>> modifier that Moose is warning about.
>>
>
> Thanks Chris.  Is the solution to not make_immutable all the classes that
> inherit from Throwable::Error then or to also use inline_constructor => 1
> then?

inline_constructor => 0

> I guess I'm not sure why the method modifier would be lost, but that's just
> my lack of understand of how Moose works. ;)

If I understand it properly, the inlined constructor would be a
different subroutine entry from the one being modified. If we draw it
out a little (with package names changed to protect the innocent):

    package Parent;
    use Moose; # bring's in Moose::Object::new

    around new => { ... }; # replaces Moose::Object::new with
"Parent::wrapped_new"

    package Child;
    use Moose;
    extends qw(Parent); # brings in "Parent::wrapped_new"

    __PACKAGE__->meta->make_immutable(); # tries to create a Child::new
    # ... but the wrapper is already applied as a part of Parent::wrapped_new
    # ... and so isn't going to be applied


Does this help?

-Chris

Reply via email to