Make the meta-instance class take a bare attribute name when inlining
Dave Rolsky [Fri, 20 Feb 2009 17:21:58 +0000 (17:21 +0000)]
attribute-related bits.

lib/Class/MOP/Instance.pm
lib/Class/MOP/Method/Accessor.pm
lib/Class/MOP/Method/Constructor.pm
t/061_instance_inline.t

index 9806228..6808c2c 100644 (file)
@@ -172,7 +172,7 @@ sub inline_create_instance {
 
 sub inline_slot_access {
     my ($self, $instance, $slot_name) = @_;
-    sprintf "%s->{%s}", $instance, $slot_name;
+    sprintf q[%s->{"%s"}], $instance, quotemeta($slot_name);
 }
 
 sub inline_get_slot_value {
index e27d318..ea63b75 100644 (file)
@@ -138,7 +138,7 @@ sub generate_reader_method_inline {
          {},
         'sub {'
         . 'confess "Cannot assign a value to a read-only accessor" if @_ > 1;'
-        . $meta_instance->inline_get_slot_value('$_[0]', "'$attr_name'")
+        . $meta_instance->inline_get_slot_value('$_[0]', $attr_name)
         . '}'
     );
 }
@@ -152,7 +152,7 @@ sub generate_writer_method_inline {
     return $self->_eval_closure(
         {},
         'sub {'
-        . $meta_instance->inline_set_slot_value('$_[0]', "'$attr_name'", '$_[1]')
+        . $meta_instance->inline_set_slot_value('$_[0]', $attr_name, '$_[1]')
         . '}'
     );
 }
@@ -167,7 +167,7 @@ sub generate_predicate_method_inline {
     return $self->_eval_closure(
         {},
        'sub {'
-       . $meta_instance->inline_is_slot_initialized('$_[0]', "'$attr_name'")
+       . $meta_instance->inline_is_slot_initialized('$_[0]', $attr_name)
        . '}'
     );
 }
@@ -181,7 +181,7 @@ sub generate_clearer_method_inline {
     return $self->_eval_closure(
         {},
         'sub {'
-        . $meta_instance->inline_deinitialize_slot('$_[0]', "'$attr_name'")
+        . $meta_instance->inline_deinitialize_slot('$_[0]', $attr_name)
         . '}'
     );
 }
index 64fa1eb..9d4a88c 100644 (file)
@@ -149,12 +149,12 @@ sub _generate_slot_initializer {
           'if(exists $params->{\'' . $attr->init_arg . '\'}){' . "\n" .
                 $self->meta_instance->inline_set_slot_value(
                     '$instance',
-                    ("'" . $attr->name . "'"),
+                    $attr->name,
                     '$params->{\'' . $attr->init_arg . '\'}' ) . "\n" .
            '} ' . (!defined $default ? '' : 'else {' . "\n" .
                 $self->meta_instance->inline_set_slot_value(
                     '$instance',
-                    ("'" . $attr->name . "'"),
+                    $attr->name,
                      $default ) . "\n" .
            '}')
         );
@@ -162,7 +162,7 @@ sub _generate_slot_initializer {
         return (
             $self->meta_instance->inline_set_slot_value(
                 '$instance',
-                ("'" . $attr->name . "'"),
+                $attr->name,
                  $default ) . "\n"
         );
     } else { return '' }
index 95e986b..62f0eec 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 15;
+use Test::More tests => 6;
 use Test::Exception;
 
 use Class::MOP::Instance;
@@ -10,7 +10,7 @@ my $C = 'Class::MOP::Instance';
 
 {
     my $instance  = '$self';
-    my $slot_name = '"foo"';
+    my $slot_name = 'foo';
     my $value     = '$value';
 
     is($C->inline_get_slot_value($instance, $slot_name),
@@ -38,67 +38,4 @@ my $C = 'Class::MOP::Instance';
       '... got the right code for strengthen_slot_value');
 }
 
-{
-    my $instance  = '$_[0]';
-    my $slot_name = '$attr_name';
-    my $value     = '[]';
-
-    is($C->inline_get_slot_value($instance, $slot_name),
-      '$_[0]->{$attr_name}',
-      '... got the right code for get_slot_value');
-
-    is($C->inline_set_slot_value($instance, $slot_name, $value),
-      '$_[0]->{$attr_name} = []',
-      '... got the right code for set_slot_value');
-
-    is($C->inline_initialize_slot($instance, $slot_name),
-      '',
-      '... got the right code for initialize_slot');
-
-    is($C->inline_is_slot_initialized($instance, $slot_name),
-      'exists $_[0]->{$attr_name}',
-      '... got the right code for get_slot_value');
-
-    is($C->inline_weaken_slot_value($instance, $slot_name),
-      'Scalar::Util::weaken( $_[0]->{$attr_name} )',
-      '... got the right code for weaken_slot_value');
-
-    is($C->inline_strengthen_slot_value($instance, $slot_name),
-      '$_[0]->{$attr_name} = $_[0]->{$attr_name}',
-      '... got the right code for strengthen_slot_value');
-}
-
-my $accessor_string = "sub {\n"
-. $C->inline_set_slot_value('$_[0]', '$attr_name', '$_[1]')
-. " if scalar \@_ == 2;\n"
-. $C->inline_get_slot_value('$_[0]', '$attr_name')
-. ";\n}";
-
-is($accessor_string,
-   q|sub {
-$_[0]->{$attr_name} = $_[1] if scalar @_ == 2;
-$_[0]->{$attr_name};
-}|,
-    '... got the right code string for accessor');
-
-my $reader_string = "sub {\n"
-. $C->inline_get_slot_value('$_[0]', '$attr_name')
-. ";\n}";
-
-is($reader_string,
-   q|sub {
-$_[0]->{$attr_name};
-}|,
-    '... got the right code string for reader');
-
-my $writer_string = "sub {\n"
-. $C->inline_set_slot_value('$_[0]', '$attr_name', '$_[1]')
-. ";\n}";
-
-is($writer_string,
-   q|sub {
-$_[0]->{$attr_name} = $_[1];
-}|,
-    '... got the right code string for writer');
-