+---------+ +---------+ +---------+
| Filter | | Safe | | Base |
+---------+ +---------+ +---------+
| | |
+------------------+------------------+
v
+-------------+
| Safe_Filter | @ISA=qw(Filter Safe Base);
+-------------+
####
BEGIN { push @MIXIN, "#line ".__LINE__.' "'.__FILE__.'"', "", <<'/' }
sub compile {
eval { local $SIG{__DIE__}; (shift)->SUPER::compile( @_) };
}
/
##
##
sub compile {
eval { local $SIG{__DIE__}; (shift)->NEXT('compile', @_) };
}
##
##
sub NEXT {
my ( $self, $method, @args ) = @_;
my $calling_package = caller(0);
my @classes = ref($self) || $self;
my @isa;
while ( my $class = shift @classes ) {
push @isa, $class;
no strict;
unshift @classes, @{ $class . "::ISA" };
}
while ( my $class = shift @isa ) {
last if ( $class eq $calling_package )
}
while ( my $class = shift @isa ) {
next unless my $sub = $class->can( $method );
return &$sub( $self, @args );
}
Carp::croak( "Can't find NEXT method" );
}