use attributes;
__PACKAGE__->mk_accessors(
- qw/counter depth request response state action namespace/
+ qw/counter request response state action stack namespace/
);
attributes->import( __PACKAGE__, \&namespace, 'lvalue' );
+sub depth { scalar @{ shift->stack || [] }; }
+
# Laziness++
*comp = \&component;
*req = \&request;
require Module::Pluggable::Fast;
# Helper script generation
-our $CATALYST_SCRIPT_GEN = 10;
+our $CATALYST_SCRIPT_GEN = 11;
__PACKAGE__->mk_classdata($_)
for qw/components arguments dispatcher engine log dispatcher_class
__PACKAGE__->request_class('Catalyst::Request');
__PACKAGE__->response_class('Catalyst::Response');
-our $VERSION = '5.49_03';
+our $VERSION = '5.49_04';
sub import {
my ( $class, @arguments ) = @_;
my ( $c, $class, $code ) = @_;
$class = $c->components->{$class} || $class;
$c->state(0);
- my $callsub = ( caller(1) )[3];
+
+ my $callsub =
+ ( caller(0) )[0]->isa('Catalyst::Action')
+ ? ( caller(2) )[3]
+ : ( caller(1) )[3];
my $action = '';
if ( $c->debug ) {
$action = "-> $action" if $callsub =~ /forward$/;
}
- $c->{depth}++;
+ push( @{ $c->stack }, $code );
eval {
if ( $c->debug )
{
$c->state( &$code( $class, $c, @{ $c->req->args } ) || 0 );
}
};
- $c->{depth}--;
+ pop( @{ $c->stack } );
if ( my $error = $@ ) {
- if ( $error eq $DETACH ) { die $DETACH if $c->{depth} > 1 }
+ if ( $error eq $DETACH ) { die $DETACH if $c->depth > 1 }
else {
unless ( ref $error ) {
chomp $error;
my $c = $class->context_class->new(
{
counter => {},
- depth => 0,
+ stack => [],
request => $class->request_class->new(
{
arguments => [],
}
}
+=item $c->stack
+
+Contains the stack.
+
=item $c->write( $data )
Writes $data to the output stream. When using this method directly, you will