X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FClass%2FAccessor%2FGrouped.pm;h=375a4eb77e8c828f3ec62c800e45f9110a37a4f0;hb=8702466ace59add7338b034c69fa79af3a735c07;hp=8eee167d47bbdf4cc9bc007aaa3cf2e23a802d0d;hpb=eda06cc6e50add4156f887b756e3dacd1b8a6d9e;p=p5sagit%2FClass-Accessor-Grouped.git diff --git a/lib/Class/Accessor/Grouped.pm b/lib/Class/Accessor/Grouped.pm index 8eee167..375a4eb 100644 --- a/lib/Class/Accessor/Grouped.pm +++ b/lib/Class/Accessor/Grouped.pm @@ -500,6 +500,7 @@ BEGIN { local $@; my $err; + $err = eval { require Sub::Name; 1; } ? undef : do { delete $INC{'Sub/Name.pm'}; # because older perls suck $@; @@ -620,17 +621,18 @@ $gen_accessor = sub { $class = $c; } - my $fq_name = "${class}::${methname}"; # When installing an XSA simple accessor, we need to make sure we are not # short-circuiting a (compile or runtime) get_simple/set_simple override. # What we do here is install a lazy first-access check, which will decide # the ultimate coderef being placed in the accessor slot if ($USE_XS and $group eq 'simple') { + my $fq_name = "${class}::${methname}"; ($accessor_maker_cache->{xs}{$field}{$type}{$fq_name} ||= do { die sprintf( "Class::XSAccessor requested but not available:\n%s\n", __CAG_NO_CXSA ) if __CAG_NO_CXSA; + sub { sub { my $current_class = Scalar::Util::blessed( $_[0] ) || $_[0]; @@ -685,8 +687,9 @@ $gen_accessor = sub { my $src = $accessor_maker_cache->{source}{$type}{$group}{$field} ||= $maker_templates->{$type}{pp_code}->($group, $field); + no warnings 'redefine'; local $@ if __CAG_UNSTABLE_DOLLARAT; - eval "sub ${fq_name}{$src}"; + eval "sub ${class}::${methname}{$src}"; undef; # so that no attempt will be made to install anything }