X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMooseX-Antlers.git;a=blobdiff_plain;f=lib%2FMooseX%2FAntlers%2FEvalTracker.pm;fp=lib%2FMooseX%2FAntlers%2FEvalTracker.pm;h=1f5daf4ac547bb97ede690abbc606d1e7143ba44;hp=e2cc227d978faf3574ed7fe3365d09ea113cf935;hb=b0fc4a7ab8621aeee2cf26874a5f2395b46af10c;hpb=c8414da4ecf57ee1051c0df44732ea1259d4b327 diff --git a/lib/MooseX/Antlers/EvalTracker.pm b/lib/MooseX/Antlers/EvalTracker.pm index e2cc227..1f5daf4 100644 --- a/lib/MooseX/Antlers/EvalTracker.pm +++ b/lib/MooseX/Antlers/EvalTracker.pm @@ -1,6 +1,7 @@ package MooseX::Antlers::EvalTracker; use Moose; +use MooseX::Antlers::ErrorThrower; use Scalar::Util qw(weaken refaddr); use PadWalker qw(closed_over); use Sub::Identify qw(sub_fullname); @@ -25,14 +26,13 @@ sub _build__our_eval_closure { # _eval_closure returns a CODE ref and we want that too sub { my $self = shift; - # ... screwed over here by $attr->default(...) and ->trigger(...) - # in the bloody inlined subs. XXX slap stevan, fix Moose - # until we stop passing these let's make anything that uses it - # crash out so at least we don't break anything - #delete @{$_[0]}{qw($meta $attr)}; - my $cr = $self->$orig(@_); - $eval_tracker->_eval_closure_called_for($cr => @_); - return $cr; + if ($_[0]->{'$attr'} || $_[0]->{'$attrs'}) { + die "Closing over meta-attribute, can't handle this. Suspect you used initializer - can't support that yet, sorry. Patches welcome."; + } + $_[0]->{'$meta'} = \'MooseX::Antlers::ErrorThrower'; + my ($cr, $e) = $self->$orig(@_); + $eval_tracker->_eval_closure_called_for($cr => @_) unless $e; + return ($cr, $e); }; }