my $slot_access = $self->_inline_access($inv, $attr_name);
my $value_name = $self->_value_needs_copy ? '$val' : '$_[1]';
+ my $type_constraint_obj = $attr->type_constraint;
+ my $type_constraint_name = $type_constraint_obj && $type_constraint_obj->name;
+
my $code = 'sub { ' . "\n"
. $self->_inline_pre_body(@_) . "\n"
- . 'if (scalar(@_) == 2) {' . "\n"
+ . 'if (scalar(@_) >= 2) {' . "\n"
. $self->_inline_copy_value . "\n"
. $self->_inline_check_required . "\n"
. $self->_inline_check_coercion . "\n"
# NOTE:
# set up the environment
my $type_constraint = $attr->type_constraint
- ? $attr->type_constraint->_compiled_type_constraint
+ ? (
+ $attr->type_constraint->has_hand_optimized_type_constraint
+ ? $attr->type_constraint->hand_optimized_type_constraint
+ : $attr->type_constraint->_compiled_type_constraint
+ )
: undef;
+ #warn $code;
my $sub = eval $code;
confess "Could not create accessor for '$attr_name' because $@ \n code: $code" if $@;
return $sub;