[libmoo-perl] 32/43: clean up Sub::Defer and Sub::Quote imports
gregor herrmann
gregoa at debian.org
Mon Dec 26 17:56:16 UTC 2016
This is an automated email from the git hooks/post-receive script.
gregoa pushed a commit to branch master
in repository libmoo-perl.
commit cc4bf1cc02365158c32b532a32758338010e2a8f
Author: Graham Knop <haarg at haarg.org>
Date: Thu Dec 8 23:12:57 2016 -0500
clean up Sub::Defer and Sub::Quote imports
---
lib/Moo.pm | 1 -
lib/Moo/HandleMoose.pm | 1 +
lib/Moo/Role.pm | 41 +++++++++++++++++++++++------------------
lib/Moo/_Utils.pm | 3 +--
4 files changed, 25 insertions(+), 21 deletions(-)
diff --git a/lib/Moo.pm b/lib/Moo.pm
index bf93ca0..17b3022 100644
--- a/lib/Moo.pm
+++ b/lib/Moo.pm
@@ -168,7 +168,6 @@ sub _constructor_maker_for {
return unless $MAKERS{$target};
$MAKERS{$target}{constructor} ||= do {
require Method::Generate::Constructor;
- require Sub::Defer;
my %construct_opts = (
package => $target,
diff --git a/lib/Moo/HandleMoose.pm b/lib/Moo/HandleMoose.pm
index 2a368fd..5ee98bb 100644
--- a/lib/Moo/HandleMoose.pm
+++ b/lib/Moo/HandleMoose.pm
@@ -59,6 +59,7 @@ sub inject_real_metaclass_for {
our %DID_INJECT;
return Class::MOP::get_metaclass_by_name($name) if $DID_INJECT{$name};
require Moose; require Moo; require Moo::Role; require Scalar::Util;
+ require Sub::Defer;
Class::MOP::remove_metaclass_by_name($name);
my ($am_role, $am_class, $meta, $attr_specs, $attr_order) = do {
if (my $info = $Moo::Role::INFO{$name}) {
diff --git a/lib/Moo/Role.pm b/lib/Moo/Role.pm
index 1a81cf5..20a61c2 100644
--- a/lib/Moo/Role.pm
+++ b/lib/Moo/Role.pm
@@ -11,10 +11,8 @@ use Moo::_Utils qw(
_set_loaded
_unimport_coderefs
);
-use Sub::Defer ();
-use Sub::Quote qw(quote_sub sanitize_identifier);
-use Role::Tiny ();
use Carp qw(croak);
+use Role::Tiny ();
BEGIN { our @ISA = qw(Role::Tiny) }
BEGIN {
our @CARP_NOT = qw(
@@ -171,6 +169,7 @@ sub _inhale_if_moose {
my $spec = { %{ $is_mouse ? $attr : $attr->original_options } };
if ($spec->{isa}) {
+ require Sub::Quote;
my $get_constraint = do {
my $pkg = $is_mouse
@@ -182,9 +181,9 @@ sub _inhale_if_moose {
my $tc = $get_constraint->($spec->{isa});
my $check = $tc->_compiled_type_constraint;
- my $tc_var = '$_check_for_'.sanitize_identifier($tc->name);
+ my $tc_var = '$_check_for_'.Sub::Quote::sanitize_identifier($tc->name);
- $spec->{isa} = quote_sub
+ $spec->{isa} = Sub::Quote::quote_sub(
qq{
&${tc_var} or Carp::croak "Type constraint failed for \$_[0]"
},
@@ -192,7 +191,7 @@ sub _inhale_if_moose {
{
package => $role,
},
- ;
+ );
if ($spec->{coerce}) {
@@ -261,7 +260,9 @@ sub _make_accessors {
sub _undefer_subs {
my ($self, $target, $role) = @_;
- Sub::Defer::undefer_package($role);
+ if ($INC{'Sub/Defer.pm'}) {
+ Sub::Defer::undefer_package($role);
+ }
}
sub role_application_steps {
@@ -337,13 +338,11 @@ sub apply_roles_to_object {
and keys %attrs
and my $con_gen = Moo->_constructor_maker_for($class)
and my $m = Moo->_accessor_maker_for($class)) {
- require Sub::Quote;
my $specs = $con_gen->all_attribute_specs;
my %captures;
my $code = join('',
- "no warnings 'void';\n",
( map {
my $name = $_;
my $spec = $specs->{$name};
@@ -362,15 +361,21 @@ sub apply_roles_to_object {
}
} sort keys %attrs ),
);
- Sub::Quote::quote_sub(
- "${class}::_apply_defaults",
- $code,
- \%captures,
- {
- package => $class,
- no_install => 1,
- }
- );
+ if ($code) {
+ require Sub::Quote;
+ Sub::Quote::quote_sub(
+ "${class}::_apply_defaults",
+ "no warnings 'void';\n$code",
+ \%captures,
+ {
+ package => $class,
+ no_install => 1,
+ }
+ );
+ }
+ else {
+ 0;
+ }
}
else {
0;
diff --git a/lib/Moo/_Utils.pm b/lib/Moo/_Utils.pm
index a8b839b..9542490 100644
--- a/lib/Moo/_Utils.pm
+++ b/lib/Moo/_Utils.pm
@@ -36,8 +36,7 @@ our @EXPORT = qw(
sub _install_modifier {
my ($into, $type, $name, $code) = @_;
- if (my $to_modify = $into->can($name)) { # CMM will throw for us if not
- require Sub::Defer;
+ if ($INC{'Sub/Defer.pm'} and my $to_modify = $into->can($name)) { # CMM will throw for us if not
Sub::Defer::undefer_sub($to_modify);
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmoo-perl.git
More information about the Pkg-perl-cvs-commits
mailing list