use strict;
use warnings;
-our $VERSION = '1.13';
+use Moose::Util ();
+
+our $VERSION = '1.19';
$VERSION = eval $VERSION;
our $AUTHORITY = 'cpan:STEVAN';
-use base qw(
- Moose::Meta::Method::Accessor::Native::String::Reader
- Moose::Meta::Method::Accessor::Native::String::Writer
-);
+use Moose::Role;
+
+with 'Moose::Meta::Method::Accessor::Native::Reader' => {
+ -excludes => [
+ qw( _generate_method
+ _minimum_arguments
+ _maximum_arguments
+ _inline_process_arguments
+ _inline_check_arguments
+ _return_value
+ )
+ ]
+ },
+ 'Moose::Meta::Method::Accessor::Native::Writer' => {
+ -excludes => [
+ qw(
+ _generate_method
+ _minimum_arguments
+ _maximum_arguments
+ _inline_process_arguments
+ _inline_check_arguments
+ _inline_optimized_set_new_value
+ _return_value
+ )
+ ]
+ };
sub _generate_method {
my $self = shift;
$code .= "\n" . 'if ( @_ == 1 || @_ == 2 ) {';
- $code .= $self->_reader_core( $inv, $slot_access, @_ );
+ $code .= $self->_reader_core( $inv, $slot_access );
$code .= "\n" . '} elsif ( @_ == 3 ) {';
- $code .= $self->_writer_core( $inv, $slot_access, @_ );
+ $code .= $self->_writer_core( $inv, $slot_access );
$code .= "\n" . $self->_inline_post_body(@_);
my $code
= $self->_inline_throw_error(
q{'The first argument passed to substr must be an integer'})
- . q{ if ref $offset || $offset !~ /^-?\\d+$/;} . "\n"
+ . q{ unless $offset =~ /^-?\\d+$/;} . "\n"
. $self->_inline_throw_error(
- q{'The second argument passed to substr must be a positive integer'})
- . q{ if ref $length || $offset !~ /^-?\\d+$/;};
+ q{'The second argument passed to substr must be an integer'})
+ . q{ unless $length =~ /^-?\\d+$/;};
if ($for_writer) {
$code
.= "\n"
. $self->_inline_throw_error(
q{'The third argument passed to substr must be a string'})
- . q{ unless defined $replacement && ! ref $replacement;};
+ . q{ unless Moose::Util::_STRINGLIKE0($replacement);};
}
return $code;
my ( $self, $slot_access ) = @_;
return
- "( do { my \$potential = $slot_access; substr \$potential, \$offset, \$length, \$replacement; \$potential; } )";
+ "( do { my \$potential = $slot_access; \@return = substr \$potential, \$offset, \$length, \$replacement; \$potential; } )";
}
-sub _inline_set_new_value {
- my ( $self, $inv, $new ) = @_;
-
- return $self->SUPER::_inline_set_new_value(@_)
- if $self->_value_needs_copy;
+sub _inline_optimized_set_new_value {
+ my ( $self, $inv, $new, $slot_access ) = @_;
- my $slot_access = $self->_inline_get($inv);
-
- return "substr $slot_access, \$offset, \$length, \$replacement;";
+ return "\@return = substr $slot_access, \$offset, \$length, \$replacement";
}
sub _return_value {
my ( $self, $slot_access, $for_writer ) = @_;
- return q{} if $for_writer;
+ return '$return[0]' if $for_writer;
return "substr $slot_access, \$offset, \$length";
}
+no Moose::Role;
+
1;