X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FTest%2FValgrind%2FParser%2FXML%2FTwig.pm;h=878ef4de6afe1594bf46b5338c0d0293d4435071;hb=76eed0759a5b942bf1a9a8be439eebd9459f7c7c;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..878ef4d 100644 --- a/lib/Test/Valgrind/Parser/XML/Twig.pm +++ b/lib/Test/Valgrind/Parser/XML/Twig.pm @@ -7,12 +7,13 @@ 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'); } my %handlers = ( - '/valgrindoutput/error' => \&handle_error, + '/valgrindoutput/protocolversion' => \&handle_version, + '/valgrindoutput/error' => \&handle_error, ); sub new { @@ -22,11 +23,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 +33,47 @@ sub new { sub stash { shift->{Stash} } +eval "sub $_ { \@_ <= 1 ? \$_[0]->{$_} : (\$_[0]->{$_} = \$_[1]) }" + for qw/_session protocol_version/; + +# We must store the session in ourselves because it's only possible to pass +# arguments to XML::Twig objects by a global stash. + +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_version { + my ($twig, $node) = @_; + + $twig->protocol_version($node->text); + + $twig->purge; +} + sub handle_error { my ($twig, $node) = @_; @@ -68,10 +105,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,