[Bug 28833] New: [XSLT30] Streamability of fn:current and varrefs should be roaming in higher-order operands

https://www.w3.org/Bugs/Public/show_bug.cgi?id=28833

            Bug ID: 28833
           Summary: [XSLT30] Streamability of fn:current and varrefs
                    should be roaming in higher-order operands
           Product: XPath / XQuery / XSLT
           Version: Last Call drafts
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P2
         Component: XSLT 3.0
          Assignee: mike@saxonica.com
          Reporter: abel.braaksma@xs4all.nl
        QA Contact: public-qt-comments@w3.org

Originally reported internally to the XSLWG here:
https://lists.w3.org/Archives/Member/w3c-xsl-wg/2015Jun/0043.html (member only) 

We have, under GSR 2.d.i:

* If o is a higher-order operand of C, then roaming and free-ranging.

However, I know of at least two places where the position is higher-order, but
the GSR do not apply, leading to a gap in the analysis:

1) Map expressions
2) Path expressions

Consider:

row/current()/cell

Here fn:current is in a higher-order position. It points to the current node
which is disjoint from the <row> element. The expression requires free-ranging
tree-walking to reach the <cell> element under fn:current, after <row> was
visited.

Note that the issue does not arise in an inspection context:

row[current()]/cell

Perhaps a clearer example on how this can go horribly wrong is;

<xsl:apply-templates select="row/current()" />

At risk are, I think, the following:

1) variable references bound to a node
2) let $a := copy-of(b) return current()
3) function() { current() } (: or disallowed by function closure rules? :)
4) ForExpr, QuantifiedExpr are *not* at risk, they are described as having
higher-order operands

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Sunday, 21 June 2015 14:32:57 UTC