X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMouse.pm;h=047ab4e7c572f4b4a63bf478a42c3cfc28de6d7d;hb=60ad2cb7bf657ab608ab73b9fc7895008d220b7b;hp=8c0df3579fbb7e103ca00b936c680004b9f17cfd;hpb=a55f82bae0f11abaab7932c4deee4f924dec647a;p=gitmo%2FMouse.git diff --git a/lib/Mouse.pm b/lib/Mouse.pm index 8c0df35..047ab4e 100644 --- a/lib/Mouse.pm +++ b/lib/Mouse.pm @@ -86,31 +86,36 @@ our @SUPER_ARGS; sub super { # This check avoids a recursion loop - see # t/100_bugs/020_super_recursion.t - return if defined $SUPER_PACKAGE && $SUPER_PACKAGE ne caller(); - return unless $SUPER_BODY; $SUPER_BODY->(@SUPER_ARGS); + return if defined $SUPER_PACKAGE && $SUPER_PACKAGE ne caller(); + return if !defined $SUPER_BODY; + $SUPER_BODY->(@SUPER_ARGS); } sub override { - my $meta = Mouse::Meta::Class->initialize(caller); - my $pkg = $meta->name; - - my $name = shift; - my $code = shift; - - my $body = $pkg->can($name) - or confess "You cannot override '$name' because it has no super method"; + # my($name, $method) = @_; + Mouse::Meta::Class->initialize(scalar caller)->add_override_method_modifier(@_); +} - $meta->add_method($name => sub { - local $SUPER_PACKAGE = $pkg; - local @SUPER_ARGS = @_; - local $SUPER_BODY = $body; +our %INNER_BODY; +our %INNER_ARGS; - $code->(@_); - }); +sub inner { + my $pkg = caller(); + if ( my $body = $INNER_BODY{$pkg} ) { + my $args = $INNER_ARGS{$pkg}; + local $INNER_ARGS{$pkg}; + local $INNER_BODY{$pkg}; + return $body->(@{$args}); + } + else { + return; + } } -sub inner { not_supported } -sub augment{ not_supported } +sub augment { + #my($name, $method) = @_; + Mouse::Meta::Class->initialize(scalar caller)->add_augment_method_modifier(@_); +} sub init_meta { shift; @@ -275,12 +280,6 @@ should upgrade to Moose. We don't need two parallel sets of extensions! If you really must write a Mouse extension, please contact the Moose mailing list or #moose on IRC beforehand. -=head2 Maintenance - -The original author of this module has mostly stepped down from maintaining -Mouse. See L. -If you would like to help maintain this module, please get in touch with us. - =head1 KEYWORDS =head2 C<< $object->meta -> Mouse::Meta::Class >>