Filename | /usr/lib/perl5/XML/LibXML/XPathContext.pm |
Statements | Executed 21 statements in 844µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 18µs | 24µs | BEGIN@12 | XML::LibXML::XPathContext::
1 | 1 | 1 | 14µs | 36µs | BEGIN@141 | XML::LibXML::XPathContext::
1 | 1 | 1 | 12µs | 92µs | BEGIN@15 | XML::LibXML::XPathContext::
1 | 1 | 1 | 10µs | 10µs | BEGIN@16 | XML::LibXML::XPathContext::
1 | 1 | 1 | 9µs | 70µs | BEGIN@13 | XML::LibXML::XPathContext::
1 | 1 | 1 | 6µs | 6µs | BEGIN@17 | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | CLONE_SKIP | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | _guarded_find_call | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | _perl_dispatcher | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | exists | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | find | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | findnodes | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | findvalue | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | registerFunction | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | unregisterFunction | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | unregisterFunctionNS | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | unregisterNs | XML::LibXML::XPathContext::
0 | 0 | 0 | 0s | 0s | unregisterVarLookupFunc | XML::LibXML::XPathContext::
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 | 33µs | 2 | 30µs | # spent 24µs (18+6) within XML::LibXML::XPathContext::BEGIN@12 which was called:
# once (18µs+6µs) by XML::LibXML::BEGIN@25 at line 12 # spent 24µs making 1 call to XML::LibXML::XPathContext::BEGIN@12
# spent 6µs making 1 call to strict::import |
13 | 3 | 31µs | 2 | 130µs | # spent 70µs (9+60) within XML::LibXML::XPathContext::BEGIN@13 which was called:
# once (9µs+60µs) by XML::LibXML::BEGIN@25 at line 13 # spent 70µs making 1 call to XML::LibXML::XPathContext::BEGIN@13
# spent 60µs making 1 call to vars::import |
14 | |||||
15 | 3 | 35µs | 2 | 171µs | # spent 92µs (12+79) within XML::LibXML::XPathContext::BEGIN@15 which was called:
# once (12µs+79µs) by XML::LibXML::BEGIN@25 at line 15 # spent 92µs making 1 call to XML::LibXML::XPathContext::BEGIN@15
# spent 79µs making 1 call to Exporter::import |
16 | 3 | 29µs | 1 | 10µs | # spent 10µs within XML::LibXML::XPathContext::BEGIN@16 which was called:
# once (10µs+0s) by XML::LibXML::BEGIN@25 at line 16 # spent 10µs making 1 call to XML::LibXML::XPathContext::BEGIN@16 |
17 | 3 | 651µs | 1 | 6µs | # spent 6µs within XML::LibXML::XPathContext::BEGIN@17 which was called:
# once (6µs+0s) by XML::LibXML::BEGIN@25 at line 17 # spent 6µs making 1 call to XML::LibXML::XPathContext::BEGIN@17 |
18 | |||||
19 | 1 | 900ns | $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 | 300ns | $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 | 60µs | 2 | 58µs | # spent 36µs (14+22) within XML::LibXML::XPathContext::BEGIN@141 which was called:
# once (14µs+22µs) by XML::LibXML::BEGIN@25 at line 141 # spent 36µs making 1 call to XML::LibXML::XPathContext::BEGIN@141
# spent 22µs making 1 call to strict::unimport |
142 | my $res = $func->(@perlParams); | ||||
143 | return $res; | ||||
144 | } | ||||
145 | |||||
146 | 1 | 3µs | 1; |