stop closing over the method metaobject
[gitmo/Moose.git] / lib / Moose / Error / Default.pm
index 47c0024..d3673f0 100644 (file)
@@ -20,6 +20,16 @@ sub new {
     }
 }
 
+sub _inline_new {
+    my ( $self, @args ) = @_;
+
+    return '(do { '
+             . '(defined $ENV{MOOSE_ERROR_STYLE} && $ENV{MOOSE_ERROR_STYLE} eq "croak"'
+               . ' ? ' . $self->_inline_create_error_carpmess(@args)
+               . ' : ' . $self->_inline_create_error_carpmess(@args, longmess => 1)
+         . ')})';
+}
+
 sub create_error_croak {
     my ( $self, @args ) = @_;
     $self->_create_error_carpmess( @args );
@@ -46,6 +56,31 @@ sub _create_error_carpmess {
     }
 }
 
+sub _inline_create_error_carpmess {
+    my ( $self, %args ) = @_;
+
+    my $carp_level = $args{depth} || 0;
+
+    my $create_message = 'Carp::longmess(' . $args{message} . ')';
+
+    if (!$args{longmess}) {
+        $create_message =
+            '($Carp::Verbose '
+              . '? ' . $create_message . ' '
+              . ': Carp::ret_summary('
+                  . $carp_level . ', ' . $args{message}
+              . '))';
+    }
+
+    return
+        '(do { '
+          . 'local $Carp::MaxArgNums = 20; '
+          . 'local $Carp::CarpLevel = ($Carp::CarpLevel || 0) + '
+              . $carp_level . '; '
+          . $create_message
+      . '})';
+}
+
 1;
 
 # ABSTRACT: L<Carp> based error generation for Moose.