Handle Foo->new(undef) consistently, with an error saying a single param to new(...
[gitmo/Moose.git] / lib / Moose / Meta / Method / Constructor.pm
index 706866c..9d8fc18 100644 (file)
@@ -6,7 +6,7 @@ use warnings;
 
 use Scalar::Util 'blessed', 'weaken', 'looks_like_number';
 
-our $VERSION   = '0.64';
+our $VERSION   = '0.71_01';
 our $AUTHORITY = 'cpan:STEVAN';
 
 use base 'Moose::Meta::Method',
@@ -117,7 +117,7 @@ sub associated_metaclass { (shift)->{'associated_metaclass'} }
 
 # this was changed in 0.41, but broke MooseX::Singleton, so try to catch
 # any other code using the original broken spelling
-sub intialize_body { Moose->throw_error("Please correct the spelling of 'intialize_body' to 'initialize_body'") }
+sub intialize_body { $_[0]->throw_error("Please correct the spelling of 'intialize_body' to 'initialize_body'") }
 
 sub initialize_body {
     my $self = shift;
@@ -142,7 +142,7 @@ sub initialize_body {
         $self->_generate_slot_initializer($_)
     } 0 .. (@{$self->attributes} - 1));
 
-    $source .= ";\n" . $self->_generate_triggers();    
+    $source .= ";\n" . $self->_generate_triggers();
     $source .= ";\n" . $self->_generate_BUILDALL();
 
     $source .= ";\n" . 'return $instance';
@@ -177,7 +177,7 @@ sub initialize_body {
             '@type_constraint_bodies' => \@type_constraint_bodies,
         },
     ) or $self->throw_error("Could not eval the constructor :\n\n$source\n\nbecause :\n\n$@", error => $@, data => $source );
-
+    
     $self->{'body'} = $code;
 }
 
@@ -190,7 +190,7 @@ sub _generate_BUILDARGS {
         return join("\n",
             'do {',
             $self->_inline_throw_error('"Single parameters to new() must be a HASH ref"', 'data => $_[0]'),
-            '    if scalar @_ == 1 && defined $_[0] && ref($_[0]) ne q{HASH};',
+            '    if scalar @_ == 1 && !( defined $_[0] && ref $_[0] eq q{HASH} );',
             '(scalar @_ == 1) ? {%{$_[0]}} : {@_};',
             '}',
         );
@@ -221,7 +221,7 @@ sub _generate_triggers {
                     .       '$instance, ' 
                     .        $self->meta_instance->inline_get_slot_value(
                                  '$instance',
-                                 ("'" . $attr->name . "'")
+                                 $attr->name,
                              ) 
                              . ', '
                     .        '$attrs->[' . $i . ']'
@@ -319,7 +319,7 @@ sub _generate_slot_assignment {
         $source = (
             $self->meta_instance->inline_set_slot_value(
                 '$instance',
-                ("'" . $attr->name . "'"),
+                $attr->name,
                 $value
             ) . ';'
         );        
@@ -332,7 +332,7 @@ sub _generate_slot_assignment {
             "\n" .
             $self->meta_instance->inline_weaken_slot_value(
                 '$instance',
-                ("'" . $attr->name . "'")
+                $attr->name
             ) .
             ' if ref ' . $value . ';'
         );
@@ -409,7 +409,7 @@ Moose::Meta::Method::Constructor - Method Meta Object for constructors
 =head1 DESCRIPTION
 
 This is a subclass of L<Class::MOP::Method> which handles
-constructing an approprate Constructor methods. This is primarily
+constructing an appropriate Constructor methods. This is primarily
 used in the making of immutable metaclasses, otherwise it is
 not particularly useful.
 
@@ -431,8 +431,6 @@ not particularly useful.
 
 =item B<associated_metaclass>
 
-=item B<can_be_inlined>
-
 =back
 
 =head1 AUTHORS
@@ -441,7 +439,7 @@ Stevan Little E<lt>stevan@iinteractive.comE<gt>
 
 =head1 COPYRIGHT AND LICENSE
 
-Copyright 2006-2008 by Infinity Interactive, Inc.
+Copyright 2006-2009 by Infinity Interactive, Inc.
 
 L<http://www.iinteractive.com>