changelog
[gitmo/Class-MOP.git] / lib / Class / MOP / Method.pm
index 8a2dc88..ecf7cc4 100644 (file)
@@ -42,18 +42,25 @@ sub wrap {
     ($params{package_name} && $params{name})
         || confess "You must supply the package_name and name parameters $UPGRADE_ERROR_TEXT";
 
-    my $self = bless {
-        'body'                 => $code,
-        'associated_metaclass' => $params{associated_metaclass},
-        'package_name'         => $params{package_name},
-        'name'                 => $params{name},
-    } => ref($class) || $class;
+    my $self = (ref($class) || $class)->_new(\%params);
 
     weaken($self->{associated_metaclass}) if $self->{associated_metaclass};
 
     return $self;
 }
 
+sub _new {
+    my $class = shift;
+    my $params = @_ == 1 ? $_[0] : {@_};
+
+    my $self = bless {
+        'body'                 => $params->{body},
+        'associated_metaclass' => $params->{associated_metaclass},
+        'package_name'         => $params->{package_name},
+        'name'                 => $params->{name},
+    } => $class;
+}
+
 ## accessors
 
 sub body { (shift)->{'body'} }