X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=lib%2FMouse%2FMeta%2FMethod%2FConstructor.pm;h=1211e612d126fa1ef6636e26402d52b16caa3bf9;hp=5ecbf90d3ba28fee583341e34a8809ad321be55e;hb=ad087d1140e1f90a85f2f47cc05bd648fb4ea38e;hpb=7eb3a8d52207d71fe91dad750a74c9f04bea568d diff --git a/lib/Mouse/Meta/Method/Constructor.pm b/lib/Mouse/Meta/Method/Constructor.pm index 5ecbf90..1211e61 100644 --- a/lib/Mouse/Meta/Method/Constructor.pm +++ b/lib/Mouse/Meta/Method/Constructor.pm @@ -15,12 +15,10 @@ sub _generate_constructor_method { my @compiled_constraints = map { $_ ? $_->_compiled_type_constraint : undef } map { $_->type_constraint } @attrs; - my $constructor_name = defined($args->{constructor_name}) - ? $associated_metaclass_name . '::' . $args->{constructor_name} - : ''; - my $code = sprintf("#line %d %s\n", __LINE__, __FILE__).<<"..."; - sub $constructor_name \{ + + my $source = sprintf("#line %d %s\n", __LINE__, __FILE__).<<"..."; + sub \{ my \$class = shift; return \$class->Mouse::Object::new(\@_) if \$class ne q{$associated_metaclass_name}; @@ -32,10 +30,16 @@ sub _generate_constructor_method { } ... - local $@; - my $res = eval $code; - die $@ if $@; - $res; + my $code; + my $e = do{ + local $@; + $code = eval $source; + $@; + }; + die $e if $e; + + $metaclass->add_method($args->{constructor_name} => $code); + return; } sub _generate_processattrs {