X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FTest%2FValgrind%2FParser%2FXML%2FTwig.pm;h=c1eeea9898191db9f26422fc6d6337306884586a;hb=b9e3e9311a415d0fa583815b40ba5af0b4a3e3a8;hp=a949e81b4856ff9b51513f845c5f4bc9f624e4be;hpb=76e13d7ca56782de6f9fb8d6597856ad91c15ffb;p=perl%2Fmodules%2FTest-Valgrind.git diff --git a/lib/Test/Valgrind/Parser/XML/Twig.pm b/lib/Test/Valgrind/Parser/XML/Twig.pm index a949e81..c1eeea9 100644 --- a/lib/Test/Valgrind/Parser/XML/Twig.pm +++ b/lib/Test/Valgrind/Parser/XML/Twig.pm @@ -7,7 +7,7 @@ our $VERSION = '1.02'; use Scalar::Util (); -use base qw/XML::Twig Test::Valgrind::Carp/; +use base qw/Test::Valgrind::Parser::XML Test::Valgrind::Carp XML::Twig/; BEGIN { XML::Twig->add_options('Stash'); } @@ -22,11 +22,6 @@ sub new { my %args = @_; my $stash = delete $args{stash} || { }; - my $tool = delete $args{tool}; - $class->_croak('Invalid tool') unless Scalar::Util::blessed($tool) - and $tool->isa('Test::Valgrind::Tool'); - $stash->{tool} = $tool; - bless $class->XML::Twig::new( elt_class => __PACKAGE__ . '::Elt', stash => $stash, @@ -37,6 +32,38 @@ sub new { sub stash { shift->{Stash} } +# We must store the session in ourselves because it's only possible to pass +# arguments to XML::Twig objects by a global stash. + +sub _session { @_ <= 1 ? $_[0]->{_session} : ($_[0]->{_session} = $_[1]) } + +sub start { + my ($self, $sess) = @_; + + $self->SUPER::start($sess); + $self->_session($sess); + + return; +} + +sub parse { + my ($self, $sess, $fh) = @_; + + $self->XML::Twig::parse($fh); + $self->purge; + + return; +} + +sub finish { + my ($self, $sess) = @_; + + $self->_session(undef); + $self->SUPER::finish($sess); + + return; +} + sub handle_error { my ($twig, $node) = @_; @@ -68,10 +95,9 @@ sub handle_error { $origin->kid('stack')->children('frame') ]; } - my $tool = $twig->stash->{tool}; - my $sess = $tool->_session; + my $sess = $twig->_session; - $sess->report($tool->report_class($sess)->new( + $sess->report($sess->report_class($sess)->new( kind => $kind, id => $id, data => $data,