Skip to content

Commit 59378a1

Browse files
committed
xpath: add support for changing to debug mode by environment variable
1 parent 54452c1 commit 59378a1

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

lib/rexml/xpath_parser.rb

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ class XPathParser
4747
include XMLTokens
4848
LITERAL = /^'([^']*)'|^"([^"]*)"/u
4949

50+
DEBUG = (ENV["REXML_XPATH_PARSER_DEBUG"] == "true")
51+
5052
def initialize(strict: false)
53+
@debug = DEBUG
5154
@parser = REXML::Parsers::XPathParser.new
5255
@namespaces = nil
5356
@variables = {}
@@ -162,10 +165,10 @@ def get_namespace( node, prefix )
162165
# Expr takes a stack of path elements and a set of nodes (either a Parent
163166
# or an Array and returns an Array of matching nodes
164167
def expr( path_stack, nodeset, context=nil )
165-
# enter(:expr, path_stack, nodeset)
168+
enter(:expr, path_stack, nodeset) if @debug
166169
return nodeset if path_stack.length == 0 || nodeset.length == 0
167170
while path_stack.length > 0
168-
# trace(:while, path_stack, nodeset)
171+
trace(:while, path_stack, nodeset) if @debug
169172
if nodeset.length == 0
170173
path_stack.clear
171174
return []
@@ -184,7 +187,7 @@ def expr( path_stack, nodeset, context=nil )
184187
child(nodeset)
185188
end
186189
when :literal
187-
# trace(:literal, path_stack, nodeset)
190+
trace(:literal, path_stack, nodeset) if @debug
188191
return path_stack.shift
189192
when :attribute
190193
nodeset = step(path_stack, any_type: :attribute) do
@@ -343,7 +346,7 @@ def expr( path_stack, nodeset, context=nil )
343346
left = expr( path_stack.shift, nodeset.dup, context )
344347
right = expr( path_stack.shift, nodeset.dup, context )
345348
res = equality_relational_compare( left, op, right )
346-
# trace(op, left, right, res)
349+
trace(op, left, right, res) if @debug
347350
return res
348351

349352
when :and
@@ -422,14 +425,14 @@ def expr( path_stack, nodeset, context=nil )
422425
end
423426
end # while
424427
return nodeset
425-
# ensure
426-
# leave(:expr, path_stack, nodeset)
428+
ensure
429+
leave(:expr, path_stack, nodeset) if @debug
427430
end
428431

429432
def step(path_stack, any_type: :element, order: :forward)
430433
nodesets = yield
431434
begin
432-
# enter(:step, path_stack, nodesets)
435+
enter(:step, path_stack, nodesets) if @debug
433436
nodesets = node_test(path_stack, nodesets, any_type: any_type)
434437
while path_stack[0] == :predicate
435438
path_stack.shift # :predicate
@@ -457,13 +460,13 @@ def step(path_stack, any_type: :element, order: :forward)
457460
new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1)
458461
end
459462
new_nodeset
460-
# ensure
461-
# leave(:step, path_stack, new_nodeset)
463+
ensure
464+
leave(:step, path_stack, new_nodeset) if @debug
462465
end
463466
end
464467

465468
def node_test(path_stack, nodesets, any_type: :element)
466-
# enter(:node_test, path_stack, nodesets)
469+
enter(:node_test, path_stack, nodesets) if @debug
467470
operator = path_stack.shift
468471
case operator
469472
when :qname
@@ -563,8 +566,8 @@ def node_test(path_stack, nodesets, any_type: :element)
563566
raise message
564567
end
565568
new_nodesets
566-
# ensure
567-
# leave(:node_test, path_stack, new_nodesets)
569+
ensure
570+
leave(:node_test, path_stack, new_nodesets) if @debug
568571
end
569572

570573
def filter_nodeset(nodeset)
@@ -577,7 +580,7 @@ def filter_nodeset(nodeset)
577580
end
578581

579582
def evaluate_predicate(expression, nodesets)
580-
# enter(:predicate, expression, nodesets)
583+
enter(:predicate, expression, nodesets) if @debug
581584
new_nodesets = nodesets.collect do |nodeset|
582585
new_nodeset = []
583586
subcontext = { :size => nodeset.size }
@@ -590,7 +593,7 @@ def evaluate_predicate(expression, nodesets)
590593
subcontext[:index] = index + 1
591594
end
592595
result = expr(expression.dclone, [node], subcontext)
593-
# trace(:predicate_evaluate, expression, node, subcontext, result)
596+
trace(:predicate_evaluate, expression, node, subcontext, result) if @debug
594597
result = result[0] if result.kind_of? Array and result.length == 1
595598
if result.kind_of? Numeric
596599
if result == node.position
@@ -611,8 +614,8 @@ def evaluate_predicate(expression, nodesets)
611614
new_nodeset
612615
end
613616
new_nodesets
614-
# ensure
615-
# leave(:predicate, new_nodesets)
617+
ensure
618+
leave(:predicate, new_nodesets) if @debug
616619
end
617620

618621
def trace(*args)

0 commit comments

Comments
 (0)