| File | /usr/local/lib/perl5/site_perl/5.10.1/darwin-2level/XML/LibXML/XPathContext.pm |
| Statements Executed | 21 |
| Statement Execution Time | 604µs |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 14µs | 17µs | XML::LibXML::XPathContext::BEGIN@12 |
| 1 | 1 | 1 | 9µs | 27µs | XML::LibXML::XPathContext::BEGIN@141 |
| 1 | 1 | 1 | 7µs | 39µs | XML::LibXML::XPathContext::BEGIN@15 |
| 1 | 1 | 1 | 6µs | 48µs | XML::LibXML::XPathContext::BEGIN@13 |
| 1 | 1 | 1 | 6µs | 6µs | XML::LibXML::XPathContext::BEGIN@16 |
| 1 | 1 | 1 | 4µs | 4µs | XML::LibXML::XPathContext::BEGIN@17 |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::CLONE_SKIP |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::_guarded_find_call |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::_perl_dispatcher |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::exists |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::find |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::findnodes |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::findvalue |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::registerFunction |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::unregisterFunction |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::unregisterFunctionNS |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::unregisterNs |
| 0 | 0 | 0 | 0s | 0s | XML::LibXML::XPathContext::unregisterVarLookupFunc |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | # $Id: XPathContext.pm 422 2002-11-08 17:10:30Z phish $ | ||||
| 2 | # | ||||
| 3 | # This is free software, you may use it and distribute it under the same terms as | ||||
| 4 | # Perl itself. | ||||
| 5 | # | ||||
| 6 | # Copyright 2001-2003 AxKit.com Ltd., 2002-2006 Christian Glahn, 2006-2009 Petr Pajas | ||||
| 7 | # | ||||
| 8 | # | ||||
| 9 | |||||
| 10 | package XML::LibXML::XPathContext; | ||||
| 11 | |||||
| 12 | 3 | 24µs | 2 | 20µs | # spent 17µs (14+3) within XML::LibXML::XPathContext::BEGIN@12 which was called
# once (14µs+3µs) by XML::LibXML::BEGIN@25 at line 12 # spent 17µs making 1 call to XML::LibXML::XPathContext::BEGIN@12
# spent 3µs making 1 call to strict::import |
| 13 | 3 | 22µs | 2 | 90µs | # spent 48µs (6+42) within XML::LibXML::XPathContext::BEGIN@13 which was called
# once (6µs+42µs) by XML::LibXML::BEGIN@25 at line 13 # spent 48µs making 1 call to XML::LibXML::XPathContext::BEGIN@13
# spent 42µs making 1 call to vars::import |
| 14 | |||||
| 15 | 3 | 20µs | 2 | 71µs | # spent 39µs (7+32) within XML::LibXML::XPathContext::BEGIN@15 which was called
# once (7µs+32µs) by XML::LibXML::BEGIN@25 at line 15 # spent 39µs making 1 call to XML::LibXML::XPathContext::BEGIN@15
# spent 32µs making 1 call to Exporter::import |
| 16 | 3 | 35µs | 1 | 6µs | # spent 6µs within XML::LibXML::XPathContext::BEGIN@16 which was called
# once (6µs+0s) by XML::LibXML::BEGIN@25 at line 16 # spent 6µs making 1 call to XML::LibXML::XPathContext::BEGIN@16 |
| 17 | 3 | 454µs | 1 | 4µs | # spent 4µs within XML::LibXML::XPathContext::BEGIN@17 which was called
# once (4µs+0s) by XML::LibXML::BEGIN@25 at line 17 # spent 4µs making 1 call to XML::LibXML::XPathContext::BEGIN@17 |
| 18 | |||||
| 19 | 1 | 500ns | $VERSION = "1.70"; # VERSION TEMPLATE: DO NOT CHANGE | ||
| 20 | |||||
| 21 | # should LibXML XPath data types be used for simple objects | ||||
| 22 | # when passing parameters to extension functions (default: no) | ||||
| 23 | 1 | 100ns | $USE_LIBXML_DATA_TYPES = 0; | ||
| 24 | |||||
| 25 | sub CLONE_SKIP { 1 } | ||||
| 26 | |||||
| 27 | sub findnodes { | ||||
| 28 | my ($self, $xpath, $node) = @_; | ||||
| 29 | |||||
| 30 | my @nodes = $self->_guarded_find_call('_findnodes', $node, $xpath); | ||||
| 31 | |||||
| 32 | if (wantarray) { | ||||
| 33 | return @nodes; | ||||
| 34 | } | ||||
| 35 | else { | ||||
| 36 | return XML::LibXML::NodeList->new(@nodes); | ||||
| 37 | } | ||||
| 38 | } | ||||
| 39 | |||||
| 40 | sub find { | ||||
| 41 | my ($self, $xpath, $node) = @_; | ||||
| 42 | |||||
| 43 | my ($type, @params) = $self->_guarded_find_call('_find', $node, $xpath,0); | ||||
| 44 | |||||
| 45 | if ($type) { | ||||
| 46 | return $type->new(@params); | ||||
| 47 | } | ||||
| 48 | return undef; | ||||
| 49 | } | ||||
| 50 | |||||
| 51 | sub exists { | ||||
| 52 | my ($self, $xpath, $node) = @_; | ||||
| 53 | my (undef, $value) = $self->_guarded_find_call('_find', $node, $xpath,1); | ||||
| 54 | return $value; | ||||
| 55 | } | ||||
| 56 | |||||
| 57 | sub findvalue { | ||||
| 58 | my $self = shift; | ||||
| 59 | return $self->find(@_)->to_literal->value; | ||||
| 60 | } | ||||
| 61 | |||||
| 62 | sub _guarded_find_call { | ||||
| 63 | my ($self, $method, $node)=(shift,shift,shift); | ||||
| 64 | |||||
| 65 | my $prev_node; | ||||
| 66 | if (ref($node)) { | ||||
| 67 | $prev_node = $self->getContextNode(); | ||||
| 68 | $self->setContextNode($node); | ||||
| 69 | } | ||||
| 70 | my @ret; | ||||
| 71 | eval { | ||||
| 72 | @ret = $self->$method(@_); | ||||
| 73 | }; | ||||
| 74 | $self->_free_node_pool; | ||||
| 75 | $self->setContextNode($prev_node) if ref($node); | ||||
| 76 | |||||
| 77 | if ($@) { | ||||
| 78 | my $err = $@; | ||||
| 79 | chomp $err; | ||||
| 80 | croak $err; | ||||
| 81 | } | ||||
| 82 | |||||
| 83 | return @ret; | ||||
| 84 | } | ||||
| 85 | |||||
| 86 | sub registerFunction { | ||||
| 87 | my ($self, $name, $sub) = @_; | ||||
| 88 | $self->registerFunctionNS($name, undef, $sub); | ||||
| 89 | return; | ||||
| 90 | } | ||||
| 91 | |||||
| 92 | sub unregisterNs { | ||||
| 93 | my ($self, $prefix) = @_; | ||||
| 94 | $self->registerNs($prefix, undef); | ||||
| 95 | return; | ||||
| 96 | } | ||||
| 97 | |||||
| 98 | sub unregisterFunction { | ||||
| 99 | my ($self, $name) = @_; | ||||
| 100 | $self->registerFunctionNS($name, undef, undef); | ||||
| 101 | return; | ||||
| 102 | } | ||||
| 103 | |||||
| 104 | sub unregisterFunctionNS { | ||||
| 105 | my ($self, $name, $ns) = @_; | ||||
| 106 | $self->registerFunctionNS($name, $ns, undef); | ||||
| 107 | return; | ||||
| 108 | } | ||||
| 109 | |||||
| 110 | sub unregisterVarLookupFunc { | ||||
| 111 | my ($self) = @_; | ||||
| 112 | $self->registerVarLookupFunc(undef, undef); | ||||
| 113 | return; | ||||
| 114 | } | ||||
| 115 | |||||
| 116 | # extension function perl dispatcher | ||||
| 117 | # borrowed from XML::LibXSLT | ||||
| 118 | |||||
| 119 | sub _perl_dispatcher { | ||||
| 120 | my $func = shift; | ||||
| 121 | my @params = @_; | ||||
| 122 | my @perlParams; | ||||
| 123 | |||||
| 124 | my $i = 0; | ||||
| 125 | while (@params) { | ||||
| 126 | my $type = shift(@params); | ||||
| 127 | if ($type eq 'XML::LibXML::Literal' or | ||||
| 128 | $type eq 'XML::LibXML::Number' or | ||||
| 129 | $type eq 'XML::LibXML::Boolean') | ||||
| 130 | { | ||||
| 131 | my $val = shift(@params); | ||||
| 132 | unshift(@perlParams, $USE_LIBXML_DATA_TYPES ? $type->new($val) : $val); | ||||
| 133 | } | ||||
| 134 | elsif ($type eq 'XML::LibXML::NodeList') { | ||||
| 135 | my $node_count = shift(@params); | ||||
| 136 | unshift(@perlParams, $type->new(splice(@params, 0, $node_count))); | ||||
| 137 | } | ||||
| 138 | } | ||||
| 139 | |||||
| 140 | $func = "main::$func" unless ref($func) || $func =~ /(.+)::/; | ||||
| 141 | 3 | 45µs | 2 | 46µs | # spent 27µs (9+18) within XML::LibXML::XPathContext::BEGIN@141 which was called
# once (9µs+18µs) by XML::LibXML::BEGIN@25 at line 141 # spent 27µs making 1 call to XML::LibXML::XPathContext::BEGIN@141
# spent 18µs making 1 call to strict::unimport |
| 142 | my $res = $func->(@perlParams); | ||||
| 143 | return $res; | ||||
| 144 | } | ||||
| 145 | |||||
| 146 | 1 | 3µs | 1; |