use _eval_closure
Matt S Trout [Fri, 5 Dec 2008 03:05:55 +0000 (03:05 +0000)]
lib/Moose/Meta/Method/Accessor.pm
lib/Moose/Meta/Method/Constructor.pm
lib/Moose/Meta/Method/Destructor.pm

index b6852f7..879c018 100644 (file)
@@ -21,19 +21,21 @@ sub _eval_code {
 
     # NOTE:
     # set up the environment
+    my $environment = q{
     my $attr        = $self->associated_attribute;
     my $attr_name   = $attr->name;
-    my $meta        = $self,
+    my $meta        = $self;
 
     my $type_constraint_obj  = $attr->type_constraint;
     my $type_constraint_name = $type_constraint_obj && $type_constraint_obj->name;
     my $type_constraint      = $type_constraint_obj
                                    ? $type_constraint_obj->_compiled_type_constraint
                                    : undef;
+};
 
     #warn "code for $attr_name =>\n" . $code . "\n";
-    my $sub = eval $code;
-    $self->throw_error("Could not create writer for '$attr_name' because $@ \n code: $code", error => $@, data => $code ) if $@;
+    my $sub = $self->_eval_closure($environment, $code);
+    $self->throw_error("Could not create writer for '${\$self->associated_attribute->name}' because $@ \n code: $code", error => $@, data => $code ) if $@;
     return $sub;
 
 }
index 644ed93..91da69e 100644 (file)
@@ -150,7 +150,7 @@ sub initialize_body {
     warn $source if $self->options->{debug};
 
     my $code;
-    {
+    my $environment = q{
         my $meta = $self; # FIXME for _inline_throw_error...
 
         # NOTE:
@@ -174,10 +174,9 @@ sub initialize_body {
         my @type_constraint_bodies = map {
             defined $_ ? $_->_compiled_type_constraint : undef;
         } @type_constraints;
-
-        $code = eval $source;
-        $self->throw_error("Could not eval the constructor :\n\n$source\n\nbecause :\n\n$@", error => $@, data => $source ) if $@;
-    }
+    };
+    $code = $self->_eval_closure($environment, $source);
+    $self->throw_error("Could not eval the constructor :\n\n$source\n\nbecause :\n\n$@", error => $@, data => $source ) if $@;
     $self->{'body'} = $code;
 }
 
index b99cf24..018bb29 100644 (file)
@@ -88,11 +88,8 @@ sub initialize_body {
     $source .= ";\n" . '}'; 
     warn $source if $self->options->{debug};    
     
-    my $code;
-    {
-        $code = eval $source;
-        $self->throw_error("Could not eval the destructor :\n\n$source\n\nbecause :\n\n$@", error => $@, data => $source) if $@;
-    }
+    my $code = $self->_eval_closure(q{}, $source);
+    $self->throw_error("Could not eval the destructor :\n\n$source\n\nbecause :\n\n$@", error => $@, data => $source) if $@;
     $self->{'body'} = $code;
 }