more readable subconstructor handling for BUILDALL
Alex J. G. BurzyƄski [Fri, 26 Aug 2011 09:00:56 +0000 (11:00 +0200)]
lib/Method/Generate/BuildAll.pm

index b4aa1fb..ad66d69 100644 (file)
@@ -10,16 +10,19 @@ use B 'perlstring';
 sub generate_method {
   my ($self, $into) = @_;
   quote_sub "${into}::BUILDALL", join '',
+           $self->_handle_subbuild($into),
     qq{    my \$self = shift;\n},
-    qq{    my \$class = ref \$self;\n},
-      '    if ('. perlstring($into) ." ne \$class) {\n",
-    qq{        return \$self->\${\\(\$Moo::Object::BUILD_MAKER->generate_method(\$class))}(\@_);\n},
-      "    } else {\n",
-               $self->buildall_body_for($into, '$self', '@_'),
-      "    }\n",
+           $self->buildall_body_for($into, '$self', '@_'),
     qq{    return \$self\n};
 }
 
+sub _handle_subbuild {
+  my ($self, $into) = @_;
+  '    if (ref($_[0]) ne '.perlstring($into).') {'."\n".
+  '      return shift->Moo::Object::BUILDALL(@_)'.";\n".
+  '    }'."\n";
+}
+
 sub buildall_body_for {
   my ($self, $into, $me, $args) = @_;
   my @builds =